blob: ed3f921f120877c3d511aa2cf2bbda1834b1302a [file] [log] [blame]
reed@android.com8a1c16f2008-12-17 15:59:43 +00001/* 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
25class SkSVGParser;
26
27#define DECLARE_SVG_INFO(_type) \
28public: \
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
50struct SkSVGTypeName {
51 const char* fName;
52 SkSVGTypes fType;
53};
54
55class SkSVGElement : public SkSVGBase {
56public:
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;
77private:
78 bool isGroupParent();
79};
80
81#endif // SkSVGElements_DEFINED