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
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
82