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 SkDrawMatrix_DEFINED 11 #define SkDrawMatrix_DEFINED 12 13 #include "SkDrawable.h" 14 #include "SkMatrix.h" 15 #include "SkMemberInfo.h" 16 #include "SkIntArray.h" 17 18 class SkMatrixPart; 19 20 class SkDrawMatrix : public SkDrawable { 21 DECLARE_DRAW_MEMBER_INFO(Matrix); 22 SkDrawMatrix(); 23 virtual ~SkDrawMatrix(); 24 virtual bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE; 25 virtual bool childrenNeedDisposing() const; 26 virtual void dirty(); 27 virtual bool draw(SkAnimateMaker& ); 28 #ifdef SK_DUMP_ENABLED 29 virtual void dump(SkAnimateMaker* ); 30 #endif 31 SkMatrix& getMatrix(); 32 virtual bool getProperty(int index, SkScriptValue* value) const; 33 virtual void initialize(); 34 virtual void onEndElement(SkAnimateMaker& ); 35 virtual void setChildHasID(); 36 virtual bool setProperty(int index, SkScriptValue& ); 37 38 void concat(SkMatrix& inMatrix) { 39 fConcat.preConcat(inMatrix); 40 } 41 42 virtual SkDisplayable* deepCopy(SkAnimateMaker* ); 43 44 45 void rotate(SkScalar degrees, SkPoint& center) { 46 fMatrix.preRotate(degrees, center.fX, center.fY); 47 } 48 49 void set(SkMatrix& src) { 50 fMatrix.preConcat(src); 51 } 52 53 void scale(SkScalar scaleX, SkScalar scaleY, SkPoint& center) { 54 fMatrix.preScale(scaleX, scaleY, center.fX, center.fY); 55 } 56 57 void skew(SkScalar skewX, SkScalar skewY, SkPoint& center) { 58 fMatrix.preSkew(skewX, skewY, center.fX, center.fY); 59 } 60 61 void translate(SkScalar x, SkScalar y) { 62 fMatrix.preTranslate(x, y); 63 } 64 private: 65 SkTDScalarArray matrix; 66 SkMatrix fConcat; 67 SkMatrix fMatrix; 68 SkTDMatrixPartArray fParts; 69 SkBool8 fChildHasID; 70 SkBool8 fDirty; 71 typedef SkDrawable INHERITED; 72 }; 73 74 #endif // SkDrawMatrix_DEFINED 75