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