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 
concat(SkMatrix & inMatrix)38     void concat(SkMatrix& inMatrix) {
39         fConcat.preConcat(inMatrix);
40     }
41 
42     SkDisplayable* deepCopy(SkAnimateMaker* ) override;
43 
44 
rotate(SkScalar degrees,SkPoint & center)45     void rotate(SkScalar degrees, SkPoint& center) {
46         fMatrix.preRotate(degrees, center.fX, center.fY);
47     }
48 
set(SkMatrix & src)49     void set(SkMatrix& src) {
50         fMatrix.preConcat(src);
51     }
52 
scale(SkScalar scaleX,SkScalar scaleY,SkPoint & center)53     void scale(SkScalar scaleX, SkScalar scaleY, SkPoint& center) {
54         fMatrix.preScale(scaleX, scaleY, center.fX, center.fY);
55     }
56 
skew(SkScalar skewX,SkScalar skewY,SkPoint & center)57     void skew(SkScalar skewX, SkScalar skewY, SkPoint& center) {
58         fMatrix.preSkew(skewX, skewY, center.fX, center.fY);
59     }
60 
translate(SkScalar x,SkScalar y)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