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
13enum 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 */
54enum 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 */
73SK_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*/
80SK_API const char* SkBlendMode_Name(SkBlendMode blendMode);
81
82#endif
83