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