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 18class SkMatrixPart; 19 20class 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 } 64private: 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