1 2 /* 3 * Copyright 2006 The Android Open Source Project 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10 #ifndef SkDrawPath_DEFINED 11 #define SkDrawPath_DEFINED 12 13 #include "SkBoundable.h" 14 #include "SkIntArray.h" 15 #include "SkMemberInfo.h" 16 #include "SkPath.h" 17 18 class SkDrawPath : public SkBoundable { 19 DECLARE_DRAW_MEMBER_INFO(Path); 20 SkDrawPath(); 21 virtual ~SkDrawPath(); 22 bool addChild(SkAnimateMaker& , SkDisplayable* child) override; childHasID()23 bool childHasID() { return SkToBool(fChildHasID); } 24 bool childrenNeedDisposing() const override; 25 void dirty() override; 26 bool draw(SkAnimateMaker& ) override; 27 SkDisplayable* getParent() const override; 28 #ifdef SK_DUMP_ENABLED 29 void dump(SkAnimateMaker* ) override; 30 #endif 31 SkPath& getPath(); 32 bool getProperty(int index, SkScriptValue* value) const override; 33 bool setProperty(int index, SkScriptValue& value) override; 34 void onEndElement(SkAnimateMaker& ) override; 35 void setChildHasID() override; 36 bool setParent(SkDisplayable* parent) override; isPath()37 bool isPath() const override { return true; } 38 public: 39 SkPath fPath; 40 protected: 41 void parseSVG(); 42 SkString d; 43 SkTDPathPartArray fParts; 44 mutable SkScalar fLength; 45 SkDisplayable* fParent; // SkPolyToPoly or SkFromPath, for instance 46 SkBool8 fChildHasID; 47 SkBool8 fDirty; 48 private: 49 typedef SkBoundable INHERITED; 50 }; 51 52 class SkPolyline : public SkDrawPath { 53 DECLARE_MEMBER_INFO(Polyline); 54 bool addChild(SkAnimateMaker& , SkDisplayable*) override; 55 void onEndElement(SkAnimateMaker& ) override; 56 protected: 57 SkTDScalarArray points; 58 private: 59 typedef SkDrawPath INHERITED; 60 }; 61 62 class SkPolygon : public SkPolyline { 63 DECLARE_MEMBER_INFO(Polygon); 64 void onEndElement(SkAnimateMaker& ) override; 65 private: 66 typedef SkPolyline INHERITED; 67 }; 68 69 #endif // SkDrawPath_DEFINED 70