15#include "third_party/skia/include/core/SkColorFilter.h"
16#include "third_party/skia/include/effects/SkDashPathEffect.h"
17#include "third_party/skia/include/gpu/ganesh/GrDirectContext.h"
18#include "third_party/skia/include/gpu/ganesh/GrRecordingContext.h"
46 return ToDlISize(delegate_->getBaseLayerSize());
50 return delegate_->imageInfo();
60 std::optional<int64_t> backdrop_id) {
61 sk_sp<SkImageFilter> sk_backdrop =
ToSk(backdrop);
64 SkCanvas::SaveLayerRec
params(
ToSkRect(bounds), sk_paint(), sk_backdrop.get(),
66 if (sk_backdrop && backdrop->
asBlur()) {
69 delegate_->saveLayer(
params);
77 return delegate_->getSaveCount();
81 delegate_->restoreToCount(restore_count);
85 delegate_->translate(tx, ty);
89 delegate_->scale(sx, sy);
93 delegate_->rotate(degrees);
97 delegate_->skew(sx, sy);
104 SkScalar mxx, SkScalar mxy, SkScalar mxt,
105 SkScalar myx, SkScalar myy, SkScalar myt) {
106 delegate_->concat(SkMatrix::MakeAll(mxx, mxy, mxt, myx, myy, myt, 0, 0, 1));
111 SkScalar mxx, SkScalar mxy, SkScalar mxz, SkScalar mxt,
112 SkScalar myx, SkScalar myy, SkScalar myz, SkScalar myt,
113 SkScalar mzx, SkScalar mzy, SkScalar mzz, SkScalar mzt,
114 SkScalar mwx, SkScalar mwy, SkScalar mwz, SkScalar mwt) {
115 delegate_->concat(SkM44(mxx, mxy, mxz, mxt,
118 mwx, mwy, mwz, mwt));
124 delegate_->resetMatrix();
128 delegate_->concat(
ToSkM44(matrix));
132 delegate_->setMatrix(
ToSkM44(matrix));
139 return ToDlMatrix(delegate_->getLocalToDevice());
145 delegate_->clipRect(
ToSkRect(rect),
ToSk(clip_op), is_aa);
151 delegate_->clipRRect(SkRRect::MakeOval(
ToSkRect(bounds)),
ToSk(clip_op),
158 delegate_->clipRRect(
ToSkRRect(rrect),
ToSk(clip_op), is_aa);
171 path.WillRenderSkPath();
172 delegate_->clipPath(
path.GetSkPath(),
ToSk(clip_op), is_aa);
179 return ToDlRect(delegate_->getDeviceClipBounds());
186 return ToDlRect(delegate_->getLocalClipBounds());
193 return delegate_->quickReject(
ToSkRect(bounds));
197 delegate_->drawPaint(
ToSk(paint));
216 SkScalar intervals[2] = {on_length, off_length};
217 dashed_paint.setPathEffect(SkDashPathEffect::Make({intervals, 2}, 0.0f));
232 delegate_->drawCircle(
ToSkPoint(center), radius,
ToSk(paint));
253 path.WillRenderSkPath();
254 delegate_->drawPath(
path.GetSkPath(),
ToSk(paint));
274 const std::shared_ptr<DlVertices>& vertices,
285 sk_sp<SkImage> sk_image =
image->skia_image();
286 delegate_->drawImage(sk_image.get(), point.
x, point.
y,
ToSk(sampling),
297 sk_sp<SkImage> sk_image =
image->skia_image();
299 ToSk(sampling), sk_paint(),
ToSk(constraint));
308 sk_sp<SkImage> sk_image =
image->skia_image();
310 ToSk(filter), sk_paint());
323 sk_sp<SkImage> sk_image = atlas->skia_image();
324 std::vector<SkColor> sk_colors;
325 sk_colors.reserve(count);
326 for (
int i = 0;
i < count; ++
i) {
327 sk_colors.push_back(colors[
i].argb());
329 delegate_->drawAtlas(sk_image.get(), {ToSk(xform), count},
330 {ToSkRects(tex), count}, {sk_colors.data(), count},
337 const int restore_count = delegate_->getSaveCount();
341 if (opacity < SK_Scalar1 && !display_list->can_apply_group_opacity()) {
343 delegate_->saveLayerAlphaf(
ToSkRect(&display_list->GetBounds()), opacity);
344 opacity = SK_Scalar1;
350 if (display_list->has_rtree()) {
351 display_list->Dispatch(dispatcher,
352 ToDlRect(delegate_->getLocalClipBounds()));
354 display_list->Dispatch(dispatcher);
357 delegate_->restoreToCount(restore_count);
364 auto blob =
text->GetTextBlob();
365 FML_CHECK(blob) <<
"Impeller DlText cannot be drawn to a Skia canvas.";
366 delegate_->drawTextBlob(blob,
x,
y,
ToSk(paint));
371 const SkScalar elevation,
372 bool transparent_occluder,
374 path.WillRenderSkPath();
376 elevation, transparent_occluder, dpr);
380#if defined(SK_GANESH)
381 auto dContext = GrAsDirectContext(delegate_->recordingContext());
384 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)
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)