Flutter Engine
 
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 135 of file dl_sk_dispatcher.cc.

137 {
138 canvas_->clipRRect(SkRRect::MakeOval(ToSkRect(bounds)), ToSk(clip_op), is_aa);
139}
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 151 of file dl_sk_dispatcher.cc.

153 {
154 path.WillRenderSkPath();
155 canvas_->clipPath(path.GetSkPath(), ToSk(clip_op), is_aa);
156}
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 130 of file dl_sk_dispatcher.cc.

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

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 140 of file dl_sk_dispatcher.cc.

142 {
143 canvas_->clipRRect(ToSkRRect(rrect), ToSk(clip_op), is_aa);
144}
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 145 of file dl_sk_dispatcher.cc.

147 {
148 // Skia doesn't support round superellipse, thus fall back to round rectangle.
149 canvas_->clipRRect(ToApproximateSkRRect(rse), ToSk(clip_op), is_aa);
150}
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 212 of file dl_sk_dispatcher.cc.

215 {
216 canvas_->drawArc(ToSkRect(bounds), start, sweep, useCenter, paint());
217}
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 260 of file dl_sk_dispatcher.cc.

268 {
269 if (!atlas) {
270 return;
271 }
272 auto skia_atlas = atlas->skia_image();
273 if (!skia_atlas) {
274 return;
275 }
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.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)

References 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 193 of file dl_sk_dispatcher.cc.

193 {
194 canvas_->drawCircle(ToSkPoint(center), radius, paint());
195}
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 168 of file dl_sk_dispatcher.cc.

168 {
169 // SkCanvas::drawColor(SkColor) does the following conversion anyway
170 // We do it here manually to increase precision on applying opacity
171 SkColor4f color4f = ToSkColor4f(color);
172 color4f.fA *= opacity();
173 canvas_->drawColor(color4f, ToSk(mode));
174}
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 178 of file dl_sk_dispatcher.cc.

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

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

◆ drawDiffRoundRect()

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

Implements flutter::DlOpReceiver.

Definition at line 199 of file dl_sk_dispatcher.cc.

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

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 228 of file dl_sk_dispatcher.cc.

231 {
232 canvas_->drawImage(image ? image->skia_image() : nullptr, point.x, point.y,
233 ToSk(sampling), safe_paint(render_with_attributes));
234}
int32_t x
FlutterVulkanImage * image
double y

References 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 245 of file dl_sk_dispatcher.cc.

249 {
250 if (!image) {
251 return;
252 }
253 auto skia_image = image->skia_image();
254 if (!skia_image) {
255 return;
256 }
257 canvas_->drawImageNine(skia_image.get(), ToSkIRect(center), ToSkRect(dst),
258 ToSk(filter), safe_paint(render_with_attributes));
259}
const SkIRect & ToSkIRect(const DlIRect &rect)

References 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 235 of file dl_sk_dispatcher.cc.

240 {
241 canvas_->drawImageRect(image ? image->skia_image() : nullptr, ToSkRect(src),
242 ToSkRect(dst), ToSk(sampling),
243 safe_paint(render_with_attributes), ToSk(constraint));
244}

References 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 175 of file dl_sk_dispatcher.cc.

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

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

◆ drawOval()

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

Implements flutter::DlOpReceiver.

Definition at line 190 of file dl_sk_dispatcher.cc.

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

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

◆ drawPaint()

void flutter::DlSkCanvasDispatcher::drawPaint ( )
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 158 of file dl_sk_dispatcher.cc.

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

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

◆ drawPath()

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

Implements flutter::DlOpReceiver.

Definition at line 208 of file dl_sk_dispatcher.cc.

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

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 218 of file dl_sk_dispatcher.cc.

220 {
221 canvas_->drawPoints(ToSk(mode), {ToSkPoints(pts), count}, paint());
222}
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 187 of file dl_sk_dispatcher.cc.

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

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

◆ drawRoundRect()

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

Implements flutter::DlOpReceiver.

Definition at line 196 of file dl_sk_dispatcher.cc.

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

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

◆ drawRoundSuperellipse()

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

Implements flutter::DlOpReceiver.

Definition at line 203 of file dl_sk_dispatcher.cc.

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

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(), drawShadow(), flutter::testing::TEST_F(), flutter::testing::TEST_F(), and flutter::testing::TEST_F().

◆ 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}
#define FML_CHECK(condition)
Definition logging.h:104
std::u16string text

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 223 of file dl_sk_dispatcher.cc.

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

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

◆ restore()

void flutter::DlSkCanvasDispatcher::restore ( )
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 48 of file dl_sk_dispatcher.cc.

48 {
49 canvas_->restore();
51}

References flutter::DlSkPaintDispatchHelper::restore_opacity().

◆ rotate()

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

Implements flutter::DlOpReceiver.

Definition at line 96 of file dl_sk_dispatcher.cc.

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

◆ safe_paint()

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

Definition at line 22 of file dl_sk_dispatcher.cc.

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

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 38 of file dl_sk_dispatcher.cc.

38 {
39 canvas_->save();
40 // save has no impact on attributes, but it needs to register a record
41 // on the restore stack so that the eventual call to restore() will
42 // know what to do at that time. We could annotate the restore record
43 // with a flag that the record came from a save call, but it is simpler
44 // to just pass in the current opacity value as the value to be used by
45 // the children and let the utility calls notice that it didn't change.
47}
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 52 of file dl_sk_dispatcher.cc.

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

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

◆ skew()

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

Implements flutter::DlOpReceiver.

Definition at line 99 of file dl_sk_dispatcher.cc.

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

◆ transform2DAffine()

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

Implements flutter::DlOpReceiver.

Definition at line 104 of file dl_sk_dispatcher.cc.

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

◆ 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 115 of file dl_sk_dispatcher.cc.

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

◆ transformReset()

void flutter::DlSkCanvasDispatcher::transformReset ( )
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 126 of file dl_sk_dispatcher.cc.

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

◆ translate()

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

Implements flutter::DlOpReceiver.

Definition at line 90 of file dl_sk_dispatcher.cc.

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

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