• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "SkNWayCanvas.h"
2 
SkNWayCanvas()3 SkNWayCanvas::SkNWayCanvas() {}
4 
~SkNWayCanvas()5 SkNWayCanvas::~SkNWayCanvas() {
6     this->removeAll();
7 }
8 
addCanvas(SkCanvas * canvas)9 void SkNWayCanvas::addCanvas(SkCanvas* canvas) {
10     if (canvas) {
11         canvas->ref();
12         *fList.append() = canvas;
13     }
14 }
15 
removeCanvas(SkCanvas * canvas)16 void SkNWayCanvas::removeCanvas(SkCanvas* canvas) {
17     int index = fList.find(canvas);
18     if (index >= 0) {
19         canvas->unref();
20         fList.removeShuffle(index);
21     }
22 }
23 
removeAll()24 void SkNWayCanvas::removeAll() {
25     fList.unrefAll();
26     fList.reset();
27 }
28 
29 ///////////////////////////////////////////////////////////////////////////
30 // These are forwarded to the N canvases we're referencing
31 
32 class SkNWayCanvas::Iter {
33 public:
Iter(const SkTDArray<SkCanvas * > & list)34     Iter(const SkTDArray<SkCanvas*>& list) : fList(list) {
35         fIndex = 0;
36     }
next()37     bool next() {
38         if (fIndex < fList.count()) {
39             fCanvas = fList[fIndex++];
40             return true;
41         }
42         return false;
43     }
operator ->()44     SkCanvas* operator->() { return fCanvas; }
45 
46 private:
47     const SkTDArray<SkCanvas*>& fList;
48     int fIndex;
49     SkCanvas* fCanvas;
50 };
51 
save(SaveFlags flags)52 int SkNWayCanvas::save(SaveFlags flags) {
53     Iter iter(fList);
54     while (iter.next()) {
55         iter->save(flags);
56     }
57     return this->INHERITED::save(flags);
58 }
59 
saveLayer(const SkRect * bounds,const SkPaint * paint,SaveFlags flags)60 int SkNWayCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
61                                     SaveFlags flags) {
62     Iter iter(fList);
63     while (iter.next()) {
64         iter->saveLayer(bounds, paint, flags);
65     }
66     return this->INHERITED::saveLayer(bounds, paint, flags);
67 }
68 
restore()69 void SkNWayCanvas::restore() {
70     Iter iter(fList);
71     while (iter.next()) {
72         iter->restore();
73     }
74     this->INHERITED::restore();
75 }
76 
translate(SkScalar dx,SkScalar dy)77 bool SkNWayCanvas::translate(SkScalar dx, SkScalar dy) {
78     Iter iter(fList);
79     while (iter.next()) {
80         iter->translate(dx, dy);
81     }
82     return this->INHERITED::translate(dx, dy);
83 }
84 
scale(SkScalar sx,SkScalar sy)85 bool SkNWayCanvas::scale(SkScalar sx, SkScalar sy) {
86     Iter iter(fList);
87     while (iter.next()) {
88         iter->scale(sx, sy);
89     }
90     return this->INHERITED::scale(sx, sy);
91 }
92 
rotate(SkScalar degrees)93 bool SkNWayCanvas::rotate(SkScalar degrees) {
94     Iter iter(fList);
95     while (iter.next()) {
96         iter->rotate(degrees);
97     }
98     return this->INHERITED::rotate(degrees);
99 }
100 
skew(SkScalar sx,SkScalar sy)101 bool SkNWayCanvas::skew(SkScalar sx, SkScalar sy) {
102     Iter iter(fList);
103     while (iter.next()) {
104         iter->skew(sx, sy);
105     }
106     return this->INHERITED::skew(sx, sy);
107 }
108 
concat(const SkMatrix & matrix)109 bool SkNWayCanvas::concat(const SkMatrix& matrix) {
110     Iter iter(fList);
111     while (iter.next()) {
112         iter->concat(matrix);
113     }
114     return this->INHERITED::concat(matrix);
115 }
116 
setMatrix(const SkMatrix & matrix)117 void SkNWayCanvas::setMatrix(const SkMatrix& matrix) {
118     Iter iter(fList);
119     while (iter.next()) {
120         iter->setMatrix(matrix);
121     }
122     this->INHERITED::setMatrix(matrix);
123 }
124 
clipRect(const SkRect & rect,SkRegion::Op op)125 bool SkNWayCanvas::clipRect(const SkRect& rect, SkRegion::Op op) {
126     Iter iter(fList);
127     while (iter.next()) {
128         iter->clipRect(rect, op);
129     }
130     return this->INHERITED::clipRect(rect, op);
131 }
132 
clipPath(const SkPath & path,SkRegion::Op op)133 bool SkNWayCanvas::clipPath(const SkPath& path, SkRegion::Op op) {
134     Iter iter(fList);
135     while (iter.next()) {
136         iter->clipPath(path, op);
137     }
138     return this->INHERITED::clipPath(path, op);
139 }
140 
clipRegion(const SkRegion & deviceRgn,SkRegion::Op op)141 bool SkNWayCanvas::clipRegion(const SkRegion& deviceRgn, SkRegion::Op op) {
142     Iter iter(fList);
143     while (iter.next()) {
144         iter->clipRegion(deviceRgn, op);
145     }
146     return this->INHERITED::clipRegion(deviceRgn, op);
147 }
148 
drawPaint(const SkPaint & paint)149 void SkNWayCanvas::drawPaint(const SkPaint& paint) {
150     Iter iter(fList);
151     while (iter.next()) {
152         iter->drawPaint(paint);
153     }
154 }
155 
drawPoints(PointMode mode,size_t count,const SkPoint pts[],const SkPaint & paint)156 void SkNWayCanvas::drawPoints(PointMode mode, size_t count, const SkPoint pts[],
157                         const SkPaint& paint) {
158     Iter iter(fList);
159     while (iter.next()) {
160         iter->drawPoints(mode, count, pts, paint);
161     }
162 }
163 
drawRect(const SkRect & rect,const SkPaint & paint)164 void SkNWayCanvas::drawRect(const SkRect& rect, const SkPaint& paint) {
165     Iter iter(fList);
166     while (iter.next()) {
167         iter->drawRect(rect, paint);
168     }
169 }
170 
drawPath(const SkPath & path,const SkPaint & paint)171 void SkNWayCanvas::drawPath(const SkPath& path, const SkPaint& paint) {
172     Iter iter(fList);
173     while (iter.next()) {
174         iter->drawPath(path, paint);
175     }
176 }
177 
drawBitmap(const SkBitmap & bitmap,SkScalar x,SkScalar y,const SkPaint * paint)178 void SkNWayCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y,
179                               const SkPaint* paint) {
180     Iter iter(fList);
181     while (iter.next()) {
182         iter->drawBitmap(bitmap, x, y, paint);
183     }
184 }
185 
drawBitmapRect(const SkBitmap & bitmap,const SkIRect * src,const SkRect & dst,const SkPaint * paint)186 void SkNWayCanvas::drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
187                                   const SkRect& dst, const SkPaint* paint) {
188     Iter iter(fList);
189     while (iter.next()) {
190         iter->drawBitmapRect(bitmap, src, dst, paint);
191     }
192 }
193 
drawBitmapMatrix(const SkBitmap & bitmap,const SkMatrix & m,const SkPaint * paint)194 void SkNWayCanvas::drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m,
195                                     const SkPaint* paint) {
196     Iter iter(fList);
197     while (iter.next()) {
198         iter->drawBitmapMatrix(bitmap, m, paint);
199     }
200 }
201 
drawSprite(const SkBitmap & bitmap,int x,int y,const SkPaint * paint)202 void SkNWayCanvas::drawSprite(const SkBitmap& bitmap, int x, int y,
203                               const SkPaint* paint) {
204     Iter iter(fList);
205     while (iter.next()) {
206         iter->drawSprite(bitmap, x, y, paint);
207     }
208 }
209 
drawText(const void * text,size_t byteLength,SkScalar x,SkScalar y,const SkPaint & paint)210 void SkNWayCanvas::drawText(const void* text, size_t byteLength, SkScalar x,
211                             SkScalar y, const SkPaint& paint) {
212     Iter iter(fList);
213     while (iter.next()) {
214         iter->drawText(text, byteLength, x, y, paint);
215     }
216 }
217 
drawPosText(const void * text,size_t byteLength,const SkPoint pos[],const SkPaint & paint)218 void SkNWayCanvas::drawPosText(const void* text, size_t byteLength,
219                                const SkPoint pos[], const SkPaint& paint) {
220     Iter iter(fList);
221     while (iter.next()) {
222         iter->drawPosText(text, byteLength, pos, paint);
223     }
224 }
225 
drawPosTextH(const void * text,size_t byteLength,const SkScalar xpos[],SkScalar constY,const SkPaint & paint)226 void SkNWayCanvas::drawPosTextH(const void* text, size_t byteLength,
227                                 const SkScalar xpos[], SkScalar constY,
228                                 const SkPaint& paint) {
229     Iter iter(fList);
230     while (iter.next()) {
231         iter->drawPosTextH(text, byteLength, xpos, constY, paint);
232     }
233 }
234 
drawTextOnPath(const void * text,size_t byteLength,const SkPath & path,const SkMatrix * matrix,const SkPaint & paint)235 void SkNWayCanvas::drawTextOnPath(const void* text, size_t byteLength,
236                                   const SkPath& path, const SkMatrix* matrix,
237                                   const SkPaint& paint) {
238     Iter iter(fList);
239     while (iter.next()) {
240         iter->drawTextOnPath(text, byteLength, path, matrix, paint);
241     }
242 }
243 
drawPicture(SkPicture & picture)244 void SkNWayCanvas::drawPicture(SkPicture& picture) {
245     Iter iter(fList);
246     while (iter.next()) {
247         iter->drawPicture(picture);
248     }
249 }
250 
drawShape(SkShape * shape)251 void SkNWayCanvas::drawShape(SkShape* shape) {
252     Iter iter(fList);
253     while (iter.next()) {
254         iter->drawShape(shape);
255     }
256 }
257 
drawVertices(VertexMode vmode,int vertexCount,const SkPoint vertices[],const SkPoint texs[],const SkColor colors[],SkXfermode * xmode,const uint16_t indices[],int indexCount,const SkPaint & paint)258 void SkNWayCanvas::drawVertices(VertexMode vmode, int vertexCount,
259                           const SkPoint vertices[], const SkPoint texs[],
260                           const SkColor colors[], SkXfermode* xmode,
261                           const uint16_t indices[], int indexCount,
262                           const SkPaint& paint) {
263     Iter iter(fList);
264     while (iter.next()) {
265         iter->drawVertices(vmode, vertexCount, vertices, texs, colors, xmode,
266                            indices, indexCount, paint);
267     }
268 }
269 
setBounder(SkBounder * bounder)270 SkBounder* SkNWayCanvas::setBounder(SkBounder* bounder) {
271     Iter iter(fList);
272     while (iter.next()) {
273         iter->setBounder(bounder);
274     }
275     return this->INHERITED::setBounder(bounder);
276 }
277 
setDrawFilter(SkDrawFilter * filter)278 SkDrawFilter* SkNWayCanvas::setDrawFilter(SkDrawFilter* filter) {
279     Iter iter(fList);
280     while (iter.next()) {
281         iter->setDrawFilter(filter);
282     }
283     return this->INHERITED::setDrawFilter(filter);
284 }
285 
286 
287