Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(281)

Unified Diff: Source/WebCore/platform/graphics/skia/SkiaUtils.cpp

Issue 13637006: Add canvas blending modes under a runtime flag (Closed) Base URL: http://src.chromium.org/blink/trunk/
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/WebCore/platform/graphics/skia/SkiaUtils.cpp
===================================================================
--- Source/WebCore/platform/graphics/skia/SkiaUtils.cpp (revision 147814)
+++ Source/WebCore/platform/graphics/skia/SkiaUtils.cpp (working copy)
@@ -60,8 +60,37 @@
{ CompositePlusLighter, SkXfermode::kPlus_Mode }
};
-SkXfermode::Mode WebCoreCompositeToSkiaComposite(CompositeOperator op)
+static const struct BlendOpToXfermodeMode {
+ uint8_t mBlendOp;
+ uint8_t m_xfermodeMode;
+} gMapBlendOpsToXfermodeModes[] = {
+ { BlendModeMultiply, SkXfermode::kMultiply_Mode },
+ { BlendModeScreen, SkXfermode::kScreen_Mode },
+ { BlendModeOverlay, SkXfermode::kOverlay_Mode },
+ { BlendModeDarken, SkXfermode::kDarken_Mode },
+ { BlendModeLighten, SkXfermode::kLighten_Mode },
+ { BlendModeColorDodge, SkXfermode::kColorDodge_Mode },
+ { BlendModeColorBurn, SkXfermode::kColorBurn_Mode },
+ { BlendModeHardLight, SkXfermode::kHardLight_Mode },
+ { BlendModeSoftLight, SkXfermode::kSoftLight_Mode },
+ { BlendModeDifference, SkXfermode::kDifference_Mode },
+ { BlendModeExclusion, SkXfermode::kExclusion_Mode },
+ { BlendModeHue, SkXfermode::kHue_Mode },
+ { BlendModeSaturation, SkXfermode::kSaturation_Mode },
+ { BlendModeColor, SkXfermode::kColor_Mode },
+ { BlendModeLuminosity, SkXfermode::kLuminosity_Mode }
+};
Stephen Chennney 2013/04/08 16:07:02 This should be implemented as an array. If the Ble
rosca 2013/04/08 19:53:25 I followed the example of CompositOpToXfermodeMode
+
+SkXfermode::Mode WebCoreCompositeToSkiaComposite(CompositeOperator op, BlendMode blendMode)
{
+ if (blendMode != BlendModeNormal) {
Stephen Chennney 2013/04/08 16:07:02 Is BlendModeNormal == 0? If so, suitably adjust my
+ const BlendOpToXfermodeMode* table = gMapBlendOpsToXfermodeModes;
+ for (unsigned i = 0; i < SK_ARRAY_COUNT(gMapBlendOpsToXfermodeModes); i++) {
+ if (table[i].mBlendOp == blendMode)
+ return (SkXfermode::Mode)table[i].m_xfermodeMode;
+ }
+ }
+
const CompositOpToXfermodeMode* table = gMapCompositOpsToXfermodeModes;
for (unsigned i = 0; i < SK_ARRAY_COUNT(gMapCompositOpsToXfermodeModes); i++) {

Powered by Google App Engine
This is Rietveld 408576698