michael@0: michael@0: /* michael@0: * Copyright 2006 The Android Open Source Project michael@0: * michael@0: * Use of this source code is governed by a BSD-style license that can be michael@0: * found in the LICENSE file. michael@0: */ michael@0: michael@0: michael@0: #ifndef SkPathParts_DEFINED michael@0: #define SkPathParts_DEFINED michael@0: michael@0: #include "SkDisplayable.h" michael@0: #include "SkMemberInfo.h" michael@0: #include "SkPath.h" michael@0: michael@0: class SkDrawPath; michael@0: class SkDrawMatrix; michael@0: michael@0: class SkPathPart : public SkDisplayable { michael@0: public: michael@0: SkPathPart(); michael@0: virtual bool add() = 0; michael@0: virtual void dirty(); michael@0: virtual SkDisplayable* getParent() const; michael@0: virtual bool setParent(SkDisplayable* parent); michael@0: #ifdef SK_DEBUG michael@0: virtual bool isPathPart() const { return true; } michael@0: #endif michael@0: protected: michael@0: SkDrawPath* fPath; michael@0: }; michael@0: michael@0: class SkMoveTo : public SkPathPart { michael@0: DECLARE_MEMBER_INFO(MoveTo); michael@0: SkMoveTo(); michael@0: virtual bool add(); michael@0: protected: michael@0: SkScalar x; michael@0: SkScalar y; michael@0: }; michael@0: michael@0: class SkRMoveTo : public SkMoveTo { michael@0: DECLARE_MEMBER_INFO(RMoveTo); michael@0: virtual bool add(); michael@0: private: michael@0: typedef SkMoveTo INHERITED; michael@0: }; michael@0: michael@0: class SkLineTo : public SkPathPart { michael@0: DECLARE_MEMBER_INFO(LineTo); michael@0: SkLineTo(); michael@0: virtual bool add(); michael@0: protected: michael@0: SkScalar x; michael@0: SkScalar y; michael@0: }; michael@0: michael@0: class SkRLineTo : public SkLineTo { michael@0: DECLARE_MEMBER_INFO(RLineTo); michael@0: virtual bool add(); michael@0: private: michael@0: typedef SkLineTo INHERITED; michael@0: }; michael@0: michael@0: class SkQuadTo : public SkPathPart { michael@0: DECLARE_MEMBER_INFO(QuadTo); michael@0: SkQuadTo(); michael@0: virtual bool add(); michael@0: protected: michael@0: SkScalar x1; michael@0: SkScalar y1; michael@0: SkScalar x2; michael@0: SkScalar y2; michael@0: }; michael@0: michael@0: class SkRQuadTo : public SkQuadTo { michael@0: DECLARE_MEMBER_INFO(RQuadTo); michael@0: virtual bool add(); michael@0: private: michael@0: typedef SkQuadTo INHERITED; michael@0: }; michael@0: michael@0: class SkCubicTo : public SkPathPart { michael@0: DECLARE_MEMBER_INFO(CubicTo); michael@0: SkCubicTo(); michael@0: virtual bool add(); michael@0: protected: michael@0: SkScalar x1; michael@0: SkScalar y1; michael@0: SkScalar x2; michael@0: SkScalar y2; michael@0: SkScalar x3; michael@0: SkScalar y3; michael@0: }; michael@0: michael@0: class SkRCubicTo : public SkCubicTo { michael@0: DECLARE_MEMBER_INFO(RCubicTo); michael@0: virtual bool add(); michael@0: private: michael@0: typedef SkCubicTo INHERITED; michael@0: }; michael@0: michael@0: class SkClose : public SkPathPart { michael@0: DECLARE_EMPTY_MEMBER_INFO(Close); michael@0: virtual bool add(); michael@0: }; michael@0: michael@0: class SkAddGeom : public SkPathPart { michael@0: DECLARE_PRIVATE_MEMBER_INFO(AddGeom); michael@0: SkAddGeom(); michael@0: protected: michael@0: int /*SkPath::Direction*/ direction; michael@0: }; michael@0: michael@0: class SkAddRect : public SkAddGeom { michael@0: DECLARE_MEMBER_INFO(AddRect); michael@0: SkAddRect(); michael@0: virtual bool add(); michael@0: protected: michael@0: SkRect fRect; michael@0: private: michael@0: typedef SkAddGeom INHERITED; michael@0: }; michael@0: michael@0: class SkAddOval : public SkAddRect { michael@0: DECLARE_MEMBER_INFO(AddOval); michael@0: virtual bool add(); michael@0: private: michael@0: typedef SkAddRect INHERITED; michael@0: }; michael@0: michael@0: class SkAddCircle : public SkAddGeom { michael@0: DECLARE_MEMBER_INFO(AddCircle); michael@0: SkAddCircle(); michael@0: virtual bool add(); michael@0: private: michael@0: SkScalar radius; michael@0: SkScalar x; michael@0: SkScalar y; michael@0: typedef SkAddGeom INHERITED; michael@0: }; michael@0: michael@0: class SkAddRoundRect : public SkAddRect { michael@0: DECLARE_MEMBER_INFO(AddRoundRect); michael@0: SkAddRoundRect(); michael@0: virtual bool add(); michael@0: private: michael@0: SkScalar rx; michael@0: SkScalar ry; michael@0: typedef SkAddRect INHERITED; michael@0: }; michael@0: michael@0: class SkAddPath : public SkPathPart { michael@0: DECLARE_MEMBER_INFO(AddPath); michael@0: SkAddPath(); michael@0: virtual bool add(); michael@0: private: michael@0: typedef SkPathPart INHERITED; michael@0: SkDrawMatrix* matrix; michael@0: SkDrawPath* path; michael@0: }; michael@0: michael@0: #endif // SkPathParts_DEFINED