SkDrawExtraPathEffect.cpp revision ba28d03e94dc221d6a803bf2a84a420b9159255c
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(); 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool add(SkAnimateMaker& , SkDisplayable* ); 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(); 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool add(SkAnimateMaker& , SkDisplayable* ); 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 virtual void flatten(SkFlattenableWriteBuffer& ) {} 1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static bool GetContourLength(const char* token, size_t len, void* clen, SkScriptValue* value) { 1468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (SK_LITERAL_STR_EQUAL("contourLength", token, len)) { 1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fOperand.fScalar = *(SkScalar*) clen; 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fType = SkType_Float; 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return false; 1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static bool GetDistance(const char* token, size_t len, void* dist, SkScriptValue* value) { 1558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (SK_LITERAL_STR_EQUAL("distance", token, len)) { 1568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fOperand.fScalar = *(SkScalar*) dist; 1578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fType = SkType_Float; 1588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return false; 1618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawShape1DPathEffect* fDraw; 1648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkAnimateMaker* fMaker; 1658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//////////// SkDrawShapePathEffect 1688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if SK_USE_CONDENSED_INFO == 0 1708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst SkMemberInfo SkDrawShapePathEffect::fInfo[] = { 1728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(addMatrix, Drawable), // either matrix or apply 1738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(addPath, Drawable), // either path or apply 1748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(path, Path), 1758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comDEFINE_GET_MEMBER(SkDrawShapePathEffect); 1808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 18182065d667f64e232bcde2ad849756a6096fcbe6freed@google.comSkDrawShapePathEffect::SkDrawShapePathEffect() : 1828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com addPath(NULL), addMatrix(NULL), path(NULL), fPathEffect(NULL) { 1838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawShapePathEffect::~SkDrawShapePathEffect() { 18682065d667f64e232bcde2ad849756a6096fcbe6freed@google.com SkSafeUnref(fPathEffect); 1878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool SkDrawShapePathEffect::add(SkAnimateMaker& , SkDisplayable* child) { 1908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com path = (SkDrawPath*) child; 1918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 1928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkPathEffect* SkDrawShapePathEffect::getPathEffect() { 1958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fPathEffect->ref(); 1968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return fPathEffect; 1978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//////////// SkDrawShape1DPathEffect 2008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if SK_USE_CONDENSED_INFO == 0 2028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst SkMemberInfo SkDrawShape1DPathEffect::fInfo[] = { 2048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER_INHERITED, 2058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(phase, String), 2068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(spacing, String), 2078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 2088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 2108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comDEFINE_GET_MEMBER(SkDrawShape1DPathEffect); 2128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawShape1DPathEffect::SkDrawShape1DPathEffect(SkDisplayTypes type) : fType(type) { 2148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 2158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawShape1DPathEffect::~SkDrawShape1DPathEffect() { 2178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 2188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkDrawShape1DPathEffect::onEndElement(SkAnimateMaker& maker) { 2208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (addPath == NULL || (addPath->isPath() == false && addPath->isApply() == false)) 2218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com maker.setErrorCode(SkDisplayXMLParserError::kUnknownError); // !!! add error 2228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else 2238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fPathEffect = new SkShape1DPathEffect(this, &maker); 2248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 2258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////// SkShape2DPathEffect 2278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkShape2DPathEffect : public Sk2DPathEffect { 2298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 23082065d667f64e232bcde2ad849756a6096fcbe6freed@google.com SkShape2DPathEffect(SkDrawShape2DPathEffect* draw, SkAnimateMaker* maker, 2318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkMatrix& matrix) : Sk2DPathEffect(matrix), fDraw(draw), fMaker(maker) { 2328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 2358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void begin(const SkIRect& uvBounds, SkPath* ) 2368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com { 2378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fUVBounds.set(SkIntToScalar(uvBounds.fLeft), SkIntToScalar(uvBounds.fTop), 2388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkIntToScalar(uvBounds.fRight), SkIntToScalar(uvBounds.fBottom)); 2398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void next(const SkPoint& loc, int u, int v, SkPath* dst) 2428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com { 2438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fLoc = loc; 2448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fU = u; 2458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fV = v; 2468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawPath* drawPath; 2478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fMaker->setExtraPropertyCallBack(fDraw->fType, Get2D, this); 2488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (fDraw->addPath->isPath()) { 2498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com drawPath = (SkDrawPath*) fDraw->addPath; 2508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } else { 2518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkApply* apply = (SkApply*) fDraw->addPath; 2528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com apply->refresh(*fMaker); 2538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com apply->activate(*fMaker); 2548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com apply->interpolate(*fMaker, v); 2558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com drawPath = (SkDrawPath*) apply->getScope(); 2568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (drawPath == NULL) 2588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com goto clearCallBack; 2598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (fDraw->matrix) { 2608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawMatrix* matrix; 26182065d667f64e232bcde2ad849756a6096fcbe6freed@google.com if (fDraw->matrix->getType() == SkType_Matrix) 2628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com matrix = (SkDrawMatrix*) fDraw->matrix; 2638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else { 2648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkApply* apply = (SkApply*) fDraw->matrix; 2658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com apply->activate(*fMaker); 2668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com apply->interpolate(*fMaker, v); 2678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com matrix = (SkDrawMatrix*) apply->getScope(); 2688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (matrix) { 2708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com dst->addPath(drawPath->getPath(), matrix->getMatrix()); 2718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com goto clearCallBack; 2728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com dst->addPath(drawPath->getPath()); 2758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclearCallBack: 2768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fMaker->clearExtraPropertyCallBack(fDraw->fType); 2778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 2808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static bool Get2D(const char* token, size_t len, void* s2D, SkScriptValue* value) { 2828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static const char match[] = "locX|locY|left|top|right|bottom|u|v" ; 2838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkShape2DPathEffect* shape2D = (SkShape2DPathEffect*) s2D; 2848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int index; 2858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (SkAnimatorScript::MapEnums(match, token, len, &index) == false) 2868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return false; 2878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT((sizeof(SkPoint) + sizeof(SkRect)) / sizeof(SkScalar) == 6); 2888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (index < 6) { 2898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fType = SkType_Float; 2908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fOperand.fScalar = (&shape2D->fLoc.fX)[index]; 2918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } else { 2928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fType = SkType_Int; 2938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fOperand.fS32 = (&shape2D->fU)[index - 6]; 2948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 2968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 29782065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 2988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPoint fLoc; 2998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkRect fUVBounds; 3008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int32_t fU; 3018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int32_t fV; 3028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDrawShape2DPathEffect* fDraw; 3038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkAnimateMaker* fMaker; 3048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // illegal 3068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkShape2DPathEffect(const SkShape2DPathEffect&); 3078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkShape2DPathEffect& operator=(const SkShape2DPathEffect&); 3088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 3098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////// SkDrawShape2DPathEffect 3118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if SK_USE_CONDENSED_INFO == 0 3138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst SkMemberInfo SkDrawShape2DPathEffect::fInfo[] = { 3158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER_INHERITED, 3168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(matrix, Matrix) 3178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 3188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 3208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comDEFINE_GET_MEMBER(SkDrawShape2DPathEffect); 3228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawShape2DPathEffect::SkDrawShape2DPathEffect(SkDisplayTypes type) : fType(type) { 3248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawShape2DPathEffect::~SkDrawShape2DPathEffect() { 3278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkDrawShape2DPathEffect::onEndElement(SkAnimateMaker& maker) { 3308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (addPath == NULL || (addPath->isPath() == false && addPath->isApply() == false) || 3318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com matrix == NULL) 3328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com maker.setErrorCode(SkDisplayXMLParserError::kUnknownError); // !!! add error 3338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else 3348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fPathEffect = new SkShape2DPathEffect(this, &maker, matrix->getMatrix()); 3358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////// SkDrawComposePathEffect 3388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if SK_USE_CONDENSED_INFO == 0 3408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst SkMemberInfo SkDrawComposePathEffect::fInfo[] = { 3428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(effect1, PathEffect), 3438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(effect2, PathEffect) 3448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 3458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 3478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comDEFINE_GET_MEMBER(SkDrawComposePathEffect); 3498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawComposePathEffect::SkDrawComposePathEffect(SkDisplayTypes type) : fType(type), 3518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com effect1(NULL), effect2(NULL) { 3528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawComposePathEffect::~SkDrawComposePathEffect() { 3558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com delete effect1; 3568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com delete effect2; 3578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool SkDrawComposePathEffect::add(SkAnimateMaker& , SkDisplayable* child) { 3608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (effect1 == NULL) 3618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com effect1 = (SkDrawPathEffect*) child; 3628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else 3638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com effect2 = (SkDrawPathEffect*) child; 3648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 3658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkPathEffect* SkDrawComposePathEffect::getPathEffect() { 3688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPathEffect* e1 = effect1->getPathEffect(); 3698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPathEffect* e2 = effect2->getPathEffect(); 3708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPathEffect* composite = new SkComposePathEffect(e1, e2); 3718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com e1->unref(); 3728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com e2->unref(); 3738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return composite; 3748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool SkDrawComposePathEffect::isPaint() const { 3778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 3788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//////////// SkDrawCornerPathEffect 3818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if SK_USE_CONDENSED_INFO == 0 3838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst SkMemberInfo SkDrawCornerPathEffect::fInfo[] = { 3858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(radius, Float) 3868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 3878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 3898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comDEFINE_GET_MEMBER(SkDrawCornerPathEffect); 3918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawCornerPathEffect::SkDrawCornerPathEffect(SkDisplayTypes type): 3938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fType(type), radius(0) { 3948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDrawCornerPathEffect::~SkDrawCornerPathEffect() { 3978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 3988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 3998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkPathEffect* SkDrawCornerPathEffect::getPathEffect() { 4008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return new SkCornerPathEffect(radius); 4018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 4028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com///////// 4048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkExtras.h" 4068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst char kDrawShape1DPathEffectName[] = "pathEffect:shape1D"; 4088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst char kDrawShape2DPathEffectName[] = "pathEffect:shape2D"; 4098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst char kDrawComposePathEffectName[] = "pathEffect:compose"; 4108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst char kDrawCornerPathEffectName[] = "pathEffect:corner"; 4118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkExtraPathEffects : public SkExtras { 4138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 41482065d667f64e232bcde2ad849756a6096fcbe6freed@google.com SkExtraPathEffects(SkAnimator* animator) : 4158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com skDrawShape1DPathEffectType(SkType_Unknown), 4168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com skDrawShape2DPathEffectType(SkType_Unknown), 4178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com skDrawComposePathEffectType(SkType_Unknown), 4188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com skDrawCornerPathEffectType(SkType_Unknown) { 4198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 42082065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 4218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual SkDisplayable* createInstance(SkDisplayTypes type) { 4228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayable* result = NULL; 4238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (skDrawShape1DPathEffectType == type) 4248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com result = new SkDrawShape1DPathEffect(type); 4258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (skDrawShape2DPathEffectType == type) 4268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com result = new SkDrawShape2DPathEffect(type); 4278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (skDrawComposePathEffectType == type) 4288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com result = new SkDrawComposePathEffect(type); 4298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (skDrawCornerPathEffectType == type) 4308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com result = new SkDrawCornerPathEffect(type); 4318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return result; 4328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool definesType(SkDisplayTypes type) { 43582065d667f64e232bcde2ad849756a6096fcbe6freed@google.com return type == skDrawShape1DPathEffectType || 43682065d667f64e232bcde2ad849756a6096fcbe6freed@google.com type == skDrawShape2DPathEffectType || 4378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com type == skDrawComposePathEffectType || 4388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com type == skDrawCornerPathEffectType; 4398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if SK_USE_CONDENSED_INFO == 0 4428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual const SkMemberInfo* getMembers(SkDisplayTypes type, int* infoCountPtr) { 4438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkMemberInfo* info = NULL; 4448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int infoCount = 0; 4458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (skDrawShape1DPathEffectType == type) { 4468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com info = SkDrawShape1DPathEffect::fInfo; 4478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com infoCount = SkDrawShape1DPathEffect::fInfoCount; 4488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } else if (skDrawShape2DPathEffectType == type) { 4498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com info = SkDrawShape2DPathEffect::fInfo; 4508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com infoCount = SkDrawShape2DPathEffect::fInfoCount; 4518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } else if (skDrawComposePathEffectType == type) { 4528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com info = SkDrawComposePathEffect::fInfo; 4538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com infoCount = SkDrawShape1DPathEffect::fInfoCount; 4548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } else if (skDrawCornerPathEffectType == type) { 4558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com info = SkDrawCornerPathEffect::fInfo; 4568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com infoCount = SkDrawCornerPathEffect::fInfoCount; 4578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (infoCountPtr) 4598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *infoCountPtr = infoCount; 4608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return info; 4618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 4638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_DEBUG 4658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual const char* getName(SkDisplayTypes type) { 4668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (skDrawShape1DPathEffectType == type) 4678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return kDrawShape1DPathEffectName; 4688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (skDrawShape2DPathEffectType == type) 4698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return kDrawShape2DPathEffectName; 4708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (skDrawComposePathEffectType == type) 4718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return kDrawComposePathEffectName; 4728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (skDrawCornerPathEffectType == type) 4738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return kDrawCornerPathEffectName; 4748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return NULL; 4758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 4778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual SkDisplayTypes getType(const char name[], size_t len ) { 4798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes* type = NULL; 4808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (SK_LITERAL_STR_EQUAL(kDrawShape1DPathEffectName, name, len)) 4818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com type = &skDrawShape1DPathEffectType; 4828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (SK_LITERAL_STR_EQUAL(kDrawShape2DPathEffectName, name, len)) 4838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com type = &skDrawShape2DPathEffectType; 4848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (SK_LITERAL_STR_EQUAL(kDrawComposePathEffectName, name, len)) 4858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com type = &skDrawComposePathEffectType; 4868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (SK_LITERAL_STR_EQUAL(kDrawCornerPathEffectName, name, len)) 4878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com type = &skDrawCornerPathEffectType; 4888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (type) { 4898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (*type == SkType_Unknown) 4908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *type = SkDisplayType::RegisterNewType(); 4918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return *type; 4928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return SkType_Unknown; 4948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 4958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 4968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 4978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes skDrawShape1DPathEffectType; 4988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes skDrawShape2DPathEffectType; 4998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes skDrawComposePathEffectType; 5008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes skDrawCornerPathEffectType; 5018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 5028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid InitializeSkExtraPathEffects(SkAnimator* animator) { 5058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com animator->addExtras(new SkExtraPathEffects(animator)); 5068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 5078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//////////////// 5098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkExtras::SkExtras() : fExtraCallBack(NULL), fExtraStorage(NULL) { 5128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 513