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