16#include "third_party/skia/include/core/SkColorFilter.h"
17#include "third_party/skia/include/effects/SkDashPathEffect.h"
18#include "third_party/skia/include/gpu/ganesh/GrDirectContext.h"
19#include "third_party/skia/include/gpu/ganesh/GrRecordingContext.h"
47 return ToDlISize(delegate_->getBaseLayerSize());
51 return delegate_->imageInfo();
61 std::optional<int64_t> backdrop_id) {
62 sk_sp<SkImageFilter> sk_backdrop =
ToSk(backdrop);
65 SkCanvas::SaveLayerRec
params(
ToSkRect(bounds), sk_paint(), sk_backdrop.get(),
67 if (sk_backdrop && backdrop->
asBlur()) {
70 delegate_->saveLayer(
params);
78 return delegate_->getSaveCount();
82 delegate_->restoreToCount(restore_count);
86 delegate_->translate(tx, ty);
90 delegate_->scale(sx, sy);
94 delegate_->rotate(degrees);
98 delegate_->skew(sx, sy);
105 SkScalar mxx, SkScalar mxy, SkScalar mxt,
106 SkScalar myx, SkScalar myy, SkScalar myt) {
107 delegate_->concat(SkMatrix::MakeAll(mxx, mxy, mxt, myx, myy, myt, 0, 0, 1));
112 SkScalar mxx, SkScalar mxy, SkScalar mxz, SkScalar mxt,
113 SkScalar myx, SkScalar myy, SkScalar myz, SkScalar myt,
114 SkScalar mzx, SkScalar mzy, SkScalar mzz, SkScalar mzt,
115 SkScalar mwx, SkScalar mwy, SkScalar mwz, SkScalar mwt) {
116 delegate_->concat(SkM44(mxx, mxy, mxz, mxt,
119 mwx, mwy, mwz, mwt));
125 delegate_->resetMatrix();
129 delegate_->concat(
ToSkM44(matrix));
133 delegate_->setMatrix(
ToSkM44(matrix));
140 return ToDlMatrix(delegate_->getLocalToDevice());
146 delegate_->clipRect(
ToSkRect(rect),
ToSk(clip_op), is_aa);
152 delegate_->clipRRect(SkRRect::MakeOval(
ToSkRect(bounds)),
ToSk(clip_op),
159 delegate_->clipRRect(
ToSkRRect(rrect),
ToSk(clip_op), is_aa);
172 path.WillRenderSkPath();
173 delegate_->clipPath(
path.GetSkPath(),
ToSk(clip_op), is_aa);
180 return ToDlRect(delegate_->getDeviceClipBounds());
187 return ToDlRect(delegate_->getLocalClipBounds());
194 return delegate_->quickReject(
ToSkRect(bounds));
198 delegate_->drawPaint(
ToSk(paint));
217 SkScalar intervals[2] = {on_length, off_length};
218 dashed_paint.setPathEffect(SkDashPathEffect::Make({intervals, 2}, 0.0f));
233 delegate_->drawCircle(
ToSkPoint(center), radius,
ToSk(paint));
254 path.WillRenderSkPath();
255 delegate_->drawPath(
path.GetSkPath(),
ToSk(paint));
275 const std::shared_ptr<DlVertices>& vertices,
287 auto skia_image =
image->asSkiaImage();
289 delegate_->drawImage(skia_image->skia_image().get(), point.
x, point.
y,
290 ToSk(sampling), sk_paint());
301 auto skia_image =
image->asSkiaImage();
303 delegate_->drawImageRect(skia_image->skia_image().get(),
ToSkRect(src),
315 auto skia_image =
image->asSkiaImage();
317 delegate_->drawImageNine(skia_image->skia_image().get(),
ToSkIRect(center),
332 auto skia_atlas = atlas->asSkiaImage();
334 std::vector<SkColor> sk_colors;
335 sk_colors.reserve(count);
336 for (
int i = 0;
i < count; ++
i) {
337 sk_colors.push_back(colors[
i].argb());
339 delegate_->drawAtlas(skia_atlas->skia_image().get(), {ToSk(xform), count},
340 {ToSkRects(tex), count}, {sk_colors.data(), count},
347 const int restore_count = delegate_->getSaveCount();
351 if (opacity < SK_Scalar1 && !display_list->can_apply_group_opacity()) {
353 delegate_->saveLayerAlphaf(
ToSkRect(&display_list->GetBounds()), opacity);
354 opacity = SK_Scalar1;
360 if (display_list->has_rtree()) {
361 display_list->Dispatch(dispatcher,
362 ToDlRect(delegate_->getLocalClipBounds()));
364 display_list->Dispatch(dispatcher);
367 delegate_->restoreToCount(restore_count);
374 auto blob =
text->GetTextBlob();
375 FML_CHECK(blob) <<
"Impeller DlText cannot be drawn to a Skia canvas.";
376 delegate_->drawTextBlob(blob,
x,
y,
ToSk(paint));
381 const SkScalar elevation,
382 bool transparent_occluder,
384 path.WillRenderSkPath();
386 elevation, transparent_occluder, dpr);
390#if defined(SK_GANESH)
391 auto dContext = GrAsDirectContext(delegate_->recordingContext());
394 dContext->flushAndSubmit();
DlTileMode tile_mode() const
virtual const DlBlurImageFilter * asBlur() const
void DrawRect(const DlRect &rect, const DlPaint &paint) override
void Transform(const DlMatrix &matrix) override
void Scale(DlScalar sx, DlScalar sy) override
void Rotate(DlScalar degrees) override
int GetSaveCount() const override
void ClipOval(const DlRect &bounds, DlClipOp clip_op, bool is_aa) override
void DrawRoundSuperellipse(const DlRoundSuperellipse &rse, const DlPaint &paint) 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 Skew(DlScalar sx, DlScalar sy) override
void DrawPoints(DlPointMode mode, uint32_t count, const DlPoint pts[], const DlPaint &paint) override
void DrawColor(DlColor color, DlBlendMode mode) override
void DrawImage(const sk_sp< DlImage > &image, const DlPoint &point, DlImageSampling sampling, const DlPaint *paint=nullptr) override
void SetTransform(const DlMatrix &matrix) override
void ClipPath(const DlPath &path, DlClipOp clip_op, bool is_aa) override
void DrawPath(const DlPath &path, const DlPaint &paint) override
void DrawLine(const DlPoint &p0, const DlPoint &p1, const DlPaint &paint) override
DlISize GetBaseLayerDimensions() const override
void Translate(DlScalar tx, DlScalar ty) override
void SaveLayer(const std::optional< DlRect > &bounds, const DlPaint *paint=nullptr, const DlImageFilter *backdrop=nullptr, std::optional< int64_t > backdrop_id=std::nullopt) override
DlMatrix GetMatrix() const override
void DrawDiffRoundRect(const DlRoundRect &outer, const DlRoundRect &inner, const DlPaint &paint) override
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...
DlRect GetLocalClipCoverage() const override
void DrawRoundRect(const DlRoundRect &rrect, const DlPaint &paint) override
void DrawVertices(const std::shared_ptr< DlVertices > &vertices, DlBlendMode mode, const DlPaint &paint) override
DlRect GetDestinationClipCoverage() const 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, const DlPaint *paint=nullptr) override
void ClipRect(const DlRect &rect, DlClipOp clip_op, bool is_aa) override
void DrawArc(const DlRect &bounds, DlScalar start, DlScalar sweep, bool useCenter, const DlPaint &paint) override
void ClipRoundSuperellipse(const DlRoundSuperellipse &rse, DlClipOp clip_op, bool is_aa) override
bool QuickReject(const DlRect &bounds) const override
void DrawImageNine(const sk_sp< DlImage > &image, const DlIRect ¢er, const DlRect &dst, DlFilterMode filter, const DlPaint *paint=nullptr) override
void DrawCircle(const DlPoint ¢er, DlScalar radius, const DlPaint &paint) override
void DrawText(const std::shared_ptr< DlText > &text, DlScalar x, DlScalar y, const DlPaint &paint) override
void DrawImageRect(const sk_sp< DlImage > &image, const DlRect &src, const DlRect &dst, DlImageSampling sampling, const DlPaint *paint=nullptr, DlSrcRectConstraint constraint=DlSrcRectConstraint::kFast) override
void DrawDisplayList(const sk_sp< DisplayList > display_list, DlScalar opacity=SK_Scalar1) override
void set_canvas(SkCanvas *canvas)
void DrawOval(const DlRect &bounds, const DlPaint &paint) override
void DrawDashedLine(const DlPoint &p0, const DlPoint &p1, DlScalar on_length, DlScalar off_length, const DlPaint &paint) override
void ClipRoundRect(const DlRoundRect &rrect, DlClipOp clip_op, bool is_aa) override
void RestoreToCount(int restore_count) override
SkImageInfo GetImageInfo() const override
void Transform2DAffine(DlScalar mxx, DlScalar mxy, DlScalar mxt, DlScalar myx, DlScalar myy, DlScalar myt) override
void DrawPaint(const DlPaint &paint) override
Backend implementation of |DlOpReceiver| for |SkCanvas|.
static void DrawShadow(SkCanvas *canvas, const SkPath &path, DlColor color, float elevation, bool transparentOccluder, DlScalar dpr)
SkOptionalPaint(const DlPaint *dl_paint)
const EmbeddedViewParams * params
FlutterVulkanImage * image
#define FML_CHECK(condition)
#define FML_DCHECK(condition)
impeller::Scalar DlScalar
SkPaint ToSk(const DlPaint &paint)
const SkPoint & ToSkPoint(const DlPoint &point)
const DlISize & ToDlISize(const SkISize &size)
const SkIRect & ToSkIRect(const DlIRect &rect)
const SkRRect ToApproximateSkRRect(const DlRoundSuperellipse &rse)
SkPaint ToStrokedSk(const DlPaint &paint)
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
SkColor4f ToSkColor4f(DlColor color)
SkPaint ToNonShaderSk(const DlPaint &paint)
const SkPoint * ToSkPoints(const DlPoint *points)
it will be possible to load the file into Perfetto s trace viewer use test Running tests that layout and measure text will not yield consistent results across various platforms Enabling this option will make font resolution default to the Ahem test font on all disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive mode
const SkRRect ToSkRRect(const DlRoundRect &round_rect)
DlMatrix ToDlMatrix(const SkMatrix &matrix)
SkM44 ToSkM44(const DlMatrix &matrix)
const DlRect & ToDlRect(const SkRect &rect)
const SkRect & ToSkRect(const DlRect &rect)
A 4x4 matrix using column-major storage.
#define TRACE_EVENT0(category_group, name)