remove unused xfermode methods
Bug: skia:
Change-Id: Ib0dfa7bbf3d4e73aab355df4d5f5e2a53f653809
Reviewed-on: https://skia-review.googlesource.com/19035
Reviewed-by: Mike Reed <reed@google.com>
diff --git a/src/core/SkBlitter_ARGB32.cpp b/src/core/SkBlitter_ARGB32.cpp
index aef1044..1507368 100644
--- a/src/core/SkBlitter_ARGB32.cpp
+++ b/src/core/SkBlitter_ARGB32.cpp
@@ -352,12 +352,9 @@
fShadeDirectlyIntoDevice = true;
}
} else {
- SkXfermode::Mode mode;
- if (fXfermode->asMode(&mode)) {
- if (SkXfermode::kSrc_Mode == mode) {
- fShadeDirectlyIntoDevice = true;
- fProc32Blend = blend_srcmode;
- }
+ if (SkBlendMode::kSrc == paint.getBlendMode()) {
+ fShadeDirectlyIntoDevice = true;
+ fProc32Blend = blend_srcmode;
}
}
diff --git a/src/core/SkModeColorFilter.cpp b/src/core/SkModeColorFilter.cpp
index f30b6a5..66dbe99 100644
--- a/src/core/SkModeColorFilter.cpp
+++ b/src/core/SkModeColorFilter.cpp
@@ -29,7 +29,7 @@
str->append("SkModeColorFilter: color: 0x");
str->appendHex(fColor);
str->append(" mode: ");
- str->append(SkXfermode::ModeName(fMode));
+ str->append(SkBlendMode_Name(fMode));
}
#endif
diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp
index 31f822f..02abe55 100644
--- a/src/core/SkXfermode.cpp
+++ b/src/core/SkXfermode.cpp
@@ -989,7 +989,7 @@
///////////////////////////////////////////////////////////////////////////////
-bool SkXfermode::asMode(Mode* mode) const {
+bool SkXfermode::asMode(SkBlendMode* mode) const {
return false;
}
@@ -1010,43 +1010,6 @@
}
#endif
-SkPMColor SkXfermode::xferColor(SkPMColor src, SkPMColor dst) const{
- // no-op. subclasses should override this
- return dst;
-}
-
-void SkXfermode::xfer32(SkPMColor* SK_RESTRICT dst,
- const SkPMColor* SK_RESTRICT src, int count,
- const SkAlpha* SK_RESTRICT aa) const {
- SkASSERT(dst && src && count >= 0);
-
- if (nullptr == aa) {
- for (int i = count - 1; i >= 0; --i) {
- dst[i] = this->xferColor(src[i], dst[i]);
- }
- } else {
- for (int i = count - 1; i >= 0; --i) {
- unsigned a = aa[i];
- if (0 != a) {
- SkPMColor dstC = dst[i];
- SkPMColor C = this->xferColor(src[i], dstC);
- if (0xFF != a) {
- C = SkFourByteInterp(C, dstC, a);
- }
- dst[i] = C;
- }
- }
- }
-}
-
-bool SkXfermode::supportsCoverageAsAlpha() const {
- return false;
-}
-
-bool SkXfermode::isOpaque(SkXfermode::SrcColorOpacity opacityType) const {
- return false;
-}
-
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
@@ -1055,28 +1018,20 @@
if (!buffer.validate(mode32 < SK_ARRAY_COUNT(gProcCoeffs))) {
return nullptr;
}
- return SkXfermode::Make((SkXfermode::Mode)mode32);
+ return SkXfermode::Make((SkBlendMode)mode32);
}
void SkProcCoeffXfermode::flatten(SkWriteBuffer& buffer) const {
buffer.write32((int)fMode);
}
-bool SkProcCoeffXfermode::asMode(Mode* mode) const {
+bool SkProcCoeffXfermode::asMode(SkBlendMode* mode) const {
if (mode) {
- *mode = (Mode)fMode;
+ *mode = fMode;
}
return true;
}
-bool SkProcCoeffXfermode::supportsCoverageAsAlpha() const {
- return SkBlendMode_SupportsCoverageAsAlpha(fMode);
-}
-
-bool SkProcCoeffXfermode::isOpaque(SkXfermode::SrcColorOpacity opacityType) const {
- return SkXfermode::IsOpaque(fMode, opacityType);
-}
-
void SkProcCoeffXfermode::xfer32(SkPMColor* SK_RESTRICT dst,
const SkPMColor* SK_RESTRICT src, int count,
const SkAlpha* SK_RESTRICT aa) const {
@@ -1124,8 +1079,8 @@
}
#endif
-const char* SkXfermode::ModeName(Mode mode) {
- SkASSERT((unsigned) mode <= (unsigned)kLastMode);
+const char* SkBlendMode_Name(SkBlendMode mode) {
+ SkASSERT((unsigned) mode <= (unsigned)SkBlendMode::kLastMode);
const char* gModeStrings[] = {
"Clear", "Src", "Dst", "SrcOver", "DstOver", "SrcIn", "DstIn",
"SrcOut", "DstOut", "SrcATop", "DstATop", "Xor", "Plus",
@@ -1133,12 +1088,8 @@
"ColorBurn", "HardLight", "SoftLight", "Difference", "Exclusion",
"Multiply", "Hue", "Saturation", "Color", "Luminosity"
};
- return gModeStrings[mode];
- static_assert(SK_ARRAY_COUNT(gModeStrings) == kLastMode + 1, "mode_count");
-}
-
-const char* SkBlendMode_Name(SkBlendMode mode) {
- return SkXfermode::ModeName((SkXfermode::Mode)mode);
+ return gModeStrings[(int)mode];
+ static_assert(SK_ARRAY_COUNT(gModeStrings) == (size_t)SkBlendMode::kLastMode + 1, "mode_count");
}
#ifndef SK_IGNORE_TO_STRING
@@ -1146,7 +1097,7 @@
str->append("SkProcCoeffXfermode: ");
str->append("mode: ");
- str->append(ModeName(fMode));
+ str->append(SkBlendMode_Name(fMode));
}
#endif
@@ -1182,7 +1133,7 @@
SkXfermodeProc SkXfermode::GetProc(SkBlendMode mode) {
SkXfermodeProc proc = nullptr;
- if ((unsigned)mode < kModeCount) {
+ if ((unsigned)mode <= (unsigned)SkBlendMode::kLastMode) {
proc = gProcCoeffs[(unsigned)mode].fProc;
}
return proc;
@@ -1190,49 +1141,12 @@
SkXfermodeProc4f SkXfermode::GetProc4f(SkBlendMode mode) {
SkXfermodeProc4f proc = nullptr;
- if ((unsigned)mode < kModeCount) {
+ if ((unsigned)mode <= (unsigned)SkBlendMode::kLastMode) {
proc = gProcCoeffs[(unsigned)mode].fProc4f;
}
return proc;
}
-bool SkXfermode::AsMode(const SkXfermode* xfer, Mode* mode) {
- if (nullptr == xfer) {
- if (mode) {
- *mode = kSrcOver_Mode;
- }
- return true;
- }
- return xfer->asMode(mode);
-}
-
-bool SkXfermode::IsMode(const SkXfermode* xfer, Mode mode) {
- // if xfer==null then the mode is srcover
- Mode m = kSrcOver_Mode;
- if (xfer && !xfer->asMode(&m)) {
- return false;
- }
- return mode == m;
-}
-
-bool SkXfermode::SupportsCoverageAsAlpha(const SkXfermode* xfer) {
- // if xfer is nullptr we treat it as srcOver which always supports coverageAsAlpha
- if (!xfer) {
- return true;
- }
-
- return xfer->supportsCoverageAsAlpha();
-}
-
-bool SkXfermode::IsOpaque(const SkXfermode* xfer, SrcColorOpacity opacityType) {
- // if xfer is nullptr we treat it as srcOver which is opaque if our src is opaque
- if (!xfer) {
- return SkXfermode::kOpaque_SrcColorOpacity == opacityType;
- }
-
- return xfer->isOpaque(opacityType);
-}
-
SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode)
SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode)
SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
diff --git a/src/core/SkXfermodePriv.h b/src/core/SkXfermodePriv.h
index f5cee5a..425dec2 100644
--- a/src/core/SkXfermodePriv.h
+++ b/src/core/SkXfermodePriv.h
@@ -37,99 +37,18 @@
class SK_API SkXfermode : public SkFlattenable {
public:
virtual void xfer32(SkPMColor dst[], const SkPMColor src[], int count,
- const SkAlpha aa[]) const;
-
- /** List of predefined xfermodes.
- The algebra for the modes uses the following symbols:
- Sa, Sc - source alpha and color
- Da, Dc - destination alpha and color (before compositing)
- [a, c] - Resulting (alpha, color) values
- For these equations, the colors are in premultiplied state.
- If no xfermode is specified, kSrcOver is assumed.
- */
- enum Mode {
- kClear_Mode, //!< [0, 0]
- kSrc_Mode, //!< [Sa, Sc]
- kDst_Mode, //!< [Da, Dc]
- kSrcOver_Mode, //!< [Sa + Da * (1 - Sa), Sc + Dc * (1 - Sa)]
- kDstOver_Mode, //!< [Da + Sa * (1 - Da), Dc + Sc * (1 - Da)]
- kSrcIn_Mode, //!< [Sa * Da, Sc * Da]
- kDstIn_Mode, //!< [Da * Sa, Dc * Sa]
- kSrcOut_Mode, //!< [Sa * (1 - Da), Sc * (1 - Da)]
- kDstOut_Mode, //!< [Da * (1 - Sa), Dc * (1 - Sa)]
- kSrcATop_Mode, //!< [Da, Sc * Da + Dc * (1 - Sa)]
- kDstATop_Mode, //!< [Sa, Dc * Sa + Sc * (1 - Da)]
- kXor_Mode, //!< [Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + Dc * (1 - Sa)]
- kPlus_Mode, //!< [Sa + Da, Sc + Dc]
- kModulate_Mode, // multiplies all components (= alpha and color)
-
- // Following blend modes are defined in the CSS Compositing standard:
- // https://dvcs.w3.org/hg/FXTF/rawfile/tip/compositing/index.html#blending
- kScreen_Mode,
- kLastCoeffMode = kScreen_Mode,
-
- kOverlay_Mode,
- kDarken_Mode,
- kLighten_Mode,
- kColorDodge_Mode,
- kColorBurn_Mode,
- kHardLight_Mode,
- kSoftLight_Mode,
- kDifference_Mode,
- kExclusion_Mode,
- kMultiply_Mode,
- kLastSeparableMode = kMultiply_Mode,
-
- kHue_Mode,
- kSaturation_Mode,
- kColor_Mode,
- kLuminosity_Mode,
- kLastMode = kLuminosity_Mode
- };
-
- /**
- * Gets the name of the Mode as a string.
- */
- static const char* ModeName(Mode);
- static const char* ModeName(SkBlendMode mode) {
- return ModeName(Mode(mode));
- }
+ const SkAlpha aa[]) const = 0;
/**
* If the xfermode is one of the modes in the Mode enum, then asMode()
* returns true and sets (if not null) mode accordingly. Otherwise it
* returns false and ignores the mode parameter.
*/
- virtual bool asMode(Mode* mode) const;
-
- /**
- * The same as calling xfermode->asMode(mode), except that this also checks
- * if the xfermode is NULL, and if so, treats it as kSrcOver_Mode.
- */
- static bool AsMode(const SkXfermode*, Mode* mode);
- static bool AsMode(const sk_sp<SkXfermode>& xfer, Mode* mode) {
- return AsMode(xfer.get(), mode);
- }
-
- /**
- * Returns true if the xfermode claims to be the specified Mode. This works
- * correctly even if the xfermode is NULL (which equates to kSrcOver.) Thus
- * you can say this without checking for a null...
- *
- * If (SkXfermode::IsMode(paint.getXfermode(),
- * SkXfermode::kDstOver_Mode)) {
- * ...
- * }
- */
- static bool IsMode(const SkXfermode* xfer, Mode mode);
- static bool IsMode(const sk_sp<SkXfermode>& xfer, Mode mode) {
- return IsMode(xfer.get(), mode);
- }
+ virtual bool asMode(SkBlendMode* mode) const;
/** Return an SkXfermode object for the specified mode.
*/
static sk_sp<SkXfermode> Make(SkBlendMode);
- static sk_sp<SkXfermode> Make(Mode m) { return Make((SkBlendMode)m); }
/**
* Skia maintains global xfermode objects corresponding to each BlendMode. This returns a
@@ -147,28 +66,14 @@
}
SkBlendMode blend() const {
- Mode mode;
+ SkBlendMode mode;
SkAssertResult(this->asMode(&mode));
- return (SkBlendMode)mode;
+ return mode;
}
static SkXfermodeProc GetProc(SkBlendMode);
static SkXfermodeProc4f GetProc4f(SkBlendMode);
- /**
- * Returns whether or not the xfer mode can support treating coverage as alpha
- */
- virtual bool supportsCoverageAsAlpha() const;
-
- /**
- * The same as calling xfermode->supportsCoverageAsAlpha(), except that this also checks if
- * the xfermode is NULL, and if so, treats it as kSrcOver_Mode.
- */
- static bool SupportsCoverageAsAlpha(const SkXfermode* xfer);
- static bool SupportsCoverageAsAlpha(const sk_sp<SkXfermode>& xfer) {
- return SupportsCoverageAsAlpha(xfer.get());
- }
-
enum SrcColorOpacity {
// The src color is known to be opaque (alpha == 255)
kOpaque_SrcColorOpacity = 0,
@@ -180,21 +85,6 @@
kUnknown_SrcColorOpacity = 3
};
- /**
- * Returns whether or not the result of the draw with the xfer mode will be opaque or not. The
- * input to this call is an enum describing known information about the opacity of the src color
- * that will be given to the xfer mode.
- */
- virtual bool isOpaque(SrcColorOpacity opacityType) const;
-
- /**
- * The same as calling xfermode->isOpaque(...), except that this also checks if
- * the xfermode is NULL, and if so, treats it as kSrcOver_Mode.
- */
- static bool IsOpaque(const SkXfermode* xfer, SrcColorOpacity opacityType);
- static bool IsOpaque(const sk_sp<SkXfermode>& xfer, SrcColorOpacity opacityType) {
- return IsOpaque(xfer.get(), opacityType);
- }
static bool IsOpaque(SkBlendMode, SrcColorOpacity);
#if SK_SUPPORT_GPU
@@ -249,20 +139,8 @@
protected:
SkXfermode() {}
- /** The default implementation of xfer32/xfer16/xferA8 in turn call this
- method, 1 color at a time (upscaled to a SkPMColor). The default
- implementation of this method just returns dst. If performance is
- important, your subclass should override xfer32/xfer16/xferA8 directly.
-
- This method will not be called directly by the client, so it need not
- be implemented if your subclass has overridden xfer32/xfer16/xferA8
- */
- virtual SkPMColor xferColor(SkPMColor src, SkPMColor dst) const;
private:
- enum {
- kModeCount = kLastMode + 1
- };
typedef SkFlattenable INHERITED;
};
diff --git a/src/core/SkXfermode_proccoeff.h b/src/core/SkXfermode_proccoeff.h
index 6704a82..fdc36c6 100644
--- a/src/core/SkXfermode_proccoeff.h
+++ b/src/core/SkXfermode_proccoeff.h
@@ -8,8 +8,7 @@
#ifndef SkXfermode_proccoeff_DEFINED
#define SkXfermode_proccoeff_DEFINED
-#include "SkReadBuffer.h"
-#include "SkWriteBuffer.h"
+#include "SkXfermodePriv.h"
struct ProcCoeff {
SkXfermodeProc fProc;
@@ -28,11 +27,7 @@
void xfer32(SkPMColor dst[], const SkPMColor src[], int count,
const SkAlpha aa[]) const override;
- bool asMode(Mode* mode) const override;
-
- bool supportsCoverageAsAlpha() const override;
-
- bool isOpaque(SkXfermode::SrcColorOpacity opacityType) const override;
+ bool asMode(SkBlendMode* mode) const override;
#if SK_SUPPORT_GPU
sk_sp<GrFragmentProcessor> makeFragmentProcessorForImageFilter(
diff --git a/src/effects/SkArithmeticMode.cpp b/src/effects/SkArithmeticMode.cpp
index d604a12..83b2100 100644
--- a/src/effects/SkArithmeticMode.cpp
+++ b/src/effects/SkArithmeticMode.cpp
@@ -71,10 +71,10 @@
bool enforcePMColor) {
if (SkScalarNearlyZero(k1) && SkScalarNearlyEqual(k2, SK_Scalar1) &&
SkScalarNearlyZero(k3) && SkScalarNearlyZero(k4)) {
- return SkXfermode::Make(SkXfermode::kSrc_Mode);
+ return SkXfermode::Make(SkBlendMode::kSrc);
} else if (SkScalarNearlyZero(k1) && SkScalarNearlyZero(k2) &&
SkScalarNearlyEqual(k3, SK_Scalar1) && SkScalarNearlyZero(k4)) {
- return SkXfermode::Make(SkXfermode::kDst_Mode);
+ return SkXfermode::Make(SkBlendMode::kDst);
}
return sk_make_sp<SkArithmeticMode_scalar>(k1, k2, k3, k4, enforcePMColor);
}
diff --git a/src/gpu/effects/GrXfermodeFragmentProcessor.cpp b/src/gpu/effects/GrXfermodeFragmentProcessor.cpp
index aa1c1c7..8779c55 100644
--- a/src/gpu/effects/GrXfermodeFragmentProcessor.cpp
+++ b/src/gpu/effects/GrXfermodeFragmentProcessor.cpp
@@ -211,7 +211,7 @@
// emit blend code
SkBlendMode mode = cs.getMode();
- fragBuilder->codeAppendf("// Compose Xfer Mode: %s\n", SkXfermode::ModeName(mode));
+ fragBuilder->codeAppendf("// Compose Xfer Mode: %s\n", SkBlendMode_Name(mode));
GrGLSLBlend::AppendMode(fragBuilder,
srcColor.c_str(),
dstColor.c_str(),
@@ -426,7 +426,7 @@
}
// emit blend code
- fragBuilder->codeAppendf("// Compose Xfer Mode: %s\n", SkXfermode::ModeName(mode));
+ fragBuilder->codeAppendf("// Compose Xfer Mode: %s\n", SkBlendMode_Name(mode));
const char* childStr = childColor.c_str();
if (ComposeOneFragmentProcessor::kDst_Child == child) {
GrGLSLBlend::AppendMode(fragBuilder, inputColor, childStr, args.fOutputColor, mode);
diff --git a/src/shaders/SkComposeShader.cpp b/src/shaders/SkComposeShader.cpp
index 4455f49..135f91d 100644
--- a/src/shaders/SkComposeShader.cpp
+++ b/src/shaders/SkComposeShader.cpp
@@ -150,7 +150,7 @@
str->append(" ShaderB: ");
as_SB(fShaderB)->toString(str);
if (SkBlendMode::kSrcOver != fMode) {
- str->appendf(" Xfermode: %s", SkXfermode::ModeName(fMode));
+ str->appendf(" Xfermode: %s", SkBlendMode_Name(fMode));
}
this->INHERITED::toString(str);