3 * Copyright 2011 Google Inc.
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
8 #include "SkNWayCanvas.h"
10 SkNWayCanvas::SkNWayCanvas(int width, int height)
11 : INHERITED(width, height) {}
13 SkNWayCanvas::~SkNWayCanvas() {
17 void SkNWayCanvas::addCanvas(SkCanvas* canvas) {
20 *fList.append() = canvas;
24 void SkNWayCanvas::removeCanvas(SkCanvas* canvas) {
25 int index = fList.find(canvas);
28 fList.removeShuffle(index);
32 void SkNWayCanvas::removeAll() {
37 ///////////////////////////////////////////////////////////////////////////
38 // These are forwarded to the N canvases we're referencing
40 class SkNWayCanvas::Iter {
42 Iter(const SkTDArray<SkCanvas*>& list) : fList(list) {
46 if (fIndex < fList.count()) {
47 fCanvas = fList[fIndex++];
52 SkCanvas* operator->() { return fCanvas; }
55 const SkTDArray<SkCanvas*>& fList;
60 int SkNWayCanvas::save(SaveFlags flags) {
65 return this->INHERITED::save(flags);
68 int SkNWayCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
72 iter->saveLayer(bounds, paint, flags);
74 return this->INHERITED::saveLayer(bounds, paint, flags);
77 void SkNWayCanvas::restore() {
82 this->INHERITED::restore();
85 bool SkNWayCanvas::translate(SkScalar dx, SkScalar dy) {
88 iter->translate(dx, dy);
90 return this->INHERITED::translate(dx, dy);
93 bool SkNWayCanvas::scale(SkScalar sx, SkScalar sy) {
98 return this->INHERITED::scale(sx, sy);
101 bool SkNWayCanvas::rotate(SkScalar degrees) {
103 while (iter.next()) {
104 iter->rotate(degrees);
106 return this->INHERITED::rotate(degrees);
109 bool SkNWayCanvas::skew(SkScalar sx, SkScalar sy) {
111 while (iter.next()) {
114 return this->INHERITED::skew(sx, sy);
117 bool SkNWayCanvas::concat(const SkMatrix& matrix) {
119 while (iter.next()) {
120 iter->concat(matrix);
122 return this->INHERITED::concat(matrix);
125 void SkNWayCanvas::setMatrix(const SkMatrix& matrix) {
127 while (iter.next()) {
128 iter->setMatrix(matrix);
130 this->INHERITED::setMatrix(matrix);
133 bool SkNWayCanvas::clipRect(const SkRect& rect, SkRegion::Op op, bool doAA) {
135 while (iter.next()) {
136 iter->clipRect(rect, op, doAA);
138 return this->INHERITED::clipRect(rect, op, doAA);
141 bool SkNWayCanvas::clipRRect(const SkRRect& rrect, SkRegion::Op op, bool doAA) {
143 while (iter.next()) {
144 iter->clipRRect(rrect, op, doAA);
146 return this->INHERITED::clipRRect(rrect, op, doAA);
149 bool SkNWayCanvas::clipPath(const SkPath& path, SkRegion::Op op, bool doAA) {
151 while (iter.next()) {
152 iter->clipPath(path, op, doAA);
154 return this->INHERITED::clipPath(path, op, doAA);
157 bool SkNWayCanvas::clipRegion(const SkRegion& deviceRgn, SkRegion::Op op) {
159 while (iter.next()) {
160 iter->clipRegion(deviceRgn, op);
162 return this->INHERITED::clipRegion(deviceRgn, op);
165 void SkNWayCanvas::clear(SkColor color) {
167 while (iter.next()) {
172 void SkNWayCanvas::drawPaint(const SkPaint& paint) {
174 while (iter.next()) {
175 iter->drawPaint(paint);
179 void SkNWayCanvas::drawPoints(PointMode mode, size_t count, const SkPoint pts[],
180 const SkPaint& paint) {
182 while (iter.next()) {
183 iter->drawPoints(mode, count, pts, paint);
187 void SkNWayCanvas::drawRect(const SkRect& rect, const SkPaint& paint) {
189 while (iter.next()) {
190 iter->drawRect(rect, paint);
194 void SkNWayCanvas::drawOval(const SkRect& rect, const SkPaint& paint) {
196 while (iter.next()) {
197 iter->drawOval(rect, paint);
201 void SkNWayCanvas::drawRRect(const SkRRect& rrect, const SkPaint& paint) {
203 while (iter.next()) {
204 iter->drawRRect(rrect, paint);
208 void SkNWayCanvas::drawPath(const SkPath& path, const SkPaint& paint) {
210 while (iter.next()) {
211 iter->drawPath(path, paint);
215 void SkNWayCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y,
216 const SkPaint* paint) {
218 while (iter.next()) {
219 iter->drawBitmap(bitmap, x, y, paint);
223 void SkNWayCanvas::drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
224 const SkRect& dst, const SkPaint* paint,
225 DrawBitmapRectFlags flags) {
227 while (iter.next()) {
228 iter->drawBitmapRectToRect(bitmap, src, dst, paint, flags);
232 void SkNWayCanvas::drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m,
233 const SkPaint* paint) {
235 while (iter.next()) {
236 iter->drawBitmapMatrix(bitmap, m, paint);
240 void SkNWayCanvas::drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
241 const SkRect& dst, const SkPaint* paint) {
243 while (iter.next()) {
244 iter->drawBitmapNine(bitmap, center, dst, paint);
248 void SkNWayCanvas::drawSprite(const SkBitmap& bitmap, int x, int y,
249 const SkPaint* paint) {
251 while (iter.next()) {
252 iter->drawSprite(bitmap, x, y, paint);
256 void SkNWayCanvas::drawText(const void* text, size_t byteLength, SkScalar x,
257 SkScalar y, const SkPaint& paint) {
259 while (iter.next()) {
260 iter->drawText(text, byteLength, x, y, paint);
264 void SkNWayCanvas::drawPosText(const void* text, size_t byteLength,
265 const SkPoint pos[], const SkPaint& paint) {
267 while (iter.next()) {
268 iter->drawPosText(text, byteLength, pos, paint);
272 void SkNWayCanvas::drawPosTextH(const void* text, size_t byteLength,
273 const SkScalar xpos[], SkScalar constY,
274 const SkPaint& paint) {
276 while (iter.next()) {
277 iter->drawPosTextH(text, byteLength, xpos, constY, paint);
281 void SkNWayCanvas::drawTextOnPath(const void* text, size_t byteLength,
282 const SkPath& path, const SkMatrix* matrix,
283 const SkPaint& paint) {
285 while (iter.next()) {
286 iter->drawTextOnPath(text, byteLength, path, matrix, paint);
290 void SkNWayCanvas::drawPicture(SkPicture& picture) {
292 while (iter.next()) {
293 iter->drawPicture(picture);
297 void SkNWayCanvas::drawVertices(VertexMode vmode, int vertexCount,
298 const SkPoint vertices[], const SkPoint texs[],
299 const SkColor colors[], SkXfermode* xmode,
300 const uint16_t indices[], int indexCount,
301 const SkPaint& paint) {
303 while (iter.next()) {
304 iter->drawVertices(vmode, vertexCount, vertices, texs, colors, xmode,
305 indices, indexCount, paint);
309 void SkNWayCanvas::drawData(const void* data, size_t length) {
311 while (iter.next()) {
312 iter->drawData(data, length);
316 SkBounder* SkNWayCanvas::setBounder(SkBounder* bounder) {
318 while (iter.next()) {
319 iter->setBounder(bounder);
321 return this->INHERITED::setBounder(bounder);
324 SkDrawFilter* SkNWayCanvas::setDrawFilter(SkDrawFilter* filter) {
326 while (iter.next()) {
327 iter->setDrawFilter(filter);
329 return this->INHERITED::setDrawFilter(filter);
332 void SkNWayCanvas::beginCommentGroup(const char* description) {
334 while (iter.next()) {
335 iter->beginCommentGroup(description);
339 void SkNWayCanvas::addComment(const char* kywd, const char* value) {
341 while (iter.next()) {
342 iter->addComment(kywd, value);
346 void SkNWayCanvas::endCommentGroup() {
348 while (iter.next()) {
349 iter->endCommentGroup();