| Flutter Impeller |

Public Member Functions | Protected Member Functions | Friends | List of all members
impeller::StrokeSegmentsGeometry Class Referenceabstract

An abstract Geometry base class that produces fillable vertices representing the stroked outline of the segments provided by the subclass in the virtual |Dispatch| method. More...

`#include <stroke_path_geometry.h>`

Inheritance diagram for impeller::StrokeSegmentsGeometry:

## Public Member Functions
| ~StrokeSegmentsGeometry () override
Scalar | GetStrokeWidth () const
Scalar | GetMiterLimit () const
Cap | GetStrokeCap () const
Join | GetStrokeJoin () const
Scalar | ComputeAlphaCoverage (const Matrix &transform) const override
Public Member Functions inherited from impeller::Geometry
virtual | ~Geometry ()
virtual std::optional< Rect > | GetCoverage (const Matrix &transform) const =0
virtual bool | CoversArea (const Matrix &transform, const Rect &rect) const
| Determines if this geometry, transformed by the given `transform`, will completely cover all surface area of the given `rect`. More...
virtual bool | IsAxisAlignedRect () const
virtual bool | CanApplyMaskFilter () const

## Protected Member Functions
| StrokeSegmentsGeometry (const StrokeParameters &parameters)
virtual void | Dispatch (PathAndArcSegmentReceiver &receiver, Tessellator &tessellator, Scalar scale) const =0
std::optional< Rect > | GetStrokeCoverage (const Matrix &transform, const Rect &segment_bounds) const

## Friends
class | ImpellerBenchmarkAccessor
class | ImpellerEntityUnitTestAccessor

## Additional Inherited Members
Static Public Member Functions inherited from impeller::Geometry
static std::unique_ptr< Geometry > | MakeFillPath (const flutter::DlPath &path, std::optional< Rect > inner_rect=std::nullopt)
static std::unique_ptr< Geometry > | MakeStrokePath (const flutter::DlPath &path, const StrokeParameters &stroke={})
static std::unique_ptr< Geometry > | MakeCover ()
static std::unique_ptr< Geometry > | MakeRect (const Rect &rect)
static std::unique_ptr< Geometry > | MakeOval (const Rect &rect)
static std::unique_ptr< Geometry > | MakeLine (const Point &p0, const Point &p1, const StrokeParameters &stroke)
static std::unique_ptr< Geometry > | MakeCircle (const Point &center, Scalar radius)
static std::unique_ptr< Geometry > | MakeStrokedCircle (const Point &center, Scalar radius, Scalar stroke_width)
static std::unique_ptr< Geometry > | MakeFilledArc (const Rect &oval_bounds, Degrees start, Degrees sweep, bool include_center)
static std::unique_ptr< Geometry > | MakeStrokedArc (const Rect &oval_bounds, Degrees start, Degrees sweep, const StrokeParameters &stroke)
static std::unique_ptr< Geometry > | MakeRoundRect (const Rect &rect, const Size &radii)
static std::unique_ptr< Geometry > | MakeRoundSuperellipse (const Rect &rect, Scalar corner_radius)
static Scalar | ComputeStrokeAlphaCoverage (const Matrix &entity, Scalar stroke_width)
| Compute an alpha value to simulate lower coverage of fractional pixel strokes. More...
static GeometryResult | ComputePositionGeometry (const ContentContext &renderer, const Tessellator::VertexGenerator &generator, const Entity &entity, RenderPass &pass)

## Detailed Description

An abstract Geometry base class that produces fillable vertices representing the stroked outline of the segments provided by the subclass in the virtual |Dispatch| method.

Most subclasses will be based on an instance of |PathSource| and use the |StrokePathSourceGeometry| subclass to feed the segments from that path source object, but some subclasses may be able to operate more optimally by talking directly to the |StrokePathSegmentReceiver| (mainly arcs).

Definition at line 35 of file stroke_path_geometry.h.

## Constructor & Destructor Documentation

## ◆ ~StrokeSegmentsGeometry()

impeller::StrokeSegmentsGeometry::~StrokeSegmentsGeometry | ( |  | ) |
| override default

## ◆ StrokeSegmentsGeometry()

impeller::StrokeSegmentsGeometry::StrokeSegmentsGeometry | ( | const StrokeParameters & | parameters | ) |
| explicit protected

Definition at line 714 of file stroke_path_geometry.cc.

715 : stroke_(stroke) {}

## Member Function Documentation

## ◆ ComputeAlphaCoverage()

Scalar impeller::StrokeSegmentsGeometry::ComputeAlphaCoverage | ( | const Matrix & | transform | ) | const
| override virtual

Reimplemented from impeller::Geometry.

Definition at line 735 of file stroke_path_geometry.cc.

736 {
737 return Geometry::ComputeStrokeAlphaCoverage(transform, stroke_.width);
738 }
impeller::Geometry::ComputeStrokeAlphaCoverage
static Scalar ComputeStrokeAlphaCoverage(const Matrix &entity, Scalar stroke_width)
Compute an alpha value to simulate lower coverage of fractional pixel strokes.
Definition: geometry.cc:149
transform
Matrix transform
Definition: gaussian_blur_filter_contents.cc:312
impeller::StrokeParameters::width
Scalar width
Definition: stroke_parameters.h:29

References impeller::Geometry::ComputeStrokeAlphaCoverage(), transform, and impeller::StrokeParameters::width.

## ◆ Dispatch()

virtual void impeller::StrokeSegmentsGeometry::Dispatch | ( | PathAndArcSegmentReceiver & | receiver,
|  | Tessellator & | tessellator,
|  | Scalar | scale
| ) |  | const
| protected pure virtual

Dispatch the path segments to the StrokePathSegmentReceiver for the provided transform scale.

Implemented in impeller::ArcStrokeGeometry, and impeller::StrokePathSourceGeometry.

## ◆ GetMiterLimit()

Scalar impeller::StrokeSegmentsGeometry::GetMiterLimit | ( |  | ) | const

Definition at line 723 of file stroke_path_geometry.cc.

723 {
724 return stroke_.miter_limit;
725 }
impeller::StrokeParameters::miter_limit
Scalar miter_limit
Definition: stroke_parameters.h:32

References impeller::StrokeParameters::miter_limit.

## ◆ GetStrokeCap()

Cap impeller::StrokeSegmentsGeometry::GetStrokeCap | ( |  | ) | const

Definition at line 727 of file stroke_path_geometry.cc.

727 {
728 return stroke_.cap;
729 }
impeller::StrokeParameters::cap
Cap cap
Definition: stroke_parameters.h:30

References impeller::StrokeParameters::cap.

## ◆ GetStrokeCoverage()

std::optional< Rect > impeller::StrokeSegmentsGeometry::GetStrokeCoverage | ( | const Matrix & | transform,
|  | const Rect & | segment_bounds
| ) |  | const
| protected

Provide the stroke-padded bounds for the provided bounds of the segments themselves.

Definition at line 815 of file stroke_path_geometry.cc.

817 {
818 if (path_bounds.IsEmpty()) {
819 return std::nullopt;
820 }
821
822 Scalar max_radius = 0.5;
823 if (stroke_.cap == Cap::kSquare) {
824 max_radius = max_radius * kSqrt2;
825 }
826 if (stroke_.join == Join::kMiter) {
827 max_radius = std::max(max_radius, stroke_.miter_limit * 0.5f);
828 }
829 Scalar max_basis = transform.GetMaxBasisLengthXY();
830 if (max_basis == 0) {
831 return {};
832 }
833 // Use the most conervative coverage setting.
834 Scalar min_size = kMinStrokeSize / max_basis;
835 max_radius *= std::max(stroke_.width, min_size);
836 return path_bounds.Expand(max_radius).TransformBounds(transform);
837 }
impeller::Join::kMiter
@ kMiter
impeller::Scalar
float Scalar
Definition: scalar.h:19
impeller::Cap::kSquare
@ kSquare
impeller::kSqrt2
constexpr float kSqrt2
Definition: constants.h:47
impeller::kMinStrokeSize
static constexpr Scalar kMinStrokeSize
Definition: geometry.h:19
impeller::StrokeParameters::join
Join join
Definition: stroke_parameters.h:31

References impeller::StrokeParameters::cap, impeller::TRect< T >::Expand(), impeller::TRect< T >::IsEmpty(), impeller::StrokeParameters::join, impeller::kMinStrokeSize, impeller::kMiter, impeller::kSqrt2, impeller::kSquare, impeller::StrokeParameters::miter_limit, transform, impeller::TRect< T >::TransformBounds(), and impeller::StrokeParameters::width.

Referenced by impeller::StrokePathSourceGeometry::GetCoverage(), and impeller::ArcStrokeGeometry::GetCoverage().

## ◆ GetStrokeJoin()

Join impeller::StrokeSegmentsGeometry::GetStrokeJoin | ( |  | ) | const

Definition at line 731 of file stroke_path_geometry.cc.

731 {
732 return stroke_.join;
733 }

References impeller::StrokeParameters::join.

## ◆ GetStrokeWidth()

Scalar impeller::StrokeSegmentsGeometry::GetStrokeWidth | ( |  | ) | const

Definition at line 719 of file stroke_path_geometry.cc.

719 {
720 return stroke_.width;
721 }

References impeller::StrokeParameters::width.

## Friends And Related Function Documentation

## ◆ ImpellerBenchmarkAccessor

friend class ImpellerBenchmarkAccessor
| friend

Definition at line 79 of file stroke_path_geometry.h.

## ◆ ImpellerEntityUnitTestAccessor

friend class ImpellerEntityUnitTestAccessor
| friend

Definition at line 80 of file stroke_path_geometry.h.

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

- impeller/entity/geometry/stroke_path_geometry.h
- impeller/entity/geometry/stroke_path_geometry.cc