20 std::optional<Color> foreground_color) {
22 VALIDATION_LOG <<
"Invalid blend mode " <<
static_cast<int>(blend_mode)
23 <<
" passed to ColorFilterContents::MakeBlend.";
27 size_t total_inputs = inputs.size() + (foreground_color.has_value() ? 1 : 0);
29 auto blend = std::make_shared<BlendFilterContents>();
30 blend->SetInputs(inputs);
31 blend->SetBlendMode(blend_mode);
32 blend->SetForegroundColor(foreground_color);
36 auto blend_input = inputs[0];
37 std::shared_ptr<BlendFilterContents> new_blend;
38 for (
auto in_i = inputs.begin() + 1; in_i < inputs.end(); in_i++) {
39 new_blend = std::make_shared<BlendFilterContents>();
40 new_blend->SetInputs({blend_input, *in_i});
41 new_blend->SetBlendMode(blend_mode);
42 if (in_i < inputs.end() - 1 || foreground_color.has_value()) {
44 std::static_pointer_cast<FilterContents>(new_blend));
48 if (foreground_color.has_value()) {
49 new_blend = std::make_shared<BlendFilterContents>();
50 new_blend->SetInputs({blend_input});
51 new_blend->SetBlendMode(blend_mode);
52 new_blend->SetForegroundColor(foreground_color);
61 auto filter = std::make_shared<ColorMatrixFilterContents>();
62 filter->SetInputs({std::move(input)});
63 filter->SetMatrix(color_matrix);
67 std::shared_ptr<ColorFilterContents>
69 auto filter = std::make_shared<LinearToSrgbFilterContents>();
70 filter->SetInputs({std::move(input)});
74 std::shared_ptr<ColorFilterContents>
76 auto filter = std::make_shared<SrgbToLinearFilterContents>();
77 filter->SetInputs({std::move(input)});
86 absorb_opacity_ = absorb_opacity;
91 return absorb_opacity_;
99 return alpha_.value_or(1.0) * inherited_opacity_;
103 inherited_opacity_ = opacity;
107 const Matrix& effect_transform,
108 const Rect& output_limit)
const {
void SetInheritedOpacity(Scalar opacity) override
Inherit the provided opacity.
std::optional< Scalar > GetAlpha() const
static std::shared_ptr< ColorFilterContents > MakeColorMatrix(FilterInput::Ref input, const ColorMatrix &color_matrix)
static std::shared_ptr< ColorFilterContents > MakeSrgbToLinearFilter(FilterInput::Ref input)
void SetAbsorbOpacity(AbsorbOpacity absorb_opacity)
std::optional< Rect > GetFilterSourceCoverage(const Matrix &effect_transform, const Rect &output_limit) const override
Internal utility method for |GetSourceCoverage| that computes the inverse effect of this transform on...
AbsorbOpacity GetAbsorbOpacity() const
void SetAlpha(Scalar alpha)
Sets an alpha that is applied to the final blended result.
~ColorFilterContents() override
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.
static constexpr BlendMode kLastAdvancedBlendMode
static constexpr BlendMode kLastPipelineBlendMode
A 4x4 matrix using column-major storage.