180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/* 380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2006 The Android Open Source Project 480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * 580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be 680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file. 780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */ 880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkDrawGradient.h" 1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkAnimateMaker.h" 1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkAnimatorScript.h" 1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkGradientShader.h" 1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkUnitMapper.h" 1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic SkScalar SkUnitToScalar(U16CPU x) { 1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_SCALAR_IS_FLOAT 1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return x / 65535.0f; 1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#else 2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return x + (x >> 8); 2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic U16CPU SkScalarToUnit(SkScalar x) { 2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalar pin = SkScalarPin(x, 0, SK_Scalar1); 2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_SCALAR_IS_FLOAT 2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return (int) (pin * 65535.0f); 2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#else 2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return pin - (pin >= 32768); 3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkDrawGradientUnitMapper : public SkUnitMapper { 3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic: 3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDrawGradientUnitMapper(SkAnimateMaker* maker, const char* script) : fMaker(maker), fScript(script) { 3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_DECLARE_UNFLATTENABLE_OBJECT() 3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprotected: 4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru virtual uint16_t mapUnit16(uint16_t x) { 4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fUnit = SkUnitToScalar(x); 4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScriptValue value; 4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkAnimatorScript engine(*fMaker, NULL, SkType_Float); 4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru engine.propertyCallBack(GetUnitValue, &fUnit); 4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (engine.evaluate(fScript, &value, SkType_Float)) 4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru x = SkScalarToUnit(value.fOperand.fScalar); 4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return x; 4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru static bool GetUnitValue(const char* token, size_t len, void* unitPtr, SkScriptValue* value) { 5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (SK_LITERAL_STR_EQUAL("unit", token, len)) { 5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru value->fOperand.fScalar = *(SkScalar*) unitPtr; 5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru value->fType = SkType_Float; 5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return true; 5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkAnimateMaker* fMaker; 6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru const char* fScript; 6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkScalar fUnit; 6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if SK_USE_CONDENSED_INFO == 0 6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo SkDrawGradient::fInfo[] = { 6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_INHERITED, 7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_ARRAY(offsets, Float), 7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER(unitMapper, String) 7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruDEFINE_GET_MEMBER(SkDrawGradient); 7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDrawGradient::SkDrawGradient() : fUnitMapper(NULL) { 7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDrawGradient::~SkDrawGradient() { 8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (int index = 0; index < fDrawColors.count(); index++) 8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru delete fDrawColors[index]; 8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru delete fUnitMapper; 8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 8680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 87363e546ed626b6dbbc42f5db87b3594bc0b5944bDerek Sollenbergerbool SkDrawGradient::addChild(SkAnimateMaker& , SkDisplayable* child) { 8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkASSERT(child); 8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (child->isColor()) { 9080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDrawColor* color = (SkDrawColor*) child; 9180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *fDrawColors.append() = color; 9280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return true; 9380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 9480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return false; 9580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 9680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 9780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruint SkDrawGradient::addPrelude() { 9880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru int count = fDrawColors.count(); 9980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fColors.setCount(count); 10080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (int index = 0; index < count; index++) 10180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fColors[index] = fDrawColors[index]->color; 10280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return count; 10380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 10480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 10580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DUMP_ENABLED 10680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDrawGradient::dumpRest(SkAnimateMaker* maker) { 10780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dumpAttrs(maker); 10880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru //can a gradient have no colors? 10980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru bool closedYet = false; 11080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayList::fIndent += 4; 11180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (SkDrawColor** ptr = fDrawColors.begin(); ptr < fDrawColors.end(); ptr++) { 11280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (closedYet == false) { 11380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDebugf(">\n"); 11480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru closedYet = true; 11580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 11680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDrawColor* color = *ptr; 11780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru color->dump(maker); 11880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 11980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkDisplayList::fIndent -= 4; 12080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dumpChildren(maker, closedYet); //dumps the matrix if it has one 12180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 12280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 12380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 12480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDrawGradient::onEndElement(SkAnimateMaker& maker) { 12580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (offsets.count() != 0) { 12680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (offsets.count() != fDrawColors.count()) { 12780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru maker.setErrorCode(SkDisplayXMLParserError::kGradientOffsetsDontMatchColors); 12880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return; 12980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 13080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (offsets[0] != 0) { 13180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru maker.setErrorCode(SkDisplayXMLParserError::kGradientOffsetsMustStartWithZero); 13280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return; 13380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 13480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (offsets[offsets.count()-1] != SK_Scalar1) { 13580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru maker.setErrorCode(SkDisplayXMLParserError::kGradientOffsetsMustEndWithOne); 13680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return; 13780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 13880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru for (int i = 1; i < offsets.count(); i++) { 13980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (offsets[i] <= offsets[i-1]) { 14080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru maker.setErrorCode(SkDisplayXMLParserError::kGradientOffsetsMustIncrease); 14180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return; 14280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 14380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (offsets[i] > SK_Scalar1) { 14480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru maker.setErrorCode(SkDisplayXMLParserError::kGradientOffsetsMustBeNoMoreThanOne); 14580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return; 14680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 14780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 14880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 14980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (unitMapper.size() > 0) 15080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fUnitMapper = new SkDrawGradientUnitMapper(&maker, unitMapper.c_str()); 15180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru INHERITED::onEndElement(maker); 15280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 15380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 15480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if SK_USE_CONDENSED_INFO == 0 15580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 15680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo SkDrawLinearGradient::fInfo[] = { 15780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_INHERITED, 15880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_ARRAY(points, Float), 15980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 16080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 16180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 16280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 16380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruDEFINE_GET_MEMBER(SkDrawLinearGradient); 16480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 16580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDrawLinearGradient::SkDrawLinearGradient() { 16680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 16780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 16880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDrawLinearGradient::onEndElement(SkAnimateMaker& maker) 16980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru{ 17080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (points.count() != 4) 17180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru maker.setErrorCode(SkDisplayXMLParserError::kGradientPointsLengthMustBeFour); 17280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru INHERITED::onEndElement(maker); 17380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 17480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 17580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DUMP_ENABLED 17680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDrawLinearGradient::dump(SkAnimateMaker* maker) { 17780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dumpBase(maker); 17880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dumpRest(maker); 17980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru } 18080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 18180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 18280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkShader* SkDrawLinearGradient::getShader() { 18380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (addPrelude() == 0 || points.count() != 4) 18480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return NULL; 18580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkShader* shader = SkGradientShader::CreateLinear((SkPoint*)points.begin(), 18680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru fColors.begin(), offsets.begin(), fColors.count(), (SkShader::TileMode) tileMode, fUnitMapper); 18780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkAutoTDelete<SkShader> autoDel(shader); 18880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru addPostlude(shader); 18980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru (void)autoDel.detach(); 19080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return shader; 19180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 19280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 19380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 19480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#if SK_USE_CONDENSED_INFO == 0 19580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 19680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruconst SkMemberInfo SkDrawRadialGradient::fInfo[] = { 19780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER_INHERITED, 19880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER(center, Point), 19980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SK_MEMBER(radius, Float) 20080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}; 20180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 20280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 20380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 20480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruDEFINE_GET_MEMBER(SkDrawRadialGradient); 20580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 20680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkDrawRadialGradient::SkDrawRadialGradient() : radius(0) { 20780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru center.set(0, 0); 20880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 20980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 21080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifdef SK_DUMP_ENABLED 21180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid SkDrawRadialGradient::dump(SkAnimateMaker* maker) { 21280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dumpBase(maker); 21380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru dumpRest(maker); 21480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 21580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif 21680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru 21780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste QueruSkShader* SkDrawRadialGradient::getShader() { 21880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru if (addPrelude() == 0) 21980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return NULL; 22080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkShader* shader = SkGradientShader::CreateRadial(center, 22180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru radius, fColors.begin(), offsets.begin(), fColors.count(), (SkShader::TileMode) tileMode, fUnitMapper); 22280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru SkAutoTDelete<SkShader> autoDel(shader); 22380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru addPostlude(shader); 22480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru (void)autoDel.detach(); 22580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru return shader; 22680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru} 227