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++) { |