11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project 41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 81cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawExtraPathEffect.h" 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawPath.h" 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "Sk1DPathEffect.h" 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "Sk2DPathEffect.h" 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkMemberInfo.h" 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkPaintParts.h" 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkPathEffect.h" 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkCornerPathEffect.h" 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDashPathEffect.h" 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkDrawShapePathEffect : public SkDrawPathEffect { 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project DECLARE_PRIVATE_MEMBER_INFO(DrawShapePathEffect); 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawShapePathEffect(); 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual ~SkDrawShapePathEffect(); 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual bool add(SkAnimateMaker& , SkDisplayable* ); 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual SkPathEffect* getPathEffect(); 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprotected: 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawable* addPath; 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawable* addMatrix; 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawPath* path; 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPathEffect* fPathEffect; 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project friend class SkShape1DPathEffect; 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project friend class SkShape2DPathEffect; 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkDrawShape1DPathEffect : public SkDrawShapePathEffect { 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project DECLARE_EXTRAS_MEMBER_INFO(SkDrawShape1DPathEffect); 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawShape1DPathEffect(SkDisplayTypes ); 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual ~SkDrawShape1DPathEffect(); 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void onEndElement(SkAnimateMaker& ); 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkString phase; 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkString spacing; 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project friend class SkShape1DPathEffect; 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkDrawShapePathEffect INHERITED; 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkDrawShape2DPathEffect : public SkDrawShapePathEffect { 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project DECLARE_EXTRAS_MEMBER_INFO(SkDrawShape2DPathEffect); 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawShape2DPathEffect(SkDisplayTypes ); 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual ~SkDrawShape2DPathEffect(); 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void onEndElement(SkAnimateMaker& ); 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawMatrix* matrix; 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project friend class SkShape2DPathEffect; 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typedef SkDrawShapePathEffect INHERITED; 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkDrawComposePathEffect : public SkDrawPathEffect { 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project DECLARE_EXTRAS_MEMBER_INFO(SkDrawComposePathEffect); 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawComposePathEffect(SkDisplayTypes ); 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual ~SkDrawComposePathEffect(); 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual bool add(SkAnimateMaker& , SkDisplayable* ); 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual SkPathEffect* getPathEffect(); 6540528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger virtual bool isPaint() const; 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawPathEffect* effect1; 680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawPathEffect* effect2; 690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkDrawCornerPathEffect : public SkDrawPathEffect { 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project DECLARE_EXTRAS_MEMBER_INFO(SkDrawCornerPathEffect); 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawCornerPathEffect(SkDisplayTypes ); 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual ~SkDrawCornerPathEffect(); 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual SkPathEffect* getPathEffect(); 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar radius; 780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//////////// SkShape1DPathEffect 810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkAnimateMaker.h" 830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkAnimatorScript.h" 840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayApply.h" 850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawMatrix.h" 860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkPaint.h" 870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkShape1DPathEffect : public Sk1DPathEffect { 890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkShape1DPathEffect(SkDrawShape1DPathEffect* draw, SkAnimateMaker* maker) : 910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDraw(draw), fMaker(maker) { 920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprotected: 950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual SkScalar begin(SkScalar contourLength) 960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScriptValue value; 980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkAnimatorScript engine(*fMaker, NULL, SkType_Float); 990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project engine.propertyCallBack(GetContourLength, &contourLength); 1000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value.fOperand.fScalar = 0; 1010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project engine.evaluate(fDraw->phase.c_str(), &value, SkType_Float); 1020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return value.fOperand.fScalar; 1030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual SkScalar next(SkPath* dst, SkScalar distance, SkPathMeasure& ) 1060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 1070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMaker->setExtraPropertyCallBack(fDraw->fType, GetDistance, &distance); 1080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawPath* drawPath = NULL; 1090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fDraw->addPath->isPath()) { 1100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project drawPath = (SkDrawPath*) fDraw->addPath; 1110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } else { 1120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkApply* apply = (SkApply*) fDraw->addPath; 1130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project apply->refresh(*fMaker); 1140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project apply->activate(*fMaker); 1150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project apply->interpolate(*fMaker, SkScalarMulRound(distance, 1000)); 1160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project drawPath = (SkDrawPath*) apply->getScope(); 1170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkMatrix m; 1190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project m.reset(); 1200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fDraw->addMatrix) { 1210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawMatrix* matrix; 12240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger if (fDraw->addMatrix->getType() == SkType_Matrix) 1230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project matrix = (SkDrawMatrix*) fDraw->addMatrix; 1240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else { 1250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkApply* apply = (SkApply*) fDraw->addMatrix; 1260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project apply->refresh(*fMaker); 1270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project apply->activate(*fMaker); 1280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project apply->interpolate(*fMaker, SkScalarMulRound(distance, 1000)); 1290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project matrix = (SkDrawMatrix*) apply->getScope(); 1300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar result = 0; 1330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkAnimatorScript::EvaluateFloat(*fMaker, NULL, fDraw->spacing.c_str(), &result); 1340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (drawPath) 1350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dst->addPath(drawPath->getPath(), m); 1360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMaker->clearExtraPropertyCallBack(fDraw->fType); 1370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return result; 1380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 1410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void flatten(SkFlattenableWriteBuffer& ) {} 1420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual Factory getFactory() { return NULL; } 1430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static bool GetContourLength(const char* token, size_t len, void* clen, SkScriptValue* value) { 1450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (SK_LITERAL_STR_EQUAL("contourLength", token, len)) { 1460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fOperand.fScalar = *(SkScalar*) clen; 1470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fType = SkType_Float; 1480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 1490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static bool GetDistance(const char* token, size_t len, void* dist, SkScriptValue* value) { 1540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (SK_LITERAL_STR_EQUAL("distance", token, len)) { 1550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fOperand.fScalar = *(SkScalar*) dist; 1560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fType = SkType_Float; 1570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 1580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawShape1DPathEffect* fDraw; 1630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkAnimateMaker* fMaker; 1640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//////////// SkDrawShapePathEffect 1670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 1690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkDrawShapePathEffect::fInfo[] = { 1710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(addMatrix, Drawable), // either matrix or apply 1720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(addPath, Drawable), // either path or apply 1730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(path, Path), 1740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 1770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkDrawShapePathEffect); 1790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 18040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek SollenbergerSkDrawShapePathEffect::SkDrawShapePathEffect() : 1810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project addPath(NULL), addMatrix(NULL), path(NULL), fPathEffect(NULL) { 1820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDrawShapePathEffect::~SkDrawShapePathEffect() { 18540528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger SkSafeUnref(fPathEffect); 1860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDrawShapePathEffect::add(SkAnimateMaker& , SkDisplayable* child) { 1890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project path = (SkDrawPath*) child; 1900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 1910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkPathEffect* SkDrawShapePathEffect::getPathEffect() { 1940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fPathEffect->ref(); 1950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return fPathEffect; 1960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//////////// SkDrawShape1DPathEffect 1990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 2010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkDrawShape1DPathEffect::fInfo[] = { 2030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_INHERITED, 2040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(phase, String), 2050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(spacing, String), 2060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 2070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 2090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkDrawShape1DPathEffect); 2110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDrawShape1DPathEffect::SkDrawShape1DPathEffect(SkDisplayTypes type) : fType(type) { 2130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDrawShape1DPathEffect::~SkDrawShape1DPathEffect() { 2160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkDrawShape1DPathEffect::onEndElement(SkAnimateMaker& maker) { 2190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (addPath == NULL || (addPath->isPath() == false && addPath->isApply() == false)) 2200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project maker.setErrorCode(SkDisplayXMLParserError::kUnknownError); // !!! add error 2210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else 2220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fPathEffect = new SkShape1DPathEffect(this, &maker); 2230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project////////// SkShape2DPathEffect 2260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkShape2DPathEffect : public Sk2DPathEffect { 2280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 22940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger SkShape2DPathEffect(SkDrawShape2DPathEffect* draw, SkAnimateMaker* maker, 2300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkMatrix& matrix) : Sk2DPathEffect(matrix), fDraw(draw), fMaker(maker) { 2310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprotected: 2340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void begin(const SkIRect& uvBounds, SkPath* ) 2350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 2360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fUVBounds.set(SkIntToScalar(uvBounds.fLeft), SkIntToScalar(uvBounds.fTop), 2370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkIntToScalar(uvBounds.fRight), SkIntToScalar(uvBounds.fBottom)); 2380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual void next(const SkPoint& loc, int u, int v, SkPath* dst) 2410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project { 2420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fLoc = loc; 2430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fU = u; 2440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fV = v; 2450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawPath* drawPath; 2460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMaker->setExtraPropertyCallBack(fDraw->fType, Get2D, this); 2470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fDraw->addPath->isPath()) { 2480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project drawPath = (SkDrawPath*) fDraw->addPath; 2490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } else { 2500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkApply* apply = (SkApply*) fDraw->addPath; 2510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project apply->refresh(*fMaker); 2520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project apply->activate(*fMaker); 2530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project apply->interpolate(*fMaker, v); 2540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project drawPath = (SkDrawPath*) apply->getScope(); 2550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (drawPath == NULL) 2570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project goto clearCallBack; 2580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fDraw->matrix) { 2590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawMatrix* matrix; 26040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger if (fDraw->matrix->getType() == SkType_Matrix) 2610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project matrix = (SkDrawMatrix*) fDraw->matrix; 2620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else { 2630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkApply* apply = (SkApply*) fDraw->matrix; 2640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project apply->activate(*fMaker); 2650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project apply->interpolate(*fMaker, v); 2660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project matrix = (SkDrawMatrix*) apply->getScope(); 2670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (matrix) { 2690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dst->addPath(drawPath->getPath(), matrix->getMatrix()); 2700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project goto clearCallBack; 2710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dst->addPath(drawPath->getPath()); 2740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectclearCallBack: 2750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fMaker->clearExtraPropertyCallBack(fDraw->fType); 2760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 2790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static bool Get2D(const char* token, size_t len, void* s2D, SkScriptValue* value) { 2810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project static const char match[] = "locX|locY|left|top|right|bottom|u|v" ; 2820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkShape2DPathEffect* shape2D = (SkShape2DPathEffect*) s2D; 2830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int index; 2840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (SkAnimatorScript::MapEnums(match, token, len, &index) == false) 2850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 2860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT((sizeof(SkPoint) + sizeof(SkRect)) / sizeof(SkScalar) == 6); 2870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (index < 6) { 2880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fType = SkType_Float; 2890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fOperand.fScalar = (&shape2D->fLoc.fX)[index]; 2900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } else { 2910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fType = SkType_Int; 2920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fOperand.fS32 = (&shape2D->fU)[index - 6]; 2930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 2950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 29640528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger 2970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPoint fLoc; 2980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkRect fUVBounds; 2990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int32_t fU; 3000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int32_t fV; 3010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawShape2DPathEffect* fDraw; 3020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkAnimateMaker* fMaker; 3030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // illegal 3050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkShape2DPathEffect(const SkShape2DPathEffect&); 3060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkShape2DPathEffect& operator=(const SkShape2DPathEffect&); 3070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 3080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project////////// SkDrawShape2DPathEffect 3100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 3120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkDrawShape2DPathEffect::fInfo[] = { 3140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_INHERITED, 3150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(matrix, Matrix) 3160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 3170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 3190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkDrawShape2DPathEffect); 3210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDrawShape2DPathEffect::SkDrawShape2DPathEffect(SkDisplayTypes type) : fType(type) { 3230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 3240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDrawShape2DPathEffect::~SkDrawShape2DPathEffect() { 3260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 3270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkDrawShape2DPathEffect::onEndElement(SkAnimateMaker& maker) { 3290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (addPath == NULL || (addPath->isPath() == false && addPath->isApply() == false) || 3300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project matrix == NULL) 3310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project maker.setErrorCode(SkDisplayXMLParserError::kUnknownError); // !!! add error 3320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else 3330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fPathEffect = new SkShape2DPathEffect(this, &maker, matrix->getMatrix()); 3340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 3350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project////////// SkDrawComposePathEffect 3370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 3390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkDrawComposePathEffect::fInfo[] = { 3410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(effect1, PathEffect), 3420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(effect2, PathEffect) 3430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 3440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 3460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkDrawComposePathEffect); 3480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDrawComposePathEffect::SkDrawComposePathEffect(SkDisplayTypes type) : fType(type), 3500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project effect1(NULL), effect2(NULL) { 3510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 3520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDrawComposePathEffect::~SkDrawComposePathEffect() { 3540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project delete effect1; 3550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project delete effect2; 3560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 3570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDrawComposePathEffect::add(SkAnimateMaker& , SkDisplayable* child) { 3590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (effect1 == NULL) 3600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project effect1 = (SkDrawPathEffect*) child; 3610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else 3620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project effect2 = (SkDrawPathEffect*) child; 3630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 3640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 3650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkPathEffect* SkDrawComposePathEffect::getPathEffect() { 3670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPathEffect* e1 = effect1->getPathEffect(); 3680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPathEffect* e2 = effect2->getPathEffect(); 3690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPathEffect* composite = new SkComposePathEffect(e1, e2); 3700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project e1->unref(); 3710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project e2->unref(); 3720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return composite; 3730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 3740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDrawComposePathEffect::isPaint() const { 3760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 3770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 3780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//////////// SkDrawCornerPathEffect 3800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 3820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkDrawCornerPathEffect::fInfo[] = { 3840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(radius, Float) 3850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 3860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 3880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkDrawCornerPathEffect); 3900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDrawCornerPathEffect::SkDrawCornerPathEffect(SkDisplayTypes type): 3920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fType(type), radius(0) { 3930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 3940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDrawCornerPathEffect::~SkDrawCornerPathEffect() { 3960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 3970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkPathEffect* SkDrawCornerPathEffect::getPathEffect() { 3990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return new SkCornerPathEffect(radius); 4000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 4010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 4020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project///////// 4030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 4040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkExtras.h" 4050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 4060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst char kDrawShape1DPathEffectName[] = "pathEffect:shape1D"; 4070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst char kDrawShape2DPathEffectName[] = "pathEffect:shape2D"; 4080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst char kDrawComposePathEffectName[] = "pathEffect:compose"; 4090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst char kDrawCornerPathEffectName[] = "pathEffect:corner"; 4100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 4110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkExtraPathEffects : public SkExtras { 4120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic: 41340528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger SkExtraPathEffects(SkAnimator* animator) : 4140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project skDrawShape1DPathEffectType(SkType_Unknown), 4150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project skDrawShape2DPathEffectType(SkType_Unknown), 4160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project skDrawComposePathEffectType(SkType_Unknown), 4170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project skDrawCornerPathEffectType(SkType_Unknown) { 4180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 41940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger 4200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual SkDisplayable* createInstance(SkDisplayTypes type) { 4210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayable* result = NULL; 4220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (skDrawShape1DPathEffectType == type) 4230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project result = new SkDrawShape1DPathEffect(type); 4240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else if (skDrawShape2DPathEffectType == type) 4250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project result = new SkDrawShape2DPathEffect(type); 4260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else if (skDrawComposePathEffectType == type) 4270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project result = new SkDrawComposePathEffect(type); 4280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else if (skDrawCornerPathEffectType == type) 4290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project result = new SkDrawCornerPathEffect(type); 4300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return result; 4310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 4320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 4330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual bool definesType(SkDisplayTypes type) { 43440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger return type == skDrawShape1DPathEffectType || 43540528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger type == skDrawShape2DPathEffectType || 4360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project type == skDrawComposePathEffectType || 4370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project type == skDrawCornerPathEffectType; 4380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 4390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 4400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 4410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual const SkMemberInfo* getMembers(SkDisplayTypes type, int* infoCountPtr) { 4420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project const SkMemberInfo* info = NULL; 4430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int infoCount = 0; 4440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (skDrawShape1DPathEffectType == type) { 4450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project info = SkDrawShape1DPathEffect::fInfo; 4460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project infoCount = SkDrawShape1DPathEffect::fInfoCount; 4470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } else if (skDrawShape2DPathEffectType == type) { 4480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project info = SkDrawShape2DPathEffect::fInfo; 4490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project infoCount = SkDrawShape2DPathEffect::fInfoCount; 4500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } else if (skDrawComposePathEffectType == type) { 4510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project info = SkDrawComposePathEffect::fInfo; 4520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project infoCount = SkDrawShape1DPathEffect::fInfoCount; 4530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } else if (skDrawCornerPathEffectType == type) { 4540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project info = SkDrawCornerPathEffect::fInfo; 4550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project infoCount = SkDrawCornerPathEffect::fInfoCount; 4560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 4570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (infoCountPtr) 4580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *infoCountPtr = infoCount; 4590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return info; 4600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 4610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 4620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 4630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_DEBUG 4640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual const char* getName(SkDisplayTypes type) { 4650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (skDrawShape1DPathEffectType == type) 4660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return kDrawShape1DPathEffectName; 4670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else if (skDrawShape2DPathEffectType == type) 4680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return kDrawShape2DPathEffectName; 4690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else if (skDrawComposePathEffectType == type) 4700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return kDrawComposePathEffectName; 4710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else if (skDrawCornerPathEffectType == type) 4720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return kDrawCornerPathEffectName; 4730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return NULL; 4740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 4750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 4760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 4770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project virtual SkDisplayTypes getType(const char name[], size_t len ) { 4780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayTypes* type = NULL; 4790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (SK_LITERAL_STR_EQUAL(kDrawShape1DPathEffectName, name, len)) 4800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project type = &skDrawShape1DPathEffectType; 4810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else if (SK_LITERAL_STR_EQUAL(kDrawShape2DPathEffectName, name, len)) 4820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project type = &skDrawShape2DPathEffectType; 4830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else if (SK_LITERAL_STR_EQUAL(kDrawComposePathEffectName, name, len)) 4840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project type = &skDrawComposePathEffectType; 4850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else if (SK_LITERAL_STR_EQUAL(kDrawCornerPathEffectName, name, len)) 4860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project type = &skDrawCornerPathEffectType; 4870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (type) { 4880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (*type == SkType_Unknown) 4890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *type = SkDisplayType::RegisterNewType(); 4900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return *type; 4910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 4920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkType_Unknown; 4930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 4940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 4950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate: 4960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayTypes skDrawShape1DPathEffectType; 4970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayTypes skDrawShape2DPathEffectType; 4980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayTypes skDrawComposePathEffectType; 4990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayTypes skDrawCornerPathEffectType; 5000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 5010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 5020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 5030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid InitializeSkExtraPathEffects(SkAnimator* animator) { 5040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project animator->addExtras(new SkExtraPathEffects(animator)); 5050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 5060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 5070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project//////////////// 5080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 5090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 5100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkExtras::SkExtras() : fExtraCallBack(NULL), fExtraStorage(NULL) { 5110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 512