Home | History | Annotate | Download | only in parser
      1 
      2 /*
      3  * Copyright 2006 The Android Open Source Project
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 
     10 #ifndef SkSVGElements_DEFINED
     11 #define SkSVGElements_DEFINED
     12 
     13 #include "SkSVGPaintState.h"
     14 #include "SkSVGTypes.h"
     15 #include "SkTDArray.h"
     16 
     17 class SkSVGParser;
     18 
     19 #define DECLARE_SVG_INFO(_type) \
     20 public: \
     21     virtual ~SkSVG##_type(); \
     22     static const SkSVGAttribute gAttributes[]; \
     23     virtual int getAttributes(const SkSVGAttribute** attrPtr); \
     24     virtual SkSVGTypes getType() const; \
     25     virtual void translate(SkSVGParser& parser, bool defState); \
     26     typedef SkSVG##_type BASE_CLASS
     27 
     28 #define DEFINE_SVG_INFO(_type) \
     29     SkSVG##_type::~SkSVG##_type() {} \
     30     int SkSVG##_type::getAttributes(const SkSVGAttribute** attrPtr) { \
     31         *attrPtr = gAttributes; \
     32         return SK_ARRAY_COUNT(gAttributes); \
     33     } \
     34     SkSVGTypes SkSVG##_type::getType() const { return SkSVGType_##_type; }
     35 
     36 #define DEFINE_SVG_NO_INFO(_type) \
     37     SkSVG##_type::~SkSVG##_type() {} \
     38     int SkSVG##_type::getAttributes(const SkSVGAttribute** ) { return 0; } \
     39     SkSVGTypes SkSVG##_type::getType() const { return SkSVGType_##_type; }
     40 
     41 
     42 struct SkSVGTypeName {
     43     const char* fName;
     44     SkSVGTypes fType;
     45 };
     46 
     47 class SkSVGElement : public SkSVGBase {
     48 public:
     49     SkSVGElement();
     50     virtual ~SkSVGElement();
     51     virtual SkSVGElement* getGradient();
     52     virtual SkSVGTypes getType() const  = 0;
     53     virtual bool isDef();
     54     virtual bool isFlushable();
     55     virtual bool isGroup();
     56     virtual bool isNotDef();
     57     virtual bool onEndElement(SkSVGParser& parser);
     58     virtual bool onStartElement(SkSVGElement* child);
     59     void setIsDef();
     60 //  void setIsNotDef();
     61     virtual void translate(SkSVGParser& parser, bool defState);
     62     virtual void write(SkSVGParser& , SkString& color);
     63     SkString f_id;
     64     SkSVGPaint fPaintState;
     65     SkTDArray<SkSVGElement*> fChildren;
     66     SkSVGElement* fParent;
     67     bool fIsDef;
     68     bool fIsNotDef;
     69 private:
     70     bool isGroupParent();
     71 };
     72 
     73 #endif // SkSVGElements_DEFINED
     74