1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
8ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkDrawMatrix_DEFINED
118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkDrawMatrix_DEFINED
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawable.h"
148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkMatrix.h"
158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkMemberInfo.h"
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkIntArray.h"
178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkMatrixPart;
198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkDrawMatrix : public SkDrawable {
218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    DECLARE_DRAW_MEMBER_INFO(Matrix);
228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkDrawMatrix();
238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual ~SkDrawMatrix();
241d3c411f5e4d2ad31bc92b3a85957004329ac00dtfarina@chromium.org    virtual bool addChild(SkAnimateMaker& , SkDisplayable* child) SK_OVERRIDE;
258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool childrenNeedDisposing() const;
268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void dirty();
278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool draw(SkAnimateMaker& );
288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_DUMP_ENABLED
298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void dump(SkAnimateMaker* );
308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkMatrix& getMatrix();
328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool getProperty(int index, SkScriptValue* value) const;
338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void initialize();
348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void onEndElement(SkAnimateMaker& );
358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual void setChildHasID();
368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool setProperty(int index, SkScriptValue& );
378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void concat(SkMatrix& inMatrix) {
398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        fConcat.preConcat(inMatrix);
408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual SkDisplayable* deepCopy(SkAnimateMaker* );
438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void rotate(SkScalar degrees, SkPoint& center) {
468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        fMatrix.preRotate(degrees, center.fX, center.fY);
478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void set(SkMatrix& src) {
508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        fMatrix.preConcat(src);
518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void scale(SkScalar scaleX, SkScalar scaleY, SkPoint& center) {
548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        fMatrix.preScale(scaleX, scaleY, center.fX, center.fY);
558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void skew(SkScalar skewX, SkScalar skewY, SkPoint& center) {
588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        fMatrix.preSkew(skewX, skewY, center.fX, center.fY);
598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void translate(SkScalar x, SkScalar y) {
628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        fMatrix.preTranslate(x, y);
638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkTDScalarArray matrix;
668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkMatrix fConcat;
678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkMatrix fMatrix;
688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkTDMatrixPartArray fParts;
698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkBool8 fChildHasID;
708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkBool8 fDirty;
718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef SkDrawable INHERITED;
728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif // SkDrawMatrix_DEFINED
75