1 /*
2  * Copyright 2016 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef SkBlendMode_DEFINED
9 #define SkBlendMode_DEFINED
10 
11 #include "SkTypes.h"
12 
13 enum class SkBlendMode {
14     kClear,    //!< [0, 0]
15     kSrc,      //!< [Sa, Sc]
16     kDst,      //!< [Da, Dc]
17     kSrcOver,  //!< [Sa + Da * (1 - Sa), Sc + Dc * (1 - Sa)]
18     kDstOver,  //!< [Da + Sa * (1 - Da), Dc + Sc * (1 - Da)]
19     kSrcIn,    //!< [Sa * Da, Sc * Da]
20     kDstIn,    //!< [Da * Sa, Dc * Sa]
21     kSrcOut,   //!< [Sa * (1 - Da), Sc * (1 - Da)]
22     kDstOut,   //!< [Da * (1 - Sa), Dc * (1 - Sa)]
23     kSrcATop,  //!< [Da, Sc * Da + Dc * (1 - Sa)]
24     kDstATop,  //!< [Sa, Dc * Sa + Sc * (1 - Da)]
25     kXor,      //!< [Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + Dc * (1 - Sa)]
26     kPlus,     //!< [Sa + Da, Sc + Dc]
27     kModulate, // multiplies all components (= alpha and color)
28 
29     // Following blend modes are defined in the CSS Compositing standard:
30     // https://dvcs.w3.org/hg/FXTF/rawfile/tip/compositing/index.html#blending
31     kScreen,
32     kLastCoeffMode = kScreen,
33 
34     kOverlay,
35     kDarken,
36     kLighten,
37     kColorDodge,
38     kColorBurn,
39     kHardLight,
40     kSoftLight,
41     kDifference,
42     kExclusion,
43     kMultiply,
44     kLastSeparableMode = kMultiply,
45 
46     kHue,
47     kSaturation,
48     kColor,
49     kLuminosity,
50     kLastMode = kLuminosity
51 };
52 
53 /**
54  *  Return the (c-string) name of the blendmode.
55  */
56 SK_API const char* SkBlendMode_Name(SkBlendMode);
57 
58 #endif
59