/* * Copyright 2006 The Android Open Source Project * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #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