1 /* libs/graphics/animator/SkDrawMatrix.h 2 ** 3 ** Copyright 2006, The Android Open Source Project 4 ** 5 ** Licensed under the Apache License, Version 2.0 (the "License"); 6 ** you may not use this file except in compliance with the License. 7 ** You may obtain a copy of the License at 8 ** 9 ** http://www.apache.org/licenses/LICENSE-2.0 10 ** 11 ** Unless required by applicable law or agreed to in writing, software 12 ** distributed under the License is distributed on an "AS IS" BASIS, 13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 ** See the License for the specific language governing permissions and 15 ** limitations under the License. 16 */ 17 18 #ifndef SkDrawMatrix_DEFINED 19 #define SkDrawMatrix_DEFINED 20 21 #include "SkDrawable.h" 22 #include "SkMatrix.h" 23 #include "SkMemberInfo.h" 24 #include "SkIntArray.h" 25 26 class SkMatrixPart; 27 28 class SkDrawMatrix : public SkDrawable { 29 DECLARE_DRAW_MEMBER_INFO(Matrix); 30 SkDrawMatrix(); 31 virtual ~SkDrawMatrix(); 32 virtual bool add(SkAnimateMaker& , SkDisplayable* child); 33 virtual bool childrenNeedDisposing() const; 34 virtual void dirty(); 35 virtual bool draw(SkAnimateMaker& ); 36 #ifdef SK_DUMP_ENABLED 37 virtual void dump(SkAnimateMaker* ); 38 #endif 39 SkMatrix& getMatrix(); 40 virtual bool getProperty(int index, SkScriptValue* value) const; 41 virtual void initialize(); 42 virtual void onEndElement(SkAnimateMaker& ); 43 virtual void setChildHasID(); 44 virtual bool setProperty(int index, SkScriptValue& ); 45 concat(SkMatrix & inMatrix)46 void concat(SkMatrix& inMatrix) { 47 fConcat.preConcat(inMatrix); 48 } 49 50 virtual SkDisplayable* deepCopy(SkAnimateMaker* ); 51 52 rotate(SkScalar degrees,SkPoint & center)53 void rotate(SkScalar degrees, SkPoint& center) { 54 fMatrix.preRotate(degrees, center.fX, center.fY); 55 } 56 set(SkMatrix & src)57 void set(SkMatrix& src) { 58 fMatrix.preConcat(src); 59 } 60 scale(SkScalar scaleX,SkScalar scaleY,SkPoint & center)61 void scale(SkScalar scaleX, SkScalar scaleY, SkPoint& center) { 62 fMatrix.preScale(scaleX, scaleY, center.fX, center.fY); 63 } 64 skew(SkScalar skewX,SkScalar skewY,SkPoint & center)65 void skew(SkScalar skewX, SkScalar skewY, SkPoint& center) { 66 fMatrix.preSkew(skewX, skewY, center.fX, center.fY); 67 } 68 translate(SkScalar x,SkScalar y)69 void translate(SkScalar x, SkScalar y) { 70 fMatrix.preTranslate(x, y); 71 } 72 private: 73 SkTDScalarArray matrix; 74 SkMatrix fConcat; 75 SkMatrix fMatrix; 76 SkTDMatrixPartArray fParts; 77 SkBool8 fChildHasID; 78 SkBool8 fDirty; 79 typedef SkDrawable INHERITED; 80 }; 81 82 #endif // SkDrawMatrix_DEFINED 83