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 "SkDrawPaint.h" 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkAnimateMaker.h" 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawColor.h" 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawShader.h" 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkMaskFilter.h" 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkPaintParts.h" 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkPathEffect.h" 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectenum SkPaint_Functions { 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_FUNCTION(measureText) 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectenum SkPaint_Properties { 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_PROPERTY(ascent), 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_PROPERTY(descent) 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// !!! in the future, this could be compiled by build-condensed-info into an array of parameters 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// with a lookup table to find the first parameter -- for now, it is iteratively searched through 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkFunctionParamType SkDrawPaint::fFunctionParameters[] = { 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project (SkFunctionParamType) SkType_String, 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project (SkFunctionParamType) 0 // terminator for parameter list (there may be multiple parameter lists) 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkDrawPaint::fInfo[] = { 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(antiAlias, Boolean), 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_PROPERTY(ascent, Float), 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(color, Color), 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_PROPERTY(descent, Float), 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(fakeBold, Boolean), 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(filterBitmap, Boolean), 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(linearText, Boolean), 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(maskFilter, MaskFilter), 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_FUNCTION(measureText, Float), 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(pathEffect, PathEffect), 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(shader, Shader), 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(strikeThru, Boolean), 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(stroke, Boolean), 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(strokeCap, Cap), 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(strokeJoin, Join), 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(strokeMiter, Float), 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(strokeWidth, Float), 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(style, Style), 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(textAlign, Align), 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(textScaleX, Float), 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(textSize, Float), 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(textSkewX, Float), 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(typeface, Typeface), 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(underline, Boolean), 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(xfermode, Xfermode) 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkDrawPaint); 680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDrawPaint::SkDrawPaint() : antiAlias(-1), color(NULL), fakeBold(-1), filterBitmap(-1), 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project linearText(-1), maskFilter((SkDrawMaskFilter*) -1), pathEffect((SkDrawPathEffect*) -1), 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project shader((SkDrawShader*) -1), strikeThru(-1), stroke(-1), 7240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger strokeCap((SkPaint::Cap) -1), strokeJoin((SkPaint::Join) -1), strokeMiter(SK_ScalarNaN), 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project strokeWidth(SK_ScalarNaN), style((SkPaint::Style) -1), 7440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger textAlign((SkPaint::Align) -1), textScaleX(SK_ScalarNaN), textSize(SK_ScalarNaN), 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project textSkewX(SK_ScalarNaN), typeface((SkDrawTypeface*) -1), 7640528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger underline(-1), xfermode((SkXfermode::Mode) -1), fOwnsColor(false), fOwnsMaskFilter(false), 770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fOwnsPathEffect(false), fOwnsShader(false), fOwnsTypeface(false) { 780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDrawPaint::~SkDrawPaint() { 810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fOwnsColor) 820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project delete color; 830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fOwnsMaskFilter) 840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project delete maskFilter; 850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fOwnsPathEffect) 860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project delete pathEffect; 870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fOwnsShader) 880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project delete shader; 890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fOwnsTypeface) 900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project delete typeface; 910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 931cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerbool SkDrawPaint::add(SkAnimateMaker* maker, SkDisplayable* child) { 940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(child && child->isPaintPart()); 950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPaintPart* part = (SkPaintPart*) child; 961cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger if (part->add() && maker) 971cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger maker->setErrorCode(SkDisplayXMLParserError::kErrorAddingToPaint); 980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDisplayable* SkDrawPaint::deepCopy(SkAnimateMaker* maker) { 1020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawColor* tempColor = color; 1030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project color = NULL; 1040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawPaint* copy = (SkDrawPaint*) INHERITED::deepCopy(maker); 1050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project color = tempColor; 1060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project tempColor = (SkDrawColor*) color->deepCopy(maker); 1070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project tempColor->setParent(copy); 1080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project tempColor->add(); 1090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project copy->fOwnsColor = true; 1100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return copy; 1110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDrawPaint::draw(SkAnimateMaker& maker) { 1140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPaint* paint = maker.fPaint; 1150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project setupPaint(paint); 1160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_DUMP_ENABLED 1200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkDrawPaint::dump(SkAnimateMaker* maker) { 1210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dumpBase(maker); 1220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dumpAttrs(maker); 1230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project bool closedYet = false; 1240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayList::fIndent +=4; 1250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project //should i say if (maskFilter && ...? 1260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (maskFilter != (SkDrawMaskFilter*)-1) { 1270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf(">\n"); 1280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project maskFilter->dump(maker); 1290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project closedYet = true; 1300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (pathEffect != (SkDrawPathEffect*) -1) { 1320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (closedYet == false) { 1330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf(">\n"); 1340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project closedYet = true; 1350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project pathEffect->dump(maker); 1370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fOwnsTypeface) { 1390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (closedYet == false) { 1400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf(">\n"); 1410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project closedYet = true; 1420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project typeface->dump(maker); 1440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDisplayList::fIndent -= 4; 1460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dumpChildren(maker, closedYet); 1470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 14940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger 15040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenbergervoid SkDrawPaint::executeFunction(SkDisplayable* target, int index, 1510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkTDArray<SkScriptValue>& parameters, SkDisplayTypes type, 1520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScriptValue* scriptValue) { 1530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (scriptValue == NULL) 1540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return; 1550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(target == this); 1560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project switch (index) { 1570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_FUNCTION(measureText): { 1580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(parameters.count() == 1); 1590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(type == SkType_Float); 1600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPaint paint; 1610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project setupPaint(&paint); 1620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project scriptValue->fType = SkType_Float; 1630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(parameters[0].fType == SkType_String); 16440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger scriptValue->fOperand.fScalar = paint.measureText(parameters[0].fOperand.fString->c_str(), 16540528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger parameters[0].fOperand.fString->size()); 16640528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger// SkDebugf("measureText: %s = %g\n", parameters[0].fOperand.fString->c_str(), 1670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project// scriptValue->fOperand.fScalar / 65536.0f); 1680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } break; 1690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project default: 1700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(0); 1710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkFunctionParamType* SkDrawPaint::getFunctionsParameters() { 1750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return fFunctionParameters; 1760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDrawPaint::getProperty(int index, SkScriptValue* value) const { 1790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPaint::FontMetrics metrics; 1800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkPaint paint; 1810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project setupPaint(&paint); 1820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint.getFontMetrics(&metrics); 1830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project switch (index) { 1840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(ascent): 1850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fOperand.fScalar = metrics.fAscent; 1860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 1870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(descent): 1880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fOperand.fScalar = metrics.fDescent; 1890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 19040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger // should consider returning fLeading as well (or roll it into ascent/descent somehow 1910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project default: 1920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(0); 1930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fType = SkType_Float; 1960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 1970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDrawPaint::resolveIDs(SkAnimateMaker& maker, SkDisplayable* origDisp, SkApply* ) { 2000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(origDisp->isPaint()); 2010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawPaint* original = (SkDrawPaint*) origDisp; 2020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fOwnsColor && maker.resolveID(color, original->color) == false) 2030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 2040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fOwnsMaskFilter && maker.resolveID(maskFilter, original->maskFilter) == false) 2050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 2060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fOwnsPathEffect && maker.resolveID(pathEffect, original->pathEffect) == false) 2070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 2080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fOwnsShader && maker.resolveID(shader, original->shader) == false) 2090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 2100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fOwnsTypeface && maker.resolveID(typeface, original->typeface) == false) 2110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 21240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger return false; // succeeded 2130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkDrawPaint::setupPaint(SkPaint* paint) const { 2160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (antiAlias != -1) 2170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setAntiAlias(SkToBool(antiAlias)); 2180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (color != NULL) 2190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setColor(color->getColor()); 2200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fakeBold != -1) 2210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setFakeBoldText(SkToBool(fakeBold)); 2220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (filterBitmap != -1) 2230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setFilterBitmap(SkToBool(filterBitmap)); 2240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project // stroke is legacy; style setting if present overrides stroke 2250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (stroke != -1) 2260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setStyle(SkToBool(stroke) ? SkPaint::kStroke_Style : SkPaint::kFill_Style); 2270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (style != (SkPaint::Style) -1) 2280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setStyle((SkPaint::Style) style); 2290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (linearText != -1) 2300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setLinearText(SkToBool(linearText)); 2310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (maskFilter == NULL) 2320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setMaskFilter(NULL); 2330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else if (maskFilter != (SkDrawMaskFilter*) -1) 23440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger SkSafeUnref(paint->setMaskFilter(maskFilter->getMaskFilter())); 2350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (pathEffect == NULL) 2360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setPathEffect(NULL); 2370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else if (pathEffect != (SkDrawPathEffect*) -1) 23840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger SkSafeUnref(paint->setPathEffect(pathEffect->getPathEffect())); 2390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (shader == NULL) 2400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setShader(NULL); 2410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else if (shader != (SkDrawShader*) -1) 24240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger SkSafeUnref(paint->setShader(shader->getShader())); 2430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (strikeThru != -1) 2440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setStrikeThruText(SkToBool(strikeThru)); 2450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (strokeCap != (SkPaint::Cap) -1) 2460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setStrokeCap((SkPaint::Cap) strokeCap); 2470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (strokeJoin != (SkPaint::Join) -1) 2480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setStrokeJoin((SkPaint::Join) strokeJoin); 2490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (SkScalarIsNaN(strokeMiter) == false) 2500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setStrokeMiter(strokeMiter); 2510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (SkScalarIsNaN(strokeWidth) == false) 2520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setStrokeWidth(strokeWidth); 2530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (textAlign != (SkPaint::Align) -1) 2540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setTextAlign((SkPaint::Align) textAlign); 2550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (SkScalarIsNaN(textScaleX) == false) 2560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setTextScaleX(textScaleX); 2570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (SkScalarIsNaN(textSize) == false) 2580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setTextSize(textSize); 2590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (SkScalarIsNaN(textSkewX) == false) 2600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setTextSkewX(textSkewX); 2610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (typeface == NULL) 2620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setTypeface(NULL); 2630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else if (typeface != (SkDrawTypeface*) -1) 26440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger SkSafeUnref(paint->setTypeface(typeface->getTypeface())); 2650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (underline != -1) 2660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project paint->setUnderlineText(SkToBool(underline)); 26759f59bde0b05a6ac5ff28fdebc1942dbf0d43aabMike Reed if (xfermode != (SkXfermode::Mode) -1) 2684663d79a396bd4d45a9140626921c9fbad77fbf8Mike Reed paint->setXfermodeMode((SkXfermode::Mode) xfermode); 2690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 270