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 26class SkMatrixPart; 27 28class 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 46 void concat(SkMatrix& inMatrix) { 47 fConcat.preConcat(inMatrix); 48 } 49 50 virtual SkDisplayable* deepCopy(SkAnimateMaker* ); 51 52 53 void rotate(SkScalar degrees, SkPoint& center) { 54 fMatrix.preRotate(degrees, center.fX, center.fY); 55 } 56 57 void set(SkMatrix& src) { 58 fMatrix.preConcat(src); 59 } 60 61 void scale(SkScalar scaleX, SkScalar scaleY, SkPoint& center) { 62 fMatrix.preScale(scaleX, scaleY, center.fX, center.fY); 63 } 64 65 void skew(SkScalar skewX, SkScalar skewY, SkPoint& center) { 66 fMatrix.preSkew(skewX, skewY, center.fX, center.fY); 67 } 68 69 void translate(SkScalar x, SkScalar y) { 70 fMatrix.preTranslate(x, y); 71 } 72private: 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