Home | History | Annotate | Download | only in animator
      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