diff options
author | robertphillips <robertphillips@google.com> | 2016-01-25 14:19:56 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-25 14:19:56 -0800 |
commit | 64b0f5f95754c4d354d2e09cebf2a0c43d4cdd50 (patch) | |
tree | 3f27ef06dd3990e37159ddcaac9c4c32e007576f /src/effects | |
parent | 7a561230a22a3b312c47cc1e0a14b31965d751c8 (diff) |
Remove SkLerpXfermode
This relies on the Chromium CL https://codereview.chromium.org/1610573004/ (Replace use of SkLerpXfermode with SkArithmeticMode)
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1611633002
Review URL: https://codereview.chromium.org/1611633002
Diffstat (limited to 'src/effects')
-rw-r--r-- | src/effects/SkArithmeticMode.cpp | 12 | ||||
-rw-r--r-- | src/effects/SkLerpXfermode.cpp | 118 | ||||
-rw-r--r-- | src/effects/SkToFromValue.cpp | 10 |
3 files changed, 10 insertions, 130 deletions
diff --git a/src/effects/SkArithmeticMode.cpp b/src/effects/SkArithmeticMode.cpp index 9eb7dd2198..33783a52f8 100644 --- a/src/effects/SkArithmeticMode.cpp +++ b/src/effects/SkArithmeticMode.cpp @@ -21,8 +21,16 @@ static const bool gUseUnpremul = false; class SkArithmeticMode_scalar : public SkXfermode { public: - static SkArithmeticMode_scalar* Create(SkScalar k1, SkScalar k2, SkScalar k3, SkScalar k4, - bool enforcePMColor) { + static SkXfermode* Create(SkScalar k1, SkScalar k2, SkScalar k3, SkScalar k4, + bool enforcePMColor) { + if (SkScalarNearlyZero(k1) && SkScalarNearlyEqual(k2, SK_Scalar1) && + SkScalarNearlyZero(k3) && SkScalarNearlyZero(k4)) { + return SkXfermode::Create(SkXfermode::kSrc_Mode); + } else if (SkScalarNearlyZero(k1) && SkScalarNearlyZero(k2) && + SkScalarNearlyEqual(k3, SK_Scalar1) && SkScalarNearlyZero(k4)) { + return SkXfermode::Create(SkXfermode::kDst_Mode); + } + return new SkArithmeticMode_scalar(k1, k2, k3, k4, enforcePMColor); } diff --git a/src/effects/SkLerpXfermode.cpp b/src/effects/SkLerpXfermode.cpp deleted file mode 100644 index a069e8b367..0000000000 --- a/src/effects/SkLerpXfermode.cpp +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2013 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "SkLerpXfermode.h" -#include "SkColorPriv.h" -#include "SkReadBuffer.h" -#include "SkWriteBuffer.h" -#include "SkString.h" -#include "SkValue.h" -#include "SkValueKeys.h" - -SkXfermode* SkLerpXfermode::Create(SkScalar scale) { - int scale256 = SkScalarRoundToInt(scale * 256); - if (scale256 >= 256) { - return SkXfermode::Create(SkXfermode::kSrc_Mode); - } else if (scale256 <= 0) { - return SkXfermode::Create(SkXfermode::kDst_Mode); - } - return new SkLerpXfermode(scale256); -} - -SkLerpXfermode::SkLerpXfermode(unsigned scale256) : fScale256(scale256) {} - -void SkLerpXfermode::flatten(SkWriteBuffer& buffer) const { - buffer.writeUInt(fScale256); -} - -SkFlattenable* SkLerpXfermode::CreateProc(SkReadBuffer& buffer) { - return new SkLerpXfermode(buffer.readUInt()); -} - -void SkLerpXfermode::xfer32(SkPMColor dst[], const SkPMColor src[], int count, - const SkAlpha aa[]) const { - const int scale = fScale256; - - if (aa) { - for (int i = 0; i < count; ++i) { - unsigned a = aa[i]; - if (a) { - SkPMColor dstC = dst[i]; - SkPMColor resC = SkFastFourByteInterp256(src[i], dstC, scale); - if (a < 255) { - resC = SkFastFourByteInterp256(resC, dstC, a + (a >> 7)); - } - dst[i] = resC; - } - } - } else { - for (int i = 0; i < count; ++i) { - dst[i] = SkFastFourByteInterp256(src[i], dst[i], scale); - } - } -} - -void SkLerpXfermode::xfer16(uint16_t dst[], const SkPMColor src[], int count, - const SkAlpha aa[]) const { - const int scale = fScale256; - - if (aa) { - for (int i = 0; i < count; ++i) { - unsigned a = aa[i]; - if (a) { - SkPMColor dstC = SkPixel16ToPixel32(dst[i]); - SkPMColor resC = SkFastFourByteInterp256(src[i], dstC, scale); - if (a < 255) { - resC = SkFastFourByteInterp256(resC, dstC, a + (a >> 7)); - } - dst[i] = SkPixel32ToPixel16(resC); - } - } - } else { - for (int i = 0; i < count; ++i) { - SkPMColor dstC = SkPixel16ToPixel32(dst[i]); - SkPMColor resC = SkFastFourByteInterp256(src[i], dstC, scale); - dst[i] = SkPixel32ToPixel16(resC); - } - } -} - -void SkLerpXfermode::xferA8(SkAlpha dst[], const SkPMColor src[], int count, - const SkAlpha aa[]) const { - const int scale = fScale256; - - if (aa) { - for (int i = 0; i < count; ++i) { - unsigned a = aa[i]; - if (a) { - unsigned dstA = dst[i]; - unsigned resA = SkAlphaBlend(SkGetPackedA32(src[i]), dstA, scale); - if (a < 255) { - resA = SkAlphaBlend(resA, dstA, a + (a >> 7)); - } - dst[i] = resA; - } - } - } else { - for (int i = 0; i < count; ++i) { - dst[i] = SkAlphaBlend(SkGetPackedA32(src[i]), dst[i], scale); - } - } -} - -#ifndef SK_IGNORE_TO_STRING -void SkLerpXfermode::toString(SkString* str) const { - str->printf("SkLerpXfermode: scale: %g", fScale256 / 256.0); -} -#endif - -SkValue SkLerpXfermode::asValue() const { - auto value = SkValue::Object(SkValue::LerpXfermode); - value.set(SkValueKeys::LerpXfermode::kScale, - SkValue::FromF32(fScale256 / 256.0f)); - return value; -} diff --git a/src/effects/SkToFromValue.cpp b/src/effects/SkToFromValue.cpp index b981d1715e..cbb265b33f 100644 --- a/src/effects/SkToFromValue.cpp +++ b/src/effects/SkToFromValue.cpp @@ -6,7 +6,6 @@ */ #include "SkArithmeticMode.h" -#include "SkLerpXfermode.h" #include "SkMatrix.h" #include "SkPixelXorXfermode.h" #include "SkToFromValue.h" @@ -89,14 +88,6 @@ static bool from_value_ArithmeticXfermode(const SkValue& val, return true; } -static bool from_value_LerpXfermode(const SkValue& val, - SkAutoTUnref<SkXfermode>* dst) { - float scale; - REQUIRE(getT(val, SkValueKeys::LerpXfermode::kScale, &scale)); - dst->reset(SkLerpXfermode::Create(scale)); - return true; -} - static bool from_value_PixelXorXfermode(const SkValue& val, SkAutoTUnref<SkXfermode>* dst) { uint32_t opColor; @@ -118,7 +109,6 @@ template<> bool SkFromValue< SkAutoTUnref<SkXfermode> >( switch (val.type()) { case SkValue::DefaultXfermode: return from_value_DefaultXfermode(val, dst); case SkValue::ArithmeticXfermode: return from_value_ArithmeticXfermode(val, dst); - case SkValue::LerpXfermode: return from_value_LerpXfermode(val, dst); case SkValue::PixelXorXfermode: return from_value_PixelXorXfermode(val, dst); case SkValue::ProcCoeffXfermode: return from_value_ProcCoeffXfermode(val, dst); default: REQUIRE(false); |