blob: d60f259f67c8e91b18cc96f04fe6b49678e9f212 [file] [log] [blame]
reed@android.com6c924ad2009-03-31 03:48:49 +00001#include "SkNWayCanvas.h"
2
3SkNWayCanvas::SkNWayCanvas() {}
4
5SkNWayCanvas::~SkNWayCanvas() {
6 this->removeAll();
7}
8
9void SkNWayCanvas::addCanvas(SkCanvas* canvas) {
10 if (canvas) {
11 canvas->ref();
12 *fList.append() = canvas;
13 }
14}
15
16void SkNWayCanvas::removeCanvas(SkCanvas* canvas) {
17 int index = fList.find(canvas);
18 if (index >= 0) {
19 canvas->unref();
20 fList.removeShuffle(index);
21 }
22}
23
24void SkNWayCanvas::removeAll() {
25 fList.unrefAll();
26 fList.reset();
27}
28
29///////////////////////////////////////////////////////////////////////////
30// These are forwarded to the N canvases we're referencing
31
32class SkNWayCanvas::Iter {
33public:
34 Iter(const SkTDArray<SkCanvas*>& list) : fList(list) {
35 fIndex = 0;
36 }
37 bool next() {
38 if (fIndex < fList.count()) {
39 fCanvas = fList[fIndex++];
40 return true;
41 }
42 return false;
43 }
44 SkCanvas* operator->() { return fCanvas; }
45
46private:
47 const SkTDArray<SkCanvas*>& fList;
48 int fIndex;
49 SkCanvas* fCanvas;
50};
51
52int 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
60int 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
69void SkNWayCanvas::restore() {
70 Iter iter(fList);
71 while (iter.next()) {
72 iter->restore();
73 }
74 this->INHERITED::restore();
75}
76
77bool 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
85bool 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
93bool 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
101bool 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
109bool 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
117void 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
125bool 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
133bool 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
141bool 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
149void SkNWayCanvas::drawPaint(const SkPaint& paint) {
150 Iter iter(fList);
151 while (iter.next()) {
152 iter->drawPaint(paint);
153 }
154}
155
156void 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
164void SkNWayCanvas::drawRect(const SkRect& rect, const SkPaint& paint) {
165 Iter iter(fList);
166 while (iter.next()) {
167 iter->drawRect(rect, paint);
168 }
169}
170
171void SkNWayCanvas::drawPath(const SkPath& path, const SkPaint& paint) {
172 Iter iter(fList);
173 while (iter.next()) {
174 iter->drawPath(path, paint);
175 }
176}
177
178void 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
186void 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
194void 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
202void 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
210void 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
218void 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
226void 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
235void 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
244void SkNWayCanvas::drawPicture(SkPicture& picture) {
245 Iter iter(fList);
246 while (iter.next()) {
247 iter->drawPicture(picture);
248 }
249}
250
251void SkNWayCanvas::drawVertices(VertexMode vmode, int vertexCount,
252 const SkPoint vertices[], const SkPoint texs[],
253 const SkColor colors[], SkXfermode* xmode,
254 const uint16_t indices[], int indexCount,
255 const SkPaint& paint) {
256 Iter iter(fList);
257 while (iter.next()) {
258 iter->drawVertices(vmode, vertexCount, vertices, texs, colors, xmode,
259 indices, indexCount, paint);
260 }
261}
262
263SkBounder* SkNWayCanvas::setBounder(SkBounder* bounder) {
264 Iter iter(fList);
265 while (iter.next()) {
266 iter->setBounder(bounder);
267 }
268 return this->INHERITED::setBounder(bounder);
269}
270
271SkDrawFilter* SkNWayCanvas::setDrawFilter(SkDrawFilter* filter) {
272 Iter iter(fList);
273 while (iter.next()) {
274 iter->setDrawFilter(filter);
275 }
276 return this->INHERITED::setDrawFilter(filter);
277}
278
279