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#include "SkDrawMatrix.h"
11bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkAnimateMaker.h"
12bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkCanvas.h"
13bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkPaint.h"
14bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkParse.h"
15bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkMatrixParts.h"
16bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkScript.h"
17bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#include "SkTypedArray.h"
18bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
19bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comenum SkDrawMatrix_Properties {
20bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_PROPERTY(perspectX),
21bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_PROPERTY(perspectY),
22bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_PROPERTY(rotate),
23bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_PROPERTY(scale),
24bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_PROPERTY(scaleX),
25bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_PROPERTY(scaleY),
26bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_PROPERTY(skewX),
27bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_PROPERTY(skewY),
28bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_PROPERTY(translate),
29bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_PROPERTY(translateX),
30bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_PROPERTY(translateY)
31bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com};
32bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
33bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#if SK_USE_CONDENSED_INFO == 0
34bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
35bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comconst SkMemberInfo SkDrawMatrix::fInfo[] = {
36bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_MEMBER_ARRAY(matrix, Float),
37bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_MEMBER_PROPERTY(perspectX, Float),
38bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_MEMBER_PROPERTY(perspectY, Float),
39bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_MEMBER_PROPERTY(rotate, Float),
40bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_MEMBER_PROPERTY(scale, Float),
41bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_MEMBER_PROPERTY(scaleX, Float),
42bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_MEMBER_PROPERTY(scaleY, Float),
43bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_MEMBER_PROPERTY(skewX, Float),
44bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_MEMBER_PROPERTY(skewY, Float),
45bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_MEMBER_PROPERTY(translate, Point),
46bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_MEMBER_PROPERTY(translateX, Float),
47bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SK_MEMBER_PROPERTY(translateY, Float)
48bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com};
49bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
50bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif
51bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
52bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comDEFINE_GET_MEMBER(SkDrawMatrix);
53bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
54dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.comSkDrawMatrix::SkDrawMatrix() : fChildHasID(false), fDirty(false) {
55bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    fConcat.reset();
56dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.com    fMatrix.reset();
57bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
58bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
59bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comSkDrawMatrix::~SkDrawMatrix() {
60bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    for (SkMatrixPart** part = fParts.begin(); part < fParts.end();  part++)
61bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        delete *part;
62bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
63bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
6400fe09947252dbe4ac563ace9313398f21584409tfarina@chromium.orgbool SkDrawMatrix::addChild(SkAnimateMaker& maker, SkDisplayable* child) {
65bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkASSERT(child && child->isMatrixPart());
66bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkMatrixPart* part = (SkMatrixPart*) child;
67bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    *fParts.append() = part;
68bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    if (part->add())
69dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.com        maker.setErrorCode(SkDisplayXMLParserError::kErrorAddingToMatrix);
70bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    return true;
71bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
72bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
73dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.combool SkDrawMatrix::childrenNeedDisposing() const {
74bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    return false;
75bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
76bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
77bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comSkDisplayable* SkDrawMatrix::deepCopy(SkAnimateMaker* maker) {
78bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkDrawMatrix* copy = (SkDrawMatrix*)
79bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        SkDisplayType::CreateInstance(maker, SkType_Matrix);
80bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkASSERT(fParts.count() == 0);
81bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    copy->fMatrix = fMatrix;
82bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    copy->fConcat = fConcat;
83bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    return copy;
84bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
85bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
86dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.comvoid SkDrawMatrix::dirty() {
87dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.com    fDirty = true;
88bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
89bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
90bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.combool SkDrawMatrix::draw(SkAnimateMaker& maker) {
91bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkMatrix& concat = getMatrix();
92bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    maker.fCanvas->concat(concat);
93bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    return false;
94bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
95bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
96bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#ifdef SK_DUMP_ENABLED
97bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comvoid SkDrawMatrix::dump(SkAnimateMaker* maker) {
98bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    dumpBase(maker);
99bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    if (fMatrix.isIdentity()) {
100bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        SkDebugf("matrix=\"identity\"/>\n");
101bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        return;
102bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    }
103bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkScalar result;
104bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    result = fMatrix[SkMatrix::kMScaleX];
105bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    if (result != SK_Scalar1)
106bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        SkDebugf("sx=\"%g\" ", SkScalarToFloat(result));
107bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    result = fMatrix.getScaleY();
108bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    if (result != SK_Scalar1)
109bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        SkDebugf("sy=\"%g\" ", SkScalarToFloat(result));
110bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    result = fMatrix.getSkewX();
111bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    if (result)
112bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        SkDebugf("skew-x=\"%g\" ", SkScalarToFloat(result));
113bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    result = fMatrix.getSkewY();
114bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    if (result)
115bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        SkDebugf("skew-y=\"%g\" ", SkScalarToFloat(result));
116bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    result = fMatrix.getTranslateX();
117bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    if (result)
118bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        SkDebugf("tx=\"%g\" ", SkScalarToFloat(result));
119bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    result = fMatrix.getTranslateY();
120bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    if (result)
121bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        SkDebugf("ty=\"%g\" ", SkScalarToFloat(result));
12253696803f4b1e1c68b36f60536c09eedabf7d5ddbungeman@google.com    result = SkPerspToScalar(fMatrix.getPerspX());
123bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    if (result)
124bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        SkDebugf("perspect-x=\"%g\" ", SkScalarToFloat(result));
12553696803f4b1e1c68b36f60536c09eedabf7d5ddbungeman@google.com    result = SkPerspToScalar(fMatrix.getPerspY());
126bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    if (result)
127bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        SkDebugf("perspect-y=\"%g\" ", SkScalarToFloat(result));
128bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkDebugf("/>\n");
129bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
130bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com#endif
131bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
132bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comSkMatrix& SkDrawMatrix::getMatrix() {
133bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    if (fDirty == false)
134bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        return fConcat;
135bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    fMatrix.reset();
136bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    for (SkMatrixPart** part = fParts.begin(); part < fParts.end();  part++) {
137bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        (*part)->add();
138bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fConcat = fMatrix;
139bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    }
140bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    fDirty = false;
141bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    return fConcat;
142bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
143bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
144bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.combool SkDrawMatrix::getProperty(int index, SkScriptValue* value) const {
145bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    value->fType = SkType_Float;
146bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkScalar result;
147bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    switch (index) {
148bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(perspectX):
149bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            result = fMatrix.getPerspX();
150bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            break;
151bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(perspectY):
152bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            result = fMatrix.getPerspY();
153bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            break;
154bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(scaleX):
155bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            result = fMatrix.getScaleX();
156bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            break;
157bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(scaleY):
158bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            result = fMatrix.getScaleY();
159bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            break;
160bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(skewX):
161bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            result = fMatrix.getSkewX();
162bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            break;
163bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(skewY):
164bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            result = fMatrix.getSkewY();
165bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            break;
166bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(translateX):
167bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            result = fMatrix.getTranslateX();
168bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            break;
169bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(translateY):
170bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            result = fMatrix.getTranslateY();
171bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            break;
172bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        default:
173bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com//          SkASSERT(0);
174bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            return false;
175bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    }
176bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    value->fOperand.fScalar = result;
177bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    return true;
178bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
179bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
180bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comvoid SkDrawMatrix::initialize() {
181bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    fConcat = fMatrix;
182bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
183bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
184bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comvoid SkDrawMatrix::onEndElement(SkAnimateMaker& ) {
185bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    if (matrix.count() > 0) {
186bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        SkScalar* vals = matrix.begin();
187bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fMatrix.setScaleX(vals[0]);
188bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fMatrix.setSkewX(vals[1]);
189bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fMatrix.setTranslateX(vals[2]);
190bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fMatrix.setSkewY(vals[3]);
191bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fMatrix.setScaleY(vals[4]);
192bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fMatrix.setTranslateY(vals[5]);
19353696803f4b1e1c68b36f60536c09eedabf7d5ddbungeman@google.com        fMatrix.setPerspX(SkScalarToPersp(vals[6]));
19453696803f4b1e1c68b36f60536c09eedabf7d5ddbungeman@google.com        fMatrix.setPerspY(SkScalarToPersp(vals[7]));
19553696803f4b1e1c68b36f60536c09eedabf7d5ddbungeman@google.com//      fMatrix.setPerspW(SkScalarToPersp(vals[8]));
196bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        goto setConcat;
197bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    }
198bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    if (fChildHasID == false) {
199bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        {
200bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            for (SkMatrixPart** part = fParts.begin(); part < fParts.end();  part++)
201bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com                delete *part;
202bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        }
203bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fParts.reset();
204bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.comsetConcat:
205bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fConcat = fMatrix;
206bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        fDirty = false;
207bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    }
208bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
209bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
210dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.comvoid SkDrawMatrix::setChildHasID() {
211dfb3e3c0faadabc131ac1532e29ca71667328513rmistry@google.com    fChildHasID = true;
212bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
213bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com
214bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.combool SkDrawMatrix::setProperty(int index, SkScriptValue& scriptValue) {
215bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    SkScalar number = scriptValue.fOperand.fScalar;
216bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    switch (index) {
217bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(translate):
218bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    //      SkScalar xy[2];
219bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            SkASSERT(scriptValue.fType == SkType_Array);
220bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            SkASSERT(scriptValue.fOperand.fArray->getType() == SkType_Float);
221bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            SkASSERT(scriptValue.fOperand.fArray->count() == 2);
222bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    //      SkParse::FindScalars(scriptValue.fOperand.fString->c_str(), xy, 2);
223bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            fMatrix.setTranslateX((*scriptValue.fOperand.fArray)[0].fScalar);
224bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            fMatrix.setTranslateY((*scriptValue.fOperand.fArray)[1].fScalar);
225bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            return true;
226bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(perspectX):
22753696803f4b1e1c68b36f60536c09eedabf7d5ddbungeman@google.com            fMatrix.setPerspX(SkScalarToPersp((number)));
228bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            break;
229bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(perspectY):
23053696803f4b1e1c68b36f60536c09eedabf7d5ddbungeman@google.com            fMatrix.setPerspY(SkScalarToPersp((number)));
231bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            break;
232bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(rotate): {
233bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            SkMatrix temp;
234bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            temp.setRotate(number, 0, 0);
235bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            fMatrix.setScaleX(temp.getScaleX());
236bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            fMatrix.setScaleY(temp.getScaleY());
237bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            fMatrix.setSkewX(temp.getSkewX());
238bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            fMatrix.setSkewY(temp.getSkewY());
239bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            } break;
240bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(scale):
241bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            fMatrix.setScaleX(number);
242bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            fMatrix.setScaleY(number);
243bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            break;
244bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(scaleX):
245bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            fMatrix.setScaleX(number);
246bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            break;
247bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(scaleY):
248bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            fMatrix.setScaleY(number);
249bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            break;
250bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(skewX):
251bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            fMatrix.setSkewX(number);
252bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            break;
253bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(skewY):
254bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            fMatrix.setSkewY(number);
255bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            break;
256bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(translateX):
257bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            fMatrix.setTranslateX(number);
258bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            break;
259bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        case SK_PROPERTY(translateY):
260bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            fMatrix.setTranslateY(number);
261bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            break;
262bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com        default:
263bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            SkASSERT(0);
264bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com            return false;
265bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    }
266bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    fConcat = fMatrix;
267bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com    return true;
268bcd4d5ab12df062500a4df90ec90d0f2d764931reed@android.com}
269