7 #include "display_list/effects/dl_color_filters.h"
8 #include "fml/logging.h"
17 const std::shared_ptr<FilterInput>& input,
20 filter->SetAbsorbOpacity(absorb_opacity);
25 const flutter::DlColorFilter* filter,
26 const std::shared_ptr<FilterInput>& input,
30 switch (filter->type()) {
31 case flutter::DlColorFilterType::kBlend: {
32 const flutter::DlBlendColorFilter* blend_filter = filter->asBlend();
33 FML_DCHECK(blend_filter);
36 static_cast<BlendMode>(blend_filter->mode()), {input},
38 filter->SetAbsorbOpacity(absorb_opacity);
41 case flutter::DlColorFilterType::kMatrix: {
42 const flutter::DlMatrixColorFilter* matrix_filter = filter->asMatrix();
43 FML_DCHECK(matrix_filter);
46 matrix_filter->get_matrix(color_matrix.
array);
48 filter->SetAbsorbOpacity(absorb_opacity);
51 case flutter::DlColorFilterType::kSrgbToLinearGamma: {
53 filter->SetAbsorbOpacity(absorb_opacity);
56 case flutter::DlColorFilterType::kLinearToSrgbGamma: {
58 filter->SetAbsorbOpacity(absorb_opacity);
69 switch (filter->type()) {
70 case flutter::DlColorFilterType::kBlend: {
71 const flutter::DlBlendColorFilter* blend_filter = filter->asBlend();
72 FML_DCHECK(blend_filter);
74 return [filter_blend_mode =
static_cast<BlendMode>(blend_filter->mode()),
77 return color.
Blend(filter_color, filter_blend_mode);
80 case flutter::DlColorFilterType::kMatrix: {
81 const flutter::DlMatrixColorFilter* matrix_filter = filter->asMatrix();
82 FML_DCHECK(matrix_filter);
85 matrix_filter->get_matrix(color_matrix.
array);
86 return [color_matrix = color_matrix](
Color color) {
87 return color.ApplyColorMatrix(color_matrix);
90 case flutter::DlColorFilterType::kSrgbToLinearGamma: {
91 return [](
Color color) {
return color.SRGBToLinear(); };
94 case flutter::DlColorFilterType::kLinearToSrgbGamma: {
95 return [](
Color color) {
return color.LinearToSRGB(); };
static std::shared_ptr< ColorFilterContents > MakeColorMatrix(FilterInput::Ref input, const ColorMatrix &color_matrix)
static std::shared_ptr< ColorFilterContents > MakeSrgbToLinearFilter(FilterInput::Ref input)
static std::shared_ptr< ColorFilterContents > MakeLinearToSrgbFilter(FilterInput::Ref input)
static std::shared_ptr< ColorFilterContents > MakeBlend(BlendMode blend_mode, FilterInput::Vector inputs, std::optional< Color > foreground_color=std::nullopt)
the [inputs] are expected to be in the order of dst, src.
Color ToColor(const flutter::DlColor &color)
std::shared_ptr< ColorFilterContents > WrapWithGPUColorFilter(const flutter::DlColorFilter *filter, const std::shared_ptr< FilterInput > &input, ColorFilterContents::AbsorbOpacity absorb_opacity)
std::shared_ptr< ColorFilterContents > WrapWithInvertColors(const std::shared_ptr< FilterInput > &input, ColorFilterContents::AbsorbOpacity absorb_opacity)
ColorFilterProc GetCPUColorFilterProc(const flutter::DlColorFilter *filter)
std::function< Color(Color)> ColorFilterProc
static constexpr const ColorMatrix kColorInversion
A color matrix which inverts colors.
Color Blend(Color source, BlendMode blend_mode) const
Blends an unpremultiplied destination color into a given unpremultiplied source color to form a new u...