Flutter Impeller
impeller::StrokePathGeometry Class Referencefinal

A geometry that is created from a stroked path object. More...

#include <stroke_path_geometry.h>

Inheritance diagram for impeller::StrokePathGeometry:
impeller::Geometry

Public Member Functions

 StrokePathGeometry (const Path &path, Scalar stroke_width, Scalar miter_limit, Cap stroke_cap, Join stroke_join)
 
 ~StrokePathGeometry ()
 
Scalar GetStrokeWidth () const
 
Scalar GetMiterLimit () const
 
Cap GetStrokeCap () const
 
Join GetStrokeJoin () const
 
Scalar ComputeAlphaCoverage (const Entity &entity) const override
 
- Public Member Functions inherited from impeller::Geometry
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
 

Friends

class ImpellerBenchmarkAccessor
 
class ImpellerEntityUnitTestAccessor
 

Additional Inherited Members

- Static Public Member Functions inherited from impeller::Geometry
static std::shared_ptr< GeometryMakeFillPath (const Path &path, std::optional< Rect > inner_rect=std::nullopt)
 
static std::shared_ptr< GeometryMakeStrokePath (const Path &path, Scalar stroke_width=0.0, Scalar miter_limit=4.0, Cap stroke_cap=Cap::kButt, Join stroke_join=Join::kMiter)
 
static std::shared_ptr< GeometryMakeCover ()
 
static std::shared_ptr< GeometryMakeRect (const Rect &rect)
 
static std::shared_ptr< GeometryMakeOval (const Rect &rect)
 
static std::shared_ptr< GeometryMakeLine (const Point &p0, const Point &p1, Scalar width, Cap cap)
 
static std::shared_ptr< GeometryMakeCircle (const Point &center, Scalar radius)
 
static std::shared_ptr< GeometryMakeStrokedCircle (const Point &center, Scalar radius, Scalar stroke_width)
 
static std::shared_ptr< GeometryMakeRoundRect (const Rect &rect, const Size &radii)
 
static std::shared_ptr< GeometryMakePointField (std::vector< Point > points, Scalar radius, bool round)
 
- Static Protected Member Functions inherited from impeller::Geometry
static GeometryResult ComputePositionGeometry (const ContentContext &renderer, const Tessellator::VertexGenerator &generator, const Entity &entity, RenderPass &pass)
 

Detailed Description

A geometry that is created from a stroked path object.

Definition at line 13 of file stroke_path_geometry.h.

Constructor & Destructor Documentation

◆ StrokePathGeometry()

impeller::StrokePathGeometry::StrokePathGeometry ( const Path path,
Scalar  stroke_width,
Scalar  miter_limit,
Cap  stroke_cap,
Join  stroke_join 
)

Definition at line 539 of file stroke_path_geometry.cc.

544  : path_(path),
545  stroke_width_(stroke_width),
546  miter_limit_(miter_limit),
547  stroke_cap_(stroke_cap),
548  stroke_join_(stroke_join) {}

◆ ~StrokePathGeometry()

impeller::StrokePathGeometry::~StrokePathGeometry ( )
default

Member Function Documentation

◆ ComputeAlphaCoverage()

Scalar impeller::StrokePathGeometry::ComputeAlphaCoverage ( const Entity entity) const
overridevirtual

Reimplemented from impeller::Geometry.

Definition at line 568 of file stroke_path_geometry.cc.

568  {
569  Scalar scaled_stroke_width =
570  entity.GetTransform().GetMaxBasisLengthXY() * stroke_width_;
571  // If the stroke width is 0 or greater than kMinStrokeSizeMSAA, don't apply
572  // any additional alpha. This is intended to match Skia behavior.
573  if (scaled_stroke_width == 0.0 || scaled_stroke_width >= kMinStrokeSizeMSAA) {
574  return 1.0;
575  }
576  // This scalling is eyeballed from Skia.
577  return std::clamp(scaled_stroke_width * 20.0f, 0.f, 1.f);
578 }

References impeller::Matrix::GetMaxBasisLengthXY(), and impeller::Entity::GetTransform().

◆ GetMiterLimit()

Scalar impeller::StrokePathGeometry::GetMiterLimit ( ) const

Definition at line 556 of file stroke_path_geometry.cc.

556  {
557  return miter_limit_;
558 }

◆ GetStrokeCap()

Cap impeller::StrokePathGeometry::GetStrokeCap ( ) const

Definition at line 560 of file stroke_path_geometry.cc.

560  {
561  return stroke_cap_;
562 }

◆ GetStrokeJoin()

Join impeller::StrokePathGeometry::GetStrokeJoin ( ) const

Definition at line 564 of file stroke_path_geometry.cc.

564  {
565  return stroke_join_;
566 }

◆ GetStrokeWidth()

Scalar impeller::StrokePathGeometry::GetStrokeWidth ( ) const

Definition at line 552 of file stroke_path_geometry.cc.

552  {
553  return stroke_width_;
554 }

Friends And Related Function Documentation

◆ ImpellerBenchmarkAccessor

friend class ImpellerBenchmarkAccessor
friend

Definition at line 54 of file stroke_path_geometry.h.

◆ ImpellerEntityUnitTestAccessor

friend class ImpellerEntityUnitTestAccessor
friend

Definition at line 55 of file stroke_path_geometry.h.


The documentation for this class was generated from the following files:
impeller::Scalar
float Scalar
Definition: scalar.h:18
stroke_width
const Scalar stroke_width
Definition: stroke_path_geometry.cc:304