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