1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CC_BLINK_WEB_BLEND_MODE_H_ 6 #define CC_BLINK_WEB_BLEND_MODE_H_ 7 8 #include "third_party/WebKit/public/platform/WebBlendMode.h" 9 #include "third_party/skia/include/core/SkXfermode.h" 10 11 namespace cc_blink { 12 13 inline SkXfermode::Mode BlendModeToSkia(blink::WebBlendMode blend_mode) { 14 switch (blend_mode) { 15 case blink::WebBlendModeNormal: 16 return SkXfermode::kSrcOver_Mode; 17 case blink::WebBlendModeMultiply: 18 return SkXfermode::kMultiply_Mode; 19 case blink::WebBlendModeScreen: 20 return SkXfermode::kScreen_Mode; 21 case blink::WebBlendModeOverlay: 22 return SkXfermode::kOverlay_Mode; 23 case blink::WebBlendModeDarken: 24 return SkXfermode::kDarken_Mode; 25 case blink::WebBlendModeLighten: 26 return SkXfermode::kLighten_Mode; 27 case blink::WebBlendModeColorDodge: 28 return SkXfermode::kColorDodge_Mode; 29 case blink::WebBlendModeColorBurn: 30 return SkXfermode::kColorBurn_Mode; 31 case blink::WebBlendModeHardLight: 32 return SkXfermode::kHardLight_Mode; 33 case blink::WebBlendModeSoftLight: 34 return SkXfermode::kSoftLight_Mode; 35 case blink::WebBlendModeDifference: 36 return SkXfermode::kDifference_Mode; 37 case blink::WebBlendModeExclusion: 38 return SkXfermode::kExclusion_Mode; 39 case blink::WebBlendModeHue: 40 return SkXfermode::kHue_Mode; 41 case blink::WebBlendModeSaturation: 42 return SkXfermode::kSaturation_Mode; 43 case blink::WebBlendModeColor: 44 return SkXfermode::kColor_Mode; 45 case blink::WebBlendModeLuminosity: 46 return SkXfermode::kLuminosity_Mode; 47 } 48 return SkXfermode::kSrcOver_Mode; 49 } 50 51 inline blink::WebBlendMode BlendModeFromSkia(SkXfermode::Mode blend_mode) { 52 switch (blend_mode) { 53 case SkXfermode::kSrcOver_Mode: 54 return blink::WebBlendModeNormal; 55 case SkXfermode::kMultiply_Mode: 56 return blink::WebBlendModeMultiply; 57 case SkXfermode::kScreen_Mode: 58 return blink::WebBlendModeScreen; 59 case SkXfermode::kOverlay_Mode: 60 return blink::WebBlendModeOverlay; 61 case SkXfermode::kDarken_Mode: 62 return blink::WebBlendModeDarken; 63 case SkXfermode::kLighten_Mode: 64 return blink::WebBlendModeLighten; 65 case SkXfermode::kColorDodge_Mode: 66 return blink::WebBlendModeColorDodge; 67 case SkXfermode::kColorBurn_Mode: 68 return blink::WebBlendModeColorBurn; 69 case SkXfermode::kHardLight_Mode: 70 return blink::WebBlendModeHardLight; 71 case SkXfermode::kSoftLight_Mode: 72 return blink::WebBlendModeSoftLight; 73 case SkXfermode::kDifference_Mode: 74 return blink::WebBlendModeDifference; 75 case SkXfermode::kExclusion_Mode: 76 return blink::WebBlendModeExclusion; 77 case SkXfermode::kHue_Mode: 78 return blink::WebBlendModeHue; 79 case SkXfermode::kSaturation_Mode: 80 return blink::WebBlendModeSaturation; 81 case SkXfermode::kColor_Mode: 82 return blink::WebBlendModeColor; 83 case SkXfermode::kLuminosity_Mode: 84 return blink::WebBlendModeLuminosity; 85 86 // these value are SkXfermodes, but no blend modes. 87 case SkXfermode::kClear_Mode: 88 case SkXfermode::kSrc_Mode: 89 case SkXfermode::kDst_Mode: 90 case SkXfermode::kDstOver_Mode: 91 case SkXfermode::kSrcIn_Mode: 92 case SkXfermode::kDstIn_Mode: 93 case SkXfermode::kSrcOut_Mode: 94 case SkXfermode::kDstOut_Mode: 95 case SkXfermode::kSrcATop_Mode: 96 case SkXfermode::kDstATop_Mode: 97 case SkXfermode::kXor_Mode: 98 case SkXfermode::kPlus_Mode: 99 case SkXfermode::kModulate_Mode: 100 NOTREACHED(); 101 } 102 return blink::WebBlendModeNormal; 103 } 104 105 } // namespace cc_blink 106 107 #endif // CC_BLINK_WEB_BLEND_MODE_H_ 108