1cb93a386Sopenharmony_ci/*
2cb93a386Sopenharmony_ci * Copyright 2011 Google Inc.
3cb93a386Sopenharmony_ci *
4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be
5cb93a386Sopenharmony_ci * found in the LICENSE file.
6cb93a386Sopenharmony_ci */
7cb93a386Sopenharmony_ci
8cb93a386Sopenharmony_ci#include "include/core/SkShader.h"
9cb93a386Sopenharmony_ci#include "include/utils/SkNWayCanvas.h"
10cb93a386Sopenharmony_ci#include "src/core/SkCanvasPriv.h"
11cb93a386Sopenharmony_ci
12cb93a386Sopenharmony_ciSkNWayCanvas::SkNWayCanvas(int width, int height) : INHERITED(width, height) {}
13cb93a386Sopenharmony_ci
14cb93a386Sopenharmony_ciSkNWayCanvas::~SkNWayCanvas() {
15cb93a386Sopenharmony_ci    this->removeAll();
16cb93a386Sopenharmony_ci}
17cb93a386Sopenharmony_ci
18cb93a386Sopenharmony_civoid SkNWayCanvas::addCanvas(SkCanvas* canvas) {
19cb93a386Sopenharmony_ci    if (canvas) {
20cb93a386Sopenharmony_ci        *fList.append() = canvas;
21cb93a386Sopenharmony_ci    }
22cb93a386Sopenharmony_ci}
23cb93a386Sopenharmony_ci
24cb93a386Sopenharmony_civoid SkNWayCanvas::removeCanvas(SkCanvas* canvas) {
25cb93a386Sopenharmony_ci    int index = fList.find(canvas);
26cb93a386Sopenharmony_ci    if (index >= 0) {
27cb93a386Sopenharmony_ci        fList.removeShuffle(index);
28cb93a386Sopenharmony_ci    }
29cb93a386Sopenharmony_ci}
30cb93a386Sopenharmony_ci
31cb93a386Sopenharmony_civoid SkNWayCanvas::removeAll() {
32cb93a386Sopenharmony_ci    fList.reset();
33cb93a386Sopenharmony_ci}
34cb93a386Sopenharmony_ci
35cb93a386Sopenharmony_ci///////////////////////////////////////////////////////////////////////////
36cb93a386Sopenharmony_ci// These are forwarded to the N canvases we're referencing
37cb93a386Sopenharmony_ci
38cb93a386Sopenharmony_ciclass SkNWayCanvas::Iter {
39cb93a386Sopenharmony_cipublic:
40cb93a386Sopenharmony_ci    Iter(const SkTDArray<SkCanvas*>& list) : fList(list) {
41cb93a386Sopenharmony_ci        fIndex = 0;
42cb93a386Sopenharmony_ci    }
43cb93a386Sopenharmony_ci    bool next() {
44cb93a386Sopenharmony_ci        if (fIndex < fList.count()) {
45cb93a386Sopenharmony_ci            fCanvas = fList[fIndex++];
46cb93a386Sopenharmony_ci            return true;
47cb93a386Sopenharmony_ci        }
48cb93a386Sopenharmony_ci        return false;
49cb93a386Sopenharmony_ci    }
50cb93a386Sopenharmony_ci    SkCanvas* operator->() { return fCanvas; }
51cb93a386Sopenharmony_ci    SkCanvas* get() const { return fCanvas; }
52cb93a386Sopenharmony_ci
53cb93a386Sopenharmony_ciprivate:
54cb93a386Sopenharmony_ci    const SkTDArray<SkCanvas*>& fList;
55cb93a386Sopenharmony_ci    int fIndex;
56cb93a386Sopenharmony_ci    SkCanvas* fCanvas;
57cb93a386Sopenharmony_ci};
58cb93a386Sopenharmony_ci
59cb93a386Sopenharmony_civoid SkNWayCanvas::willSave() {
60cb93a386Sopenharmony_ci    Iter iter(fList);
61cb93a386Sopenharmony_ci    while (iter.next()) {
62cb93a386Sopenharmony_ci        iter->save();
63cb93a386Sopenharmony_ci    }
64cb93a386Sopenharmony_ci
65cb93a386Sopenharmony_ci    this->INHERITED::willSave();
66cb93a386Sopenharmony_ci}
67cb93a386Sopenharmony_ci
68cb93a386Sopenharmony_ciSkCanvas::SaveLayerStrategy SkNWayCanvas::getSaveLayerStrategy(const SaveLayerRec& rec) {
69cb93a386Sopenharmony_ci    Iter iter(fList);
70cb93a386Sopenharmony_ci    while (iter.next()) {
71cb93a386Sopenharmony_ci        iter->saveLayer(rec);
72cb93a386Sopenharmony_ci    }
73cb93a386Sopenharmony_ci
74cb93a386Sopenharmony_ci    this->INHERITED::getSaveLayerStrategy(rec);
75cb93a386Sopenharmony_ci    // No need for a layer.
76cb93a386Sopenharmony_ci    return kNoLayer_SaveLayerStrategy;
77cb93a386Sopenharmony_ci}
78cb93a386Sopenharmony_ci
79cb93a386Sopenharmony_cibool SkNWayCanvas::onDoSaveBehind(const SkRect* bounds) {
80cb93a386Sopenharmony_ci    Iter iter(fList);
81cb93a386Sopenharmony_ci    while (iter.next()) {
82cb93a386Sopenharmony_ci        SkCanvasPriv::SaveBehind(iter.get(), bounds);
83cb93a386Sopenharmony_ci    }
84cb93a386Sopenharmony_ci    this->INHERITED::onDoSaveBehind(bounds);
85cb93a386Sopenharmony_ci    return false;
86cb93a386Sopenharmony_ci}
87cb93a386Sopenharmony_ci
88cb93a386Sopenharmony_civoid SkNWayCanvas::willRestore() {
89cb93a386Sopenharmony_ci    Iter iter(fList);
90cb93a386Sopenharmony_ci    while (iter.next()) {
91cb93a386Sopenharmony_ci        iter->restore();
92cb93a386Sopenharmony_ci    }
93cb93a386Sopenharmony_ci    this->INHERITED::willRestore();
94cb93a386Sopenharmony_ci}
95cb93a386Sopenharmony_ci
96cb93a386Sopenharmony_civoid SkNWayCanvas::onMarkCTM(const char* name) {
97cb93a386Sopenharmony_ci    Iter iter(fList);
98cb93a386Sopenharmony_ci    while (iter.next()) {
99cb93a386Sopenharmony_ci        iter->markCTM(name);
100cb93a386Sopenharmony_ci    }
101cb93a386Sopenharmony_ci    this->INHERITED::onMarkCTM(name);
102cb93a386Sopenharmony_ci}
103cb93a386Sopenharmony_ci
104cb93a386Sopenharmony_civoid SkNWayCanvas::didConcat44(const SkM44& m) {
105cb93a386Sopenharmony_ci    Iter iter(fList);
106cb93a386Sopenharmony_ci    while (iter.next()) {
107cb93a386Sopenharmony_ci        iter->concat(m);
108cb93a386Sopenharmony_ci    }
109cb93a386Sopenharmony_ci}
110cb93a386Sopenharmony_ci
111cb93a386Sopenharmony_civoid SkNWayCanvas::didSetM44(const SkM44& matrix) {
112cb93a386Sopenharmony_ci    Iter iter(fList);
113cb93a386Sopenharmony_ci    while (iter.next()) {
114cb93a386Sopenharmony_ci        iter->setMatrix(matrix);
115cb93a386Sopenharmony_ci    }
116cb93a386Sopenharmony_ci}
117cb93a386Sopenharmony_ci
118cb93a386Sopenharmony_civoid SkNWayCanvas::didTranslate(SkScalar x, SkScalar y) {
119cb93a386Sopenharmony_ci    Iter iter(fList);
120cb93a386Sopenharmony_ci    while (iter.next()) {
121cb93a386Sopenharmony_ci        iter->translate(x, y);
122cb93a386Sopenharmony_ci    }
123cb93a386Sopenharmony_ci}
124cb93a386Sopenharmony_ci
125cb93a386Sopenharmony_civoid SkNWayCanvas::didScale(SkScalar x, SkScalar y) {
126cb93a386Sopenharmony_ci    Iter iter(fList);
127cb93a386Sopenharmony_ci    while (iter.next()) {
128cb93a386Sopenharmony_ci        iter->scale(x, y);
129cb93a386Sopenharmony_ci    }
130cb93a386Sopenharmony_ci}
131cb93a386Sopenharmony_ci
132cb93a386Sopenharmony_civoid SkNWayCanvas::onClipRect(const SkRect& rect, SkClipOp op, ClipEdgeStyle edgeStyle) {
133cb93a386Sopenharmony_ci    Iter iter(fList);
134cb93a386Sopenharmony_ci    while (iter.next()) {
135cb93a386Sopenharmony_ci        iter->clipRect(rect, op, kSoft_ClipEdgeStyle == edgeStyle);
136cb93a386Sopenharmony_ci    }
137cb93a386Sopenharmony_ci    this->INHERITED::onClipRect(rect, op, edgeStyle);
138cb93a386Sopenharmony_ci}
139cb93a386Sopenharmony_ci
140cb93a386Sopenharmony_civoid SkNWayCanvas::onClipRRect(const SkRRect& rrect, SkClipOp op, ClipEdgeStyle edgeStyle) {
141cb93a386Sopenharmony_ci    Iter iter(fList);
142cb93a386Sopenharmony_ci    while (iter.next()) {
143cb93a386Sopenharmony_ci        iter->clipRRect(rrect, op, kSoft_ClipEdgeStyle == edgeStyle);
144cb93a386Sopenharmony_ci    }
145cb93a386Sopenharmony_ci    this->INHERITED::onClipRRect(rrect, op, edgeStyle);
146cb93a386Sopenharmony_ci}
147cb93a386Sopenharmony_ci
148cb93a386Sopenharmony_civoid SkNWayCanvas::onClipPath(const SkPath& path, SkClipOp op, ClipEdgeStyle edgeStyle) {
149cb93a386Sopenharmony_ci    Iter iter(fList);
150cb93a386Sopenharmony_ci    while (iter.next()) {
151cb93a386Sopenharmony_ci        iter->clipPath(path, op, kSoft_ClipEdgeStyle == edgeStyle);
152cb93a386Sopenharmony_ci    }
153cb93a386Sopenharmony_ci    this->INHERITED::onClipPath(path, op, edgeStyle);
154cb93a386Sopenharmony_ci}
155cb93a386Sopenharmony_ci
156cb93a386Sopenharmony_civoid SkNWayCanvas::onClipShader(sk_sp<SkShader> sh, SkClipOp op) {
157cb93a386Sopenharmony_ci    Iter iter(fList);
158cb93a386Sopenharmony_ci    while (iter.next()) {
159cb93a386Sopenharmony_ci        iter->clipShader(sh, op);
160cb93a386Sopenharmony_ci    }
161cb93a386Sopenharmony_ci    this->INHERITED::onClipShader(std::move(sh), op);
162cb93a386Sopenharmony_ci}
163cb93a386Sopenharmony_ci
164cb93a386Sopenharmony_civoid SkNWayCanvas::onClipRegion(const SkRegion& deviceRgn, SkClipOp op) {
165cb93a386Sopenharmony_ci    Iter iter(fList);
166cb93a386Sopenharmony_ci    while (iter.next()) {
167cb93a386Sopenharmony_ci        iter->clipRegion(deviceRgn, op);
168cb93a386Sopenharmony_ci    }
169cb93a386Sopenharmony_ci    this->INHERITED::onClipRegion(deviceRgn, op);
170cb93a386Sopenharmony_ci}
171cb93a386Sopenharmony_ci
172cb93a386Sopenharmony_civoid SkNWayCanvas::onResetClip() {
173cb93a386Sopenharmony_ci    Iter iter(fList);
174cb93a386Sopenharmony_ci    while (iter.next()) {
175cb93a386Sopenharmony_ci        SkCanvasPriv::ResetClip(iter.get());
176cb93a386Sopenharmony_ci    }
177cb93a386Sopenharmony_ci    this->INHERITED::onResetClip();
178cb93a386Sopenharmony_ci}
179cb93a386Sopenharmony_ci
180cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawPaint(const SkPaint& paint) {
181cb93a386Sopenharmony_ci    Iter iter(fList);
182cb93a386Sopenharmony_ci    while (iter.next()) {
183cb93a386Sopenharmony_ci        iter->drawPaint(paint);
184cb93a386Sopenharmony_ci    }
185cb93a386Sopenharmony_ci}
186cb93a386Sopenharmony_ci
187cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawBehind(const SkPaint& paint) {
188cb93a386Sopenharmony_ci    Iter iter(fList);
189cb93a386Sopenharmony_ci    while (iter.next()) {
190cb93a386Sopenharmony_ci        SkCanvasPriv::DrawBehind(iter.get(), paint);
191cb93a386Sopenharmony_ci    }
192cb93a386Sopenharmony_ci}
193cb93a386Sopenharmony_ci
194cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawPoints(PointMode mode, size_t count, const SkPoint pts[],
195cb93a386Sopenharmony_ci                                const SkPaint& paint) {
196cb93a386Sopenharmony_ci    Iter iter(fList);
197cb93a386Sopenharmony_ci    while (iter.next()) {
198cb93a386Sopenharmony_ci        iter->drawPoints(mode, count, pts, paint);
199cb93a386Sopenharmony_ci    }
200cb93a386Sopenharmony_ci}
201cb93a386Sopenharmony_ci
202cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawRect(const SkRect& rect, const SkPaint& paint) {
203cb93a386Sopenharmony_ci    Iter iter(fList);
204cb93a386Sopenharmony_ci    while (iter.next()) {
205cb93a386Sopenharmony_ci        iter->drawRect(rect, paint);
206cb93a386Sopenharmony_ci    }
207cb93a386Sopenharmony_ci}
208cb93a386Sopenharmony_ci
209cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawRegion(const SkRegion& region, const SkPaint& paint) {
210cb93a386Sopenharmony_ci    Iter iter(fList);
211cb93a386Sopenharmony_ci    while (iter.next()) {
212cb93a386Sopenharmony_ci        iter->drawRegion(region, paint);
213cb93a386Sopenharmony_ci    }
214cb93a386Sopenharmony_ci}
215cb93a386Sopenharmony_ci
216cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawOval(const SkRect& rect, const SkPaint& paint) {
217cb93a386Sopenharmony_ci    Iter iter(fList);
218cb93a386Sopenharmony_ci    while (iter.next()) {
219cb93a386Sopenharmony_ci        iter->drawOval(rect, paint);
220cb93a386Sopenharmony_ci    }
221cb93a386Sopenharmony_ci}
222cb93a386Sopenharmony_ci
223cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawArc(const SkRect& rect, SkScalar startAngle, SkScalar sweepAngle,
224cb93a386Sopenharmony_ci                             bool useCenter, const SkPaint& paint) {
225cb93a386Sopenharmony_ci    Iter iter(fList);
226cb93a386Sopenharmony_ci    while (iter.next()) {
227cb93a386Sopenharmony_ci        iter->drawArc(rect, startAngle, sweepAngle, useCenter, paint);
228cb93a386Sopenharmony_ci    }
229cb93a386Sopenharmony_ci}
230cb93a386Sopenharmony_ci
231cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawRRect(const SkRRect& rrect, const SkPaint& paint) {
232cb93a386Sopenharmony_ci    Iter iter(fList);
233cb93a386Sopenharmony_ci    while (iter.next()) {
234cb93a386Sopenharmony_ci        iter->drawRRect(rrect, paint);
235cb93a386Sopenharmony_ci    }
236cb93a386Sopenharmony_ci}
237cb93a386Sopenharmony_ci
238cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner, const SkPaint& paint) {
239cb93a386Sopenharmony_ci    Iter iter(fList);
240cb93a386Sopenharmony_ci    while (iter.next()) {
241cb93a386Sopenharmony_ci        iter->drawDRRect(outer, inner, paint);
242cb93a386Sopenharmony_ci    }
243cb93a386Sopenharmony_ci}
244cb93a386Sopenharmony_ci
245cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawPath(const SkPath& path, const SkPaint& paint) {
246cb93a386Sopenharmony_ci    Iter iter(fList);
247cb93a386Sopenharmony_ci    while (iter.next()) {
248cb93a386Sopenharmony_ci        iter->drawPath(path, paint);
249cb93a386Sopenharmony_ci    }
250cb93a386Sopenharmony_ci}
251cb93a386Sopenharmony_ci
252cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawImage2(const SkImage* image, SkScalar left, SkScalar top,
253cb93a386Sopenharmony_ci                                const SkSamplingOptions& sampling, const SkPaint* paint) {
254cb93a386Sopenharmony_ci    Iter iter(fList);
255cb93a386Sopenharmony_ci    while (iter.next()) {
256cb93a386Sopenharmony_ci        iter->drawImage(image, left, top, sampling, paint);
257cb93a386Sopenharmony_ci    }
258cb93a386Sopenharmony_ci}
259cb93a386Sopenharmony_ci
260cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawImageRect2(const SkImage* image, const SkRect& src, const SkRect& dst,
261cb93a386Sopenharmony_ci                                    const SkSamplingOptions& sampling, const SkPaint* paint,
262cb93a386Sopenharmony_ci                                    SrcRectConstraint constraint) {
263cb93a386Sopenharmony_ci    Iter iter(fList);
264cb93a386Sopenharmony_ci    while (iter.next()) {
265cb93a386Sopenharmony_ci        iter->drawImageRect(image, src, dst, sampling, paint, constraint);
266cb93a386Sopenharmony_ci    }
267cb93a386Sopenharmony_ci}
268cb93a386Sopenharmony_ci
269cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawImageLattice2(const SkImage* image, const Lattice& lattice,
270cb93a386Sopenharmony_ci                                       const SkRect& dst, SkFilterMode filter,
271cb93a386Sopenharmony_ci                                       const SkPaint* paint) {
272cb93a386Sopenharmony_ci    Iter iter(fList);
273cb93a386Sopenharmony_ci    while (iter.next()) {
274cb93a386Sopenharmony_ci        iter->drawImageLattice(image, lattice, dst, filter, paint);
275cb93a386Sopenharmony_ci    }
276cb93a386Sopenharmony_ci}
277cb93a386Sopenharmony_ci
278cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawAtlas2(const SkImage* image, const SkRSXform xform[], const SkRect tex[],
279cb93a386Sopenharmony_ci                                const SkColor colors[], int count, SkBlendMode bmode,
280cb93a386Sopenharmony_ci                                const SkSamplingOptions& sampling, const SkRect* cull,
281cb93a386Sopenharmony_ci                                const SkPaint* paint) {
282cb93a386Sopenharmony_ci    Iter iter(fList);
283cb93a386Sopenharmony_ci    while (iter.next()) {
284cb93a386Sopenharmony_ci        iter->drawAtlas(image, xform, tex, colors, count, bmode, sampling, cull, paint);
285cb93a386Sopenharmony_ci    }
286cb93a386Sopenharmony_ci}
287cb93a386Sopenharmony_ci
288cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawGlyphRunList(const SkGlyphRunList& list, const SkPaint &paint) {
289cb93a386Sopenharmony_ci    Iter iter(fList);
290cb93a386Sopenharmony_ci    while (iter.next()) {
291cb93a386Sopenharmony_ci        iter->onDrawGlyphRunList(list, paint);
292cb93a386Sopenharmony_ci    }
293cb93a386Sopenharmony_ci}
294cb93a386Sopenharmony_ci
295cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y,
296cb93a386Sopenharmony_ci                                  const SkPaint &paint) {
297cb93a386Sopenharmony_ci    Iter iter(fList);
298cb93a386Sopenharmony_ci    while (iter.next()) {
299cb93a386Sopenharmony_ci        iter->drawTextBlob(blob, x, y, paint);
300cb93a386Sopenharmony_ci    }
301cb93a386Sopenharmony_ci}
302cb93a386Sopenharmony_ci
303cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matrix,
304cb93a386Sopenharmony_ci                                 const SkPaint* paint) {
305cb93a386Sopenharmony_ci    Iter iter(fList);
306cb93a386Sopenharmony_ci    while (iter.next()) {
307cb93a386Sopenharmony_ci        iter->drawPicture(picture, matrix, paint);
308cb93a386Sopenharmony_ci    }
309cb93a386Sopenharmony_ci}
310cb93a386Sopenharmony_ci
311cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawDrawable(SkDrawable* drawable, const SkMatrix* matrix) {
312cb93a386Sopenharmony_ci    Iter iter(fList);
313cb93a386Sopenharmony_ci    while (iter.next()) {
314cb93a386Sopenharmony_ci        iter->drawDrawable(drawable, matrix);
315cb93a386Sopenharmony_ci    }
316cb93a386Sopenharmony_ci}
317cb93a386Sopenharmony_ci
318cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawVerticesObject(const SkVertices* vertices,
319cb93a386Sopenharmony_ci                                        SkBlendMode bmode, const SkPaint& paint) {
320cb93a386Sopenharmony_ci    Iter iter(fList);
321cb93a386Sopenharmony_ci    while (iter.next()) {
322cb93a386Sopenharmony_ci        iter->drawVertices(vertices, bmode, paint);
323cb93a386Sopenharmony_ci    }
324cb93a386Sopenharmony_ci}
325cb93a386Sopenharmony_ci
326cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4],
327cb93a386Sopenharmony_ci                               const SkPoint texCoords[4], SkBlendMode bmode,
328cb93a386Sopenharmony_ci                               const SkPaint& paint) {
329cb93a386Sopenharmony_ci    Iter iter(fList);
330cb93a386Sopenharmony_ci    while (iter.next()) {
331cb93a386Sopenharmony_ci        iter->drawPatch(cubics, colors, texCoords, bmode, paint);
332cb93a386Sopenharmony_ci    }
333cb93a386Sopenharmony_ci}
334cb93a386Sopenharmony_ci
335cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawShadowRec(const SkPath& path, const SkDrawShadowRec& rec) {
336cb93a386Sopenharmony_ci    Iter iter(fList);
337cb93a386Sopenharmony_ci    while (iter.next()) {
338cb93a386Sopenharmony_ci        iter->private_draw_shadow_rec(path, rec);
339cb93a386Sopenharmony_ci    }
340cb93a386Sopenharmony_ci}
341cb93a386Sopenharmony_ci
342cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawAnnotation(const SkRect& rect, const char key[], SkData* data) {
343cb93a386Sopenharmony_ci    Iter iter(fList);
344cb93a386Sopenharmony_ci    while (iter.next()) {
345cb93a386Sopenharmony_ci        iter->drawAnnotation(rect, key, data);
346cb93a386Sopenharmony_ci    }
347cb93a386Sopenharmony_ci}
348cb93a386Sopenharmony_ci
349cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawEdgeAAQuad(const SkRect& rect, const SkPoint clip[4],
350cb93a386Sopenharmony_ci                                    QuadAAFlags aa, const SkColor4f& color, SkBlendMode mode) {
351cb93a386Sopenharmony_ci    Iter iter(fList);
352cb93a386Sopenharmony_ci    while (iter.next()) {
353cb93a386Sopenharmony_ci        iter->experimental_DrawEdgeAAQuad(rect, clip, aa, color, mode);
354cb93a386Sopenharmony_ci    }
355cb93a386Sopenharmony_ci}
356cb93a386Sopenharmony_ci
357cb93a386Sopenharmony_civoid SkNWayCanvas::onDrawEdgeAAImageSet2(const ImageSetEntry set[], int count,
358cb93a386Sopenharmony_ci                                         const SkPoint dstClips[], const SkMatrix preViewMatrices[],
359cb93a386Sopenharmony_ci                                         const SkSamplingOptions& sampling, const SkPaint* paint,
360cb93a386Sopenharmony_ci                                         SrcRectConstraint constraint) {
361cb93a386Sopenharmony_ci    Iter iter(fList);
362cb93a386Sopenharmony_ci    while (iter.next()) {
363cb93a386Sopenharmony_ci        iter->experimental_DrawEdgeAAImageSet(
364cb93a386Sopenharmony_ci                set, count, dstClips, preViewMatrices, sampling, paint, constraint);
365cb93a386Sopenharmony_ci    }
366cb93a386Sopenharmony_ci}
367cb93a386Sopenharmony_ci
368cb93a386Sopenharmony_civoid SkNWayCanvas::onFlush() {
369cb93a386Sopenharmony_ci    Iter iter(fList);
370cb93a386Sopenharmony_ci    while (iter.next()) {
371cb93a386Sopenharmony_ci        iter->flush();
372cb93a386Sopenharmony_ci    }
373cb93a386Sopenharmony_ci}
374cb93a386Sopenharmony_ci
375cb93a386Sopenharmony_cibool SkNWayCanvas::onDrawBlurImage(const SkImage* image, const SkBlurArg& blurArg)
376cb93a386Sopenharmony_ci{
377cb93a386Sopenharmony_ci    Iter iter(fList);
378cb93a386Sopenharmony_ci    bool result = false;
379cb93a386Sopenharmony_ci    while (iter.next()) {
380cb93a386Sopenharmony_ci        result |= iter->drawBlurImage(image, blurArg);
381cb93a386Sopenharmony_ci    }
382cb93a386Sopenharmony_ci    result |= this->INHERITED::onDrawBlurImage(image, blurArg);
383cb93a386Sopenharmony_ci    return result;
384cb93a386Sopenharmony_ci}
385