/* libs/graphics/svg/SkSVGElements.h ** ** Copyright 2006, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifndef SkSVGElements_DEFINED #define SkSVGElements_DEFINED #include "SkSVGPaintState.h" #include "SkSVGTypes.h" #include "SkTDArray.h" class SkSVGParser; #define DECLARE_SVG_INFO(_type) \ public: \ virtual ~SkSVG##_type(); \ static const SkSVGAttribute gAttributes[]; \ virtual int getAttributes(const SkSVGAttribute** attrPtr); \ virtual SkSVGTypes getType() const; \ virtual void translate(SkSVGParser& parser, bool defState); \ typedef SkSVG##_type BASE_CLASS #define DEFINE_SVG_INFO(_type) \ SkSVG##_type::~SkSVG##_type() {} \ int SkSVG##_type::getAttributes(const SkSVGAttribute** attrPtr) { \ *attrPtr = gAttributes; \ return SK_ARRAY_COUNT(gAttributes); \ } \ SkSVGTypes SkSVG##_type::getType() const { return SkSVGType_##_type; } #define DEFINE_SVG_NO_INFO(_type) \ SkSVG##_type::~SkSVG##_type() {} \ int SkSVG##_type::getAttributes(const SkSVGAttribute** ) { return 0; } \ SkSVGTypes SkSVG##_type::getType() const { return SkSVGType_##_type; } struct SkSVGTypeName { const char* fName; SkSVGTypes fType; }; class SkSVGElement : public SkSVGBase { public: SkSVGElement(); virtual ~SkSVGElement(); virtual SkSVGElement* getGradient(); virtual SkSVGTypes getType() const = 0; virtual bool isDef(); virtual bool isFlushable(); virtual bool isGroup(); virtual bool isNotDef(); virtual bool onEndElement(SkSVGParser& parser); virtual bool onStartElement(SkSVGElement* child); void setIsDef(); // void setIsNotDef(); virtual void translate(SkSVGParser& parser, bool defState); virtual void write(SkSVGParser& , SkString& color); SkString f_id; SkSVGPaint fPaintState; SkTDArray<SkSVGElement*> fChildren; SkSVGElement* fParent; bool fIsDef; bool fIsNotDef; private: bool isGroupParent(); }; #endif // SkSVGElements_DEFINED