Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Classes | Public Types | 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.
 
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.
 
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.
 
std::shared_ptr< ContentsWithMaskBlur (std::shared_ptr< Contents > input, bool is_solid_color) const
 
std::shared_ptr< FilterContentsWithImageFilter (const FilterInput::Variant &input, const Matrix &effect_transform, Entity::RenderingMode rendering_mode) const
 

Public Attributes

Color color = Color::Black()
 
ColorSource color_source
 
bool dither = false
 
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

using impeller::Paint::ColorSourceProc = std::function<std::shared_ptr<ColorSourceContents>()>

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 34 of file paint.h.

Member Function Documentation

◆ 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:56
std::shared_ptr< ColorFilter > GetColorFilter() const
Definition paint.cc:213
std::optional< MaskBlurDescriptor > mask_blur_descriptor
Definition paint.h:69
std::shared_ptr< ColorFilter > color_filter
Definition paint.h:68

◆ GetColorFilter()

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

Definition at line 213 of file paint.cc.

213 {
217 }
218 if (invert_colors) {
220 }
221 if (color_filter) {
222 return color_filter;
223 }
224 return nullptr;
225}
static std::shared_ptr< ColorFilter > MakeComposed(const std::shared_ptr< ColorFilter > &outer, const std::shared_ptr< ColorFilter > &inner)
static std::shared_ptr< ColorFilter > MakeMatrix(ColorMatrix color_matrix)
constexpr ColorMatrix kColorInversion
A color matrix which inverts colors.
Definition paint.cc:20
bool invert_colors
Definition paint.h:65

◆ HasColorFilter()

bool Paint::HasColorFilter ( ) const

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

Definition at line 227 of file paint.cc.

227 {
228 return !!color_filter || invert_colors;
229}

◆ 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}
std::shared_ptr< ImageFilter > image_filter
Definition paint.h:67
std::shared_ptr< FilterContents > WithImageFilter(const FilterInput::Variant &input, const Matrix &effect_transform, Entity::RenderingMode rendering_mode) const
Definition paint.cc:88

◆ 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, Entity::RenderingMode::kSubpass);
72 if (image_filter) {
73 input = image_filter;
74 }
75 input = WithColorFilter(input, ColorFilterContents::AbsorbOpacity::kYes);
76 return input;
77}

◆ WithImageFilter()

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

Definition at line 88 of file paint.cc.

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

◆ WithMaskBlur()

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

Definition at line 79 of file paint.cc.

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

Member Data Documentation

◆ blend_mode

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

Definition at line 64 of file paint.h.

◆ color

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

Definition at line 55 of file paint.h.

◆ color_filter

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

Definition at line 68 of file paint.h.

◆ color_source

ColorSource impeller::Paint::color_source

Definition at line 56 of file paint.h.

◆ dither

bool impeller::Paint::dither = false

Definition at line 57 of file paint.h.

◆ image_filter

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

Definition at line 67 of file paint.h.

◆ invert_colors

bool impeller::Paint::invert_colors = false

Definition at line 65 of file paint.h.

◆ mask_blur_descriptor

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

Definition at line 69 of file paint.h.

◆ stroke_cap

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

Definition at line 60 of file paint.h.

◆ stroke_join

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

Definition at line 61 of file paint.h.

◆ stroke_miter

Scalar impeller::Paint::stroke_miter = 4.0

Definition at line 62 of file paint.h.

◆ stroke_width

Scalar impeller::Paint::stroke_width = 0.0

Definition at line 59 of file paint.h.

◆ style

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

Definition at line 63 of file paint.h.


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