Index: Source/platform/graphics/skia/SkiaUtils.cpp |
diff --git a/Source/platform/graphics/skia/SkiaUtils.cpp b/Source/platform/graphics/skia/SkiaUtils.cpp |
index ae21e4c6ea09b85dc237ca7fcc0da4fa728c213b..e5447e28418438ed192a2df2d851d13bab6d90c8 100644 |
--- a/Source/platform/graphics/skia/SkiaUtils.cpp |
+++ b/Source/platform/graphics/skia/SkiaUtils.cpp |
@@ -79,6 +79,7 @@ static const SkXfermode::Mode gMapBlendOpsToXfermodeModes[] = { |
SkXfermode::Mode WebCoreCompositeToSkiaComposite(CompositeOperator op, WebBlendMode blendMode) |
{ |
+ ASSERT(op == CompositeSourceOver || blendMode == WebBlendModeNormal); |
if (blendMode != WebBlendModeNormal) { |
if (static_cast<uint8_t>(blendMode) >= SK_ARRAY_COUNT(gMapBlendOpsToXfermodeModes)) { |
SkDEBUGF(("GraphicsContext::setPlatformCompositeOperation unknown WebBlendMode %d\n", blendMode)); |
@@ -96,6 +97,80 @@ SkXfermode::Mode WebCoreCompositeToSkiaComposite(CompositeOperator op, WebBlendM |
return table[static_cast<uint8_t>(op)].m_xfermodeMode; |
} |
+CompositeOperator compositeOperatorFromSkia(SkXfermode::Mode xferMode) |
+{ |
+ switch (xferMode) { |
+ case SkXfermode::kClear_Mode: |
+ return CompositeClear; |
+ case SkXfermode::kSrc_Mode: |
+ return CompositeCopy; |
+ case SkXfermode::kSrcOver_Mode: |
+ return CompositeSourceOver; |
+ case SkXfermode::kSrcIn_Mode: |
+ return CompositeSourceIn; |
+ case SkXfermode::kSrcOut_Mode: |
+ return CompositeSourceOut; |
+ case SkXfermode::kSrcATop_Mode: |
+ return CompositeSourceAtop; |
+ case SkXfermode::kDstOver_Mode: |
+ return CompositeDestinationOver; |
+ case SkXfermode::kDstIn_Mode: |
+ return CompositeDestinationIn; |
+ case SkXfermode::kDstOut_Mode: |
+ return CompositeDestinationOut; |
+ case SkXfermode::kDstATop_Mode: |
+ return CompositeDestinationAtop; |
+ case SkXfermode::kXor_Mode: |
+ return CompositeXOR; |
+ case SkXfermode::kPlus_Mode: |
+ return CompositePlusLighter; |
+ default: |
+ break; |
+ } |
+ return CompositeSourceOver; |
+} |
+ |
+WebBlendMode blendModeFromSkia(SkXfermode::Mode xferMode) |
+{ |
+ switch (xferMode) { |
+ case SkXfermode::kSrcOver_Mode: |
+ return WebBlendModeNormal; |
+ case SkXfermode::kMultiply_Mode: |
+ return WebBlendModeMultiply; |
+ case SkXfermode::kScreen_Mode: |
+ return WebBlendModeScreen; |
+ case SkXfermode::kOverlay_Mode: |
+ return WebBlendModeOverlay; |
+ case SkXfermode::kDarken_Mode: |
+ return WebBlendModeDarken; |
+ case SkXfermode::kLighten_Mode: |
+ return WebBlendModeLighten; |
+ case SkXfermode::kColorDodge_Mode: |
+ return WebBlendModeColorDodge; |
+ case SkXfermode::kColorBurn_Mode: |
+ return WebBlendModeColorBurn; |
+ case SkXfermode::kHardLight_Mode: |
+ return WebBlendModeHardLight; |
+ case SkXfermode::kSoftLight_Mode: |
+ return WebBlendModeSoftLight; |
+ case SkXfermode::kDifference_Mode: |
+ return WebBlendModeDifference; |
+ case SkXfermode::kExclusion_Mode: |
+ return WebBlendModeExclusion; |
+ case SkXfermode::kHue_Mode: |
+ return WebBlendModeHue; |
+ case SkXfermode::kSaturation_Mode: |
+ return WebBlendModeSaturation; |
+ case SkXfermode::kColor_Mode: |
+ return WebBlendModeColor; |
+ case SkXfermode::kLuminosity_Mode: |
+ return WebBlendModeLuminosity; |
+ default: |
+ break; |
+ } |
+ return WebBlendModeNormal; |
+} |
+ |
bool SkPathContainsPoint(const SkPath& originalPath, const FloatPoint& point, SkPath::FillType ft) |
{ |
SkRect bounds = originalPath.getBounds(); |