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 "SkDrawColor.h" 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_DEBUG 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayList.h" 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawPaint.h" 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkParse.h" 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkScript.h" 170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectenum HSV_Choice { 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kGetHue, 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kGetSaturation, 210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project kGetValue 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic SkScalar RGB_to_HSV(SkColor color, HSV_Choice choice) { 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar red = SkIntToScalar(SkColorGetR(color)); 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar green = SkIntToScalar(SkColorGetG(color)); 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar blue = SkIntToScalar(SkColorGetB(color)); 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar min = SkMinScalar(SkMinScalar(red, green), blue); 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar value = SkMaxScalar(SkMaxScalar(red, green), blue); 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (choice == kGetValue) 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return value/255; 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar delta = value - min; 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar saturation = value == 0 ? 0 : SkScalarDiv(delta, value); 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (choice == kGetSaturation) 350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return saturation; 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar hue; 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (saturation == 0) 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project hue = 0; 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else { 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar part60 = SkScalarDiv(60 * SK_Scalar1, delta); 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (red == value) { 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project hue = SkScalarMul(green - blue, part60); 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (hue < 0) 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project hue += 360 * SK_Scalar1; 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else if (green == value) 470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project hue = 120 * SK_Scalar1 + SkScalarMul(blue - red, part60); 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else // blue == value 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project hue = 240 * SK_Scalar1 + SkScalarMul(red - green, part60); 500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(choice == kGetHue); 520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return hue; 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if defined _WIN32 && _MSC_VER >= 1300 // disable 'red', etc. may be used without having been initialized 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#pragma warning ( push ) 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#pragma warning ( disable : 4701 ) 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectstatic SkColor HSV_to_RGB(SkColor color, HSV_Choice choice, SkScalar hsv) { 610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar hue = choice == kGetHue ? hsv : RGB_to_HSV(color, kGetHue); 620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar saturation = choice == kGetSaturation ? hsv : RGB_to_HSV(color, kGetSaturation); 630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar value = choice == kGetValue ? hsv : RGB_to_HSV(color, kGetValue); 640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value *= 255; 650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar red SK_INIT_TO_AVOID_WARNING; 660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar green SK_INIT_TO_AVOID_WARNING; 670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar blue SK_INIT_TO_AVOID_WARNING; 680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (saturation == 0) // color is on black-and-white center line 690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project red = green = blue = value; 700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project else { 710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project //SkScalar fraction = SkScalarMod(hue, 60 * SK_Scalar1); 720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project int sextant = SkScalarFloor(hue / 60); 730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar fraction = hue / 60 - SkIntToScalar(sextant); 740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar p = SkScalarMul(value , SK_Scalar1 - saturation); 750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar q = SkScalarMul(value, SK_Scalar1 - SkScalarMul(saturation, fraction)); 760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar t = SkScalarMul(value, SK_Scalar1 - 770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalarMul(saturation, SK_Scalar1 - fraction)); 780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project switch (sextant % 6) { 790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case 0: red = value; green = t; blue = p; break; 800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case 1: red = q; green = value; blue = p; break; 810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case 2: red = p; green = value; blue = t; break; 820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case 3: red = p; green = q; blue = value; break; 830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case 4: red = t; green = p; blue = value; break; 840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case 5: red = value; green = p; blue = q; break; 850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project //used to say SkToU8((U8CPU) red) etc 880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkColorSetARGB(SkColorGetA(color), SkScalarRound(red), 890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalarRound(green), SkScalarRound(blue)); 900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if defined _WIN32 && _MSC_VER >= 1300 930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#pragma warning ( pop ) 940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectenum SkDrawColor_Properties { 970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_PROPERTY(alpha), 980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_PROPERTY(blue), 990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_PROPERTY(green), 1000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_PROPERTY(hue), 1010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_PROPERTY(red), 1020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_PROPERTY(saturation), 1030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_PROPERTY(value) 1040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0 1070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkDrawColor::fInfo[] = { 1090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_PROPERTY(alpha, Float), 1100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_PROPERTY(blue, Float), 1110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER(color, ARGB), 1120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_PROPERTY(green, Float), 1130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_PROPERTY(hue, Float), 1140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_PROPERTY(red, Float), 1150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_PROPERTY(saturation, Float), 1160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SK_MEMBER_PROPERTY(value, Float), 1170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}; 1180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 1200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkDrawColor); 1220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDrawColor::SkDrawColor() : fDirty(false) { 1240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project color = SK_ColorBLACK; 1250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fHue = fSaturation = fValue = SK_ScalarNaN; 1260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDrawColor::add() { 1290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fPaint->color != NULL) 1300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; // error (probably color in paint as attribute as well) 1310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fPaint->color = this; 1320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fPaint->fOwnsColor = true; 1330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 1340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDisplayable* SkDrawColor::deepCopy(SkAnimateMaker* maker) { 1370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDrawColor* copy = new SkDrawColor(); 1380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project copy->color = color; 1390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project copy->fHue = fHue; 1400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project copy->fSaturation = fSaturation; 1410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project copy->fValue = fValue; 1420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project copy->fDirty = fDirty; 1430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return copy; 1440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkDrawColor::dirty(){ 1470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty = true; 1480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_DUMP_ENABLED 1510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkDrawColor::dump(SkAnimateMaker* maker) { 1520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project dumpBase(maker); 1530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkDebugf("alpha=\"%d\" red=\"%d\" green=\"%d\" blue=\"%d\" />\n", 1540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkColorGetA(color)/255, SkColorGetR(color), 1550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkColorGetG(color), SkColorGetB(color)); 1560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 1580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkColor SkDrawColor::getColor() { 1600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (fDirty) { 1610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (SkScalarIsNaN(fValue) == false) 1620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project color = HSV_to_RGB(color, kGetValue, fValue); 1630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (SkScalarIsNaN(fSaturation) == false) 1640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project color = HSV_to_RGB(color, kGetSaturation, fSaturation); 1650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (SkScalarIsNaN(fHue) == false) 1660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project color = HSV_to_RGB(color, kGetHue, fHue); 1670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty = false; 1680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 1690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return color; 1700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDisplayable* SkDrawColor::getParent() const { 1730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return fPaint; 1740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 1750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDrawColor::getProperty(int index, SkScriptValue* value) const { 1770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fType = SkType_Float; 1780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar result; 1790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project switch(index) { 1800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(alpha): 1810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project result = SkIntToScalar(SkColorGetA(color)) / 255; 1820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 1830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(blue): 1840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project result = SkIntToScalar(SkColorGetB(color)); 1850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 1860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(green): 1870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project result = SkIntToScalar(SkColorGetG(color)); 1880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 1890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(hue): 1900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project result = RGB_to_HSV(color, kGetHue); 1910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 1920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(red): 1930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project result = SkIntToScalar(SkColorGetR(color)); 1940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 1950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(saturation): 1960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project result = RGB_to_HSV(color, kGetSaturation); 1970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 1980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(value): 1990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project result = RGB_to_HSV(color, kGetValue); 2000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 2010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project default: 2020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(0); 2030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 2040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project value->fOperand.fScalar = result; 2060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 2070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkDrawColor::onEndElement(SkAnimateMaker& maker){ 2100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty = true; 2110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDrawColor::setParent(SkDisplayable* parent) { 2140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(parent != NULL); 2150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (parent->getType() == SkType_LinearGradient || parent->getType() == SkType_RadialGradient) 2160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 2170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project if (parent->isPaint() == false) 2180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 2190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fPaint = (SkDrawPaint*) parent; 2200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 2210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 2230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkDrawColor::setProperty(int index, SkScriptValue& value) { 2240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(value.fType == SkType_Float); 2250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkScalar scalar = value.fOperand.fScalar; 2260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project switch (index) { 2270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(alpha): 2280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project uint8_t alpha; 2290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project #ifdef SK_SCALAR_IS_FLOAT 2300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project alpha = scalar == SK_Scalar1 ? 255 : SkToU8((U8CPU) (scalar * 256)); 2310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project #else 2320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project alpha = SkToU8((scalar - (scalar >= SK_ScalarHalf)) >> 8); 2330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project #endif 2340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project color = SkColorSetARGB(alpha, SkColorGetR(color), 2350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkColorGetG(color), SkColorGetB(color)); 2360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 2370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(blue): 2380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project scalar = SkScalarClampMax(scalar, 255 * SK_Scalar1); 2390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project color = SkColorSetARGB(SkColorGetA(color), SkColorGetR(color), 2400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkColorGetG(color), SkToU8((U8CPU) scalar)); 2410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 2420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(green): 2430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project scalar = SkScalarClampMax(scalar, 255 * SK_Scalar1); 2440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project color = SkColorSetARGB(SkColorGetA(color), SkColorGetR(color), 2450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkToU8((U8CPU) scalar), SkColorGetB(color)); 2460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 2470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(hue): 2480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fHue = scalar;//RGB_to_HSV(color, kGetHue); 2490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty = true; 2500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 2510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(red): 2520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project scalar = SkScalarClampMax(scalar, 255 * SK_Scalar1); 2530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project color = SkColorSetARGB(SkColorGetA(color), SkToU8((U8CPU) scalar), 2540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkColorGetG(color), SkColorGetB(color)); 2550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 2560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(saturation): 2570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fSaturation = scalar;//RGB_to_HSV(color, kGetSaturation); 2580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty = true; 2590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 2600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project case SK_PROPERTY(value): 2610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fValue = scalar;//RGB_to_HSV(color, kGetValue); 2620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project fDirty = true; 2630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project break; 2640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project default: 2650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(0); 2660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return false; 2670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 2680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return true; 2690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 2700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 271