Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
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}
flutter::DisplayListBuilder * BeginRecording(const flutter::DlRect &cull_rect)
Definition picture.cc:17

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 578 of file canvas.cc.

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

400 {
401 Paint paint(paint_objects, paint_data);
402
403 FML_DCHECK(paint.isNotNull());
404 if (!image) {
405 return ToDart("Canvas.drawImage called with non-genuine Image.");
406 }
407
408 auto dl_image = image->image();
409 if (!dl_image) {
410 return Dart_Null();
411 }
412 auto error = dl_image->get_error();
413 if (error) {
414 return ToDart(error.value());
415 }
416
417 auto sampling = ImageFilter::SamplingFromIndex(filterQualityIndex);
418 if (display_list_builder_) {
419 DlPaint dl_paint;
420 const DlPaint* opt_paint =
421 paint.paint(dl_paint, kDrawImageWithPaintFlags, DlTileMode::kClamp);
422 builder()->DrawImage(dl_image, DlPoint(SafeNarrow(x), SafeNarrow(y)),
423 sampling, opt_paint);
424 }
425 return Dart_Null();
426}
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 471 of file canvas.cc.

482 {
483 Paint paint(paint_objects, paint_data);
484
485 FML_DCHECK(paint.isNotNull());
486 if (!image) {
487 return ToDart("Canvas.drawImageNine called with non-genuine Image.");
488 }
489 auto dl_image = image->image();
490 if (!dl_image) {
491 return Dart_Null();
492 }
493 auto error = dl_image->get_error();
494 if (error) {
495 return ToDart(error.value());
496 }
497
498 DlRect center =
499 DlRect::MakeLTRB(SafeNarrow(center_left), SafeNarrow(center_top),
500 SafeNarrow(center_right), SafeNarrow(center_bottom));
501 DlIRect icenter = DlIRect::Round(center);
502 DlRect dst = DlRect::MakeLTRB(SafeNarrow(dst_left), SafeNarrow(dst_top),
503 SafeNarrow(dst_right), SafeNarrow(dst_bottom));
504 auto filter = ImageFilter::FilterModeFromIndex(bitmapSamplingIndex);
505 if (display_list_builder_) {
506 DlPaint dl_paint;
507 const DlPaint* opt_paint =
508 paint.paint(dl_paint, kDrawImageNineWithPaintFlags, DlTileMode::kClamp);
509 builder()->DrawImageNine(dl_image, icenter, dst, filter, opt_paint);
510 }
511 return Dart_Null();
512}
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 428 of file canvas.cc.

439 {
440 Paint paint(paint_objects, paint_data);
441
442 FML_DCHECK(paint.isNotNull());
443 if (!image) {
444 return ToDart("Canvas.drawImageRect called with non-genuine Image.");
445 }
446
447 auto dl_image = image->image();
448 if (!dl_image) {
449 return Dart_Null();
450 }
451 auto error = dl_image->get_error();
452 if (error) {
453 return ToDart(error.value());
454 }
455
456 DlRect src = DlRect::MakeLTRB(SafeNarrow(src_left), SafeNarrow(src_top),
457 SafeNarrow(src_right), SafeNarrow(src_bottom));
458 DlRect dst = DlRect::MakeLTRB(SafeNarrow(dst_left), SafeNarrow(dst_top),
459 SafeNarrow(dst_right), SafeNarrow(dst_bottom));
460 auto sampling = ImageFilter::SamplingFromIndex(filterQualityIndex);
461 if (display_list_builder_) {
462 DlPaint dl_paint;
463 const DlPaint* opt_paint =
464 paint.paint(dl_paint, kDrawImageRectWithPaintFlags, DlTileMode::kClamp);
465 builder()->DrawImageRect(dl_image, src, dst, sampling, opt_paint,
466 DlSrcRectConstraint::kFast);
467 }
468 return Dart_Null();
469}
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 if (!path) {
382 Dart_ThrowException(
383 ToDart("Canvas.drawPath called with non-genuine Path."));
384 return;
385 }
386 if (display_list_builder_) {
387 Paint paint(paint_objects, paint_data);
388 FML_DCHECK(paint.isNotNull());
389 DlPaint dl_paint;
390 paint.paint(dl_paint, kDrawPathFlags, DlTileMode::kDecal);
391 builder()->DrawPath(path->path(), dl_paint);
392 }
393}
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 514 of file canvas.cc.

514 {
515 if (!picture) {
516 Dart_ThrowException(
517 ToDart("Canvas.drawPicture called with non-genuine Picture."));
518 return;
519 }
520 if (picture->display_list()) {
521 if (display_list_builder_) {
522 builder()->DrawDisplayList(picture->display_list());
523 }
524 } else {
525 FML_DCHECK(false);
526 }
527}
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 529 of file canvas.cc.

532 {
533 Paint paint(paint_objects, paint_data);
534
535 static_assert(sizeof(DlPoint) == sizeof(float) * 2,
536 "DlPoint doesn't use floats.");
537
538 FML_DCHECK(paint.isNotNull());
539 if (display_list_builder_) {
540 DlPaint dl_paint;
541 switch (point_mode) {
542 case DlPointMode::kPoints:
543 paint.paint(dl_paint, kDrawPointsAsPointsFlags, DlTileMode::kDecal);
544 break;
545 case DlPointMode::kLines:
546 paint.paint(dl_paint, kDrawPointsAsLinesFlags, DlTileMode::kDecal);
547 break;
548 case DlPointMode::kPolygon:
549 paint.paint(dl_paint, kDrawPointsAsPolygonFlags, DlTileMode::kDecal);
550 break;
551 }
552 builder()->DrawPoints(point_mode,
553 points.num_elements() / 2, // DlPoints have 2 floats
554 reinterpret_cast<const DlPoint*>(points.data()),
555 dl_paint);
556 }
557}
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 634 of file canvas.cc.

637 {
638 if (!path) {
639 Dart_ThrowException(
640 ToDart("Canvas.drawShader called with non-genuine Path."));
641 return;
642 }
643
644 // Not using SafeNarrow because DPR will always be a relatively small number.
645 const ViewportMetrics* metrics =
646 UIDartState::Current()->platform_configuration()->GetMetrics(0);
647 DlScalar dpr;
648 // TODO(dkwingsmt): We should support rendering shadows on non-implicit views.
649 // However, currently this method has no way to get the target view ID.
650 if (metrics == nullptr) {
651 dpr = 1.0f;
652 } else {
653 dpr = static_cast<float>(metrics->device_pixel_ratio);
654 }
655 if (display_list_builder_) {
656 builder()->DrawShadow(path->path(), DlColor(color), SafeNarrow(elevation),
657 transparentOccluder, dpr);
658 }
659}
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 559 of file canvas.cc.

562 {
563 Paint paint(paint_objects, paint_data);
564
565 if (!vertices) {
566 Dart_ThrowException(
567 ToDart("Canvas.drawVertices called with non-genuine Vertices."));
568 return;
569 }
570 FML_DCHECK(paint.isNotNull());
571 if (display_list_builder_) {
572 DlPaint dl_paint;
573 paint.paint(dl_paint, kDrawVerticesFlags, DlTileMode::kDecal);
574 builder()->DrawVertices(vertices->vertices(), blend_mode, dl_paint);
575 }
576}
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 661 of file canvas.cc.

661 {
662 display_list_builder_ = nullptr;
663 if (dart_wrapper()) {
665 }
666}
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: