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 SkMatrixParts_DEFINED michael@0: #define SkMatrixParts_DEFINED michael@0: michael@0: #include "SkDisplayable.h" michael@0: #include "SkMemberInfo.h" michael@0: #include "SkPathMeasure.h" michael@0: michael@0: class SkDrawPath; michael@0: class SkDrawRect; michael@0: class SkPolygon; michael@0: michael@0: class SkDrawMatrix; michael@0: // class SkMatrix; michael@0: michael@0: class SkMatrixPart : public SkDisplayable { michael@0: public: michael@0: SkMatrixPart(); 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 isMatrixPart() const { return true; } michael@0: #endif michael@0: protected: michael@0: SkDrawMatrix* fMatrix; michael@0: }; michael@0: michael@0: class SkRotate : public SkMatrixPart { michael@0: DECLARE_MEMBER_INFO(Rotate); michael@0: SkRotate(); michael@0: protected: michael@0: virtual bool add(); michael@0: SkScalar degrees; michael@0: SkPoint center; michael@0: }; michael@0: michael@0: class SkScale : public SkMatrixPart { michael@0: DECLARE_MEMBER_INFO(Scale); michael@0: SkScale(); michael@0: protected: michael@0: virtual bool add(); michael@0: SkScalar x; michael@0: SkScalar y; michael@0: SkPoint center; michael@0: }; michael@0: michael@0: class SkSkew : public SkMatrixPart { michael@0: DECLARE_MEMBER_INFO(Skew); michael@0: SkSkew(); michael@0: protected: michael@0: virtual bool add(); michael@0: SkScalar x; michael@0: SkScalar y; michael@0: SkPoint center; michael@0: }; michael@0: michael@0: class SkTranslate : public SkMatrixPart { michael@0: DECLARE_MEMBER_INFO(Translate); michael@0: SkTranslate(); michael@0: protected: michael@0: virtual bool add(); michael@0: SkScalar x; michael@0: SkScalar y; michael@0: }; michael@0: michael@0: class SkFromPath : public SkMatrixPart { michael@0: DECLARE_MEMBER_INFO(FromPath); michael@0: SkFromPath(); michael@0: virtual ~SkFromPath(); michael@0: protected: michael@0: virtual bool add(); michael@0: int32_t mode; michael@0: SkScalar offset; michael@0: SkDrawPath* path; michael@0: SkPathMeasure fPathMeasure; michael@0: }; michael@0: michael@0: class SkRectToRect : public SkMatrixPart { michael@0: DECLARE_MEMBER_INFO(RectToRect); michael@0: SkRectToRect(); michael@0: virtual ~SkRectToRect(); michael@0: #ifdef SK_DUMP_ENABLED michael@0: virtual void dump(SkAnimateMaker* ); michael@0: #endif michael@0: virtual const SkMemberInfo* preferredChild(SkDisplayTypes type); michael@0: protected: michael@0: virtual bool add(); michael@0: SkDrawRect* source; michael@0: SkDrawRect* destination; michael@0: }; michael@0: michael@0: class SkPolyToPoly : public SkMatrixPart { michael@0: DECLARE_MEMBER_INFO(PolyToPoly); michael@0: SkPolyToPoly(); michael@0: virtual ~SkPolyToPoly(); michael@0: #ifdef SK_DUMP_ENABLED michael@0: virtual void dump(SkAnimateMaker* ); michael@0: #endif michael@0: virtual void onEndElement(SkAnimateMaker& ); michael@0: virtual const SkMemberInfo* preferredChild(SkDisplayTypes type); michael@0: protected: michael@0: virtual bool add(); michael@0: SkPolygon* source; michael@0: SkPolygon* destination; michael@0: }; michael@0: michael@0: // !!! add concat matrix ? michael@0: michael@0: #endif // SkMatrixParts_DEFINED