blob: e3c389a2cf91a5975c14be6cc96207ab996428e6 [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
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
reed@android.com8a1c16f2008-12-17 15:59:43 +00009
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();
tfarina@chromium.org1d3c4112012-12-03 14:38:08 +000024 virtual bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE;
reed@android.com8a1c16f2008-12-17 15:59:43 +000025 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