Flutter Engine
 
Loading...
Searching...
No Matches
flutter::Canvas Class Reference

#include <canvas.h>

Inheritance diagram for flutter::Canvas:
flutter::RefCountedDartWrappable< Canvas > flutter::DisplayListOpFlags fml::RefCountedThreadSafe< T > tonic::DartWrappable fml::internal::RefCountedThreadSafeBase

Public Member Functions

 ~Canvas () override
 
void save ()
 
void saveLayerWithoutBounds (Dart_Handle paint_objects, Dart_Handle paint_data)
 
void saveLayer (double left, double top, double right, double bottom, Dart_Handle paint_objects, Dart_Handle paint_data)
 
void restore ()
 
int getSaveCount ()
 
void restoreToCount (int count)
 
void translate (double dx, double dy)
 
void scale (double sx, double sy)
 
void rotate (double radians)
 
void skew (double sx, double sy)
 
void transform (const tonic::Float64List &matrix4)
 
void getTransform (Dart_Handle matrix4_handle)
 
void clipRect (double left, double top, double right, double bottom, DlClipOp clipOp, bool doAntiAlias=true)
 
void clipRRect (const RRect &rrect, bool doAntiAlias=true)
 
void clipRSuperellipse (const RSuperellipse *rse, bool doAntiAlias=true)
 
void clipPath (const CanvasPath *path, bool doAntiAlias=true)
 
void getDestinationClipBounds (Dart_Handle rect_handle)
 
void getLocalClipBounds (Dart_Handle rect_handle)
 
void drawColor (uint32_t color, DlBlendMode blend_mode)
 
void drawLine (double x1, double y1, double x2, double y2, Dart_Handle paint_objects, Dart_Handle paint_data)
 
void drawPaint (Dart_Handle paint_objects, Dart_Handle paint_data)
 
void drawRect (double left, double top, double right, double bottom, Dart_Handle paint_objects, Dart_Handle paint_data)
 
void drawRRect (const RRect &rrect, Dart_Handle paint_objects, Dart_Handle paint_data)
 
void drawDRRect (const RRect &outer, const RRect &inner, Dart_Handle paint_objects, Dart_Handle paint_data)
 
void drawRSuperellipse (const RSuperellipse *rse, Dart_Handle paint_objects, Dart_Handle paint_data)
 
void drawOval (double left, double top, double right, double bottom, Dart_Handle paint_objects, Dart_Handle paint_data)
 
void drawCircle (double x, double y, double radius, Dart_Handle paint_objects, Dart_Handle paint_data)
 
void drawArc (double left, double top, double right, double bottom, double startAngle, double sweepAngle, bool useCenter, Dart_Handle paint_objects, Dart_Handle paint_data)
 
void drawPath (const CanvasPath *path, Dart_Handle paint_objects, Dart_Handle paint_data)
 
Dart_Handle drawImage (const CanvasImage *image, double x, double y, Dart_Handle paint_objects, Dart_Handle paint_data, int filterQualityIndex)
 
Dart_Handle drawImageRect (const CanvasImage *image, double src_left, double src_top, double src_right, double src_bottom, double dst_left, double dst_top, double dst_right, double dst_bottom, Dart_Handle paint_objects, Dart_Handle paint_data, int filterQualityIndex)
 
Dart_Handle drawImageNine (const CanvasImage *image, double center_left, double center_top, double center_right, double center_bottom, double dst_left, double dst_top, double dst_right, double dst_bottom, Dart_Handle paint_objects, Dart_Handle paint_data, int bitmapSamplingIndex)
 
void drawPicture (Picture *picture)
 
void drawPoints (Dart_Handle paint_objects, Dart_Handle paint_data, DlPointMode point_mode, const tonic::Float32List &points)
 
void drawVertices (const Vertices *vertices, DlBlendMode blend_mode, Dart_Handle paint_objects, Dart_Handle paint_data)
 
Dart_Handle drawAtlas (Dart_Handle paint_objects, Dart_Handle paint_data, int filterQualityIndex, CanvasImage *atlas, Dart_Handle transforms_handle, Dart_Handle rects_handle, Dart_Handle colors_handle, DlBlendMode blend_mode, Dart_Handle cull_rect_handle)
 
void drawShadow (const CanvasPath *path, uint32_t color, double elevation, bool transparentOccluder)
 
void Invalidate ()
 
DisplayListBuilderbuilder ()
 
- Public Member Functions inherited from flutter::RefCountedDartWrappable< Canvas >
virtual void RetainDartWrappableReference () const override
 
virtual void ReleaseDartWrappableReference () const override
 
- Public Member Functions inherited from fml::RefCountedThreadSafe< T >
void Release () const
 
- Public Member Functions inherited from fml::internal::RefCountedThreadSafeBase
void AddRef () const
 
bool HasOneRef () const
 
void AssertHasOneRef () const
 
- Public Member Functions inherited from tonic::DartWrappable
 DartWrappable ()
 
virtual const DartWrapperInfoGetDartWrapperInfo () const =0
 
Dart_Handle CreateDartWrapper (DartState *dart_state)
 
void AssociateWithDartWrapper (Dart_Handle wrappable)
 
void ClearDartWrapper ()
 
Dart_WeakPersistentHandle dart_wrapper () const
 

Static Public Member Functions

static void Create (Dart_Handle wrapper, PictureRecorder *recorder, double left, double top, double right, double bottom)
 

Additional Inherited Members

- Public Types inherited from tonic::DartWrappable
enum  DartNativeFields {
  kPeerIndex ,
  kNumberOfNativeFields
}
 
- Protected Member Functions inherited from fml::RefCountedThreadSafe< T >
 RefCountedThreadSafe ()
 
 ~RefCountedThreadSafe ()
 
- Protected Member Functions inherited from fml::internal::RefCountedThreadSafeBase
 RefCountedThreadSafeBase ()
 
 ~RefCountedThreadSafeBase ()
 
bool Release () const
 
void Adopt ()
 
- Protected Member Functions inherited from tonic::DartWrappable
virtual ~DartWrappable ()
 
- Static Protected Member Functions inherited from tonic::DartWrappable
static Dart_PersistentHandle GetTypeForWrapper (tonic::DartState *dart_state, const tonic::DartWrapperInfo &wrapper_info)
 

Detailed Description

Definition at line 22 of file canvas.h.

Constructor & Destructor Documentation

◆ ~Canvas()

Member Function Documentation

◆ builder()

DisplayListBuilder * flutter::Canvas::builder ( )
inline

Definition at line 195 of file canvas.h.

195{ return display_list_builder_.get(); }

◆ clipPath()

void flutter::Canvas::clipPath ( const CanvasPath path,
bool  doAntiAlias = true 
)

Definition at line 187 of file canvas.cc.

187 {
188 if (!path) {
189 Dart_ThrowException(
190 ToDart("Canvas.clipPath called with non-genuine Path."));
191 return;
192 }
193 if (display_list_builder_) {
194 builder()->ClipPath(path->path(), DlClipOp::kIntersect, doAntiAlias);
195 }
196}
DisplayListBuilder * builder()
Definition canvas.h:195
void ClipPath(const DlPath &path, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false) override
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
Dart_Handle ToDart(const T &object)

References flutter::path.

Referenced by ~Canvas().

◆ clipRect()

void flutter::Canvas::clipRect ( double  left,
double  top,
double  right,
double  bottom,
DlClipOp  clipOp,
bool  doAntiAlias = true 
)

Definition at line 161 of file canvas.cc.

166 {
167 if (display_list_builder_) {
168 builder()->ClipRect(DlRect::MakeLTRB(SafeNarrow(left), SafeNarrow(top),
169 SafeNarrow(right), SafeNarrow(bottom)),
170 clipOp, doAntiAlias);
171 }
172}
void ClipRect(const DlRect &rect, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false) override
static constexpr TRect MakeLTRB(Type left, Type top, Type right, Type bottom)
Definition rect.h:129

References impeller::TRect< Scalar >::MakeLTRB().

Referenced by ~Canvas().

◆ clipRRect()

void flutter::Canvas::clipRRect ( const RRect rrect,
bool  doAntiAlias = true 
)

Definition at line 174 of file canvas.cc.

174 {
175 if (display_list_builder_) {
176 builder()->ClipRoundRect(rrect.rrect, DlClipOp::kIntersect, doAntiAlias);
177 }
178}
void ClipRoundRect(const DlRoundRect &rrect, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false) override

References flutter::RRect::rrect.

Referenced by ~Canvas().

◆ clipRSuperellipse()

void flutter::Canvas::clipRSuperellipse ( const RSuperellipse rse,
bool  doAntiAlias = true 
)

Definition at line 180 of file canvas.cc.

180 {
181 if (display_list_builder_) {
182 builder()->ClipRoundSuperellipse(rse->rsuperellipse(), DlClipOp::kIntersect,
183 doAntiAlias);
184 }
185}
void ClipRoundSuperellipse(const DlRoundSuperellipse &rse, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false) override

References flutter::RSuperellipse::rsuperellipse().

Referenced by ~Canvas().

◆ Create()

void flutter::Canvas::Create ( Dart_Handle  wrapper,
PictureRecorder recorder,
double  left,
double  top,
double  right,
double  bottom 
)
static

Definition at line 23 of file canvas.cc.

28 {
29 UIDartState::ThrowIfUIOperationsProhibited();
30
31 if (!recorder) {
32 Dart_ThrowException(
33 ToDart("Canvas constructor called with non-genuine PictureRecorder."));
34 return;
35 }
36
37 fml::RefPtr<Canvas> canvas =
38 fml::MakeRefCounted<Canvas>(recorder->BeginRecording(
39 DlRect::MakeLTRB(SafeNarrow(left), SafeNarrow(top), SafeNarrow(right),
40 SafeNarrow(bottom))));
41 recorder->set_canvas(canvas);
42 canvas->AssociateWithDartWrapper(wrapper);
43}

References flutter::PictureRecorder::BeginRecording(), impeller::TRect< Scalar >::MakeLTRB(), and flutter::PictureRecorder::set_canvas().

◆ drawArc()

void flutter::Canvas::drawArc ( double  left,
double  top,
double  right,
double  bottom,
double  startAngle,
double  sweepAngle,
bool  useCenter,
Dart_Handle  paint_objects,
Dart_Handle  paint_data 
)

Definition at line 352 of file canvas.cc.

360 {
361 Paint paint(paint_objects, paint_data);
362
363 FML_DCHECK(paint.isNotNull());
364 if (display_list_builder_) {
365 DlPaint dl_paint;
366 paint.paint(dl_paint,
367 useCenter ? kDrawArcWithCenterFlags : kDrawArcNoCenterFlags,
369 builder()->DrawArc(
370 DlRect::MakeLTRB(SafeNarrow(left), SafeNarrow(top), SafeNarrow(right),
371 SafeNarrow(bottom)),
372 SafeNarrow(startAngle) * 180.0f / static_cast<float>(M_PI),
373 SafeNarrow(sweepAngle) * 180.0f / static_cast<float>(M_PI), useCenter,
374 dl_paint);
375 }
376}
void DrawArc(const DlRect &bounds, DlScalar start, DlScalar sweep, bool useCenter, const DlPaint &paint) override
#define FML_DCHECK(condition)
Definition logging.h:122
@ kDecal
decal sampling mode is only supported on devices that pass the Capabilities.SupportsDecalSamplerAddre...
flutter::DlPaint DlPaint

References FML_DCHECK, and impeller::TRect< Scalar >::MakeLTRB().

Referenced by ~Canvas().

◆ drawAtlas()

Dart_Handle flutter::Canvas::drawAtlas ( Dart_Handle  paint_objects,
Dart_Handle  paint_data,
int  filterQualityIndex,
CanvasImage atlas,
Dart_Handle  transforms_handle,
Dart_Handle  rects_handle,
Dart_Handle  colors_handle,
DlBlendMode  blend_mode,
Dart_Handle  cull_rect_handle 
)

Definition at line 579 of file canvas.cc.

587 {
588 Paint paint(paint_objects, paint_data);
589
590 if (!atlas) {
591 return ToDart(
592 "Canvas.drawAtlas or Canvas.drawRawAtlas called with "
593 "non-genuine Image.");
594 }
595
596 auto dl_image = atlas->image();
597 auto error = dl_image->get_error();
598 if (error) {
599 return ToDart(error.value());
600 }
601
602 static_assert(sizeof(DlRSTransform) == sizeof(float) * 4,
603 "DlRSTransform doesn't use floats.");
604 static_assert(sizeof(DlRect) == sizeof(float) * 4,
605 "DlRect doesn't use floats.");
606
607 auto sampling = ImageFilter::SamplingFromIndex(filterQualityIndex);
608
609 FML_DCHECK(paint.isNotNull());
610 if (display_list_builder_) {
611 tonic::Float32List transforms(transforms_handle);
612 tonic::Float32List rects(rects_handle);
613 tonic::Int32List colors(colors_handle);
614 tonic::Float32List cull_rect(cull_rect_handle);
615
616 std::vector<DlColor> dl_color(colors.num_elements());
617 size_t count = colors.num_elements();
618 for (size_t i = 0; i < count; i++) {
619 dl_color[i] = DlColor(colors[i]);
620 }
621
622 DlPaint dl_paint;
623 const DlPaint* opt_paint =
624 paint.paint(dl_paint, kDrawAtlasWithPaintFlags, DlTileMode::kClamp);
626 dl_image, reinterpret_cast<const DlRSTransform*>(transforms.data()),
627 reinterpret_cast<const DlRect*>(rects.data()), dl_color.data(),
628 rects.num_elements() / 4, // DlRect have four floats.
629 blend_mode, sampling, reinterpret_cast<const DlRect*>(cull_rect.data()),
630 opt_paint);
631 }
632 return Dart_Null();
633}
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) override
const uint8_t uint32_t uint32_t GError ** error
impeller::RSTransform DlRSTransform
flutter::DlRect DlRect
flutter::DlColor DlColor

References error, FML_DCHECK, i, and flutter::CanvasImage::image().

Referenced by ~Canvas().

◆ drawCircle()

void flutter::Canvas::drawCircle ( double  x,
double  y,
double  radius,
Dart_Handle  paint_objects,
Dart_Handle  paint_data 
)

Definition at line 336 of file canvas.cc.

340 {
341 Paint paint(paint_objects, paint_data);
342
343 FML_DCHECK(paint.isNotNull());
344 if (display_list_builder_) {
345 DlPaint dl_paint;
346 paint.paint(dl_paint, kDrawCircleFlags, DlTileMode::kDecal);
347 builder()->DrawCircle(DlPoint(SafeNarrow(x), SafeNarrow(y)),
348 SafeNarrow(radius), dl_paint);
349 }
350}
void DrawCircle(const DlPoint &center, DlScalar radius, const DlPaint &paint) override
int32_t x
double y
flutter::DlPoint DlPoint

References FML_DCHECK, x, and y.

Referenced by ~Canvas().

◆ drawColor()

void flutter::Canvas::drawColor ( uint32_t  color,
DlBlendMode  blend_mode 
)

Definition at line 220 of file canvas.cc.

220 {
221 if (display_list_builder_) {
222 builder()->DrawColor(DlColor(color), blend_mode);
223 }
224}
void DrawColor(DlColor color, DlBlendMode mode) override

Referenced by ~Canvas().

◆ drawDRRect()

void flutter::Canvas::drawDRRect ( const RRect outer,
const RRect inner,
Dart_Handle  paint_objects,
Dart_Handle  paint_data 
)

Definition at line 291 of file canvas.cc.

294 {
295 Paint paint(paint_objects, paint_data);
296
297 FML_DCHECK(paint.isNotNull());
298 if (display_list_builder_) {
299 DlPaint dl_paint;
300 paint.paint(dl_paint, kDrawDRRectFlags, DlTileMode::kDecal);
301 builder()->DrawDiffRoundRect(outer.rrect, inner.rrect, dl_paint);
302 }
303}
void DrawDiffRoundRect(const DlRoundRect &outer, const DlRoundRect &inner, const DlPaint &paint) override

References FML_DCHECK, and flutter::RRect::rrect.

Referenced by ~Canvas().

◆ drawImage()

Dart_Handle flutter::Canvas::drawImage ( const CanvasImage image,
double  x,
double  y,
Dart_Handle  paint_objects,
Dart_Handle  paint_data,
int  filterQualityIndex 
)

Definition at line 396 of file canvas.cc.

401 {
402 Paint paint(paint_objects, paint_data);
403
404 FML_DCHECK(paint.isNotNull());
405 if (!image) {
406 return ToDart("Canvas.drawImage called with non-genuine Image.");
407 }
408
409 auto dl_image = image->image();
410 if (!dl_image) {
411 return Dart_Null();
412 }
413 auto error = dl_image->get_error();
414 if (error) {
415 return ToDart(error.value());
416 }
417
418 auto sampling = ImageFilter::SamplingFromIndex(filterQualityIndex);
419 if (display_list_builder_) {
420 DlPaint dl_paint;
421 const DlPaint* opt_paint =
422 paint.paint(dl_paint, kDrawImageWithPaintFlags, DlTileMode::kClamp);
423 builder()->DrawImage(dl_image, DlPoint(SafeNarrow(x), SafeNarrow(y)),
424 sampling, opt_paint);
425 }
426 return Dart_Null();
427}
void DrawImage(const sk_sp< DlImage > &image, const DlPoint &point, DlImageSampling sampling, const DlPaint *paint=nullptr) override
FlutterVulkanImage * image
FlutterVulkanImageHandle image
Definition embedder.h:931

References error, FML_DCHECK, FlutterVulkanImage::image, image, x, and y.

Referenced by ~Canvas().

◆ drawImageNine()

Dart_Handle flutter::Canvas::drawImageNine ( const CanvasImage image,
double  center_left,
double  center_top,
double  center_right,
double  center_bottom,
double  dst_left,
double  dst_top,
double  dst_right,
double  dst_bottom,
Dart_Handle  paint_objects,
Dart_Handle  paint_data,
int  bitmapSamplingIndex 
)

Definition at line 472 of file canvas.cc.

483 {
484 Paint paint(paint_objects, paint_data);
485
486 FML_DCHECK(paint.isNotNull());
487 if (!image) {
488 return ToDart("Canvas.drawImageNine called with non-genuine Image.");
489 }
490 auto dl_image = image->image();
491 if (!dl_image) {
492 return Dart_Null();
493 }
494 auto error = dl_image->get_error();
495 if (error) {
496 return ToDart(error.value());
497 }
498
499 DlRect center =
500 DlRect::MakeLTRB(SafeNarrow(center_left), SafeNarrow(center_top),
501 SafeNarrow(center_right), SafeNarrow(center_bottom));
502 DlIRect icenter = DlIRect::Round(center);
503 DlRect dst = DlRect::MakeLTRB(SafeNarrow(dst_left), SafeNarrow(dst_top),
504 SafeNarrow(dst_right), SafeNarrow(dst_bottom));
505 auto filter = ImageFilter::FilterModeFromIndex(bitmapSamplingIndex);
506 if (display_list_builder_) {
507 DlPaint dl_paint;
508 const DlPaint* opt_paint =
509 paint.paint(dl_paint, kDrawImageNineWithPaintFlags, DlTileMode::kClamp);
510 builder()->DrawImageNine(dl_image, icenter, dst, filter, opt_paint);
511 }
512 return Dart_Null();
513}
void DrawImageNine(const sk_sp< DlImage > &image, const DlIRect &center, const DlRect &dst, DlFilterMode filter, const DlPaint *paint=nullptr) override
flutter::DlIRect DlIRect
Round(const TRect< U > &r)
Definition rect.h:695

References error, FML_DCHECK, FlutterVulkanImage::image, image, impeller::TRect< Scalar >::MakeLTRB(), and impeller::TRect< T >::Round().

Referenced by ~Canvas().

◆ drawImageRect()

Dart_Handle flutter::Canvas::drawImageRect ( const CanvasImage image,
double  src_left,
double  src_top,
double  src_right,
double  src_bottom,
double  dst_left,
double  dst_top,
double  dst_right,
double  dst_bottom,
Dart_Handle  paint_objects,
Dart_Handle  paint_data,
int  filterQualityIndex 
)

Definition at line 429 of file canvas.cc.

440 {
441 Paint paint(paint_objects, paint_data);
442
443 FML_DCHECK(paint.isNotNull());
444 if (!image) {
445 return ToDart("Canvas.drawImageRect called with non-genuine Image.");
446 }
447
448 auto dl_image = image->image();
449 if (!dl_image) {
450 return Dart_Null();
451 }
452 auto error = dl_image->get_error();
453 if (error) {
454 return ToDart(error.value());
455 }
456
457 DlRect src = DlRect::MakeLTRB(SafeNarrow(src_left), SafeNarrow(src_top),
458 SafeNarrow(src_right), SafeNarrow(src_bottom));
459 DlRect dst = DlRect::MakeLTRB(SafeNarrow(dst_left), SafeNarrow(dst_top),
460 SafeNarrow(dst_right), SafeNarrow(dst_bottom));
461 auto sampling = ImageFilter::SamplingFromIndex(filterQualityIndex);
462 if (display_list_builder_) {
463 DlPaint dl_paint;
464 const DlPaint* opt_paint =
465 paint.paint(dl_paint, kDrawImageRectWithPaintFlags, DlTileMode::kClamp);
466 builder()->DrawImageRect(dl_image, src, dst, sampling, opt_paint,
467 DlSrcRectConstraint::kFast);
468 }
469 return Dart_Null();
470}
void DrawImageRect(const sk_sp< DlImage > &image, const DlRect &src, const DlRect &dst, DlImageSampling sampling, const DlPaint *paint=nullptr, DlSrcRectConstraint constraint=DlSrcRectConstraint::kFast) override

References error, FML_DCHECK, FlutterVulkanImage::image, image, and impeller::TRect< Scalar >::MakeLTRB().

Referenced by ~Canvas().

◆ drawLine()

void flutter::Canvas::drawLine ( double  x1,
double  y1,
double  x2,
double  y2,
Dart_Handle  paint_objects,
Dart_Handle  paint_data 
)

Definition at line 226 of file canvas.cc.

231 {
232 Paint paint(paint_objects, paint_data);
233
234 FML_DCHECK(paint.isNotNull());
235 if (display_list_builder_) {
236 DlPaint dl_paint;
237 paint.paint(dl_paint, kDrawLineFlags, DlTileMode::kDecal);
238 builder()->DrawLine(DlPoint(SafeNarrow(x1), SafeNarrow(y1)),
239 DlPoint(SafeNarrow(x2), SafeNarrow(y2)), dl_paint);
240 }
241}
void DrawLine(const DlPoint &p0, const DlPoint &p1, const DlPaint &paint) override

References FML_DCHECK.

Referenced by ~Canvas().

◆ drawOval()

void flutter::Canvas::drawOval ( double  left,
double  top,
double  right,
double  bottom,
Dart_Handle  paint_objects,
Dart_Handle  paint_data 
)

Definition at line 318 of file canvas.cc.

323 {
324 Paint paint(paint_objects, paint_data);
325
326 FML_DCHECK(paint.isNotNull());
327 if (display_list_builder_) {
328 DlPaint dl_paint;
329 paint.paint(dl_paint, kDrawOvalFlags, DlTileMode::kDecal);
330 builder()->DrawOval(DlRect::MakeLTRB(SafeNarrow(left), SafeNarrow(top),
331 SafeNarrow(right), SafeNarrow(bottom)),
332 dl_paint);
333 }
334}
void DrawOval(const DlRect &bounds, const DlPaint &paint) override

References FML_DCHECK, and impeller::TRect< Scalar >::MakeLTRB().

Referenced by ~Canvas().

◆ drawPaint()

void flutter::Canvas::drawPaint ( Dart_Handle  paint_objects,
Dart_Handle  paint_data 
)

Definition at line 243 of file canvas.cc.

243 {
244 Paint paint(paint_objects, paint_data);
245
246 FML_DCHECK(paint.isNotNull());
247 if (display_list_builder_) {
248 DlPaint dl_paint;
249 paint.paint(dl_paint, kDrawPaintFlags, DlTileMode::kClamp);
250 std::shared_ptr<DlImageFilter> filter = dl_paint.getImageFilter();
251 if (filter && !filter->asColorFilter()) {
252 // drawPaint does an implicit saveLayer if an DlImageFilter is
253 // present that cannot be replaced by an DlColorFilter.
254 TRACE_EVENT0("flutter", "ui.Canvas::saveLayer (Recorded)");
255 }
256 builder()->DrawPaint(dl_paint);
257 }
258}
void DrawPaint(const DlPaint &paint) override
const std::shared_ptr< DlImageFilter > & getImageFilter() const
Definition dl_paint.h:162
#define TRACE_EVENT0(category_group, name)

References FML_DCHECK, flutter::DlPaint::getImageFilter(), and TRACE_EVENT0.

Referenced by ~Canvas().

◆ drawPath()

void flutter::Canvas::drawPath ( const CanvasPath path,
Dart_Handle  paint_objects,
Dart_Handle  paint_data 
)

Definition at line 378 of file canvas.cc.

380 {
381 Paint paint(paint_objects, paint_data);
382
383 FML_DCHECK(paint.isNotNull());
384 if (!path) {
385 Dart_ThrowException(
386 ToDart("Canvas.drawPath called with non-genuine Path."));
387 return;
388 }
389 if (display_list_builder_) {
390 DlPaint dl_paint;
391 paint.paint(dl_paint, kDrawPathFlags, DlTileMode::kDecal);
392 builder()->DrawPath(path->path(), dl_paint);
393 }
394}
void DrawPath(const DlPath &path, const DlPaint &paint) override

References FML_DCHECK, and flutter::path.

Referenced by ~Canvas().

◆ drawPicture()

void flutter::Canvas::drawPicture ( Picture picture)

Definition at line 515 of file canvas.cc.

515 {
516 if (!picture) {
517 Dart_ThrowException(
518 ToDart("Canvas.drawPicture called with non-genuine Picture."));
519 return;
520 }
521 if (picture->display_list()) {
522 if (display_list_builder_) {
523 builder()->DrawDisplayList(picture->display_list());
524 }
525 } else {
526 FML_DCHECK(false);
527 }
528}
void DrawDisplayList(const sk_sp< DisplayList > display_list, DlScalar opacity=SK_Scalar1) override

References flutter::Picture::display_list(), and FML_DCHECK.

Referenced by ~Canvas().

◆ drawPoints()

void flutter::Canvas::drawPoints ( Dart_Handle  paint_objects,
Dart_Handle  paint_data,
DlPointMode  point_mode,
const tonic::Float32List &  points 
)

Definition at line 530 of file canvas.cc.

533 {
534 Paint paint(paint_objects, paint_data);
535
536 static_assert(sizeof(DlPoint) == sizeof(float) * 2,
537 "DlPoint doesn't use floats.");
538
539 FML_DCHECK(paint.isNotNull());
540 if (display_list_builder_) {
541 DlPaint dl_paint;
542 switch (point_mode) {
543 case DlPointMode::kPoints:
544 paint.paint(dl_paint, kDrawPointsAsPointsFlags, DlTileMode::kDecal);
545 break;
546 case DlPointMode::kLines:
547 paint.paint(dl_paint, kDrawPointsAsLinesFlags, DlTileMode::kDecal);
548 break;
549 case DlPointMode::kPolygon:
550 paint.paint(dl_paint, kDrawPointsAsPolygonFlags, DlTileMode::kDecal);
551 break;
552 }
553 builder()->DrawPoints(point_mode,
554 points.num_elements() / 2, // DlPoints have 2 floats
555 reinterpret_cast<const DlPoint*>(points.data()),
556 dl_paint);
557 }
558}
void DrawPoints(DlPointMode mode, uint32_t count, const DlPoint pts[], const DlPaint &paint) override
std::vector< Point > points

References FML_DCHECK, and points.

Referenced by ~Canvas().

◆ drawRect()

void flutter::Canvas::drawRect ( double  left,
double  top,
double  right,
double  bottom,
Dart_Handle  paint_objects,
Dart_Handle  paint_data 
)

Definition at line 260 of file canvas.cc.

265 {
266 Paint paint(paint_objects, paint_data);
267
268 FML_DCHECK(paint.isNotNull());
269 if (display_list_builder_) {
270 DlPaint dl_paint;
271 paint.paint(dl_paint, kDrawRectFlags, DlTileMode::kDecal);
272 builder()->DrawRect(DlRect::MakeLTRB(SafeNarrow(left), SafeNarrow(top),
273 SafeNarrow(right), SafeNarrow(bottom)),
274 dl_paint);
275 }
276}
void DrawRect(const DlRect &rect, const DlPaint &paint) override

References FML_DCHECK, and impeller::TRect< Scalar >::MakeLTRB().

Referenced by ~Canvas().

◆ drawRRect()

void flutter::Canvas::drawRRect ( const RRect rrect,
Dart_Handle  paint_objects,
Dart_Handle  paint_data 
)

Definition at line 278 of file canvas.cc.

280 {
281 Paint paint(paint_objects, paint_data);
282
283 FML_DCHECK(paint.isNotNull());
284 if (display_list_builder_) {
285 DlPaint dl_paint;
286 paint.paint(dl_paint, kDrawRRectFlags, DlTileMode::kDecal);
287 builder()->DrawRoundRect(rrect.rrect, dl_paint);
288 }
289}
void DrawRoundRect(const DlRoundRect &rrect, const DlPaint &paint) override

References FML_DCHECK, and flutter::RRect::rrect.

Referenced by ~Canvas().

◆ drawRSuperellipse()

void flutter::Canvas::drawRSuperellipse ( const RSuperellipse rse,
Dart_Handle  paint_objects,
Dart_Handle  paint_data 
)

Definition at line 305 of file canvas.cc.

307 {
308 Paint paint(paint_objects, paint_data);
309
310 FML_DCHECK(paint.isNotNull());
311 if (display_list_builder_) {
312 DlPaint dl_paint;
313 paint.paint(dl_paint, kDrawDRRectFlags, DlTileMode::kDecal);
314 builder()->DrawRoundSuperellipse(rse->rsuperellipse(), dl_paint);
315 }
316}
void DrawRoundSuperellipse(const DlRoundSuperellipse &rse, const DlPaint &paint) override

References FML_DCHECK, and flutter::RSuperellipse::rsuperellipse().

Referenced by ~Canvas().

◆ drawShadow()

void flutter::Canvas::drawShadow ( const CanvasPath path,
uint32_t  color,
double  elevation,
bool  transparentOccluder 
)

Definition at line 635 of file canvas.cc.

638 {
639 if (!path) {
640 Dart_ThrowException(
641 ToDart("Canvas.drawShader called with non-genuine Path."));
642 return;
643 }
644
645 // Not using SafeNarrow because DPR will always be a relatively small number.
646 const ViewportMetrics* metrics =
647 UIDartState::Current()->platform_configuration()->GetMetrics(0);
648 DlScalar dpr;
649 // TODO(dkwingsmt): We should support rendering shadows on non-implicit views.
650 // However, currently this method has no way to get the target view ID.
651 if (metrics == nullptr) {
652 dpr = 1.0f;
653 } else {
654 dpr = static_cast<float>(metrics->device_pixel_ratio);
655 }
656 if (display_list_builder_) {
657 builder()->DrawShadow(path->path(), DlColor(color), SafeNarrow(elevation),
658 transparentOccluder, dpr);
659 }
660}
void DrawShadow(const DlPath &path, const DlColor color, const DlScalar elevation, bool transparent_occluder, DlScalar dpr) override
Draws the shadow of the given |path| rendered in the provided |color| (which is only consulted for it...
flutter::DlScalar DlScalar

References flutter::ViewportMetrics::device_pixel_ratio, and flutter::path.

Referenced by ~Canvas().

◆ drawVertices()

void flutter::Canvas::drawVertices ( const Vertices vertices,
DlBlendMode  blend_mode,
Dart_Handle  paint_objects,
Dart_Handle  paint_data 
)

Definition at line 560 of file canvas.cc.

563 {
564 Paint paint(paint_objects, paint_data);
565
566 if (!vertices) {
567 Dart_ThrowException(
568 ToDart("Canvas.drawVertices called with non-genuine Vertices."));
569 return;
570 }
571 FML_DCHECK(paint.isNotNull());
572 if (display_list_builder_) {
573 DlPaint dl_paint;
574 paint.paint(dl_paint, kDrawVerticesFlags, DlTileMode::kDecal);
575 builder()->DrawVertices(vertices->vertices(), blend_mode, dl_paint);
576 }
577}
void DrawVertices(const std::shared_ptr< DlVertices > &vertices, DlBlendMode mode, const DlPaint &paint) override

References FML_DCHECK.

Referenced by ~Canvas().

◆ getDestinationClipBounds()

void flutter::Canvas::getDestinationClipBounds ( Dart_Handle  rect_handle)

Definition at line 198 of file canvas.cc.

198 {
199 if (display_list_builder_) {
200 auto rect = tonic::Float64List(rect_handle);
202 rect[0] = bounds.GetLeft();
203 rect[1] = bounds.GetTop();
204 rect[2] = bounds.GetRight();
205 rect[3] = bounds.GetBottom();
206 }
207}
DlRect GetDestinationClipCoverage() const override
Definition dl_builder.h:129
constexpr auto GetLeft() const
Definition rect.h:351

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

Referenced by ~Canvas().

◆ getLocalClipBounds()

void flutter::Canvas::getLocalClipBounds ( Dart_Handle  rect_handle)

Definition at line 209 of file canvas.cc.

209 {
210 if (display_list_builder_) {
211 auto rect = tonic::Float64List(rect_handle);
212 DlRect bounds = builder()->GetLocalClipCoverage();
213 rect[0] = bounds.GetLeft();
214 rect[1] = bounds.GetTop();
215 rect[2] = bounds.GetRight();
216 rect[3] = bounds.GetBottom();
217 }
218}
DlRect GetLocalClipCoverage() const override
Definition dl_builder.h:136

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

Referenced by ~Canvas().

◆ getSaveCount()

int flutter::Canvas::getSaveCount ( )

Definition at line 98 of file canvas.cc.

98 {
99 if (display_list_builder_) {
100 return builder()->GetSaveCount();
101 } else {
102 return 0;
103 }
104}
int GetSaveCount() const override
Definition dl_builder.h:62

Referenced by ~Canvas().

◆ getTransform()

void flutter::Canvas::getTransform ( Dart_Handle  matrix4_handle)

Definition at line 150 of file canvas.cc.

150 {
151 if (display_list_builder_) {
152 // The Float array stored by DlMatrix is in column-major order
153 DlMatrix matrix = builder()->GetMatrix();
154 auto matrix4 = tonic::Float64List(matrix4_handle);
155 for (int i = 0; i < 16; i++) {
156 matrix4[i] = matrix.m[i];
157 }
158 }
159}
DlMatrix GetMatrix() const override
Definition dl_builder.h:102
impeller::Matrix DlMatrix

References i, and impeller::Matrix::m.

Referenced by ~Canvas().

◆ Invalidate()

void flutter::Canvas::Invalidate ( )

Definition at line 662 of file canvas.cc.

662 {
663 display_list_builder_ = nullptr;
664 if (dart_wrapper()) {
666 }
667}
Dart_WeakPersistentHandle dart_wrapper() const

Referenced by ~Canvas().

◆ restore()

void flutter::Canvas::restore ( )

Definition at line 92 of file canvas.cc.

92 {
93 if (display_list_builder_) {
94 builder()->Restore();
95 }
96}

Referenced by ~Canvas().

◆ restoreToCount()

void flutter::Canvas::restoreToCount ( int  count)

Definition at line 106 of file canvas.cc.

106 {
107 if (display_list_builder_ && count < getSaveCount()) {
108 builder()->RestoreToCount(count);
109 }
110}
int getSaveCount()
Definition canvas.cc:98
void RestoreToCount(int restore_count) override

Referenced by ~Canvas().

◆ rotate()

void flutter::Canvas::rotate ( double  radians)

Definition at line 124 of file canvas.cc.

124 {
125 if (display_list_builder_) {
126 builder()->Rotate(SafeNarrow(radians) * 180.0f / static_cast<float>(M_PI));
127 }
128}
void Rotate(DlScalar degrees) override

Referenced by ~Canvas().

◆ save()

void flutter::Canvas::save ( )

Definition at line 50 of file canvas.cc.

50 {
51 if (display_list_builder_) {
52 builder()->Save();
53 }
54}

Referenced by ~Canvas().

◆ saveLayer()

void flutter::Canvas::saveLayer ( double  left,
double  top,
double  right,
double  bottom,
Dart_Handle  paint_objects,
Dart_Handle  paint_data 
)

Definition at line 71 of file canvas.cc.

76 {
77 Paint paint(paint_objects, paint_data);
78
79 FML_DCHECK(paint.isNotNull());
80 DlRect bounds = DlRect::MakeLTRB(SafeNarrow(left), SafeNarrow(top),
81 SafeNarrow(right), SafeNarrow(bottom));
82 if (display_list_builder_) {
83 DlPaint dl_paint;
84 const DlPaint* save_paint =
85 paint.paint(dl_paint, kSaveLayerWithPaintFlags, DlTileMode::kDecal);
86 FML_DCHECK(save_paint);
87 TRACE_EVENT0("flutter", "ui.Canvas::saveLayer (Recorded)");
88 builder()->SaveLayer(bounds, save_paint);
89 }
90}
void SaveLayer(const std::optional< DlRect > &bounds, const DlPaint *paint=nullptr, const DlImageFilter *backdrop=nullptr, std::optional< int64_t > backdrop_id=std::nullopt) override

References FML_DCHECK, impeller::TRect< Scalar >::MakeLTRB(), and TRACE_EVENT0.

Referenced by ~Canvas().

◆ saveLayerWithoutBounds()

void flutter::Canvas::saveLayerWithoutBounds ( Dart_Handle  paint_objects,
Dart_Handle  paint_data 
)

Definition at line 56 of file canvas.cc.

57 {
58 Paint paint(paint_objects, paint_data);
59
60 FML_DCHECK(paint.isNotNull());
61 if (display_list_builder_) {
62 DlPaint dl_paint;
63 const DlPaint* save_paint =
64 paint.paint(dl_paint, kSaveLayerWithPaintFlags, DlTileMode::kDecal);
65 FML_DCHECK(save_paint);
66 TRACE_EVENT0("flutter", "ui.Canvas::saveLayer (Recorded)");
67 builder()->SaveLayer(std::nullopt, save_paint);
68 }
69}

References FML_DCHECK, and TRACE_EVENT0.

Referenced by ~Canvas().

◆ scale()

void flutter::Canvas::scale ( double  sx,
double  sy 
)

Definition at line 118 of file canvas.cc.

118 {
119 if (display_list_builder_) {
120 builder()->Scale(SafeNarrow(sx), SafeNarrow(sy));
121 }
122}
void Scale(DlScalar sx, DlScalar sy) override

Referenced by ~Canvas().

◆ skew()

void flutter::Canvas::skew ( double  sx,
double  sy 
)

Definition at line 130 of file canvas.cc.

130 {
131 if (display_list_builder_) {
132 builder()->Skew(SafeNarrow(sx), SafeNarrow(sy));
133 }
134}
void Skew(DlScalar sx, DlScalar sy) override

Referenced by ~Canvas().

◆ transform()

void flutter::Canvas::transform ( const tonic::Float64List &  matrix4)

Definition at line 136 of file canvas.cc.

136 {
137 // The Float array stored by Dart Matrix4 is in column-major order
138 // DisplayList TransformFullPerspective takes row-major matrix order
139 if (display_list_builder_) {
140 // clang-format off
142 SafeNarrow(matrix4[ 0]), SafeNarrow(matrix4[ 4]), SafeNarrow(matrix4[ 8]), SafeNarrow(matrix4[12]),
143 SafeNarrow(matrix4[ 1]), SafeNarrow(matrix4[ 5]), SafeNarrow(matrix4[ 9]), SafeNarrow(matrix4[13]),
144 SafeNarrow(matrix4[ 2]), SafeNarrow(matrix4[ 6]), SafeNarrow(matrix4[10]), SafeNarrow(matrix4[14]),
145 SafeNarrow(matrix4[ 3]), SafeNarrow(matrix4[ 7]), SafeNarrow(matrix4[11]), SafeNarrow(matrix4[15]));
146 // clang-format on
147 }
148}
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

◆ translate()

void flutter::Canvas::translate ( double  dx,
double  dy 
)

Definition at line 112 of file canvas.cc.

112 {
113 if (display_list_builder_) {
114 builder()->Translate(SafeNarrow(dx), SafeNarrow(dy));
115 }
116}
void Translate(DlScalar tx, DlScalar ty) override

Referenced by ~Canvas().


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