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
13enum 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 */
56SK_API const char* SkBlendMode_Name(SkBlendMode);
57
58#endif
59