180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2006 The Android Open Source Project 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDrawMatrix.h" 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkAnimateMaker.h" 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkCanvas.h" 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkPaint.h" 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkParse.h" 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkMatrixParts.h" 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkScript.h" 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkTypedArray.h" 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruenum SkDrawMatrix_Properties { 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(perspectX), 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(perspectY), 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(rotate), 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(scale), 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(scaleX), 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(scaleY), 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(skewX), 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(skewY), 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(translate), 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(translateX), 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_PROPERTY(translateY) 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if SK_USE_CONDENSED_INFO == 0 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo SkDrawMatrix::fInfo[] = { 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_ARRAY(matrix, Float), 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(perspectX, Float), 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(perspectY, Float), 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(rotate, Float), 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(scale, Float), 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(scaleX, Float), 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(scaleY, Float), 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(skewX, Float), 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(skewY, Float), 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(translate, Point), 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(translateX, Float), 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_PROPERTY(translateY, Float) 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruDEFINE_GET_MEMBER(SkDrawMatrix); 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDrawMatrix::SkDrawMatrix() : fChildHasID(false), fDirty(false) { 5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fConcat.reset(); 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.reset(); 5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDrawMatrix::~SkDrawMatrix() { 6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (SkMatrixPart** part = fParts.begin(); part < fParts.end(); part++) 6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru delete *part; 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 64363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenbergerbool SkDrawMatrix::addChild(SkAnimateMaker& maker, SkDisplayable* child) { 6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(child && child->isMatrixPart()); 6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkMatrixPart* part = (SkMatrixPart*) child; 6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *fParts.append() = part; 6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (part->add()) 6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru maker.setErrorCode(SkDisplayXMLParserError::kErrorAddingToMatrix); 7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return true; 7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDrawMatrix::childrenNeedDisposing() const { 7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDisplayable* SkDrawMatrix::deepCopy(SkAnimateMaker* maker) { 7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDrawMatrix* copy = (SkDrawMatrix*) 7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayType::CreateInstance(maker, SkType_Matrix); 8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(fParts.count() == 0); 8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru copy->fMatrix = fMatrix; 8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru copy->fConcat = fConcat; 8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return copy; 8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 8680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDrawMatrix::dirty() { 8780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fDirty = true; 8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 9080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDrawMatrix::draw(SkAnimateMaker& maker) { 9180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkMatrix& concat = getMatrix(); 9280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru maker.fCanvas->concat(concat); 9380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 9480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 9580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 9680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DUMP_ENABLED 9780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDrawMatrix::dump(SkAnimateMaker* maker) { 9880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dumpBase(maker); 9980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (fMatrix.isIdentity()) { 10080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("matrix=\"identity\"/>\n"); 10180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return; 10280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 10380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalar result; 10480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result = fMatrix[SkMatrix::kMScaleX]; 10580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (result != SK_Scalar1) 10680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("sx=\"%g\" ", SkScalarToFloat(result)); 10780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result = fMatrix.getScaleY(); 10880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (result != SK_Scalar1) 10980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("sy=\"%g\" ", SkScalarToFloat(result)); 11080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result = fMatrix.getSkewX(); 11180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (result) 11280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("skew-x=\"%g\" ", SkScalarToFloat(result)); 11380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result = fMatrix.getSkewY(); 11480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (result) 11580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("skew-y=\"%g\" ", SkScalarToFloat(result)); 11680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result = fMatrix.getTranslateX(); 11780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (result) 11880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("tx=\"%g\" ", SkScalarToFloat(result)); 11980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result = fMatrix.getTranslateY(); 12080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (result) 12180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("ty=\"%g\" ", SkScalarToFloat(result)); 12280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result = SkPerspToScalar(fMatrix.getPerspX()); 12380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (result) 12480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("perspect-x=\"%g\" ", SkScalarToFloat(result)); 12580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result = SkPerspToScalar(fMatrix.getPerspY()); 12680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (result) 12780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("perspect-y=\"%g\" ", SkScalarToFloat(result)); 12880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf("/>\n"); 12980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 13080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 13180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 13280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkMatrix& SkDrawMatrix::getMatrix() { 13380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (fDirty == false) 13480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return fConcat; 13580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.reset(); 13680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (SkMatrixPart** part = fParts.begin(); part < fParts.end(); part++) { 13780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru (*part)->add(); 13880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fConcat = fMatrix; 13980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 14080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fDirty = false; 14180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return fConcat; 14280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 14380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 14480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDrawMatrix::getProperty(int index, SkScriptValue* value) const { 14580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru value->fType = SkType_Float; 14680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalar result; 14780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru switch (index) { 14880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(perspectX): 14980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result = fMatrix.getPerspX(); 15080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 15180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(perspectY): 15280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result = fMatrix.getPerspY(); 15380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 15480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(scaleX): 15580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result = fMatrix.getScaleX(); 15680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 15780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(scaleY): 15880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result = fMatrix.getScaleY(); 15980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 16080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(skewX): 16180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result = fMatrix.getSkewX(); 16280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 16380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(skewY): 16480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result = fMatrix.getSkewY(); 16580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 16680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(translateX): 16780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result = fMatrix.getTranslateX(); 16880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 16980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(translateY): 17080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru result = fMatrix.getTranslateY(); 17180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 17280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru default: 17380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// SkASSERT(0); 17480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 17580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 17680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru value->fOperand.fScalar = result; 17780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return true; 17880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 17980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 18080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDrawMatrix::initialize() { 18180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fConcat = fMatrix; 18280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 18380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 18480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDrawMatrix::onEndElement(SkAnimateMaker& ) { 18580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (matrix.count() > 0) { 18680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalar* vals = matrix.begin(); 18780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setScaleX(vals[0]); 18880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setSkewX(vals[1]); 18980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setTranslateX(vals[2]); 19080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setSkewY(vals[3]); 19180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setScaleY(vals[4]); 19280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setTranslateY(vals[5]); 19380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setPerspX(SkScalarToPersp(vals[6])); 19480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setPerspY(SkScalarToPersp(vals[7])); 19580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// fMatrix.setPerspW(SkScalarToPersp(vals[8])); 19680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru goto setConcat; 19780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 19880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (fChildHasID == false) { 19980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru { 20080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (SkMatrixPart** part = fParts.begin(); part < fParts.end(); part++) 20180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru delete *part; 20280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 20380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fParts.reset(); 20480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QuerusetConcat: 20580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fConcat = fMatrix; 20680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fDirty = false; 20780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 20880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 20980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 21080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDrawMatrix::setChildHasID() { 21180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fChildHasID = true; 21280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 21380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 21480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querubool SkDrawMatrix::setProperty(int index, SkScriptValue& scriptValue) { 21580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalar number = scriptValue.fOperand.fScalar; 21680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru switch (index) { 21780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(translate): 21880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // SkScalar xy[2]; 21980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(scriptValue.fType == SkType_Array); 22080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(scriptValue.fOperand.fArray->getType() == SkType_Float); 22180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(scriptValue.fOperand.fArray->count() == 2); 22280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru // SkParse::FindScalars(scriptValue.fOperand.fString->c_str(), xy, 2); 22380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setTranslateX((*scriptValue.fOperand.fArray)[0].fScalar); 22480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setTranslateY((*scriptValue.fOperand.fArray)[1].fScalar); 22580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return true; 22680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(perspectX): 22780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setPerspX(SkScalarToPersp((number))); 22880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 22980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(perspectY): 23080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setPerspY(SkScalarToPersp((number))); 23180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 23280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(rotate): { 23380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkMatrix temp; 23480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru temp.setRotate(number, 0, 0); 23580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setScaleX(temp.getScaleX()); 23680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setScaleY(temp.getScaleY()); 23780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setSkewX(temp.getSkewX()); 23880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setSkewY(temp.getSkewY()); 23980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } break; 24080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(scale): 24180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setScaleX(number); 24280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setScaleY(number); 24380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 24480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(scaleX): 24580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setScaleX(number); 24680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 24780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(scaleY): 24880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setScaleY(number); 24980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 25080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(skewX): 25180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setSkewX(number); 25280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 25380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(skewY): 25480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setSkewY(number); 25580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 25680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(translateX): 25780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setTranslateX(number); 25880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 25980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru case SK_PROPERTY(translateY): 26080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fMatrix.setTranslateY(number); 26180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru break; 26280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru default: 26380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(0); 26480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 26580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 26680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fConcat = fMatrix; 26780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return true; 26880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 269