SkNWayCanvas.cpp revision 74b461961607fa57a150a9282c410ef0cab38764
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
86c924ad46c89955e78e071c792ef00df9910b42freed@android.com#include "SkNWayCanvas.h"
96c924ad46c89955e78e071c792ef00df9910b42freed@android.com
106c924ad46c89955e78e071c792ef00df9910b42freed@android.comSkNWayCanvas::SkNWayCanvas() {}
116c924ad46c89955e78e071c792ef00df9910b42freed@android.com
126c924ad46c89955e78e071c792ef00df9910b42freed@android.comSkNWayCanvas::~SkNWayCanvas() {
136c924ad46c89955e78e071c792ef00df9910b42freed@android.com    this->removeAll();
146c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
156c924ad46c89955e78e071c792ef00df9910b42freed@android.com
166c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::addCanvas(SkCanvas* canvas) {
176c924ad46c89955e78e071c792ef00df9910b42freed@android.com    if (canvas) {
186c924ad46c89955e78e071c792ef00df9910b42freed@android.com        canvas->ref();
196c924ad46c89955e78e071c792ef00df9910b42freed@android.com        *fList.append() = canvas;
206c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
216c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
226c924ad46c89955e78e071c792ef00df9910b42freed@android.com
236c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::removeCanvas(SkCanvas* canvas) {
246c924ad46c89955e78e071c792ef00df9910b42freed@android.com    int index = fList.find(canvas);
256c924ad46c89955e78e071c792ef00df9910b42freed@android.com    if (index >= 0) {
266c924ad46c89955e78e071c792ef00df9910b42freed@android.com        canvas->unref();
276c924ad46c89955e78e071c792ef00df9910b42freed@android.com        fList.removeShuffle(index);
286c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
296c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
306c924ad46c89955e78e071c792ef00df9910b42freed@android.com
316c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::removeAll() {
326c924ad46c89955e78e071c792ef00df9910b42freed@android.com    fList.unrefAll();
336c924ad46c89955e78e071c792ef00df9910b42freed@android.com    fList.reset();
346c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
356c924ad46c89955e78e071c792ef00df9910b42freed@android.com
366c924ad46c89955e78e071c792ef00df9910b42freed@android.com///////////////////////////////////////////////////////////////////////////
376c924ad46c89955e78e071c792ef00df9910b42freed@android.com// These are forwarded to the N canvases we're referencing
386c924ad46c89955e78e071c792ef00df9910b42freed@android.com
396c924ad46c89955e78e071c792ef00df9910b42freed@android.comclass SkNWayCanvas::Iter {
406c924ad46c89955e78e071c792ef00df9910b42freed@android.compublic:
416c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter(const SkTDArray<SkCanvas*>& list) : fList(list) {
426c924ad46c89955e78e071c792ef00df9910b42freed@android.com        fIndex = 0;
436c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
446c924ad46c89955e78e071c792ef00df9910b42freed@android.com    bool next() {
456c924ad46c89955e78e071c792ef00df9910b42freed@android.com        if (fIndex < fList.count()) {
466c924ad46c89955e78e071c792ef00df9910b42freed@android.com            fCanvas = fList[fIndex++];
476c924ad46c89955e78e071c792ef00df9910b42freed@android.com            return true;
486c924ad46c89955e78e071c792ef00df9910b42freed@android.com        }
496c924ad46c89955e78e071c792ef00df9910b42freed@android.com        return false;
506c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
516c924ad46c89955e78e071c792ef00df9910b42freed@android.com    SkCanvas* operator->() { return fCanvas; }
5274b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org
536c924ad46c89955e78e071c792ef00df9910b42freed@android.comprivate:
546c924ad46c89955e78e071c792ef00df9910b42freed@android.com    const SkTDArray<SkCanvas*>& fList;
556c924ad46c89955e78e071c792ef00df9910b42freed@android.com    int fIndex;
566c924ad46c89955e78e071c792ef00df9910b42freed@android.com    SkCanvas* fCanvas;
576c924ad46c89955e78e071c792ef00df9910b42freed@android.com};
586c924ad46c89955e78e071c792ef00df9910b42freed@android.com
596c924ad46c89955e78e071c792ef00df9910b42freed@android.comint SkNWayCanvas::save(SaveFlags flags) {
606c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
616c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
626c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->save(flags);
636c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
646c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::save(flags);
656c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
666c924ad46c89955e78e071c792ef00df9910b42freed@android.com
676c924ad46c89955e78e071c792ef00df9910b42freed@android.comint SkNWayCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
686c924ad46c89955e78e071c792ef00df9910b42freed@android.com                                    SaveFlags flags) {
696c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
706c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
716c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->saveLayer(bounds, paint, flags);
726c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
736c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::saveLayer(bounds, paint, flags);
746c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
756c924ad46c89955e78e071c792ef00df9910b42freed@android.com
766c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::restore() {
776c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
786c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
796c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->restore();
806c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
816c924ad46c89955e78e071c792ef00df9910b42freed@android.com    this->INHERITED::restore();
826c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
836c924ad46c89955e78e071c792ef00df9910b42freed@android.com
846c924ad46c89955e78e071c792ef00df9910b42freed@android.combool SkNWayCanvas::translate(SkScalar dx, SkScalar dy) {
856c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
866c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
876c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->translate(dx, dy);
886c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
896c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::translate(dx, dy);
906c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
916c924ad46c89955e78e071c792ef00df9910b42freed@android.com
926c924ad46c89955e78e071c792ef00df9910b42freed@android.combool SkNWayCanvas::scale(SkScalar sx, SkScalar sy) {
936c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
946c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
956c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->scale(sx, sy);
966c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
976c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::scale(sx, sy);
986c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
996c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1006c924ad46c89955e78e071c792ef00df9910b42freed@android.combool SkNWayCanvas::rotate(SkScalar degrees) {
1016c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1026c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1036c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->rotate(degrees);
1046c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1056c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::rotate(degrees);
1066c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1076c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1086c924ad46c89955e78e071c792ef00df9910b42freed@android.combool SkNWayCanvas::skew(SkScalar sx, SkScalar sy) {
1096c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1106c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1116c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->skew(sx, sy);
1126c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1136c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::skew(sx, sy);
1146c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1156c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1166c924ad46c89955e78e071c792ef00df9910b42freed@android.combool SkNWayCanvas::concat(const SkMatrix& matrix) {
1176c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1186c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1196c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->concat(matrix);
1206c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1216c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::concat(matrix);
1226c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1236c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1246c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::setMatrix(const SkMatrix& matrix) {
1256c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1266c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1276c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->setMatrix(matrix);
1286c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1296c924ad46c89955e78e071c792ef00df9910b42freed@android.com    this->INHERITED::setMatrix(matrix);
1306c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1316c924ad46c89955e78e071c792ef00df9910b42freed@android.com
132071eef918d70b6ca8334bc1241d1ea6923e828d5reed@google.combool SkNWayCanvas::clipRect(const SkRect& rect, SkRegion::Op op, bool doAA) {
1336c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1346c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
135071eef918d70b6ca8334bc1241d1ea6923e828d5reed@google.com        iter->clipRect(rect, op, doAA);
1366c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
137071eef918d70b6ca8334bc1241d1ea6923e828d5reed@google.com    return this->INHERITED::clipRect(rect, op, doAA);
1386c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1396c924ad46c89955e78e071c792ef00df9910b42freed@android.com
140071eef918d70b6ca8334bc1241d1ea6923e828d5reed@google.combool SkNWayCanvas::clipPath(const SkPath& path, SkRegion::Op op, bool doAA) {
1416c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1426c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
143071eef918d70b6ca8334bc1241d1ea6923e828d5reed@google.com        iter->clipPath(path, op, doAA);
1446c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
145071eef918d70b6ca8334bc1241d1ea6923e828d5reed@google.com    return this->INHERITED::clipPath(path, op, doAA);
1466c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1476c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1486c924ad46c89955e78e071c792ef00df9910b42freed@android.combool SkNWayCanvas::clipRegion(const SkRegion& deviceRgn, SkRegion::Op op) {
1496c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1506c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1516c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->clipRegion(deviceRgn, op);
1526c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1536c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::clipRegion(deviceRgn, op);
1546c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1556c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1566c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawPaint(const SkPaint& paint) {
1576c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1586c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1596c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPaint(paint);
1606c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1616c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1626c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1636c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawPoints(PointMode mode, size_t count, const SkPoint pts[],
1646c924ad46c89955e78e071c792ef00df9910b42freed@android.com                        const SkPaint& paint) {
1656c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1666c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1676c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPoints(mode, count, pts, paint);
1686c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1696c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1706c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1716c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawRect(const SkRect& rect, const SkPaint& paint) {
1726c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1736c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1746c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawRect(rect, paint);
1756c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1766c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1776c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1786c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawPath(const SkPath& path, const SkPaint& paint) {
1796c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1806c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1816c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPath(path, paint);
1826c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1836c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1846c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1856c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y,
1866c924ad46c89955e78e071c792ef00df9910b42freed@android.com                              const SkPaint* paint) {
1876c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1886c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1896c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawBitmap(bitmap, x, y, paint);
1906c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1916c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1926c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1936c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
1946c924ad46c89955e78e071c792ef00df9910b42freed@android.com                                  const SkRect& dst, const SkPaint* paint) {
1956c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1966c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1976c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawBitmapRect(bitmap, src, dst, paint);
1986c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1996c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2006c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2016c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m,
2026c924ad46c89955e78e071c792ef00df9910b42freed@android.com                                    const SkPaint* paint) {
2036c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2046c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2056c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawBitmapMatrix(bitmap, m, paint);
2066c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2076c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2086c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2096c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawSprite(const SkBitmap& bitmap, int x, int y,
2106c924ad46c89955e78e071c792ef00df9910b42freed@android.com                              const SkPaint* paint) {
2116c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2126c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2136c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawSprite(bitmap, x, y, paint);
2146c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2156c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2166c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2176c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawText(const void* text, size_t byteLength, SkScalar x,
2186c924ad46c89955e78e071c792ef00df9910b42freed@android.com                            SkScalar y, const SkPaint& paint) {
2196c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2206c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2216c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawText(text, byteLength, x, y, paint);
2226c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2236c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2246c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2256c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawPosText(const void* text, size_t byteLength,
2266c924ad46c89955e78e071c792ef00df9910b42freed@android.com                               const SkPoint pos[], const SkPaint& paint) {
2276c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2286c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2296c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPosText(text, byteLength, pos, paint);
2306c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2316c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2326c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2336c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawPosTextH(const void* text, size_t byteLength,
2346c924ad46c89955e78e071c792ef00df9910b42freed@android.com                                const SkScalar xpos[], SkScalar constY,
2356c924ad46c89955e78e071c792ef00df9910b42freed@android.com                                const SkPaint& paint) {
2366c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2376c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2386c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPosTextH(text, byteLength, xpos, constY, paint);
2396c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2406c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2416c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2426c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawTextOnPath(const void* text, size_t byteLength,
2436c924ad46c89955e78e071c792ef00df9910b42freed@android.com                                  const SkPath& path, const SkMatrix* matrix,
2446c924ad46c89955e78e071c792ef00df9910b42freed@android.com                                  const SkPaint& paint) {
2456c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2466c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2476c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawTextOnPath(text, byteLength, path, matrix, paint);
2486c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2496c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2506c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2516c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawPicture(SkPicture& picture) {
2526c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2536c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2546c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPicture(picture);
2556c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2566c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2576c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2586c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawVertices(VertexMode vmode, int vertexCount,
2596c924ad46c89955e78e071c792ef00df9910b42freed@android.com                          const SkPoint vertices[], const SkPoint texs[],
2606c924ad46c89955e78e071c792ef00df9910b42freed@android.com                          const SkColor colors[], SkXfermode* xmode,
2616c924ad46c89955e78e071c792ef00df9910b42freed@android.com                          const uint16_t indices[], int indexCount,
2626c924ad46c89955e78e071c792ef00df9910b42freed@android.com                          const SkPaint& paint) {
2636c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2646c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2656c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawVertices(vmode, vertexCount, vertices, texs, colors, xmode,
2666c924ad46c89955e78e071c792ef00df9910b42freed@android.com                           indices, indexCount, paint);
2676c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2686c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2696c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2706c924ad46c89955e78e071c792ef00df9910b42freed@android.comSkBounder* SkNWayCanvas::setBounder(SkBounder* bounder) {
2716c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2726c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2736c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->setBounder(bounder);
2746c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2756c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::setBounder(bounder);
2766c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2776c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2786c924ad46c89955e78e071c792ef00df9910b42freed@android.comSkDrawFilter* SkNWayCanvas::setDrawFilter(SkDrawFilter* filter) {
2796c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2806c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2816c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->setDrawFilter(filter);
2826c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2836c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::setDrawFilter(filter);
2846c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2856c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2866c924ad46c89955e78e071c792ef00df9910b42freed@android.com
287