Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | List of all members
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, SkScalar opacity=SK_Scalar1)
 
const SkPaintsafe_paint (bool use_attributes)
 
void save () override
 
void restore () override
 
void saveLayer (const SkRect &bounds, const SaveLayerOptions options, const DlImageFilter *backdrop) override
 
void translate (SkScalar tx, SkScalar ty) override
 
void scale (SkScalar sx, SkScalar sy) override
 
void rotate (SkScalar degrees) override
 
void skew (SkScalar sx, SkScalar sy) override
 
void transform2DAffine (SkScalar mxx, SkScalar mxy, SkScalar mxt, SkScalar myx, SkScalar myy, SkScalar myt) override
 
void transformFullPerspective (SkScalar mxx, SkScalar mxy, SkScalar mxz, SkScalar mxt, SkScalar myx, SkScalar myy, SkScalar myz, SkScalar myt, SkScalar mzx, SkScalar mzy, SkScalar mzz, SkScalar mzt, SkScalar mwx, SkScalar mwy, SkScalar mwz, SkScalar mwt) override
 
void transformReset () override
 
void clipRect (const SkRect &rect, ClipOp clip_op, bool is_aa) override
 
void clipRRect (const SkRRect &rrect, ClipOp clip_op, bool is_aa) override
 
void clipPath (const SkPath &path, ClipOp clip_op, bool is_aa) override
 
void drawPaint () override
 
void drawColor (DlColor color, DlBlendMode mode) override
 
void drawLine (const SkPoint &p0, const SkPoint &p1) override
 
void drawRect (const SkRect &rect) override
 
void drawOval (const SkRect &bounds) override
 
void drawCircle (const SkPoint &center, SkScalar radius) override
 
void drawRRect (const SkRRect &rrect) override
 
void drawDRRect (const SkRRect &outer, const SkRRect &inner) override
 
void drawPath (const SkPath &path) override
 
void drawArc (const SkRect &bounds, SkScalar start, SkScalar sweep, bool useCenter) override
 
void drawPoints (PointMode mode, uint32_t count, const SkPoint pts[]) override
 
void drawVertices (const DlVertices *vertices, DlBlendMode mode) override
 
void drawImage (const sk_sp< DlImage > image, const SkPoint point, DlImageSampling sampling, bool render_with_attributes) override
 
void drawImageRect (const sk_sp< DlImage > image, const SkRect &src, const SkRect &dst, DlImageSampling sampling, bool render_with_attributes, SrcRectConstraint constraint) override
 
void drawImageNine (const sk_sp< DlImage > image, const SkIRect &center, const SkRect &dst, DlFilterMode filter, bool render_with_attributes) override
 
void drawAtlas (const sk_sp< DlImage > atlas, const SkRSXform xform[], const SkRect tex[], const DlColor colors[], int count, DlBlendMode mode, DlImageSampling sampling, const SkRect *cullRect, bool render_with_attributes) override
 
void drawDisplayList (const sk_sp< DisplayList > display_list, SkScalar opacity) override
 
void drawTextBlob (const sk_sp< SkTextBlob > blob, SkScalar x, SkScalar y) override
 
void drawTextFrame (const std::shared_ptr< impeller::TextFrame > &text_frame, SkScalar x, SkScalar y) override
 
void drawShadow (const SkPath &path, const DlColor color, const SkScalar elevation, bool transparent_occluder, SkScalar dpr) override
 
- Public Member Functions inherited from flutter::DlOpReceiver
virtual bool PrefersImpellerPaths () const
 
virtual void clipPath (const CacheablePath &cache, ClipOp clip_op, bool is_aa)
 
virtual void drawPath (const CacheablePath &cache)
 
virtual void drawShadow (const CacheablePath &cache, const DlColor color, const SkScalar elevation, bool transparent_occluder, SkScalar dpr)
 
virtual void save (uint32_t total_content_depth)
 
virtual void saveLayer (const SkRect &bounds, const SaveLayerOptions &options, uint32_t total_content_depth, const DlImageFilter *backdrop=nullptr)
 
virtual void saveLayer (const SkRect *bounds, const SaveLayerOptions options, const DlImageFilter *backdrop=nullptr) 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 setPathEffect (const DlPathEffect *effect) override
 
void setMaskFilter (const DlMaskFilter *filter) override
 
void setImageFilter (const DlImageFilter *filter) override
 
const SkPaintpaint (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, SkScalar dpr)
 

Additional Inherited Members

- Static Public Attributes inherited from flutter::DlOpReceiver
static constexpr int kMaxDrawPointsCount = ((1 << 29) - 1)
 
- Protected Types inherited from flutter::DlOpReceiver
using ClipOp = DlCanvas::ClipOp
 
using PointMode = DlCanvas::PointMode
 
using SrcRectConstraint = DlCanvas::SrcRectConstraint
 
- 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,
SkScalar  opacity = SK_Scalar1 
)
inlineexplicit

Definition at line 23 of file dl_sk_dispatcher.h.

25 canvas_(canvas),
26 original_transform_(canvas->getLocalToDevice()) {}
SkM44 getLocalToDevice() const
DlSkPaintDispatchHelper(SkScalar opacity=SK_Scalar1)

Member Function Documentation

◆ clipPath()

void flutter::DlSkCanvasDispatcher::clipPath ( const SkPath path,
ClipOp  clip_op,
bool  is_aa 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 129 of file dl_sk_dispatcher.cc.

131 {
132 canvas_->clipPath(path, ToSk(clip_op), is_aa);
133}
void clipPath(const SkPath &path, SkClipOp op, bool doAntiAlias)
SkPaint ToSk(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
Definition switches.h:57

◆ clipRect()

void flutter::DlSkCanvasDispatcher::clipRect ( const SkRect rect,
ClipOp  clip_op,
bool  is_aa 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 119 of file dl_sk_dispatcher.cc.

121 {
122 canvas_->clipRect(rect, ToSk(clip_op), is_aa);
123}
void clipRect(const SkRect &rect, SkClipOp op, bool doAntiAlias)

◆ clipRRect()

void flutter::DlSkCanvasDispatcher::clipRRect ( const SkRRect rrect,
ClipOp  clip_op,
bool  is_aa 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 124 of file dl_sk_dispatcher.cc.

126 {
127 canvas_->clipRRect(rrect, ToSk(clip_op), is_aa);
128}
void clipRRect(const SkRRect &rrect, SkClipOp op, bool doAntiAlias)

◆ drawArc()

void flutter::DlSkCanvasDispatcher::drawArc ( const SkRect bounds,
SkScalar  start,
SkScalar  sweep,
bool  useCenter 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 174 of file dl_sk_dispatcher.cc.

177 {
178 canvas_->drawArc(bounds, start, sweep, useCenter, paint());
179}
void drawArc(const SkRect &oval, SkScalar startAngle, SkScalar sweepAngle, bool useCenter, const SkPaint &paint)
const Paint & paint

◆ drawAtlas()

void flutter::DlSkCanvasDispatcher::drawAtlas ( const sk_sp< DlImage atlas,
const SkRSXform  xform[],
const SkRect  tex[],
const DlColor  colors[],
int  count,
DlBlendMode  mode,
DlImageSampling  sampling,
const SkRect cullRect,
bool  render_with_attributes 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 221 of file dl_sk_dispatcher.cc.

229 {
230 if (!atlas) {
231 return;
232 }
233 auto skia_atlas = atlas->skia_image();
234 if (!skia_atlas) {
235 return;
236 }
237 const SkColor* sk_colors = reinterpret_cast<const SkColor*>(colors);
238 canvas_->drawAtlas(skia_atlas.get(), xform, tex, sk_colors, count, ToSk(mode),
239 ToSk(sampling), cullRect,
240 safe_paint(render_with_attributes));
241}
int count
uint32_t SkColor
Definition SkColor.h:37
void drawAtlas(const SkImage *atlas, const SkRSXform xform[], const SkRect tex[], const SkColor colors[], int count, SkBlendMode mode, const SkSamplingOptions &sampling, const SkRect *cullRect, const SkPaint *paint)
const SkPaint * safe_paint(bool use_attributes)
sk_sp< const SkImage > atlas
Definition SkRecords.h:331
PODArray< SkColor > colors
Definition SkRecords.h:276
it will be possible to load the file into Perfetto s trace viewer 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
Definition switches.h:228

◆ drawCircle()

void flutter::DlSkCanvasDispatcher::drawCircle ( const SkPoint center,
SkScalar  radius 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 161 of file dl_sk_dispatcher.cc.

161 {
162 canvas_->drawCircle(center, radius, paint());
163}
static SkScalar center(float pos0, float pos1)
void drawCircle(SkScalar cx, SkScalar cy, SkScalar radius, const SkPaint &paint)

◆ drawColor()

void flutter::DlSkCanvasDispatcher::drawColor ( DlColor  color,
DlBlendMode  mode 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 145 of file dl_sk_dispatcher.cc.

145 {
146 // SkCanvas::drawColor(SkColor) does the following conversion anyway
147 // We do it here manually to increase precision on applying opacity
149 color4f.fA *= opacity();
150 canvas_->drawColor(color4f, ToSk(mode));
151}
SkColor4f color
void drawColor(SkColor color, SkBlendMode mode=SkBlendMode::kSrcOver)
Definition SkCanvas.h:1182
static SkRGBA4f FromColor(SkColor color)

◆ drawDisplayList()

void flutter::DlSkCanvasDispatcher::drawDisplayList ( const sk_sp< DisplayList display_list,
SkScalar  opacity 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 242 of file dl_sk_dispatcher.cc.

244 {
245 const int restore_count = canvas_->getSaveCount();
246
247 // Compute combined opacity and figure out whether we can apply it
248 // during dispatch or if we need a saveLayer.
250 if (combined_opacity < SK_Scalar1 &&
251 !display_list->can_apply_group_opacity()) {
252 TRACE_EVENT0("flutter", "Canvas::saveLayer");
253 canvas_->saveLayerAlphaf(&display_list->bounds(), combined_opacity);
255 } else {
256 canvas_->save();
257 }
258
259 // Create a new CanvasDispatcher to isolate the actions of the
260 // display_list from the current environment.
261 DlSkCanvasDispatcher dispatcher(canvas_, combined_opacity);
262 if (display_list->rtree()) {
263 display_list->Dispatch(dispatcher, canvas_->getLocalClipBounds());
264 } else {
265 display_list->Dispatch(dispatcher);
266 }
267
268 // Restore canvas state to what it was before dispatching.
269 canvas_->restoreToCount(restore_count);
270}
#define SK_Scalar1
Definition SkScalar.h:18
SkRect getLocalClipBounds() const
int getSaveCount() const
Definition SkCanvas.cpp:435
void restoreToCount(int saveCount)
Definition SkCanvas.cpp:482
int save()
Definition SkCanvas.cpp:451
int saveLayerAlphaf(const SkRect *bounds, float alpha)
DlSkCanvasDispatcher(SkCanvas *canvas, SkScalar opacity=SK_Scalar1)
float SkScalar
Definition extension.cpp:12
#define TRACE_EVENT0(category_group, name)

◆ drawDRRect()

void flutter::DlSkCanvasDispatcher::drawDRRect ( const SkRRect outer,
const SkRRect inner 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 167 of file dl_sk_dispatcher.cc.

168 {
169 canvas_->drawDRRect(outer, inner, paint());
170}
void drawDRRect(const SkRRect &outer, const SkRRect &inner, const SkPaint &paint)

◆ drawImage()

void flutter::DlSkCanvasDispatcher::drawImage ( const sk_sp< DlImage image,
const SkPoint  point,
DlImageSampling  sampling,
bool  render_with_attributes 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 189 of file dl_sk_dispatcher.cc.

192 {
193 canvas_->drawImage(image ? image->skia_image() : nullptr, point.fX, point.fY,
194 ToSk(sampling), safe_paint(render_with_attributes));
195}
void drawImage(const SkImage *image, SkScalar left, SkScalar top)
Definition SkCanvas.h:1528
sk_sp< SkImage > image
Definition examples.cpp:29
SkSamplingOptions sampling
Definition SkRecords.h:337

◆ drawImageNine()

void flutter::DlSkCanvasDispatcher::drawImageNine ( const sk_sp< DlImage image,
const SkIRect center,
const SkRect dst,
DlFilterMode  filter,
bool  render_with_attributes 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 206 of file dl_sk_dispatcher.cc.

210 {
211 if (!image) {
212 return;
213 }
214 auto skia_image = image->skia_image();
215 if (!skia_image) {
216 return;
217 }
218 canvas_->drawImageNine(skia_image.get(), center, dst, ToSk(filter),
219 safe_paint(render_with_attributes));
220}
void drawImageNine(const SkImage *image, const SkIRect &center, const SkRect &dst, SkFilterMode filter, const SkPaint *paint=nullptr)

◆ drawImageRect()

void flutter::DlSkCanvasDispatcher::drawImageRect ( const sk_sp< DlImage image,
const SkRect src,
const SkRect dst,
DlImageSampling  sampling,
bool  render_with_attributes,
SrcRectConstraint  constraint 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 196 of file dl_sk_dispatcher.cc.

201 {
202 canvas_->drawImageRect(image ? image->skia_image() : nullptr, src, dst,
203 ToSk(sampling), safe_paint(render_with_attributes),
204 ToSk(constraint));
205}
void drawImageRect(const SkImage *, const SkRect &src, const SkRect &dst, const SkSamplingOptions &, const SkPaint *, SrcRectConstraint)
dst
Definition cp.py:12

◆ drawLine()

void flutter::DlSkCanvasDispatcher::drawLine ( const SkPoint p0,
const SkPoint p1 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 152 of file dl_sk_dispatcher.cc.

152 {
153 canvas_->drawLine(p0, p1, paint());
154}
void drawLine(SkScalar x0, SkScalar y0, SkScalar x1, SkScalar y1, const SkPaint &paint)

◆ drawOval()

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

Implements flutter::DlOpReceiver.

Definition at line 158 of file dl_sk_dispatcher.cc.

158 {
159 canvas_->drawOval(bounds, paint());
160}
void drawOval(const SkRect &oval, const SkPaint &paint)

◆ drawPaint()

void flutter::DlSkCanvasDispatcher::drawPaint ( )
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 135 of file dl_sk_dispatcher.cc.

135 {
136 const SkPaint& sk_paint = paint();
137 SkImageFilter* filter = sk_paint.getImageFilter();
138 if (filter && !filter->asColorFilter(nullptr)) {
139 // drawPaint does an implicit saveLayer if an SkImageFilter is
140 // present that cannot be replaced by an SkColorFilter.
141 TRACE_EVENT0("flutter", "Canvas::saveLayer");
142 }
143 canvas_->drawPaint(sk_paint);
144}
void drawPaint(const SkPaint &paint)
bool asColorFilter(SkColorFilter **filterPtr) const
SkImageFilter * getImageFilter() const
Definition SkPaint.h:564

◆ drawPath()

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

Implements flutter::DlOpReceiver.

Definition at line 171 of file dl_sk_dispatcher.cc.

171 {
172 canvas_->drawPath(path, paint());
173}
void drawPath(const SkPath &path, const SkPaint &paint)

◆ drawPoints()

void flutter::DlSkCanvasDispatcher::drawPoints ( PointMode  mode,
uint32_t  count,
const SkPoint  pts[] 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 180 of file dl_sk_dispatcher.cc.

182 {
183 canvas_->drawPoints(ToSk(mode), count, pts, paint());
184}
void drawPoints(PointMode mode, size_t count, const SkPoint pts[], const SkPaint &paint)

◆ drawRect()

void flutter::DlSkCanvasDispatcher::drawRect ( const SkRect rect)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 155 of file dl_sk_dispatcher.cc.

155 {
156 canvas_->drawRect(rect, paint());
157}
void drawRect(const SkRect &rect, const SkPaint &paint)

◆ drawRRect()

void flutter::DlSkCanvasDispatcher::drawRRect ( const SkRRect rrect)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 164 of file dl_sk_dispatcher.cc.

164 {
165 canvas_->drawRRect(rrect, paint());
166}
void drawRRect(const SkRRect &rrect, const SkPaint &paint)

◆ drawShadow()

void flutter::DlSkCanvasDispatcher::drawShadow ( const SkPath path,
const DlColor  color,
const SkScalar  elevation,
bool  transparent_occluder,
SkScalar  dpr 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 310 of file dl_sk_dispatcher.cc.

314 {
315 DrawShadow(canvas_, path, color, elevation, transparent_occluder, dpr);
316}
static void DrawShadow(SkCanvas *canvas, const SkPath &path, DlColor color, float elevation, bool transparentOccluder, SkScalar dpr)

◆ DrawShadow()

void flutter::DlSkCanvasDispatcher::DrawShadow ( SkCanvas canvas,
const SkPath path,
DlColor  color,
float  elevation,
bool  transparentOccluder,
SkScalar  dpr 
)
static

Definition at line 284 of file dl_sk_dispatcher.cc.

289 {
290 const SkScalar kAmbientAlpha = 0.039f;
291 const SkScalar kSpotAlpha = 0.25f;
292
293 uint32_t flags = transparentOccluder
297 SkColor in_ambient =
298 SkColorSetA(ToSk(color), kAmbientAlpha * color.getAlpha());
299 SkColor in_spot = SkColorSetA(ToSk(color), kSpotAlpha * color.getAlpha());
300 SkColor ambient_color, spot_color;
301 SkShadowUtils::ComputeTonalColors(in_ambient, in_spot, &ambient_color,
302 &spot_color);
304 canvas, path, SkPoint3::Make(0, 0, dpr * elevation),
305 SkPoint3::Make(0, -1, 1),
307 ambient_color, spot_color, flags);
308}
static constexpr SkColor SkColorSetA(SkColor c, U8CPU a)
Definition SkColor.h:82
@ kDirectionalLight_ShadowFlag
@ kTransparentOccluder_ShadowFlag
@ kNone_ShadowFlag
static void DrawShadow(SkCanvas *canvas, const SkPath &path, const SkPoint3 &zPlaneParams, const SkPoint3 &lightPos, SkScalar lightRadius, SkColor ambientColor, SkColor spotColor, uint32_t flags=SkShadowFlags::kNone_ShadowFlag)
static void ComputeTonalColors(SkColor inAmbientColor, SkColor inSpotColor, SkColor *outAmbientColor, SkColor *outSpotColor)
static constexpr SkScalar kShadowLightRadius
Definition dl_canvas.h:225
static constexpr SkScalar kShadowLightHeight
Definition dl_canvas.h:224
FlutterSemanticsFlag flags
static SkPoint3 Make(SkScalar x, SkScalar y, SkScalar z)
Definition SkPoint3.h:18

◆ drawTextBlob()

void flutter::DlSkCanvasDispatcher::drawTextBlob ( const sk_sp< SkTextBlob blob,
SkScalar  x,
SkScalar  y 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 271 of file dl_sk_dispatcher.cc.

273 {
274 canvas_->drawTextBlob(blob, x, y, paint());
275}
void drawTextBlob(const SkTextBlob *blob, SkScalar x, SkScalar y, const SkPaint &paint)
double y
double x

◆ drawTextFrame()

void flutter::DlSkCanvasDispatcher::drawTextFrame ( const std::shared_ptr< impeller::TextFrame > &  text_frame,
SkScalar  x,
SkScalar  y 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 277 of file dl_sk_dispatcher.cc.

280 {
281 FML_CHECK(false);
282}
#define FML_CHECK(condition)
Definition logging.h:85

◆ drawVertices()

void flutter::DlSkCanvasDispatcher::drawVertices ( const DlVertices vertices,
DlBlendMode  mode 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 185 of file dl_sk_dispatcher.cc.

186 {
187 canvas_->drawVertices(ToSk(vertices), ToSk(mode), paint());
188}
void drawVertices(const SkVertices *vertices, SkBlendMode mode, const SkPaint &paint)

◆ restore()

void flutter::DlSkCanvasDispatcher::restore ( )
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 42 of file dl_sk_dispatcher.cc.

42 {
43 canvas_->restore();
45}
void restore()
Definition SkCanvas.cpp:465

◆ rotate()

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

Implements flutter::DlOpReceiver.

Definition at line 85 of file dl_sk_dispatcher.cc.

85 {
86 canvas_->rotate(degrees);
87}
void rotate(SkScalar degrees)

◆ safe_paint()

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

Definition at line 16 of file dl_sk_dispatcher.cc.

16 {
17 if (use_attributes) {
18 // The accumulated SkPaint object will already have incorporated
19 // any attribute overrides.
20 // Any rendering operation that uses an optional paint will ignore
21 // the shader in the paint so we inform that |paint()| method so
22 // that it can set the dither flag appropriately.
23 return &paint(false);
24 } else if (has_opacity()) {
25 temp_paint_.setAlphaf(opacity());
26 return &temp_paint_;
27 } else {
28 return nullptr;
29 }
30}
void setAlphaf(float a)
Definition SkPaint.cpp:130

◆ save()

void flutter::DlSkCanvasDispatcher::save ( )
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 32 of file dl_sk_dispatcher.cc.

32 {
33 canvas_->save();
34 // save has no impact on attributes, but it needs to register a record
35 // on the restore stack so that the eventual call to restore() will
36 // know what to do at that time. We could annotate the restore record
37 // with a flag that the record came from a save call, but it is simpler
38 // to just pass in the current opacity value as the value to be used by
39 // the children and let the utility calls notice that it didn't change.
41}
void save_opacity(SkScalar opacity_for_children)

◆ saveLayer()

void flutter::DlSkCanvasDispatcher::saveLayer ( const SkRect bounds,
const SaveLayerOptions  options,
const DlImageFilter backdrop 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 46 of file dl_sk_dispatcher.cc.

48 {
49 if (!options.content_is_clipped() && options.can_distribute_opacity() &&
50 backdrop == nullptr) {
51 // We know that:
52 // - no bounds is needed for clipping here
53 // - no backdrop filter is used to initialize the layer
54 // - the current attributes only have an alpha
55 // - the children are compatible with individually rendering with
56 // an inherited opacity
57 // Therefore we can just use a save instead of a saveLayer and pass the
58 // intended opacity to the children.
59 canvas_->save();
60 // If the saveLayer does not use attributes, the children should continue
61 // to render with the inherited opacity unmodified. If attributes are to
62 // be applied, the children should render with the combination of the
63 // inherited opacity combined with the alpha from the current color.
64 save_opacity(options.renders_with_attributes() ? combined_opacity()
65 : opacity());
66 } else {
67 TRACE_EVENT0("flutter", "Canvas::saveLayer");
68 const SkPaint* paint = safe_paint(options.renders_with_attributes());
69 const sk_sp<SkImageFilter> sk_backdrop = ToSk(backdrop);
70 const SkRect* sl_bounds = options.bounds_from_caller() ? &bounds : nullptr;
71 canvas_->saveLayer(
72 SkCanvas::SaveLayerRec(sl_bounds, paint, sk_backdrop.get(), 0));
73 // saveLayer will apply the current opacity on behalf of the children
74 // so they will inherit an opaque opacity.
76 }
77}
const char * options
int saveLayer(const SkRect *bounds, const SkPaint *paint)
Definition SkCanvas.cpp:500
T * get() const
Definition SkRefCnt.h:303
Optional< SkRect > bounds
Definition SkRecords.h:189

◆ scale()

void flutter::DlSkCanvasDispatcher::scale ( SkScalar  sx,
SkScalar  sy 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 82 of file dl_sk_dispatcher.cc.

82 {
83 canvas_->scale(sx, sy);
84}
void scale(SkScalar sx, SkScalar sy)

◆ skew()

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

Implements flutter::DlOpReceiver.

Definition at line 88 of file dl_sk_dispatcher.cc.

88 {
89 canvas_->skew(sx, sy);
90}
void skew(SkScalar sx, SkScalar sy)

◆ transform2DAffine()

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

Implements flutter::DlOpReceiver.

Definition at line 93 of file dl_sk_dispatcher.cc.

95 {
96 // Internally concat(SkMatrix) gets redirected to concat(SkM44)
97 // so we just jump directly to the SkM44 version
98 canvas_->concat(SkM44(mxx, mxy, 0, mxt,
99 myx, myy, 0, myt,
100 0, 0, 1, 0,
101 0, 0, 0, 1));
102}
void concat(const SkMatrix &matrix)
Definition SkM44.h:150

◆ transformFullPerspective()

void flutter::DlSkCanvasDispatcher::transformFullPerspective ( SkScalar  mxx,
SkScalar  mxy,
SkScalar  mxz,
SkScalar  mxt,
SkScalar  myx,
SkScalar  myy,
SkScalar  myz,
SkScalar  myt,
SkScalar  mzx,
SkScalar  mzy,
SkScalar  mzz,
SkScalar  mzt,
SkScalar  mwx,
SkScalar  mwy,
SkScalar  mwz,
SkScalar  mwt 
)
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 104 of file dl_sk_dispatcher.cc.

108 {
109 canvas_->concat(SkM44(mxx, mxy, mxz, mxt,
110 myx, myy, myz, myt,
111 mzx, mzy, mzz, mzt,
112 mwx, mwy, mwz, mwt));
113}

◆ transformReset()

void flutter::DlSkCanvasDispatcher::transformReset ( )
overridevirtual

Implements flutter::DlOpReceiver.

Definition at line 115 of file dl_sk_dispatcher.cc.

115 {
116 canvas_->setMatrix(original_transform_);
117}
void setMatrix(const SkM44 &matrix)

◆ translate()

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

Implements flutter::DlOpReceiver.

Definition at line 79 of file dl_sk_dispatcher.cc.

79 {
80 canvas_->translate(tx, ty);
81}
void translate(SkScalar dx, SkScalar dy)

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