Home | History | Annotate | Download | only in blink
      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