diff options
author | 2014-05-16 13:49:08 +0000 | |
---|---|---|
committer | 2014-05-16 13:49:08 +0000 | |
commit | e2b193ca5c76f01f8e12b4a92e9bd6ccb3ed4280 (patch) | |
tree | 6fdc1c9c9bbfb0b7be6854a9e6993df145c31792 /src/animator | |
parent | dbe0cd13a0e1f437b81f1a63055da6e0fc3b0673 (diff) |
Revert of remove unused (by clients) SkUnitMapper (https://codereview.chromium.org/283273002/)
Reason for revert:
does not address all legacy callsites in chrome.
e.g.
[13:45:32.091872] ../../ui/native_theme/native_theme_base.cc:608:76: error: no matching function for call to ‘SkGradientShader::CreateLinear(SkPoint [3], SkColor [3], NULL, int, SkShader::TileMode, NULL)’
[13:45:32.091919] gradient_bounds, colors, NULL, 3, SkShader::kClamp_TileMode, NULL));
Original issue's description:
> remove unused (by clients) SkUnitMapper
>
> BUG=skia:
>
> Committed: http://code.google.com/p/skia/source/detail?r=14761
R=robertphillips@google.com, scroggo@google.com, george@mozilla.com
TBR=george@mozilla.com, robertphillips@google.com, scroggo@google.com
NOTREECHECKS=true
NOTRY=true
BUG=skia:
Author: reed@google.com
Review URL: https://codereview.chromium.org/287063009
git-svn-id: http://skia.googlecode.com/svn/trunk@14763 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/animator')
-rw-r--r-- | src/animator/SkDrawGradient.cpp | 52 | ||||
-rw-r--r-- | src/animator/SkDrawGradient.h | 3 |
2 files changed, 52 insertions, 3 deletions
diff --git a/src/animator/SkDrawGradient.cpp b/src/animator/SkDrawGradient.cpp index 70e5e4493e..c11559581b 100644 --- a/src/animator/SkDrawGradient.cpp +++ b/src/animator/SkDrawGradient.cpp @@ -11,6 +11,49 @@ #include "SkAnimateMaker.h" #include "SkAnimatorScript.h" #include "SkGradientShader.h" +#include "SkUnitMapper.h" + +static SkScalar SkUnitToScalar(U16CPU x) { + return x / 65535.0f; +} + +static U16CPU SkScalarToUnit(SkScalar x) { + SkScalar pin = SkScalarPin(x, 0, SK_Scalar1); + return (int) (pin * 65535.0f); +} + +class SkDrawGradientUnitMapper : public SkUnitMapper { +public: + SkDrawGradientUnitMapper(SkAnimateMaker* maker, const char* script) : fMaker(maker), fScript(script) { + } + + SK_DECLARE_UNFLATTENABLE_OBJECT() + +protected: + virtual uint16_t mapUnit16(uint16_t x) { + fUnit = SkUnitToScalar(x); + SkScriptValue value; + SkAnimatorScript engine(*fMaker, NULL, SkType_Float); + engine.propertyCallBack(GetUnitValue, &fUnit); + if (engine.evaluate(fScript, &value, SkType_Float)) + x = SkScalarToUnit(value.fOperand.fScalar); + return x; + } + + static bool GetUnitValue(const char* token, size_t len, void* unitPtr, SkScriptValue* value) { + if (SK_LITERAL_STR_EQUAL("unit", token, len)) { + value->fOperand.fScalar = *(SkScalar*) unitPtr; + value->fType = SkType_Float; + return true; + } + return false; + } + + SkAnimateMaker* fMaker; + const char* fScript; + SkScalar fUnit; +}; + #if SK_USE_CONDENSED_INFO == 0 @@ -24,12 +67,13 @@ const SkMemberInfo SkDrawGradient::fInfo[] = { DEFINE_GET_MEMBER(SkDrawGradient); -SkDrawGradient::SkDrawGradient() { +SkDrawGradient::SkDrawGradient() : fUnitMapper(NULL) { } SkDrawGradient::~SkDrawGradient() { for (int index = 0; index < fDrawColors.count(); index++) delete fDrawColors[index]; + delete fUnitMapper; } bool SkDrawGradient::addChild(SkAnimateMaker& , SkDisplayable* child) { @@ -94,6 +138,8 @@ void SkDrawGradient::onEndElement(SkAnimateMaker& maker) { } } } + if (unitMapper.size() > 0) + fUnitMapper = new SkDrawGradientUnitMapper(&maker, unitMapper.c_str()); INHERITED::onEndElement(maker); } @@ -130,7 +176,7 @@ SkShader* SkDrawLinearGradient::getShader() { return NULL; SkShader* shader = SkGradientShader::CreateLinear((SkPoint*)points.begin(), fColors.begin(), offsets.begin(), fColors.count(), (SkShader::TileMode) tileMode, - 0, getMatrix()); + fUnitMapper, 0, getMatrix()); SkAutoTDelete<SkShader> autoDel(shader); (void)autoDel.detach(); return shader; @@ -165,7 +211,7 @@ SkShader* SkDrawRadialGradient::getShader() { return NULL; SkShader* shader = SkGradientShader::CreateRadial(center, radius, fColors.begin(), offsets.begin(), fColors.count(), (SkShader::TileMode) tileMode, - 0, getMatrix()); + fUnitMapper, 0, getMatrix()); SkAutoTDelete<SkShader> autoDel(shader); (void)autoDel.detach(); return shader; diff --git a/src/animator/SkDrawGradient.h b/src/animator/SkDrawGradient.h index fa46a9e629..ff79e3fb91 100644 --- a/src/animator/SkDrawGradient.h +++ b/src/animator/SkDrawGradient.h @@ -14,6 +14,8 @@ #include "SkDrawShader.h" #include "SkIntArray.h" +class SkUnitMapper; + class SkDrawGradient : public SkDrawShader { DECLARE_PRIVATE_MEMBER_INFO(DrawGradient); SkDrawGradient(); @@ -28,6 +30,7 @@ protected: SkString unitMapper; SkTDColorArray fColors; SkTDDrawColorArray fDrawColors; + SkUnitMapper* fUnitMapper; int addPrelude(); private: typedef SkDrawShader INHERITED; |