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 void SkNWayCanvas::willSave() {
66 this->INHERITED::willSave();
69 SkCanvas::SaveLayerStrategy SkNWayCanvas::willSaveLayer(const SkRect* bounds, const SkPaint* paint,
73 iter->saveLayer(bounds, paint, flags);
76 this->INHERITED::willSaveLayer(bounds, paint, flags);
77 // No need for a layer.
78 return kNoLayer_SaveLayerStrategy;
81 void SkNWayCanvas::willRestore() {
86 this->INHERITED::willRestore();
89 void SkNWayCanvas::didConcat(const SkMatrix& matrix) {
94 this->INHERITED::didConcat(matrix);
97 void SkNWayCanvas::didSetMatrix(const SkMatrix& matrix) {
100 iter->setMatrix(matrix);
102 this->INHERITED::didSetMatrix(matrix);
105 void SkNWayCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edgeStyle) {
107 while (iter.next()) {
108 iter->clipRect(rect, op, kSoft_ClipEdgeStyle == edgeStyle);
110 this->INHERITED::onClipRect(rect, op, edgeStyle);
113 void SkNWayCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle edgeStyle) {
115 while (iter.next()) {
116 iter->clipRRect(rrect, op, kSoft_ClipEdgeStyle == edgeStyle);
118 this->INHERITED::onClipRRect(rrect, op, edgeStyle);
121 void SkNWayCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edgeStyle) {
123 while (iter.next()) {
124 iter->clipPath(path, op, kSoft_ClipEdgeStyle == edgeStyle);
126 this->INHERITED::onClipPath(path, op, edgeStyle);
129 void SkNWayCanvas::onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) {
131 while (iter.next()) {
132 iter->clipRegion(deviceRgn, op);
134 this->INHERITED::onClipRegion(deviceRgn, op);
137 void SkNWayCanvas::clear(SkColor color) {
139 while (iter.next()) {
144 void SkNWayCanvas::drawPaint(const SkPaint& paint) {
146 while (iter.next()) {
147 iter->drawPaint(paint);
151 void SkNWayCanvas::drawPoints(PointMode mode, size_t count, const SkPoint pts[],
152 const SkPaint& paint) {
154 while (iter.next()) {
155 iter->drawPoints(mode, count, pts, paint);
159 void SkNWayCanvas::drawRect(const SkRect& rect, const SkPaint& paint) {
161 while (iter.next()) {
162 iter->drawRect(rect, paint);
166 void SkNWayCanvas::drawOval(const SkRect& rect, const SkPaint& paint) {
168 while (iter.next()) {
169 iter->drawOval(rect, paint);
173 void SkNWayCanvas::drawRRect(const SkRRect& rrect, const SkPaint& paint) {
175 while (iter.next()) {
176 iter->drawRRect(rrect, paint);
180 void SkNWayCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner,
181 const SkPaint& paint) {
183 while (iter.next()) {
184 iter->drawDRRect(outer, inner, paint);
188 void SkNWayCanvas::drawPath(const SkPath& path, const SkPaint& paint) {
190 while (iter.next()) {
191 iter->drawPath(path, paint);
195 void SkNWayCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y,
196 const SkPaint* paint) {
198 while (iter.next()) {
199 iter->drawBitmap(bitmap, x, y, paint);
203 void SkNWayCanvas::drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
204 const SkRect& dst, const SkPaint* paint,
205 DrawBitmapRectFlags flags) {
207 while (iter.next()) {
208 iter->drawBitmapRectToRect(bitmap, src, dst, paint, flags);
212 void SkNWayCanvas::drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m,
213 const SkPaint* paint) {
215 while (iter.next()) {
216 iter->drawBitmapMatrix(bitmap, m, paint);
220 void SkNWayCanvas::drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
221 const SkRect& dst, const SkPaint* paint) {
223 while (iter.next()) {
224 iter->drawBitmapNine(bitmap, center, dst, paint);
228 void SkNWayCanvas::drawSprite(const SkBitmap& bitmap, int x, int y,
229 const SkPaint* paint) {
231 while (iter.next()) {
232 iter->drawSprite(bitmap, x, y, paint);
236 void SkNWayCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
237 const SkPaint& paint) {
239 while (iter.next()) {
240 iter->drawText(text, byteLength, x, y, paint);
244 void SkNWayCanvas::onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
245 const SkPaint& paint) {
247 while (iter.next()) {
248 iter->drawPosText(text, byteLength, pos, paint);
252 void SkNWayCanvas::onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[],
253 SkScalar constY, const SkPaint& paint) {
255 while (iter.next()) {
256 iter->drawPosTextH(text, byteLength, xpos, constY, paint);
260 void SkNWayCanvas::onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path,
261 const SkMatrix* matrix, const SkPaint& paint) {
263 while (iter.next()) {
264 iter->drawTextOnPath(text, byteLength, path, matrix, paint);
268 void SkNWayCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matrix,
269 const SkPaint* paint) {
271 while (iter.next()) {
272 iter->drawPicture(picture, matrix, paint);
276 void SkNWayCanvas::drawVertices(VertexMode vmode, int vertexCount,
277 const SkPoint vertices[], const SkPoint texs[],
278 const SkColor colors[], SkXfermode* xmode,
279 const uint16_t indices[], int indexCount,
280 const SkPaint& paint) {
282 while (iter.next()) {
283 iter->drawVertices(vmode, vertexCount, vertices, texs, colors, xmode,
284 indices, indexCount, paint);
288 void SkNWayCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4],
289 const SkPoint texCoords[4], SkXfermode* xmode,
290 const SkPaint& paint) {
292 while (iter.next()) {
293 iter->drawPatch(cubics, colors, texCoords, xmode, paint);
297 void SkNWayCanvas::drawData(const void* data, size_t length) {
299 while (iter.next()) {
300 iter->drawData(data, length);
304 SkDrawFilter* SkNWayCanvas::setDrawFilter(SkDrawFilter* filter) {
306 while (iter.next()) {
307 iter->setDrawFilter(filter);
309 return this->INHERITED::setDrawFilter(filter);
312 void SkNWayCanvas::beginCommentGroup(const char* description) {
314 while (iter.next()) {
315 iter->beginCommentGroup(description);
319 void SkNWayCanvas::addComment(const char* kywd, const char* value) {
321 while (iter.next()) {
322 iter->addComment(kywd, value);
326 void SkNWayCanvas::endCommentGroup() {
328 while (iter.next()) {
329 iter->endCommentGroup();