Flutter Engine
 
Loading...
Searching...
No Matches
flutter::DlCanvas Class Referenceabstract

Developer-facing API for rendering anything within the engine. More...

#include <dl_canvas.h>

Inheritance diagram for flutter::DlCanvas:
flutter::DisplayListBuilder flutter::DlSkCanvasAdapter

Public Member Functions

virtual ~DlCanvas ()=default
 
virtual DlISize GetBaseLayerDimensions () const =0
 
virtual SkImageInfo GetImageInfo () const =0
 
virtual void Save ()=0
 
virtual void SaveLayer (const std::optional< DlRect > &bounds, const DlPaint *paint=nullptr, const DlImageFilter *backdrop=nullptr, std::optional< int64_t > backdrop_id=std::nullopt)=0
 
virtual void Restore ()=0
 
virtual int GetSaveCount () const =0
 
virtual void RestoreToCount (int restore_count)=0
 
virtual void Translate (DlScalar tx, DlScalar ty)=0
 
virtual void Scale (DlScalar sx, DlScalar sy)=0
 
virtual void Rotate (DlScalar degrees)=0
 
virtual void Skew (DlScalar sx, DlScalar sy)=0
 
virtual void Transform2DAffine (DlScalar mxx, DlScalar mxy, DlScalar mxt, DlScalar myx, DlScalar myy, DlScalar myt)=0
 
virtual void TransformFullPerspective (DlScalar mxx, DlScalar mxy, DlScalar mxz, DlScalar mxt, DlScalar myx, DlScalar myy, DlScalar myz, DlScalar myt, DlScalar mzx, DlScalar mzy, DlScalar mzz, DlScalar mzt, DlScalar mwx, DlScalar mwy, DlScalar mwz, DlScalar mwt)=0
 
virtual void TransformReset ()=0
 
virtual void Transform (const DlMatrix &matrix)=0
 
virtual void SetTransform (const DlMatrix &matrix)=0
 
virtual DlMatrix GetMatrix () const =0
 
virtual void ClipRect (const DlRect &rect, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false)=0
 
virtual void ClipOval (const DlRect &bounds, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false)=0
 
virtual void ClipRoundRect (const DlRoundRect &rrect, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false)=0
 
virtual void ClipRoundSuperellipse (const DlRoundSuperellipse &rse, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false)=0
 
virtual void ClipPath (const DlPath &path, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false)=0
 
virtual DlRect GetDestinationClipCoverage () const =0
 
virtual DlRect GetLocalClipCoverage () const =0
 
virtual bool QuickReject (const DlRect &bounds) const =0
 
virtual void DrawPaint (const DlPaint &paint)=0
 
virtual void DrawColor (DlColor color, DlBlendMode mode=DlBlendMode::kSrcOver)=0
 
void Clear (DlColor color)
 
virtual void DrawLine (const DlPoint &p0, const DlPoint &p1, const DlPaint &paint)=0
 
virtual void DrawDashedLine (const DlPoint &p0, const DlPoint &p1, DlScalar on_length, DlScalar off_length, const DlPaint &paint)=0
 
virtual void DrawRect (const DlRect &rect, const DlPaint &paint)=0
 
virtual void DrawOval (const DlRect &bounds, const DlPaint &paint)=0
 
virtual void DrawCircle (const DlPoint &center, DlScalar radius, const DlPaint &paint)=0
 
virtual void DrawRoundRect (const DlRoundRect &rrect, const DlPaint &paint)=0
 
virtual void DrawDiffRoundRect (const DlRoundRect &outer, const DlRoundRect &inner, const DlPaint &paint)=0
 
virtual void DrawRoundSuperellipse (const DlRoundSuperellipse &rse, const DlPaint &paint)=0
 
virtual void DrawPath (const DlPath &path, const DlPaint &paint)=0
 
virtual void DrawArc (const DlRect &bounds, DlScalar start, DlScalar sweep, bool useCenter, const DlPaint &paint)=0
 
virtual void DrawPoints (DlPointMode mode, uint32_t count, const DlPoint pts[], const DlPaint &paint)=0
 
virtual void DrawVertices (const std::shared_ptr< DlVertices > &vertices, DlBlendMode mode, const DlPaint &paint)=0
 
virtual void DrawImage (const sk_sp< DlImage > &image, const DlPoint &point, DlImageSampling sampling, const DlPaint *paint=nullptr)=0
 
virtual void DrawImageRect (const sk_sp< DlImage > &image, const DlRect &src, const DlRect &dst, DlImageSampling sampling, const DlPaint *paint=nullptr, DlSrcRectConstraint constraint=DlSrcRectConstraint::kFast)=0
 
virtual void DrawImageRect (const sk_sp< DlImage > &image, const DlIRect &src, const DlRect &dst, DlImageSampling sampling, const DlPaint *paint=nullptr, DlSrcRectConstraint constraint=DlSrcRectConstraint::kFast)
 
void DrawImageRect (const sk_sp< DlImage > &image, const DlRect &dst, DlImageSampling sampling, const DlPaint *paint=nullptr, DlSrcRectConstraint constraint=DlSrcRectConstraint::kFast)
 
virtual void DrawImageNine (const sk_sp< DlImage > &image, const DlIRect &center, const DlRect &dst, DlFilterMode filter, const DlPaint *paint=nullptr)=0
 
virtual void DrawAtlas (const sk_sp< DlImage > &atlas, const DlRSTransform xform[], const DlRect tex[], const DlColor colors[], int count, DlBlendMode mode, DlImageSampling sampling, const DlRect *cullRect, const DlPaint *paint=nullptr)=0
 
virtual void DrawDisplayList (const sk_sp< DisplayList > display_list, DlScalar opacity=SK_Scalar1)=0
 
virtual void DrawText (const std::shared_ptr< DlText > &text, DlScalar x, DlScalar y, const DlPaint &paint)=0
 
virtual void DrawShadow (const DlPath &path, const DlColor color, const DlScalar elevation, bool transparent_occluder, DlScalar dpr)=0
 Draws the shadow of the given |path| rendered in the provided |color| (which is only consulted for its opacity) as would be produced by a directional light source uniformly shining in the device space direction {0, -1, 1} against a backdrop which is |elevation * dpr| device coordinates below the |path| in the Z direction.
 
virtual void Flush ()=0
 

Static Public Member Functions

static DlRect ComputeShadowBounds (const DlPath &path, float elevation, DlScalar dpr, const DlMatrix &ctm)
 Compute the local coverage for a |DrawShadow| operation using the given parameters (excluding the color and the transparent occluder parameters which do not affect the bounds).
 

Static Public Attributes

static constexpr DlScalar kShadowLightHeight = 600
 
static constexpr DlScalar kShadowLightRadius = 800
 

Detailed Description

Developer-facing API for rendering anything within the engine.

|DlCanvas| should be used to render anything in the framework classes (i.e. lib/ui), flow and flow layers, embedders, shell, and elsewhere.

The only state carried by implementations of this interface are the clip and transform which are saved and restored by the |save|, |saveLayer|, and |restore| calls.

Note
The interface resembles closely the familiar |SkCanvas| interface used throughout the engine.

Definition at line 32 of file dl_canvas.h.

Constructor & Destructor Documentation

◆ ~DlCanvas()

virtual flutter::DlCanvas::~DlCanvas ( )
virtualdefault

Member Function Documentation

◆ Clear()

void flutter::DlCanvas::Clear ( DlColor  color)
inline

◆ ClipOval()

virtual void flutter::DlCanvas::ClipOval ( const DlRect bounds,
DlClipOp  clip_op = DlClipOp::kIntersect,
bool  is_aa = false 
)
pure virtual

◆ ClipPath()

virtual void flutter::DlCanvas::ClipPath ( const DlPath path,
DlClipOp  clip_op = DlClipOp::kIntersect,
bool  is_aa = false 
)
pure virtual

◆ ClipRect()

◆ ClipRoundRect()

virtual void flutter::DlCanvas::ClipRoundRect ( const DlRoundRect rrect,
DlClipOp  clip_op = DlClipOp::kIntersect,
bool  is_aa = false 
)
pure virtual

◆ ClipRoundSuperellipse()

virtual void flutter::DlCanvas::ClipRoundSuperellipse ( const DlRoundSuperellipse rse,
DlClipOp  clip_op = DlClipOp::kIntersect,
bool  is_aa = false 
)
pure virtual

◆ ComputeShadowBounds()

DlRect flutter::DlCanvas::ComputeShadowBounds ( const DlPath path,
float  elevation,
DlScalar  dpr,
const DlMatrix ctm 
)
static

Compute the local coverage for a |DrawShadow| operation using the given parameters (excluding the color and the transparent occluder parameters which do not affect the bounds).

Since the elevation is expressed in device coordinates relative to the provided |dpr| value, the |ctm| of the final rendering coordinate system that will be applied to the path must be provided so the two sets of coordinates (path and light source) can be correlated.

See also
|DrawShadow|

Definition at line 125 of file dl_canvas.cc.

128 {
129 return GetLocalBounds(
130 path.GetBounds(), ctm,
131 {
132 .light_position = DlVector3(0.0f, -1.0f, 1.0f),
133 .light_radius = kShadowLightRadius / kShadowLightHeight,
134 .occluder_z = dpr * elevation,
135 });
136}
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
Definition switch_defs.h:52

References flutter::path.

Referenced by flutter::DisplayListBuilder::DrawShadow(), flutter::testing::TEST(), flutter::testing::TEST(), and flutter::testing::TEST().

◆ DrawArc()

virtual void flutter::DlCanvas::DrawArc ( const DlRect bounds,
DlScalar  start,
DlScalar  sweep,
bool  useCenter,
const DlPaint paint 
)
pure virtual

◆ DrawAtlas()

virtual void flutter::DlCanvas::DrawAtlas ( const sk_sp< DlImage > &  atlas,
const DlRSTransform  xform[],
const DlRect  tex[],
const DlColor  colors[],
int  count,
DlBlendMode  mode,
DlImageSampling  sampling,
const DlRect cullRect,
const DlPaint paint = nullptr 
)
pure virtual

◆ DrawCircle()

virtual void flutter::DlCanvas::DrawCircle ( const DlPoint center,
DlScalar  radius,
const DlPaint paint 
)
pure virtual

◆ DrawColor()

◆ DrawDashedLine()

virtual void flutter::DlCanvas::DrawDashedLine ( const DlPoint p0,
const DlPoint p1,
DlScalar  on_length,
DlScalar  off_length,
const DlPaint paint 
)
pure virtual

◆ DrawDiffRoundRect()

virtual void flutter::DlCanvas::DrawDiffRoundRect ( const DlRoundRect outer,
const DlRoundRect inner,
const DlPaint paint 
)
pure virtual

◆ DrawDisplayList()

◆ DrawImage()

virtual void flutter::DlCanvas::DrawImage ( const sk_sp< DlImage > &  image,
const DlPoint point,
DlImageSampling  sampling,
const DlPaint paint = nullptr 
)
pure virtual

◆ DrawImageNine()

virtual void flutter::DlCanvas::DrawImageNine ( const sk_sp< DlImage > &  image,
const DlIRect center,
const DlRect dst,
DlFilterMode  filter,
const DlPaint paint = nullptr 
)
pure virtual

◆ DrawImageRect() [1/3]

virtual void flutter::DlCanvas::DrawImageRect ( const sk_sp< DlImage > &  image,
const DlIRect src,
const DlRect dst,
DlImageSampling  sampling,
const DlPaint paint = nullptr,
DlSrcRectConstraint  constraint = DlSrcRectConstraint::kFast 
)
inlinevirtual

Reimplemented in flutter::DisplayListBuilder.

Definition at line 149 of file dl_canvas.h.

155 {
156 auto float_src = DlRect::MakeLTRB(src.GetLeft(), src.GetTop(),
157 src.GetRight(), src.GetBottom());
158 DrawImageRect(image, float_src, dst, sampling, paint, constraint);
159 }
virtual void DrawImageRect(const sk_sp< DlImage > &image, const DlRect &src, const DlRect &dst, DlImageSampling sampling, const DlPaint *paint=nullptr, DlSrcRectConstraint constraint=DlSrcRectConstraint::kFast)=0
FlutterVulkanImage * image
static constexpr TRect MakeLTRB(Type left, Type top, Type right, Type bottom)
Definition rect.h:129

References DrawImageRect(), impeller::TRect< T >::GetBottom(), impeller::TRect< T >::GetLeft(), impeller::TRect< T >::GetRight(), impeller::TRect< T >::GetTop(), image, and impeller::TRect< Scalar >::MakeLTRB().

◆ DrawImageRect() [2/3]

void flutter::DlCanvas::DrawImageRect ( const sk_sp< DlImage > &  image,
const DlRect dst,
DlImageSampling  sampling,
const DlPaint paint = nullptr,
DlSrcRectConstraint  constraint = DlSrcRectConstraint::kFast 
)
inline

Definition at line 160 of file dl_canvas.h.

165 {
166 DrawImageRect(image, image->GetBounds(), dst, sampling, paint, constraint);
167 }

References DrawImageRect(), and image.

◆ DrawImageRect() [3/3]

virtual void flutter::DlCanvas::DrawImageRect ( const sk_sp< DlImage > &  image,
const DlRect src,
const DlRect dst,
DlImageSampling  sampling,
const DlPaint paint = nullptr,
DlSrcRectConstraint  constraint = DlSrcRectConstraint::kFast 
)
pure virtual

◆ DrawLine()

virtual void flutter::DlCanvas::DrawLine ( const DlPoint p0,
const DlPoint p1,
const DlPaint paint 
)
pure virtual

◆ DrawOval()

virtual void flutter::DlCanvas::DrawOval ( const DlRect bounds,
const DlPaint paint 
)
pure virtual

◆ DrawPaint()

◆ DrawPath()

◆ DrawPoints()

virtual void flutter::DlCanvas::DrawPoints ( DlPointMode  mode,
uint32_t  count,
const DlPoint  pts[],
const DlPaint paint 
)
pure virtual

◆ DrawRect()

◆ DrawRoundRect()

virtual void flutter::DlCanvas::DrawRoundRect ( const DlRoundRect rrect,
const DlPaint paint 
)
pure virtual

◆ DrawRoundSuperellipse()

virtual void flutter::DlCanvas::DrawRoundSuperellipse ( const DlRoundSuperellipse rse,
const DlPaint paint 
)
pure virtual

◆ DrawShadow()

virtual void flutter::DlCanvas::DrawShadow ( const DlPath path,
const DlColor  color,
const DlScalar  elevation,
bool  transparent_occluder,
DlScalar  dpr 
)
pure virtual

Draws the shadow of the given |path| rendered in the provided |color| (which is only consulted for its opacity) as would be produced by a directional light source uniformly shining in the device space direction {0, -1, 1} against a backdrop which is |elevation * dpr| device coordinates below the |path| in the Z direction.

Normally the renderer might consider omitting the rendering of any of the shadow pixels that fall under the |path| itself, as an optimization, unless the |transparent_occluder| flag is specified which would indicate that the optimization isn't appropriate.

Note that the |elevation| and |dpr| are unique in the API for being considered in pure device coordinates while the |path| is interpreted relative to the current local-to-device transform.

See also
|ComputeShadowBounds|

Implemented in flutter::DisplayListBuilder, and flutter::DlSkCanvasAdapter.

Referenced by flutter::testing::TEST_F().

◆ DrawText()

virtual void flutter::DlCanvas::DrawText ( const std::shared_ptr< DlText > &  text,
DlScalar  x,
DlScalar  y,
const DlPaint paint 
)
pure virtual

◆ DrawVertices()

virtual void flutter::DlCanvas::DrawVertices ( const std::shared_ptr< DlVertices > &  vertices,
DlBlendMode  mode,
const DlPaint paint 
)
pure virtual

◆ Flush()

virtual void flutter::DlCanvas::Flush ( )
pure virtual

◆ GetBaseLayerDimensions()

◆ GetDestinationClipCoverage()

virtual DlRect flutter::DlCanvas::GetDestinationClipCoverage ( ) const
pure virtual

Conservative estimate of the bounds of all outstanding clip operations measured in the coordinate space within which this DisplayList will be rendered.

Implemented in flutter::DisplayListBuilder, and flutter::DlSkCanvasAdapter.

Referenced by flutter::DlCanvasDelegate::device_cull_rect(), and flutter::testing::DlJobRenderer::Render().

◆ GetImageInfo()

virtual SkImageInfo flutter::DlCanvas::GetImageInfo ( ) const
pure virtual

◆ GetLocalClipCoverage()

virtual DlRect flutter::DlCanvas::GetLocalClipCoverage ( ) const
pure virtual

Conservative estimate of the bounds of all outstanding clip operations transformed into the local coordinate space in which currently recorded rendering operations are interpreted.

Implemented in flutter::DisplayListBuilder, and flutter::DlSkCanvasAdapter.

Referenced by flutter::DlCanvasDelegate::local_cull_rect(), and flutter::TEST().

◆ GetMatrix()

◆ GetSaveCount()

virtual int flutter::DlCanvas::GetSaveCount ( ) const
pure virtual

◆ QuickReject()

virtual bool flutter::DlCanvas::QuickReject ( const DlRect bounds) const
pure virtual

Return true iff the supplied bounds are easily shown to be outside of the current clip bounds. This method may conservatively return false if it cannot make the determination.

Implemented in flutter::DisplayListBuilder, and flutter::DlSkCanvasAdapter.

Referenced by flutter::DlCanvasDelegate::content_culled(), and flutter::TEST().

◆ Restore()

◆ RestoreToCount()

virtual void flutter::DlCanvas::RestoreToCount ( int  restore_count)
pure virtual

◆ Rotate()

virtual void flutter::DlCanvas::Rotate ( DlScalar  degrees)
pure virtual

◆ Save()

◆ SaveLayer()

virtual void flutter::DlCanvas::SaveLayer ( const std::optional< DlRect > &  bounds,
const DlPaint paint = nullptr,
const DlImageFilter backdrop = nullptr,
std::optional< int64_t >  backdrop_id = std::nullopt 
)
pure virtual

◆ Scale()

◆ SetTransform()

virtual void flutter::DlCanvas::SetTransform ( const DlMatrix matrix)
pure virtual

◆ Skew()

virtual void flutter::DlCanvas::Skew ( DlScalar  sx,
DlScalar  sy 
)
pure virtual

◆ Transform()

virtual void flutter::DlCanvas::Transform ( const DlMatrix matrix)
pure virtual

◆ Transform2DAffine()

virtual void flutter::DlCanvas::Transform2DAffine ( DlScalar  mxx,
DlScalar  mxy,
DlScalar  mxt,
DlScalar  myx,
DlScalar  myy,
DlScalar  myt 
)
pure virtual

◆ TransformFullPerspective()

virtual void flutter::DlCanvas::TransformFullPerspective ( DlScalar  mxx,
DlScalar  mxy,
DlScalar  mxz,
DlScalar  mxt,
DlScalar  myx,
DlScalar  myy,
DlScalar  myz,
DlScalar  myt,
DlScalar  mzx,
DlScalar  mzy,
DlScalar  mzz,
DlScalar  mzt,
DlScalar  mwx,
DlScalar  mwy,
DlScalar  mwz,
DlScalar  mwt 
)
pure virtual

◆ TransformReset()

virtual void flutter::DlCanvas::TransformReset ( )
pure virtual

◆ Translate()

Member Data Documentation

◆ kShadowLightHeight

constexpr DlScalar flutter::DlCanvas::kShadowLightHeight = 600
staticconstexpr

Definition at line 215 of file dl_canvas.h.

Referenced by flutter::DlSkCanvasDispatcher::DrawShadow().

◆ kShadowLightRadius

constexpr DlScalar flutter::DlCanvas::kShadowLightRadius = 800
staticconstexpr

Definition at line 216 of file dl_canvas.h.

Referenced by flutter::DlSkCanvasDispatcher::DrawShadow().


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