SkDrawExtraPathEffect.cpp revision 1d3c411f5e4d2ad31bc92b3a85957004329ac00d
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#include "SkDrawExtraPathEffect.h" 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawPath.h" 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "Sk1DPathEffect.h" 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "Sk2DPathEffect.h" 148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkMemberInfo.h" 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPaintParts.h" 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPathEffect.h" 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkCornerPathEffect.h" 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDashPathEffect.h" 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkDrawShapePathEffect : public SkDrawPathEffect { 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com DECLARE_PRIVATE_MEMBER_INFO(DrawShapePathEffect); 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawShapePathEffect(); 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual ~SkDrawShapePathEffect(); 251d3c411f5e4d2ad31bc92b3a85957004329ac00dtfarina@chromium.org virtual bool addChild(SkAnimateMaker& , SkDisplayable* ) SK_OVERRIDE; 268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual SkPathEffect* getPathEffect(); 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawable* addPath; 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawable* addMatrix; 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawPath* path; 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPathEffect* fPathEffect; 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com friend class SkShape1DPathEffect; 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com friend class SkShape2DPathEffect; 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkDrawShape1DPathEffect : public SkDrawShapePathEffect { 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com DECLARE_EXTRAS_MEMBER_INFO(SkDrawShape1DPathEffect); 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawShape1DPathEffect(SkDisplayTypes ); 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual ~SkDrawShape1DPathEffect(); 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void onEndElement(SkAnimateMaker& ); 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkString phase; 438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkString spacing; 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com friend class SkShape1DPathEffect; 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkDrawShapePathEffect INHERITED; 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkDrawShape2DPathEffect : public SkDrawShapePathEffect { 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com DECLARE_EXTRAS_MEMBER_INFO(SkDrawShape2DPathEffect); 508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawShape2DPathEffect(SkDisplayTypes ); 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual ~SkDrawShape2DPathEffect(); 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void onEndElement(SkAnimateMaker& ); 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawMatrix* matrix; 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com friend class SkShape2DPathEffect; 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkDrawShapePathEffect INHERITED; 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkDrawComposePathEffect : public SkDrawPathEffect { 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com DECLARE_EXTRAS_MEMBER_INFO(SkDrawComposePathEffect); 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawComposePathEffect(SkDisplayTypes ); 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual ~SkDrawComposePathEffect(); 631d3c411f5e4d2ad31bc92b3a85957004329ac00dtfarina@chromium.org virtual bool addChild(SkAnimateMaker& , SkDisplayable* ) SK_OVERRIDE; 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual SkPathEffect* getPathEffect(); 6582065d667f64e232bcde2ad849756a6096fcbe6freed@google.com virtual bool isPaint() const; 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawPathEffect* effect1; 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawPathEffect* effect2; 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkDrawCornerPathEffect : public SkDrawPathEffect { 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com DECLARE_EXTRAS_MEMBER_INFO(SkDrawCornerPathEffect); 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawCornerPathEffect(SkDisplayTypes ); 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual ~SkDrawCornerPathEffect(); 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual SkPathEffect* getPathEffect(); 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScalar radius; 788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//////////// SkShape1DPathEffect 818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkAnimateMaker.h" 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkAnimatorScript.h" 848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDisplayApply.h" 858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawMatrix.h" 868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPaint.h" 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkShape1DPathEffect : public Sk1DPathEffect { 898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkShape1DPathEffect(SkDrawShape1DPathEffect* draw, SkAnimateMaker* maker) : 918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fDraw(draw), fMaker(maker) { 928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 94ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com SK_DECLARE_UNFLATTENABLE_OBJECT() 95ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual SkScalar begin(SkScalar contourLength) 988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com { 998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScriptValue value; 1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkAnimatorScript engine(*fMaker, NULL, SkType_Float); 1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com engine.propertyCallBack(GetContourLength, &contourLength); 1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value.fOperand.fScalar = 0; 1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com engine.evaluate(fDraw->phase.c_str(), &value, SkType_Float); 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return value.fOperand.fScalar; 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual SkScalar next(SkPath* dst, SkScalar distance, SkPathMeasure& ) 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com { 1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fMaker->setExtraPropertyCallBack(fDraw->fType, GetDistance, &distance); 1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawPath* drawPath = NULL; 1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (fDraw->addPath->isPath()) { 1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com drawPath = (SkDrawPath*) fDraw->addPath; 1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } else { 1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkApply* apply = (SkApply*) fDraw->addPath; 1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com apply->refresh(*fMaker); 1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com apply->activate(*fMaker); 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com apply->interpolate(*fMaker, SkScalarMulRound(distance, 1000)); 1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com drawPath = (SkDrawPath*) apply->getScope(); 1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkMatrix m; 1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com m.reset(); 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (fDraw->addMatrix) { 1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawMatrix* matrix; 12482065d667f64e232bcde2ad849756a6096fcbe6freed@google.com if (fDraw->addMatrix->getType() == SkType_Matrix) 1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com matrix = (SkDrawMatrix*) fDraw->addMatrix; 1268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else { 1278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkApply* apply = (SkApply*) fDraw->addMatrix; 1288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com apply->refresh(*fMaker); 1298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com apply->activate(*fMaker); 1308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com apply->interpolate(*fMaker, SkScalarMulRound(distance, 1000)); 1318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com matrix = (SkDrawMatrix*) apply->getScope(); 1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScalar result = 0; 1358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkAnimatorScript::EvaluateFloat(*fMaker, NULL, fDraw->spacing.c_str(), &result); 1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (drawPath) 1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com dst->addPath(drawPath->getPath(), m); 1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fMaker->clearExtraPropertyCallBack(fDraw->fType); 1398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return result; 1408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 1438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static bool GetContourLength(const char* token, size_t len, void* clen, SkScriptValue* value) { 1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (SK_LITERAL_STR_EQUAL("contourLength", token, len)) { 1458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fOperand.fScalar = *(SkScalar*) clen; 1468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fType = SkType_Float; 1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return false; 1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static bool GetDistance(const char* token, size_t len, void* dist, SkScriptValue* value) { 1538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (SK_LITERAL_STR_EQUAL("distance", token, len)) { 1548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fOperand.fScalar = *(SkScalar*) dist; 1558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fType = SkType_Float; 1568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 1578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return false; 1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawShape1DPathEffect* fDraw; 1628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkAnimateMaker* fMaker; 1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//////////// SkDrawShapePathEffect 1668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if SK_USE_CONDENSED_INFO == 0 1688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst SkMemberInfo SkDrawShapePathEffect::fInfo[] = { 1708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(addMatrix, Drawable), // either matrix or apply 1718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(addPath, Drawable), // either path or apply 1728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(path, Path), 1738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comDEFINE_GET_MEMBER(SkDrawShapePathEffect); 1788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 17982065d667f64e232bcde2ad849756a6096fcbe6freed@google.comSkDrawShapePathEffect::SkDrawShapePathEffect() : 1808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com addPath(NULL), addMatrix(NULL), path(NULL), fPathEffect(NULL) { 1818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawShapePathEffect::~SkDrawShapePathEffect() { 18482065d667f64e232bcde2ad849756a6096fcbe6freed@google.com SkSafeUnref(fPathEffect); 1858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1871d3c411f5e4d2ad31bc92b3a85957004329ac00dtfarina@chromium.orgbool SkDrawShapePathEffect::addChild(SkAnimateMaker& , SkDisplayable* child) { 1888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com path = (SkDrawPath*) child; 1898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 1908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkPathEffect* SkDrawShapePathEffect::getPathEffect() { 1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fPathEffect->ref(); 1948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return fPathEffect; 1958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//////////// SkDrawShape1DPathEffect 1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if SK_USE_CONDENSED_INFO == 0 2008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst SkMemberInfo SkDrawShape1DPathEffect::fInfo[] = { 2028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER_INHERITED, 2038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(phase, String), 2048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(spacing, String), 2058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 2068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comDEFINE_GET_MEMBER(SkDrawShape1DPathEffect); 2108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawShape1DPathEffect::SkDrawShape1DPathEffect(SkDisplayTypes type) : fType(type) { 2128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 2138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawShape1DPathEffect::~SkDrawShape1DPathEffect() { 2158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 2168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkDrawShape1DPathEffect::onEndElement(SkAnimateMaker& maker) { 2188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (addPath == NULL || (addPath->isPath() == false && addPath->isApply() == false)) 2198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com maker.setErrorCode(SkDisplayXMLParserError::kUnknownError); // !!! add error 2208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else 2218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fPathEffect = new SkShape1DPathEffect(this, &maker); 2228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 2238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////// SkShape2DPathEffect 2258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkShape2DPathEffect : public Sk2DPathEffect { 2278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 22882065d667f64e232bcde2ad849756a6096fcbe6freed@google.com SkShape2DPathEffect(SkDrawShape2DPathEffect* draw, SkAnimateMaker* maker, 2298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkMatrix& matrix) : Sk2DPathEffect(matrix), fDraw(draw), fMaker(maker) { 2308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 2338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void begin(const SkIRect& uvBounds, SkPath* ) 2348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com { 2358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fUVBounds.set(SkIntToScalar(uvBounds.fLeft), SkIntToScalar(uvBounds.fTop), 2368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkIntToScalar(uvBounds.fRight), SkIntToScalar(uvBounds.fBottom)); 2378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void next(const SkPoint& loc, int u, int v, SkPath* dst) 2408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com { 2418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fLoc = loc; 2428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fU = u; 2438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fV = v; 2448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawPath* drawPath; 2458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fMaker->setExtraPropertyCallBack(fDraw->fType, Get2D, this); 2468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (fDraw->addPath->isPath()) { 2478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com drawPath = (SkDrawPath*) fDraw->addPath; 2488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } else { 2498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkApply* apply = (SkApply*) fDraw->addPath; 2508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com apply->refresh(*fMaker); 2518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com apply->activate(*fMaker); 2528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com apply->interpolate(*fMaker, v); 2538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com drawPath = (SkDrawPath*) apply->getScope(); 2548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (drawPath == NULL) 2568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com goto clearCallBack; 2578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (fDraw->matrix) { 2588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawMatrix* matrix; 25982065d667f64e232bcde2ad849756a6096fcbe6freed@google.com if (fDraw->matrix->getType() == SkType_Matrix) 2608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com matrix = (SkDrawMatrix*) fDraw->matrix; 2618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else { 2628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkApply* apply = (SkApply*) fDraw->matrix; 2638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com apply->activate(*fMaker); 2648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com apply->interpolate(*fMaker, v); 2658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com matrix = (SkDrawMatrix*) apply->getScope(); 2668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (matrix) { 2688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com dst->addPath(drawPath->getPath(), matrix->getMatrix()); 2698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com goto clearCallBack; 2708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com dst->addPath(drawPath->getPath()); 2738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclearCallBack: 2748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fMaker->clearExtraPropertyCallBack(fDraw->fType); 2758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 2788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static bool Get2D(const char* token, size_t len, void* s2D, SkScriptValue* value) { 2808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static const char match[] = "locX|locY|left|top|right|bottom|u|v" ; 2818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkShape2DPathEffect* shape2D = (SkShape2DPathEffect*) s2D; 2828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int index; 2838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (SkAnimatorScript::MapEnums(match, token, len, &index) == false) 2848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return false; 2858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT((sizeof(SkPoint) + sizeof(SkRect)) / sizeof(SkScalar) == 6); 2868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (index < 6) { 2878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fType = SkType_Float; 2888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fOperand.fScalar = (&shape2D->fLoc.fX)[index]; 2898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } else { 2908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fType = SkType_Int; 2918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fOperand.fS32 = (&shape2D->fU)[index - 6]; 2928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 2948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 29582065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 2968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPoint fLoc; 2978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkRect fUVBounds; 2988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int32_t fU; 2998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int32_t fV; 3008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawShape2DPathEffect* fDraw; 3018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkAnimateMaker* fMaker; 3028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // illegal 3048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkShape2DPathEffect(const SkShape2DPathEffect&); 3058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkShape2DPathEffect& operator=(const SkShape2DPathEffect&); 3068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 3078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////// SkDrawShape2DPathEffect 3098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if SK_USE_CONDENSED_INFO == 0 3118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst SkMemberInfo SkDrawShape2DPathEffect::fInfo[] = { 3138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER_INHERITED, 3148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(matrix, Matrix) 3158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 3168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 3188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comDEFINE_GET_MEMBER(SkDrawShape2DPathEffect); 3208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawShape2DPathEffect::SkDrawShape2DPathEffect(SkDisplayTypes type) : fType(type) { 3228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawShape2DPathEffect::~SkDrawShape2DPathEffect() { 3258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkDrawShape2DPathEffect::onEndElement(SkAnimateMaker& maker) { 3288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (addPath == NULL || (addPath->isPath() == false && addPath->isApply() == false) || 3298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com matrix == NULL) 3308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com maker.setErrorCode(SkDisplayXMLParserError::kUnknownError); // !!! add error 3318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else 3328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fPathEffect = new SkShape2DPathEffect(this, &maker, matrix->getMatrix()); 3338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////// SkDrawComposePathEffect 3368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if SK_USE_CONDENSED_INFO == 0 3388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst SkMemberInfo SkDrawComposePathEffect::fInfo[] = { 3408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(effect1, PathEffect), 3418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(effect2, PathEffect) 3428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 3438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 3458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comDEFINE_GET_MEMBER(SkDrawComposePathEffect); 3478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawComposePathEffect::SkDrawComposePathEffect(SkDisplayTypes type) : fType(type), 3498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com effect1(NULL), effect2(NULL) { 3508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawComposePathEffect::~SkDrawComposePathEffect() { 3538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com delete effect1; 3548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com delete effect2; 3558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3571d3c411f5e4d2ad31bc92b3a85957004329ac00dtfarina@chromium.orgbool SkDrawComposePathEffect::addChild(SkAnimateMaker& , SkDisplayable* child) { 3588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (effect1 == NULL) 3598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com effect1 = (SkDrawPathEffect*) child; 3608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else 3618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com effect2 = (SkDrawPathEffect*) child; 3628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 3638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkPathEffect* SkDrawComposePathEffect::getPathEffect() { 3668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPathEffect* e1 = effect1->getPathEffect(); 3678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPathEffect* e2 = effect2->getPathEffect(); 3688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPathEffect* composite = new SkComposePathEffect(e1, e2); 3698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com e1->unref(); 3708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com e2->unref(); 3718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return composite; 3728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool SkDrawComposePathEffect::isPaint() const { 3758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 3768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//////////// SkDrawCornerPathEffect 3798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if SK_USE_CONDENSED_INFO == 0 3818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst SkMemberInfo SkDrawCornerPathEffect::fInfo[] = { 3838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(radius, Float) 3848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 3858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 3878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comDEFINE_GET_MEMBER(SkDrawCornerPathEffect); 3898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawCornerPathEffect::SkDrawCornerPathEffect(SkDisplayTypes type): 3918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fType(type), radius(0) { 3928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawCornerPathEffect::~SkDrawCornerPathEffect() { 3958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkPathEffect* SkDrawCornerPathEffect::getPathEffect() { 3988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return new SkCornerPathEffect(radius); 3998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 4008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com///////// 4028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkExtras.h" 4048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst char kDrawShape1DPathEffectName[] = "pathEffect:shape1D"; 4068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst char kDrawShape2DPathEffectName[] = "pathEffect:shape2D"; 4078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst char kDrawComposePathEffectName[] = "pathEffect:compose"; 4088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst char kDrawCornerPathEffectName[] = "pathEffect:corner"; 4098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkExtraPathEffects : public SkExtras { 4118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 41282065d667f64e232bcde2ad849756a6096fcbe6freed@google.com SkExtraPathEffects(SkAnimator* animator) : 4138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com skDrawShape1DPathEffectType(SkType_Unknown), 4148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com skDrawShape2DPathEffectType(SkType_Unknown), 4158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com skDrawComposePathEffectType(SkType_Unknown), 4168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com skDrawCornerPathEffectType(SkType_Unknown) { 4178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 41882065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 4198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual SkDisplayable* createInstance(SkDisplayTypes type) { 4208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayable* result = NULL; 4218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (skDrawShape1DPathEffectType == type) 4228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com result = new SkDrawShape1DPathEffect(type); 4238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (skDrawShape2DPathEffectType == type) 4248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com result = new SkDrawShape2DPathEffect(type); 4258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (skDrawComposePathEffectType == type) 4268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com result = new SkDrawComposePathEffect(type); 4278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (skDrawCornerPathEffectType == type) 4288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com result = new SkDrawCornerPathEffect(type); 4298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return result; 4308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool definesType(SkDisplayTypes type) { 43382065d667f64e232bcde2ad849756a6096fcbe6freed@google.com return type == skDrawShape1DPathEffectType || 43482065d667f64e232bcde2ad849756a6096fcbe6freed@google.com type == skDrawShape2DPathEffectType || 4358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com type == skDrawComposePathEffectType || 4368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com type == skDrawCornerPathEffectType; 4378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if SK_USE_CONDENSED_INFO == 0 4408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual const SkMemberInfo* getMembers(SkDisplayTypes type, int* infoCountPtr) { 4418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkMemberInfo* info = NULL; 4428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int infoCount = 0; 4438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (skDrawShape1DPathEffectType == type) { 4448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com info = SkDrawShape1DPathEffect::fInfo; 4458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com infoCount = SkDrawShape1DPathEffect::fInfoCount; 4468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } else if (skDrawShape2DPathEffectType == type) { 4478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com info = SkDrawShape2DPathEffect::fInfo; 4488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com infoCount = SkDrawShape2DPathEffect::fInfoCount; 4498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } else if (skDrawComposePathEffectType == type) { 4508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com info = SkDrawComposePathEffect::fInfo; 4518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com infoCount = SkDrawShape1DPathEffect::fInfoCount; 4528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } else if (skDrawCornerPathEffectType == type) { 4538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com info = SkDrawCornerPathEffect::fInfo; 4548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com infoCount = SkDrawCornerPathEffect::fInfoCount; 4558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (infoCountPtr) 4578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *infoCountPtr = infoCount; 4588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return info; 4598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 4618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_DEBUG 4638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual const char* getName(SkDisplayTypes type) { 4648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (skDrawShape1DPathEffectType == type) 4658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return kDrawShape1DPathEffectName; 4668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (skDrawShape2DPathEffectType == type) 4678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return kDrawShape2DPathEffectName; 4688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (skDrawComposePathEffectType == type) 4698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return kDrawComposePathEffectName; 4708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (skDrawCornerPathEffectType == type) 4718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return kDrawCornerPathEffectName; 4728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return NULL; 4738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 4758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual SkDisplayTypes getType(const char name[], size_t len ) { 4778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes* type = NULL; 4788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (SK_LITERAL_STR_EQUAL(kDrawShape1DPathEffectName, name, len)) 4798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com type = &skDrawShape1DPathEffectType; 4808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (SK_LITERAL_STR_EQUAL(kDrawShape2DPathEffectName, name, len)) 4818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com type = &skDrawShape2DPathEffectType; 4828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (SK_LITERAL_STR_EQUAL(kDrawComposePathEffectName, name, len)) 4838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com type = &skDrawComposePathEffectType; 4848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (SK_LITERAL_STR_EQUAL(kDrawCornerPathEffectName, name, len)) 4858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com type = &skDrawCornerPathEffectType; 4868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (type) { 4878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (*type == SkType_Unknown) 4888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *type = SkDisplayType::RegisterNewType(); 4898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return *type; 4908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return SkType_Unknown; 4928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 4958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes skDrawShape1DPathEffectType; 4968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes skDrawShape2DPathEffectType; 4978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes skDrawComposePathEffectType; 4988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes skDrawCornerPathEffectType; 4998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 5008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid InitializeSkExtraPathEffects(SkAnimator* animator) { 5038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com animator->addExtras(new SkExtraPathEffects(animator)); 5048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 5058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//////////////// 5078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkExtras::SkExtras() : fExtraCallBack(NULL), fExtraStorage(NULL) { 5108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 511