• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* libs/graphics/svg/SkSVGElements.h
2 **
3 ** Copyright 2006, The Android Open Source Project
4 **
5 ** Licensed under the Apache License, Version 2.0 (the "License");
6 ** you may not use this file except in compliance with the License.
7 ** You may obtain a copy of the License at
8 **
9 **     http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17 
18 #ifndef SkSVGElements_DEFINED
19 #define SkSVGElements_DEFINED
20 
21 #include "SkSVGPaintState.h"
22 #include "SkSVGTypes.h"
23 #include "SkTDArray.h"
24 
25 class SkSVGParser;
26 
27 #define DECLARE_SVG_INFO(_type) \
28 public: \
29     virtual ~SkSVG##_type(); \
30     static const SkSVGAttribute gAttributes[]; \
31     virtual int getAttributes(const SkSVGAttribute** attrPtr); \
32     virtual SkSVGTypes getType() const; \
33     virtual void translate(SkSVGParser& parser, bool defState); \
34     typedef SkSVG##_type BASE_CLASS
35 
36 #define DEFINE_SVG_INFO(_type) \
37     SkSVG##_type::~SkSVG##_type() {} \
38     int SkSVG##_type::getAttributes(const SkSVGAttribute** attrPtr) { \
39         *attrPtr = gAttributes; \
40         return SK_ARRAY_COUNT(gAttributes); \
41     } \
42     SkSVGTypes SkSVG##_type::getType() const { return SkSVGType_##_type; }
43 
44 #define DEFINE_SVG_NO_INFO(_type) \
45     SkSVG##_type::~SkSVG##_type() {} \
46     int SkSVG##_type::getAttributes(const SkSVGAttribute** ) { return 0; } \
47     SkSVGTypes SkSVG##_type::getType() const { return SkSVGType_##_type; }
48 
49 
50 struct SkSVGTypeName {
51     const char* fName;
52     SkSVGTypes fType;
53 };
54 
55 class SkSVGElement : public SkSVGBase {
56 public:
57     SkSVGElement();
58     virtual ~SkSVGElement();
59     virtual SkSVGElement* getGradient();
60     virtual SkSVGTypes getType() const  = 0;
61     virtual bool isDef();
62     virtual bool isFlushable();
63     virtual bool isGroup();
64     virtual bool isNotDef();
65     virtual bool onEndElement(SkSVGParser& parser);
66     virtual bool onStartElement(SkSVGElement* child);
67     void setIsDef();
68 //  void setIsNotDef();
69     virtual void translate(SkSVGParser& parser, bool defState);
70     virtual void write(SkSVGParser& , SkString& color);
71     SkString f_id;
72     SkSVGPaint fPaintState;
73     SkTDArray<SkSVGElement*> fChildren;
74     SkSVGElement* fParent;
75     bool fIsDef;
76     bool fIsNotDef;
77 private:
78     bool isGroupParent();
79 };
80 
81 #endif // SkSVGElements_DEFINED
82