| 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 "include/core/SkTypes.h" | 
|---|
| 12 |  | 
|---|
| 13 | enum class SkBlendMode { | 
|---|
| 14 | kClear,                           //!< replaces destination with zero: fully transparent | 
|---|
| 15 | kSrc,                             //!< replaces destination | 
|---|
| 16 | kDst,                             //!< preserves destination | 
|---|
| 17 | kSrcOver,                         //!< source over destination | 
|---|
| 18 | kDstOver,                         //!< destination over source | 
|---|
| 19 | kSrcIn,                           //!< source trimmed inside destination | 
|---|
| 20 | kDstIn,                           //!< destination trimmed by source | 
|---|
| 21 | kSrcOut,                          //!< source trimmed outside destination | 
|---|
| 22 | kDstOut,                          //!< destination trimmed outside source | 
|---|
| 23 | kSrcATop,                         //!< source inside destination blended with destination | 
|---|
| 24 | kDstATop,                         //!< destination inside source blended with source | 
|---|
| 25 | kXor,                             //!< each of source and destination trimmed outside the other | 
|---|
| 26 | kPlus,                            //!< sum of colors | 
|---|
| 27 | kModulate,                        //!< product of premultiplied colors; darkens destination | 
|---|
| 28 | kScreen,                //!< multiply inverse of pixels, inverting result; brightens destination | 
|---|
| 29 | kLastCoeffMode     = kScreen,     //!< last porter duff blend mode | 
|---|
| 30 | kOverlay,                         //!< multiply or screen, depending on destination | 
|---|
| 31 | kDarken,                          //!< darker of source and destination | 
|---|
| 32 | kLighten,                         //!< lighter of source and destination | 
|---|
| 33 | kColorDodge,                      //!< brighten destination to reflect source | 
|---|
| 34 | kColorBurn,                       //!< darken destination to reflect source | 
|---|
| 35 | kHardLight,                       //!< multiply or screen, depending on source | 
|---|
| 36 | kSoftLight,                       //!< lighten or darken, depending on source | 
|---|
| 37 | kDifference,                      //!< subtract darker from lighter with higher contrast | 
|---|
| 38 | kExclusion,                       //!< subtract darker from lighter with lower contrast | 
|---|
| 39 | kMultiply,                        //!< multiply source with destination, darkening image | 
|---|
| 40 | kLastSeparableMode = kMultiply,   //!< last blend mode operating separately on components | 
|---|
| 41 | kHue,                           //!< hue of source with saturation and luminosity of destination | 
|---|
| 42 | kSaturation,                    //!< saturation of source with hue and luminosity of destination | 
|---|
| 43 | kColor,                         //!< hue and saturation of source with luminosity of destination | 
|---|
| 44 | kLuminosity,                    //!< luminosity of source with hue and saturation of destination | 
|---|
| 45 | kLastMode          = kLuminosity, //!< last valid value | 
|---|
| 46 | }; | 
|---|
| 47 |  | 
|---|
| 48 | /** | 
|---|
| 49 | * For Porter-Duff SkBlendModes (those <= kLastCoeffMode), these coefficients describe the blend | 
|---|
| 50 | * equation used. Coefficient-based blend modes specify an equation: | 
|---|
| 51 | * ('dstCoeff' * dst + 'srcCoeff' * src), where the coefficient values are constants, functions of | 
|---|
| 52 | * the src or dst alpha, or functions of the src or dst color. | 
|---|
| 53 | */ | 
|---|
| 54 | enum class SkBlendModeCoeff { | 
|---|
| 55 | kZero, /** 0 */ | 
|---|
| 56 | kOne,  /** 1 */ | 
|---|
| 57 | kSC,   /** src color */ | 
|---|
| 58 | kISC,  /** inverse src color (i.e. 1 - sc) */ | 
|---|
| 59 | kDC,   /** dst color */ | 
|---|
| 60 | kIDC,  /** inverse dst color (i.e. 1 - dc) */ | 
|---|
| 61 | kSA,   /** src alpha */ | 
|---|
| 62 | kISA,  /** inverse src alpha (i.e. 1 - sa) */ | 
|---|
| 63 | kDA,   /** dst alpha */ | 
|---|
| 64 | kIDA,  /** inverse dst alpha (i.e. 1 - da) */ | 
|---|
| 65 |  | 
|---|
| 66 | kCoeffCount | 
|---|
| 67 | }; | 
|---|
| 68 |  | 
|---|
| 69 | /** | 
|---|
| 70 | * Returns true if 'mode' is a coefficient-based blend mode (<= kLastCoeffMode). If true is | 
|---|
| 71 | * returned, the mode's src and dst coefficient functions are set in 'src' and 'dst'. | 
|---|
| 72 | */ | 
|---|
| 73 | SK_API bool SkBlendMode_AsCoeff(SkBlendMode mode, SkBlendModeCoeff* src, SkBlendModeCoeff* dst); | 
|---|
| 74 |  | 
|---|
| 75 |  | 
|---|
| 76 | /** Returns name of blendMode as null-terminated C string. | 
|---|
| 77 |  | 
|---|
| 78 | @return           C string | 
|---|
| 79 | */ | 
|---|
| 80 | SK_API const char* SkBlendMode_Name(SkBlendMode blendMode); | 
|---|
| 81 |  | 
|---|
| 82 | #endif | 
|---|
| 83 |  | 
|---|