Flutter Engine
The Flutter Engine
Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
impeller::Paint Struct Reference

#include <paint.h>

Classes

struct  MaskBlurDescriptor
 

Public Types

enum class  Style { kFill , kStroke }
 
using ImageFilterProc = std::function< std::shared_ptr< FilterContents >(FilterInput::Ref, const Matrix &effect_transform, Entity::RenderingMode rendering_mode)>
 
using MaskFilterProc = std::function< std::shared_ptr< FilterContents >(FilterInput::Ref, bool is_solid_color, const Matrix &effect_transform)>
 
using ColorSourceProc = std::function< std::shared_ptr< ColorSourceContents >()>
 

Public Member Functions

std::shared_ptr< ColorFilterGetColorFilter () const
 
std::shared_ptr< ContentsWithFilters (std::shared_ptr< Contents > input) const
 Wrap this paint's configured filters to the given contents. More...
 
std::shared_ptr< ContentsWithFiltersForSubpassTarget (std::shared_ptr< Contents > input, const Matrix &effect_transform=Matrix()) const
 Wrap this paint's configured filters to the given contents of subpass target. More...
 
std::shared_ptr< ContentsCreateContentsForGeometry (const std::shared_ptr< Geometry > &geometry) const
 
bool HasColorFilter () const
 Whether this paint has a color filter that can apply opacity. More...
 
std::shared_ptr< ContentsWithMaskBlur (std::shared_ptr< Contents > input, bool is_solid_color, const Matrix &ctm) const
 
std::shared_ptr< FilterContentsWithImageFilter (const FilterInput::Variant &input, const Matrix &effect_transform, Entity::RenderingMode rendering_mode) const
 

Static Public Member Functions

static bool CanApplyOpacityPeephole (const Paint &paint)
 Whether or not a save layer with the provided paint can perform the opacity peephole optimization. More...
 

Public Attributes

Color color = Color::Black()
 
ColorSource color_source
 
Scalar stroke_width = 0.0
 
Cap stroke_cap = Cap::kButt
 
Join stroke_join = Join::kMiter
 
Scalar stroke_miter = 4.0
 
Style style = Style::kFill
 
BlendMode blend_mode = BlendMode::kSourceOver
 
bool invert_colors = false
 
std::shared_ptr< ImageFilterimage_filter
 
std::shared_ptr< ColorFiltercolor_filter
 
std::optional< MaskBlurDescriptormask_blur_descriptor
 

Detailed Description

Definition at line 23 of file paint.h.

Member Typedef Documentation

◆ ColorSourceProc

Definition at line 32 of file paint.h.

◆ ImageFilterProc

using impeller::Paint::ImageFilterProc = std::function<std::shared_ptr<FilterContents>( FilterInput::Ref, const Matrix& effect_transform, Entity::RenderingMode rendering_mode)>

Definition at line 24 of file paint.h.

◆ MaskFilterProc

using impeller::Paint::MaskFilterProc = std::function<std::shared_ptr<FilterContents>( FilterInput::Ref, bool is_solid_color, const Matrix& effect_transform)>

Definition at line 28 of file paint.h.

Member Enumeration Documentation

◆ Style

enum class impeller::Paint::Style
strong
Enumerator
kFill 
kStroke 

Definition at line 43 of file paint.h.

43 {
44 kFill,
45 kStroke,
46 };
@ kStroke
strokes boundary of shapes
@ kFill
fills interior of shapes

Member Function Documentation

◆ CanApplyOpacityPeephole()

static bool impeller::Paint::CanApplyOpacityPeephole ( const Paint paint)
inlinestatic

Whether or not a save layer with the provided paint can perform the opacity peephole optimization.

Definition at line 36 of file paint.h.

36 {
37 return paint.blend_mode == BlendMode::kSourceOver &&
38 paint.invert_colors == false &&
39 !paint.mask_blur_descriptor.has_value() &&
40 paint.image_filter == nullptr && paint.color_filter == nullptr;
41 }
const Paint & paint
Definition: color_source.cc:38

◆ CreateContentsForGeometry()

std::shared_ptr< Contents > Paint::CreateContentsForGeometry ( const std::shared_ptr< Geometry > &  geometry) const

Definition at line 30 of file paint.cc.

31 {
32 auto contents = color_source.GetContents(*this);
33
34 // Attempt to apply the color filter on the CPU first.
35 // Note: This is not just an optimization; some color sources rely on
36 // CPU-applied color filters to behave properly.
38 bool needs_color_filter = !!color_filter;
39 if (color_filter &&
40 contents->ApplyColorFilter(color_filter->GetCPUColorFilterProc())) {
41 needs_color_filter = false;
42 }
43
44 contents->SetGeometry(geometry);
45 if (mask_blur_descriptor.has_value()) {
46 // If there's a mask blur and we need to apply the color filter on the GPU,
47 // we need to be careful to only apply the color filter to the source
48 // colors. CreateMaskBlur is able to handle this case.
49 return mask_blur_descriptor->CreateMaskBlur(
50 contents, needs_color_filter ? color_filter : nullptr);
51 }
52
53 return contents;
54}
std::shared_ptr< ColorSourceContents > GetContents(const Paint &paint) const
ColorSource color_source
Definition: paint.h:69
std::shared_ptr< ColorFilter > GetColorFilter() const
Definition: paint.cc:222
std::optional< MaskBlurDescriptor > mask_blur_descriptor
Definition: paint.h:81
std::shared_ptr< ColorFilter > color_filter
Definition: paint.h:80

◆ GetColorFilter()

std::shared_ptr< ColorFilter > Paint::GetColorFilter ( ) const

Definition at line 222 of file paint.cc.

222 {
226 }
227 if (invert_colors) {
229 }
230 if (color_filter) {
231 return color_filter;
232 }
233 return nullptr;
234}
static std::shared_ptr< ColorFilter > MakeComposed(const std::shared_ptr< ColorFilter > &outer, const std::shared_ptr< ColorFilter > &inner)
Definition: color_filter.cc:40
static std::shared_ptr< ColorFilter > MakeMatrix(ColorMatrix color_matrix)
Definition: color_filter.cc:28
constexpr ColorMatrix kColorInversion
A color matrix which inverts colors.
Definition: paint.cc:20
bool invert_colors
Definition: paint.h:77

◆ HasColorFilter()

bool Paint::HasColorFilter ( ) const

Whether this paint has a color filter that can apply opacity.

Definition at line 236 of file paint.cc.

236 {
237 return !!color_filter || invert_colors;
238}

◆ WithFilters()

std::shared_ptr< Contents > Paint::WithFilters ( std::shared_ptr< Contents input) const

Wrap this paint's configured filters to the given contents.

Parameters
[in]inputThe contents to wrap with paint's filters.
Returns
The filter-wrapped contents. If there are no filters that need to be wrapped for the current paint configuration, the original contents is returned.

Definition at line 56 of file paint.cc.

57 {
58 input = WithColorFilter(input, ColorFilterContents::AbsorbOpacity::kYes);
59 auto image_filter =
61 if (image_filter) {
62 input = image_filter;
63 }
64 return input;
65}
SK_API sk_sp< PrecompileColorFilter > Matrix()
std::shared_ptr< ImageFilter > image_filter
Definition: paint.h:79
std::shared_ptr< FilterContents > WithImageFilter(const FilterInput::Variant &input, const Matrix &effect_transform, Entity::RenderingMode rendering_mode) const
Definition: paint.cc:90

◆ WithFiltersForSubpassTarget()

std::shared_ptr< Contents > Paint::WithFiltersForSubpassTarget ( std::shared_ptr< Contents input,
const Matrix effect_transform = Matrix() 
) const

Wrap this paint's configured filters to the given contents of subpass target.

Parameters
[in]inputThe contents of subpass target to wrap with paint's filters.
Returns
The filter-wrapped contents. If there are no filters that need to be wrapped for the current paint configuration, the original contents is returned.

Definition at line 67 of file paint.cc.

69 {
70 auto image_filter =
71 WithImageFilter(input, effect_transform,
73 if (image_filter) {
74 input = image_filter;
75 }
76 input = WithColorFilter(input, ColorFilterContents::AbsorbOpacity::kYes);
77 return input;
78}

◆ WithImageFilter()

std::shared_ptr< FilterContents > Paint::WithImageFilter ( const FilterInput::Variant input,
const Matrix effect_transform,
Entity::RenderingMode  rendering_mode 
) const

Definition at line 90 of file paint.cc.

93 {
94 if (!image_filter) {
95 return nullptr;
96 }
97 auto filter = image_filter->WrapInput(FilterInput::Make(input));
98 filter->SetRenderingMode(rendering_mode);
99 filter->SetEffectTransform(effect_transform);
100 return filter;
101}
static FilterInput::Ref Make(Variant input, bool msaa_enabled=true)
Definition: filter_input.cc:19

◆ WithMaskBlur()

std::shared_ptr< Contents > Paint::WithMaskBlur ( std::shared_ptr< Contents input,
bool  is_solid_color,
const Matrix ctm 
) const

Definition at line 80 of file paint.cc.

82 {
83 if (mask_blur_descriptor.has_value()) {
84 input = mask_blur_descriptor->CreateMaskBlur(FilterInput::Make(input),
85 is_solid_color, ctm);
86 }
87 return input;
88}

Member Data Documentation

◆ blend_mode

BlendMode impeller::Paint::blend_mode = BlendMode::kSourceOver

Definition at line 76 of file paint.h.

◆ color

Color impeller::Paint::color = Color::Black()

Definition at line 68 of file paint.h.

◆ color_filter

std::shared_ptr<ColorFilter> impeller::Paint::color_filter

Definition at line 80 of file paint.h.

◆ color_source

ColorSource impeller::Paint::color_source

Definition at line 69 of file paint.h.

◆ image_filter

std::shared_ptr<ImageFilter> impeller::Paint::image_filter

Definition at line 79 of file paint.h.

◆ invert_colors

bool impeller::Paint::invert_colors = false

Definition at line 77 of file paint.h.

◆ mask_blur_descriptor

std::optional<MaskBlurDescriptor> impeller::Paint::mask_blur_descriptor

Definition at line 81 of file paint.h.

◆ stroke_cap

Cap impeller::Paint::stroke_cap = Cap::kButt

Definition at line 72 of file paint.h.

◆ stroke_join

Join impeller::Paint::stroke_join = Join::kMiter

Definition at line 73 of file paint.h.

◆ stroke_miter

Scalar impeller::Paint::stroke_miter = 4.0

Definition at line 74 of file paint.h.

◆ stroke_width

Scalar impeller::Paint::stroke_width = 0.0

Definition at line 71 of file paint.h.

◆ style

Style impeller::Paint::style = Style::kFill

Definition at line 75 of file paint.h.


The documentation for this struct was generated from the following files: