1685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com
2685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com/*
3685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * Copyright 2006 The Android Open Source Project
4685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com *
5685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * found in the LICENSE file.
7685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com */
8685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com
9bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
10bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#ifndef SkDrawMatrix_DEFINED
11bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#define SkDrawMatrix_DEFINED
12bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
13bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkDrawable.h"
14bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkMatrix.h"
15bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkMemberInfo.h"
16bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkIntArray.h"
17bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
18bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comclass SkMatrixPart;
19bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
20bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comclass SkDrawMatrix : public SkDrawable {
21bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    DECLARE_DRAW_MEMBER_INFO(Matrix);
22bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkDrawMatrix();
23bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    virtual ~SkDrawMatrix();
2400fe09947252dbe4ac563ace9313398f21584409tfarina@chromium.org    virtual bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE;
25bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    virtual bool childrenNeedDisposing() const;
26bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    virtual void dirty();
27bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    virtual bool draw(SkAnimateMaker& );
28bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#ifdef SK_DUMP_ENABLED
29bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    virtual void dump(SkAnimateMaker* );
30bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif
31bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkMatrix& getMatrix();
32bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    virtual bool getProperty(int index, SkScriptValue* value) const;
33bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    virtual void initialize();
34bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    virtual void onEndElement(SkAnimateMaker& );
35bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    virtual void setChildHasID();
36bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    virtual bool setProperty(int index, SkScriptValue& );
37bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
38bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    void concat(SkMatrix& inMatrix) {
39bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fConcat.preConcat(inMatrix);
40bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    }
41bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
42bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    virtual SkDisplayable* deepCopy(SkAnimateMaker* );
43bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
44bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
45bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    void rotate(SkScalar degrees, SkPoint& center) {
46bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fMatrix.preRotate(degrees, center.fX, center.fY);
47bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    }
48bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
49bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    void set(SkMatrix& src) {
50bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fMatrix.preConcat(src);
51bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    }
52bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
53bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    void scale(SkScalar scaleX, SkScalar scaleY, SkPoint& center) {
54bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fMatrix.preScale(scaleX, scaleY, center.fX, center.fY);
55bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    }
56bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
57bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    void skew(SkScalar skewX, SkScalar skewY, SkPoint& center) {
58bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fMatrix.preSkew(skewX, skewY, center.fX, center.fY);
59bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    }
60bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
61bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    void translate(SkScalar x, SkScalar y) {
62bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fMatrix.preTranslate(x, y);
63bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    }
64bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comprivate:
65bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkTDScalarArray matrix;
66bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkMatrix fConcat;
67bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkMatrix fMatrix;
68bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkTDMatrixPartArray fParts;
69bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkBool8 fChildHasID;
70bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkBool8 fDirty;
71bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    typedef SkDrawable INHERITED;
72bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com};
73bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
74bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif // SkDrawMatrix_DEFINED
75