blob: df17a9b75714b7f838aeec93bf6c17d6ad2d9535 [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
reed986ca612014-11-26 08:50:45 -080013#include "SkADrawable.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000014#include "SkMatrix.h"
15#include "SkMemberInfo.h"
16#include "SkIntArray.h"
17
18class SkMatrixPart;
19
reed986ca612014-11-26 08:50:45 -080020class SkDrawMatrix : public SkADrawable {
reed@android.com8a1c16f2008-12-17 15:59:43 +000021 DECLARE_DRAW_MEMBER_INFO(Matrix);
22 SkDrawMatrix();
23 virtual ~SkDrawMatrix();
mtklein36352bf2015-03-25 18:17:31 -070024 bool addChild(SkAnimateMaker& , SkDisplayable* child) override;
25 bool childrenNeedDisposing() const override;
26 void dirty() override;
27 bool draw(SkAnimateMaker& ) override;
reed@android.com8a1c16f2008-12-17 15:59:43 +000028#ifdef SK_DUMP_ENABLED
mtklein36352bf2015-03-25 18:17:31 -070029 void dump(SkAnimateMaker* ) override;
reed@android.com8a1c16f2008-12-17 15:59:43 +000030#endif
31 SkMatrix& getMatrix();
mtklein36352bf2015-03-25 18:17:31 -070032 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;
reed@android.com8a1c16f2008-12-17 15:59:43 +000037
38 void concat(SkMatrix& inMatrix) {
39 fConcat.preConcat(inMatrix);
40 }
41
mtklein36352bf2015-03-25 18:17:31 -070042 SkDisplayable* deepCopy(SkAnimateMaker* ) override;
reed@android.com8a1c16f2008-12-17 15:59:43 +000043
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;
reed986ca612014-11-26 08:50:45 -080071 typedef SkADrawable INHERITED;
reed@android.com8a1c16f2008-12-17 15:59:43 +000072};
73
74#endif // SkDrawMatrix_DEFINED