Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
flutter::DlSkCanvasDispatcher Class Reference

Backend implementation of |DlOpReceiver| for |SkCanvas|. More...

#include <dl_sk_dispatcher.h>

Inheritance diagram for flutter::DlSkCanvasDispatcher:
flutter::DlOpReceiver flutter::DlSkPaintDispatchHelper flutter::DlOpReceiver

Public Member Functions

 DlSkCanvasDispatcher (SkCanvas *canvas, DlScalar opacity=SK_Scalar1)
 
const SkPaint * safe_paint (bool use_attributes)
 
void save () override
 
void restore () override
 
void saveLayer (const DlRect &bounds, const SaveLayerOptions options, const DlImageFilter *backdrop, std::optional< int64_t > backdrop_id) override
 
void translate (DlScalar tx, DlScalar ty) override
 
void scale (DlScalar sx, DlScalar sy) override
 
void rotate (DlScalar degrees) override
 
void skew (DlScalar sx, DlScalar sy) override
 
void transform2DAffine (DlScalar mxx, DlScalar mxy, DlScalar mxt, DlScalar myx, DlScalar myy, DlScalar myt) override
 
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) override
 
void transformReset () override
 
void clipRect (const DlRect &rect, DlClipOp clip_op, bool is_aa) override
 
void clipOval (const DlRect &bounds, DlClipOp clip_op, bool is_aa) override
 
void clipRoundRect (const DlRoundRect &rrect, DlClipOp clip_op, bool is_aa) override
 
void clipRoundSuperellipse (const DlRoundSuperellipse &rse, DlClipOp clip_op, bool is_aa) override
 
void clipPath (const DlPath &path, DlClipOp clip_op, bool is_aa) override
 
void drawPaint () override
 
void drawColor (DlColor color, DlBlendMode mode) override
 
void drawLine (const DlPoint &p0, const DlPoint &p1) override
 
void drawDashedLine (const DlPoint &p0, const DlPoint &p1, DlScalar on_length, DlScalar off_length) override
 
void drawRect (const DlRect &rect) override
 
void drawOval (const DlRect &bounds) override
 
void drawCircle (const DlPoint &center, DlScalar radius) override
 
void drawRoundRect (const DlRoundRect &rrect) override
 
void drawDiffRoundRect (const DlRoundRect &outer, const DlRoundRect &inner) override
 
void drawRoundSuperellipse (const DlRoundSuperellipse &rse) override
 
void drawPath (const DlPath &path) override
 
void drawArc (const DlRect &bounds, DlScalar start, DlScalar sweep, bool useCenter) override
 
void drawPoints (DlPointMode mode, uint32_t count, const DlPoint pts[]) override
 
void drawVertices (const std::shared_ptr< DlVertices > &vertices, DlBlendMode mode) override
 
void drawImage (const sk_sp< DlImage > image, const DlPoint &point, DlImageSampling sampling, bool render_with_attributes) override
 
void drawImageRect (const sk_sp< DlImage > image, const DlRect &src, const DlRect &dst, DlImageSampling sampling, bool render_with_attributes, DlSrcRectConstraint constraint) override
 
void drawImageNine (const sk_sp< DlImage > image, const DlIRect &center, const DlRect &dst, DlFilterMode filter, bool render_with_attributes) override
 
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, bool render_with_attributes) override
 
void drawDisplayList (const sk_sp< DisplayList > display_list, DlScalar opacity) override
 
void drawText (const std::shared_ptr< DlText > &text, DlScalar x, DlScalar y) override
 
void drawShadow (const DlPath &path, const DlColor color, const DlScalar elevation, bool transparent_occluder, DlScalar dpr) override
 
- Public Member Functions inherited from flutter::DlOpReceiver
virtual void setStrokeWidth (float width)=0
 
virtual void setStrokeMiter (float limit)=0
 
virtual void save (uint32_t total_content_depth)
 
virtual void saveLayer (const DlRect &bounds, const SaveLayerOptions &options, uint32_t total_content_depth, DlBlendMode max_content_blend_mode, const DlImageFilter *backdrop=nullptr, std::optional< int64_t > backdrop_id=std::nullopt)
 
virtual void saveLayer (const DlRect *bounds, const SaveLayerOptions options, const DlImageFilter *backdrop=nullptr, std::optional< int64_t > backdrop_id=std::nullopt) final
 
- Public Member Functions inherited from flutter::DlSkPaintDispatchHelper
 DlSkPaintDispatchHelper (SkScalar opacity=SK_Scalar1)
 
void setAntiAlias (bool aa) override
 
void setDrawStyle (DlDrawStyle style) override
 
void setColor (DlColor color) override
 
void setStrokeWidth (SkScalar width) override
 
void setStrokeMiter (SkScalar limit) override
 
void setStrokeCap (DlStrokeCap cap) override
 
void setStrokeJoin (DlStrokeJoin join) override
 
void setColorSource (const DlColorSource *source) override
 
void setColorFilter (const DlColorFilter *filter) override
 
void setInvertColors (bool invert) override
 
void setBlendMode (DlBlendMode mode) override
 
void setMaskFilter (const DlMaskFilter *filter) override
 
void setImageFilter (const DlImageFilter *filter) override
 
const SkPaint & paint (bool uses_shader=true)
 
SkScalar opacity ()
 
SkScalar combined_opacity ()
 
bool has_opacity ()
 

Static Public Member Functions

static void DrawShadow (SkCanvas *canvas, const SkPath &path, DlColor color, float elevation, bool transparentOccluder, DlScalar dpr)
 

Additional Inherited Members

- Static Public Attributes inherited from flutter::DlOpReceiver
static constexpr int kMaxDrawPointsCount = ((1 << 29) - 1)
 
- Protected Member Functions inherited from flutter::DlSkPaintDispatchHelper
void save_opacity (SkScalar opacity_for_children)
 
void restore_opacity ()
 

Detailed Description

Backend implementation of |DlOpReceiver| for |SkCanvas|.

See also
DlOpReceiver

Definition at line 20 of file dl_sk_dispatcher.h.

Constructor & Destructor Documentation

◆ DlSkCanvasDispatcher()

flutter::DlSkCanvasDispatcher::DlSkCanvasDispatcher ( SkCanvas *  canvas,
DlScalar  opacity = SK_Scalar1 
)
inlineexplicit

Definition at line 23 of file dl_sk_dispatcher.h.

25 canvas_(canvas),
26 original_transform_(canvas->getLocalToDevice()) {}
DlSkPaintDispatchHelper(SkScalar opacity=SK_Scalar1)

Member Function Documentation

◆ clipOval()

void flutter::DlSkCanvasDispatcher::clipOval ( const DlRect bounds,
DlClipOp  clip_op,
bool  is_aa 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 136 of file dl_sk_dispatcher.cc.

138 {
139 canvas_->clipRRect(SkRRect::MakeOval(ToSkRect(bounds)), ToSk(clip_op), is_aa);
140}
SkPaint ToSk(const DlPaint &paint)
const SkRect & ToSkRect(const DlRect &rect)

References flutter::ToSk(), and flutter::ToSkRect().

◆ clipPath()

void flutter::DlSkCanvasDispatcher::clipPath ( const DlPath path,
DlClipOp  clip_op,
bool  is_aa 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 152 of file dl_sk_dispatcher.cc.

154 {
155 path.WillRenderSkPath();
156 canvas_->clipPath(path.GetSkPath(), ToSk(clip_op), is_aa);
157}
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, and flutter::ToSk().

◆ clipRect()

void flutter::DlSkCanvasDispatcher::clipRect ( const DlRect rect,
DlClipOp  clip_op,
bool  is_aa 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 131 of file dl_sk_dispatcher.cc.

133 {
134 canvas_->clipRect(ToSkRect(rect), ToSk(clip_op), is_aa);
135}

References flutter::ToSk(), and flutter::ToSkRect().

◆ clipRoundRect()

void flutter::DlSkCanvasDispatcher::clipRoundRect ( const DlRoundRect rrect,
DlClipOp  clip_op,
bool  is_aa 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 141 of file dl_sk_dispatcher.cc.

143 {
144 canvas_->clipRRect(ToSkRRect(rrect), ToSk(clip_op), is_aa);
145}
const SkRRect ToSkRRect(const DlRoundRect &round_rect)

References flutter::ToSk(), and flutter::ToSkRRect().

◆ clipRoundSuperellipse()

void flutter::DlSkCanvasDispatcher::clipRoundSuperellipse ( const DlRoundSuperellipse rse,
DlClipOp  clip_op,
bool  is_aa 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 146 of file dl_sk_dispatcher.cc.

148 {
149 // Skia doesn't support round superellipse, thus fall back to round rectangle.
150 canvas_->clipRRect(ToApproximateSkRRect(rse), ToSk(clip_op), is_aa);
151}
const SkRRect ToApproximateSkRRect(const DlRoundSuperellipse &rse)

References flutter::ToApproximateSkRRect(), and flutter::ToSk().

◆ drawArc()

void flutter::DlSkCanvasDispatcher::drawArc ( const DlRect bounds,
DlScalar  start,
DlScalar  sweep,
bool  useCenter 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 213 of file dl_sk_dispatcher.cc.

216 {
217 canvas_->drawArc(ToSkRect(bounds), start, sweep, useCenter, paint());
218}
const SkPaint & paint(bool uses_shader=true)

References flutter::DlSkPaintDispatchHelper::paint(), start, and flutter::ToSkRect().

◆ drawAtlas()

void flutter::DlSkCanvasDispatcher::drawAtlas ( const sk_sp< DlImage atlas,
const DlRSTransform  xform[],
const DlRect  tex[],
const DlColor  colors[],
int  count,
DlBlendMode  mode,
DlImageSampling  sampling,
const DlRect cullRect,
bool  render_with_attributes 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 264 of file dl_sk_dispatcher.cc.

272 {
273 FML_DCHECK(atlas);
274 auto skia_atlas = atlas->asSkiaImage();
275 FML_DCHECK(skia_atlas);
276 std::vector<SkColor> sk_colors;
277 if (colors != nullptr) {
278 sk_colors.reserve(count);
279 for (int i = 0; i < count; ++i) {
280 sk_colors.push_back(colors[i].argb());
281 }
282 }
283 SkSpan<const SkColor> colorSpan;
284 if (!colors) {
285 colorSpan = {nullptr, 0};
286 } else {
287 colorSpan = {sk_colors.data(), count};
288 }
289 canvas_->drawAtlas(skia_atlas->skia_image().get(), {ToSk(xform), count},
290 {ToSkRects(tex), count}, colorSpan, ToSk(mode),
291 ToSk(sampling), ToSkRect(cullRect),
292 safe_paint(render_with_attributes));
293}
const SkPaint * safe_paint(bool use_attributes)
#define FML_DCHECK(condition)
Definition logging.h:122

References FML_DCHECK, i, flutter::mode, safe_paint(), flutter::ToSk(), and flutter::ToSkRect().

◆ drawCircle()

void flutter::DlSkCanvasDispatcher::drawCircle ( const DlPoint center,
DlScalar  radius 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 194 of file dl_sk_dispatcher.cc.

194 {
195 canvas_->drawCircle(ToSkPoint(center), radius, paint());
196}
const SkPoint & ToSkPoint(const DlPoint &point)

References flutter::DlSkPaintDispatchHelper::paint(), and flutter::ToSkPoint().

◆ drawColor()

void flutter::DlSkCanvasDispatcher::drawColor ( DlColor  color,
DlBlendMode  mode 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 169 of file dl_sk_dispatcher.cc.

169 {
170 // SkCanvas::drawColor(SkColor) does the following conversion anyway
171 // We do it here manually to increase precision on applying opacity
172 SkColor4f color4f = ToSkColor4f(color);
173 color4f.fA *= opacity();
174 canvas_->drawColor(color4f, ToSk(mode));
175}
SkColor4f ToSkColor4f(DlColor color)

References flutter::mode, flutter::DlSkPaintDispatchHelper::opacity(), flutter::ToSk(), and flutter::ToSkColor4f().

◆ drawDashedLine()

void flutter::DlSkCanvasDispatcher::drawDashedLine ( const DlPoint p0,
const DlPoint p1,
DlScalar  on_length,
DlScalar  off_length 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 179 of file dl_sk_dispatcher.cc.

182 {
183 SkPaint dash_paint = paint();
184 SkScalar intervals[] = {on_length, off_length};
185 dash_paint.setPathEffect(SkDashPathEffect::Make({intervals, 2}, 0.0f));
186 canvas_->drawLine(ToSkPoint(p0), ToSkPoint(p1), dash_paint);
187}

References p1, flutter::DlSkPaintDispatchHelper::paint(), and flutter::ToSkPoint().

◆ drawDiffRoundRect()

void flutter::DlSkCanvasDispatcher::drawDiffRoundRect ( const DlRoundRect outer,
const DlRoundRect inner 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 200 of file dl_sk_dispatcher.cc.

201 {
202 canvas_->drawDRRect(ToSkRRect(outer), ToSkRRect(inner), paint());
203}

References flutter::DlSkPaintDispatchHelper::paint(), and flutter::ToSkRRect().

◆ drawDisplayList()

void flutter::DlSkCanvasDispatcher::drawDisplayList ( const sk_sp< DisplayList display_list,
DlScalar  opacity 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 294 of file dl_sk_dispatcher.cc.

296 {
297 const int restore_count = canvas_->getSaveCount();
298
299 // Compute combined opacity and figure out whether we can apply it
300 // during dispatch or if we need a saveLayer.
301 SkScalar combined_opacity = opacity * this->opacity();
302 if (combined_opacity < SK_Scalar1 &&
303 !display_list->can_apply_group_opacity()) {
304 TRACE_EVENT0("flutter", "Canvas::saveLayer");
305 canvas_->saveLayerAlphaf(ToSkRect(&display_list->GetBounds()),
307 combined_opacity = SK_Scalar1;
308 } else {
309 canvas_->save();
310 }
311
312 // Create a new CanvasDispatcher to isolate the actions of the
313 // display_list from the current environment.
314 DlSkCanvasDispatcher dispatcher(canvas_, combined_opacity);
315 if (display_list->rtree()) {
316 display_list->Dispatch(dispatcher, ToDlRect(canvas_->getLocalClipBounds()));
317 } else {
318 display_list->Dispatch(dispatcher);
319 }
320
321 // Restore canvas state to what it was before dispatching.
322 canvas_->restoreToCount(restore_count);
323}
DlSkCanvasDispatcher(SkCanvas *canvas, DlScalar opacity=SK_Scalar1)
const DlRect & ToDlRect(const SkRect &rect)
#define TRACE_EVENT0(category_group, name)

References flutter::DlSkPaintDispatchHelper::combined_opacity(), flutter::DlSkPaintDispatchHelper::opacity(), flutter::ToDlRect(), flutter::ToSkRect(), and TRACE_EVENT0.

◆ drawImage()

void flutter::DlSkCanvasDispatcher::drawImage ( const sk_sp< DlImage image,
const DlPoint point,
DlImageSampling  sampling,
bool  render_with_attributes 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 229 of file dl_sk_dispatcher.cc.

232 {
234 auto skia_image = image->asSkiaImage();
235 FML_DCHECK(skia_image);
236 canvas_->drawImage(skia_image->skia_image().get(), point.x, point.y,
237 ToSk(sampling), safe_paint(render_with_attributes));
238}
FlutterVulkanImage * image

References FML_DCHECK, image, safe_paint(), flutter::ToSk(), impeller::TPoint< T >::x, and impeller::TPoint< T >::y.

◆ drawImageNine()

void flutter::DlSkCanvasDispatcher::drawImageNine ( const sk_sp< DlImage image,
const DlIRect center,
const DlRect dst,
DlFilterMode  filter,
bool  render_with_attributes 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 252 of file dl_sk_dispatcher.cc.

256 {
258 auto skia_image = image->asSkiaImage();
259 FML_DCHECK(skia_image);
260 canvas_->drawImageNine(skia_image->skia_image().get(), ToSkIRect(center),
261 ToSkRect(dst), ToSk(filter),
262 safe_paint(render_with_attributes));
263}
const SkIRect & ToSkIRect(const DlIRect &rect)

References FML_DCHECK, image, safe_paint(), flutter::ToSk(), flutter::ToSkIRect(), and flutter::ToSkRect().

◆ drawImageRect()

void flutter::DlSkCanvasDispatcher::drawImageRect ( const sk_sp< DlImage image,
const DlRect src,
const DlRect dst,
DlImageSampling  sampling,
bool  render_with_attributes,
DlSrcRectConstraint  constraint 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 239 of file dl_sk_dispatcher.cc.

244 {
246 auto skia_image = image->asSkiaImage();
247 FML_DCHECK(skia_image);
248 canvas_->drawImageRect(skia_image->skia_image().get(), ToSkRect(src),
249 ToSkRect(dst), ToSk(sampling),
250 safe_paint(render_with_attributes), ToSk(constraint));
251}

References FML_DCHECK, image, safe_paint(), flutter::ToSk(), and flutter::ToSkRect().

◆ drawLine()

void flutter::DlSkCanvasDispatcher::drawLine ( const DlPoint p0,
const DlPoint p1 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 176 of file dl_sk_dispatcher.cc.

176 {
177 canvas_->drawLine(ToSkPoint(p0), ToSkPoint(p1), paint());
178}

References p1, flutter::DlSkPaintDispatchHelper::paint(), and flutter::ToSkPoint().

◆ drawOval()

void flutter::DlSkCanvasDispatcher::drawOval ( const DlRect bounds)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 191 of file dl_sk_dispatcher.cc.

191 {
192 canvas_->drawOval(ToSkRect(bounds), paint());
193}

References flutter::DlSkPaintDispatchHelper::paint(), and flutter::ToSkRect().

◆ drawPaint()

void flutter::DlSkCanvasDispatcher::drawPaint ( )
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 159 of file dl_sk_dispatcher.cc.

159 {
160 const SkPaint& sk_paint = paint();
161 SkImageFilter* filter = sk_paint.getImageFilter();
162 if (filter && !filter->asColorFilter(nullptr)) {
163 // drawPaint does an implicit saveLayer if an SkImageFilter is
164 // present that cannot be replaced by an SkColorFilter.
165 TRACE_EVENT0("flutter", "Canvas::saveLayer");
166 }
167 canvas_->drawPaint(sk_paint);
168}

References flutter::DlSkPaintDispatchHelper::paint(), and TRACE_EVENT0.

◆ drawPath()

void flutter::DlSkCanvasDispatcher::drawPath ( const DlPath path)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 209 of file dl_sk_dispatcher.cc.

209 {
210 path.WillRenderSkPath();
211 canvas_->drawPath(path.GetSkPath(), paint());
212}

References flutter::DlSkPaintDispatchHelper::paint(), and flutter::path.

◆ drawPoints()

void flutter::DlSkCanvasDispatcher::drawPoints ( DlPointMode  mode,
uint32_t  count,
const DlPoint  pts[] 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 219 of file dl_sk_dispatcher.cc.

221 {
222 canvas_->drawPoints(ToSk(mode), {ToSkPoints(pts), count}, paint());
223}
const SkPoint * ToSkPoints(const DlPoint *points)

References flutter::mode, flutter::DlSkPaintDispatchHelper::paint(), flutter::ToSk(), and flutter::ToSkPoints().

◆ drawRect()

void flutter::DlSkCanvasDispatcher::drawRect ( const DlRect rect)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 188 of file dl_sk_dispatcher.cc.

188 {
189 canvas_->drawRect(ToSkRect(rect), paint());
190}

References flutter::DlSkPaintDispatchHelper::paint(), and flutter::ToSkRect().

◆ drawRoundRect()

void flutter::DlSkCanvasDispatcher::drawRoundRect ( const DlRoundRect rrect)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 197 of file dl_sk_dispatcher.cc.

197 {
198 canvas_->drawRRect(ToSkRRect(rrect), paint());
199}

References flutter::DlSkPaintDispatchHelper::paint(), and flutter::ToSkRRect().

◆ drawRoundSuperellipse()

void flutter::DlSkCanvasDispatcher::drawRoundSuperellipse ( const DlRoundSuperellipse rse)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 204 of file dl_sk_dispatcher.cc.

205 {
206 // Skia doesn't support round superellipse, thus fall back to round rectangle.
207 canvas_->drawRRect(ToApproximateSkRRect(rse), paint());
208}

References flutter::DlSkPaintDispatchHelper::paint(), and flutter::ToApproximateSkRRect().

◆ drawShadow()

void flutter::DlSkCanvasDispatcher::drawShadow ( const DlPath path,
const DlColor  color,
const DlScalar  elevation,
bool  transparent_occluder,
DlScalar  dpr 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 359 of file dl_sk_dispatcher.cc.

363 {
364 path.WillRenderSkPath();
365 DrawShadow(canvas_, path.GetSkPath(), color, elevation, transparent_occluder,
366 dpr);
367}
static void DrawShadow(SkCanvas *canvas, const SkPath &path, DlColor color, float elevation, bool transparentOccluder, DlScalar dpr)

References DrawShadow(), and flutter::path.

◆ DrawShadow()

void flutter::DlSkCanvasDispatcher::DrawShadow ( SkCanvas *  canvas,
const SkPath &  path,
DlColor  color,
float  elevation,
bool  transparentOccluder,
DlScalar  dpr 
)
static

Definition at line 332 of file dl_sk_dispatcher.cc.

337 {
338 const SkScalar kAmbientAlpha = 0.039f;
339 const SkScalar kSpotAlpha = 0.25f;
340
341 uint32_t flags = transparentOccluder
342 ? SkShadowFlags::kTransparentOccluder_ShadowFlag
343 : SkShadowFlags::kNone_ShadowFlag;
344 flags |= SkShadowFlags::kDirectionalLight_ShadowFlag;
345 SkColor in_ambient =
346 SkColorSetA(ToSkColor(color), kAmbientAlpha * color.getAlpha());
347 SkColor in_spot =
348 SkColorSetA(ToSkColor(color), kSpotAlpha * color.getAlpha());
349 SkColor ambient_color, spot_color;
350 SkShadowUtils::ComputeTonalColors(in_ambient, in_spot, &ambient_color,
351 &spot_color);
352 SkShadowUtils::DrawShadow(
353 canvas, path, SkPoint3::Make(0, 0, dpr * elevation),
354 SkPoint3::Make(0, -1, 1),
356 ambient_color, spot_color, flags);
357}
static constexpr DlScalar kShadowLightHeight
Definition dl_canvas.h:215
static constexpr DlScalar kShadowLightRadius
Definition dl_canvas.h:216
SkColor ToSkColor(DlColor color)

References flutter::DlColor::getAlpha(), flutter::DlCanvas::kShadowLightHeight, flutter::DlCanvas::kShadowLightRadius, flutter::path, and flutter::ToSkColor().

Referenced by flutter::DlSkCanvasAdapter::DrawShadow(), and drawShadow().

◆ drawText()

void flutter::DlSkCanvasDispatcher::drawText ( const std::shared_ptr< DlText > &  text,
DlScalar  x,
DlScalar  y 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 324 of file dl_sk_dispatcher.cc.

326 {
327 auto blob = text->GetTextBlob();
328 FML_CHECK(blob) << "Impeller DlText cannot be drawn to a Skia canvas.";
329 canvas_->drawTextBlob(blob, x, y, paint());
330}
int32_t x
#define FML_CHECK(condition)
Definition logging.h:104
std::u16string text
double y

References FML_CHECK, flutter::DlSkPaintDispatchHelper::paint(), text, x, and y.

◆ drawVertices()

void flutter::DlSkCanvasDispatcher::drawVertices ( const std::shared_ptr< DlVertices > &  vertices,
DlBlendMode  mode 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 224 of file dl_sk_dispatcher.cc.

226 {
227 canvas_->drawVertices(ToSk(vertices), ToSk(mode), paint());
228}

References flutter::mode, flutter::DlSkPaintDispatchHelper::paint(), and flutter::ToSk().

◆ restore()

void flutter::DlSkCanvasDispatcher::restore ( )
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 49 of file dl_sk_dispatcher.cc.

49 {
50 canvas_->restore();
52}

References flutter::DlSkPaintDispatchHelper::restore_opacity().

◆ rotate()

void flutter::DlSkCanvasDispatcher::rotate ( DlScalar  degrees)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 97 of file dl_sk_dispatcher.cc.

97 {
98 canvas_->rotate(degrees);
99}

◆ safe_paint()

const SkPaint * flutter::DlSkCanvasDispatcher::safe_paint ( bool  use_attributes)

Definition at line 23 of file dl_sk_dispatcher.cc.

23 {
24 if (use_attributes) {
25 // The accumulated SkPaint object will already have incorporated
26 // any attribute overrides.
27 // Any rendering operation that uses an optional paint will ignore
28 // the shader in the paint so we inform that |paint()| method so
29 // that it can set the dither flag appropriately.
30 return &paint(false);
31 } else if (has_opacity()) {
32 temp_paint_.setAlphaf(opacity());
33 return &temp_paint_;
34 } else {
35 return nullptr;
36 }
37}

References flutter::DlSkPaintDispatchHelper::has_opacity(), flutter::DlSkPaintDispatchHelper::opacity(), and flutter::DlSkPaintDispatchHelper::paint().

Referenced by drawAtlas(), drawImage(), drawImageNine(), drawImageRect(), saveLayer(), flutter::testing::TEST(), and flutter::testing::TEST().

◆ save()

void flutter::DlSkCanvasDispatcher::save ( )
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 39 of file dl_sk_dispatcher.cc.

39 {
40 canvas_->save();
41 // save has no impact on attributes, but it needs to register a record
42 // on the restore stack so that the eventual call to restore() will
43 // know what to do at that time. We could annotate the restore record
44 // with a flag that the record came from a save call, but it is simpler
45 // to just pass in the current opacity value as the value to be used by
46 // the children and let the utility calls notice that it didn't change.
48}
void save_opacity(SkScalar opacity_for_children)

References flutter::DlSkPaintDispatchHelper::opacity(), and flutter::DlSkPaintDispatchHelper::save_opacity().

◆ saveLayer()

void flutter::DlSkCanvasDispatcher::saveLayer ( const DlRect bounds,
const SaveLayerOptions  options,
const DlImageFilter backdrop,
std::optional< int64_t >  backdrop_id 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 53 of file dl_sk_dispatcher.cc.

56 {
57 if (!options.content_is_clipped() && options.can_distribute_opacity() &&
58 backdrop == nullptr) {
59 // We know that:
60 // - no bounds is needed for clipping here
61 // - no backdrop filter is used to initialize the layer
62 // - the current attributes only have an alpha
63 // - the children are compatible with individually rendering with
64 // an inherited opacity
65 // Therefore we can just use a save instead of a saveLayer and pass the
66 // intended opacity to the children.
67 canvas_->save();
68 // If the saveLayer does not use attributes, the children should continue
69 // to render with the inherited opacity unmodified. If attributes are to
70 // be applied, the children should render with the combination of the
71 // inherited opacity combined with the alpha from the current color.
72 save_opacity(options.renders_with_attributes() ? combined_opacity()
73 : opacity());
74 } else {
75 TRACE_EVENT0("flutter", "Canvas::saveLayer");
76 const SkPaint* paint = safe_paint(options.renders_with_attributes());
77 const sk_sp<SkImageFilter> sk_backdrop = ToSk(backdrop);
78 const SkRect* sl_bounds =
79 options.bounds_from_caller() ? &ToSkRect(bounds) : nullptr;
80 SkCanvas::SaveLayerRec params(sl_bounds, paint, sk_backdrop.get(), 0);
81 if (sk_backdrop && backdrop->asBlur()) {
82 params.fBackdropTileMode = ToSk(backdrop->asBlur()->tile_mode());
83 }
84 canvas_->saveLayer(params);
85 // saveLayer will apply the current opacity on behalf of the children
86 // so they will inherit an opaque opacity.
87 save_opacity(SK_Scalar1);
88 }
89}
const EmbeddedViewParams * params

References flutter::DlImageFilter::asBlur(), flutter::SaveLayerOptions::bounds_from_caller(), flutter::SaveLayerOptions::can_distribute_opacity(), flutter::DlSkPaintDispatchHelper::combined_opacity(), flutter::SaveLayerOptions::content_is_clipped(), flutter::DlSkPaintDispatchHelper::opacity(), flutter::DlSkPaintDispatchHelper::paint(), params, flutter::SaveLayerOptions::renders_with_attributes(), safe_paint(), flutter::DlSkPaintDispatchHelper::save_opacity(), flutter::DlBlurImageFilter::tile_mode(), flutter::ToSk(), flutter::ToSkRect(), and TRACE_EVENT0.

◆ scale()

void flutter::DlSkCanvasDispatcher::scale ( DlScalar  sx,
DlScalar  sy 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 94 of file dl_sk_dispatcher.cc.

94 {
95 canvas_->scale(sx, sy);
96}

◆ skew()

void flutter::DlSkCanvasDispatcher::skew ( DlScalar  sx,
DlScalar  sy 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 100 of file dl_sk_dispatcher.cc.

100 {
101 canvas_->skew(sx, sy);
102}

◆ transform2DAffine()

void flutter::DlSkCanvasDispatcher::transform2DAffine ( DlScalar  mxx,
DlScalar  mxy,
DlScalar  mxt,
DlScalar  myx,
DlScalar  myy,
DlScalar  myt 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 105 of file dl_sk_dispatcher.cc.

107 {
108 // Internally concat(SkMatrix) gets redirected to concat(SkM44)
109 // so we just jump directly to the SkM44 version
110 canvas_->concat(SkM44(mxx, mxy, 0, mxt,
111 myx, myy, 0, myt,
112 0, 0, 1, 0,
113 0, 0, 0, 1));
114}

◆ transformFullPerspective()

void flutter::DlSkCanvasDispatcher::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 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 116 of file dl_sk_dispatcher.cc.

120 {
121 canvas_->concat(SkM44(mxx, mxy, mxz, mxt,
122 myx, myy, myz, myt,
123 mzx, mzy, mzz, mzt,
124 mwx, mwy, mwz, mwt));
125}

◆ transformReset()

void flutter::DlSkCanvasDispatcher::transformReset ( )
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 127 of file dl_sk_dispatcher.cc.

127 {
128 canvas_->setMatrix(original_transform_);
129}

◆ translate()

void flutter::DlSkCanvasDispatcher::translate ( DlScalar  tx,
DlScalar  ty 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 91 of file dl_sk_dispatcher.cc.

91 {
92 canvas_->translate(tx, ty);
93}

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