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 "SkADrawable.h"
     14 #include "SkMatrix.h"
     15 #include "SkMemberInfo.h"
     16 #include "SkIntArray.h"
     17 
     18 class SkMatrixPart;
     19 
     20 class SkDrawMatrix : public SkADrawable {
     21     DECLARE_DRAW_MEMBER_INFO(Matrix);
     22     SkDrawMatrix();
     23     virtual ~SkDrawMatrix();
     24     bool addChild(SkAnimateMaker& , SkDisplayable* child) override;
     25     bool childrenNeedDisposing() const override;
     26     void dirty() override;
     27     bool draw(SkAnimateMaker& ) override;
     28 #ifdef SK_DUMP_ENABLED
     29     void dump(SkAnimateMaker* ) override;
     30 #endif
     31     SkMatrix& getMatrix();
     32     bool getProperty(int index, SkScriptValue* value) const override;
     33     void initialize() override;
     34     void onEndElement(SkAnimateMaker& ) override;
     35     void setChildHasID() override;
     36     bool setProperty(int index, SkScriptValue& ) override;
     37 
     38     void concat(SkMatrix& inMatrix) {
     39         fConcat.preConcat(inMatrix);
     40     }
     41 
     42     SkDisplayable* deepCopy(SkAnimateMaker* ) override;
     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 SkADrawable INHERITED;
     72 };
     73 
     74 #endif // SkDrawMatrix_DEFINED
     75