 |
Flutter Impeller
|
|
Go to the documentation of this file.
11 #include <type_traits>
20 #define _IMPELLER_ASSERT_BLEND_MODE(blend_mode) \
21 auto enum_##blend_mode = static_cast<std::underlying_type_t<BlendMode>>( \
22 BlendMode::k##blend_mode); \
23 if (i != enum_##blend_mode) { \
29 std::underlying_type_t<BlendMode> i = 0;
40 "IMPELLER_FOR_EACH_BLEND_MODE must match impeller::BlendMode.");
42 #define _IMPELLER_BLEND_MODE_NAME_LIST(blend_mode) #blend_mode,
73 f = (R == x) ? G - B : ((G == x) ? B - R : R - G);
74 i = (R == x) ? 3 : ((G == x) ? 5 : 1);
76 return ColorHSB(((i - f / (v - x)) / 6.0), (v - x) / v, v, rgb.
alpha);
98 i =
static_cast<int64_t
>(floor(h));
130 : red(value.x), green(value.y), blue(value.z), alpha(value.w) {}
133 return Color(std::min(c.
red, threshold), std::min(c.
green, threshold),
134 std::min(c.
blue, threshold), std::min(c.
alpha, threshold));
175 return (mn < mx) ? ((
color - mn) * saturation) / (mx - mn) :
Vector3();
183 value.
y > cutoff ?
b.y : a.
y,
184 value.
z > cutoff ?
b.z : a.
z
213 return src + dst * (1.0f - src.
alpha);
237 switch (blend_mode) {
287 return s + d - s * d;
293 Vector3 screen_src = 2.0 * d - 1.0;
294 Vector3 screen = screen_src + s - screen_src * s;
314 return std::min(1.0f, d / (1.0f - s));
324 return 1.0f - std::min(1.0f, (1.0f - d) / s);
328 Vector3 screen_src = 2.0 * s - 1.0;
329 Vector3 screen = screen_src + d - screen_src * d;
343 d + (2.0 * s - 1.0) * (D - d),
349 return (d - s).Abs();
353 return d + s - 2.0f * d * s;
379 auto* c = color_matrix.
array;
389 static auto conversion = [](
Scalar component) {
390 if (component <= 0.0031308) {
391 return component * 12.92;
393 return 1.055 * pow(component, (1.0 / 2.4)) - 0.055;
400 static auto conversion = [](
Scalar component) {
401 if (component <= 0.04045) {
402 return component / 12.92;
404 return pow((component + 0.055) / 1.055, 2.4);
411 return SPrintF(
"R=%.1f,G=%.1f,B=%.1f,A=%.1f",
const char * BlendModeToString(BlendMode blend_mode)
static constexpr Color ApplyBlendedColor(Color dst, Color src, Vector3 blend_result)
std::string ColorToString(const Color &color)
static constexpr Vector3 ComponentChoose(Vector3 a, Vector3 b, Vector3 value, Scalar cutoff)
constexpr Color Unpremultiply() const
constexpr float kEhCloseEnough
static constexpr bool ValidateBlendModes()
static constexpr Color DoColorBlendComponents(Color dst, Color src, const std::function< Scalar(Scalar, Scalar)> &blend_func)
static constexpr Color Min(Color c, float threshold)
static constexpr Color DoColorBlend(Color dst, Color src, const std::function< Vector3(Vector3, Vector3)> &blend_rgb_func)
std::string SPrintF(const char *format,...)
Color SRGBToLinear() const
Convert the color from sRGB space to linear space.
static constexpr Vector3 SetSaturation(Vector3 color, Scalar saturation)
static constexpr Vector3 SetLuminosity(Vector3 color, Scalar luminosity)
static constexpr Scalar Luminosity(Vector3 color)
static ColorHSB FromRGB(Color rgb)
#define IMPELLER_FOR_EACH_BLEND_MODE(V)
#define _IMPELLER_ASSERT_BLEND_MODE(blend_mode)
static constexpr Vector3 ClipColor(Vector3 color)
constexpr ColorHSB(Scalar h, Scalar s, Scalar b, Scalar a)
static constexpr Color BlackTransparent()
constexpr Vector3 Min(const Vector3 &p) const
static constexpr Color FromRGB(Vector3 color, Scalar alpha)
static constexpr const char * kBlendModeNames[]
Color ApplyColorMatrix(const ColorMatrix &color_matrix) const
A color filter that transforms colors through a 4x5 color matrix.
Color LinearToSRGB() const
Convert the color from linear space to sRGB space.
constexpr Color Premultiply() const
static constexpr Scalar Saturation(Vector3 color)
constexpr Vector3 Max(const Vector3 &p) const
static constexpr Vector3 ToRGB(Color color)
#define _IMPELLER_BLEND_MODE_NAME_LIST(blend_mode)
Color Blend(Color source, BlendMode blend_mode) const
Blends an unpremultiplied destination color into a given unpremultiplied source color to form a new u...