SkNWayCanvas.cpp revision 9b14f26d0f3a974f3dd626c8354e1db1cfcd322f
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
106ae24e0f5fa3306054679d0ec8f9d1f5d35c2617reed@google.comSkNWayCanvas::SkNWayCanvas(int width, int height)
11e254310a55d55a710309714c48f7fbbe7a6126f7commit-bot@chromium.org        : INHERITED(width, height) {}
126ae24e0f5fa3306054679d0ec8f9d1f5d35c2617reed@google.com
136c924ad46c89955e78e071c792ef00df9910b42freed@android.comSkNWayCanvas::~SkNWayCanvas() {
146c924ad46c89955e78e071c792ef00df9910b42freed@android.com    this->removeAll();
156c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
166c924ad46c89955e78e071c792ef00df9910b42freed@android.com
176c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::addCanvas(SkCanvas* canvas) {
186c924ad46c89955e78e071c792ef00df9910b42freed@android.com    if (canvas) {
196c924ad46c89955e78e071c792ef00df9910b42freed@android.com        canvas->ref();
206c924ad46c89955e78e071c792ef00df9910b42freed@android.com        *fList.append() = canvas;
216c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
226c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
236c924ad46c89955e78e071c792ef00df9910b42freed@android.com
246c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::removeCanvas(SkCanvas* canvas) {
256c924ad46c89955e78e071c792ef00df9910b42freed@android.com    int index = fList.find(canvas);
266c924ad46c89955e78e071c792ef00df9910b42freed@android.com    if (index >= 0) {
276c924ad46c89955e78e071c792ef00df9910b42freed@android.com        canvas->unref();
286c924ad46c89955e78e071c792ef00df9910b42freed@android.com        fList.removeShuffle(index);
296c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
306c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
316c924ad46c89955e78e071c792ef00df9910b42freed@android.com
326c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::removeAll() {
336c924ad46c89955e78e071c792ef00df9910b42freed@android.com    fList.unrefAll();
346c924ad46c89955e78e071c792ef00df9910b42freed@android.com    fList.reset();
356c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
366c924ad46c89955e78e071c792ef00df9910b42freed@android.com
376c924ad46c89955e78e071c792ef00df9910b42freed@android.com///////////////////////////////////////////////////////////////////////////
386c924ad46c89955e78e071c792ef00df9910b42freed@android.com// These are forwarded to the N canvases we're referencing
396c924ad46c89955e78e071c792ef00df9910b42freed@android.com
406c924ad46c89955e78e071c792ef00df9910b42freed@android.comclass SkNWayCanvas::Iter {
416c924ad46c89955e78e071c792ef00df9910b42freed@android.compublic:
426c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter(const SkTDArray<SkCanvas*>& list) : fList(list) {
436c924ad46c89955e78e071c792ef00df9910b42freed@android.com        fIndex = 0;
446c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
456c924ad46c89955e78e071c792ef00df9910b42freed@android.com    bool next() {
466c924ad46c89955e78e071c792ef00df9910b42freed@android.com        if (fIndex < fList.count()) {
476c924ad46c89955e78e071c792ef00df9910b42freed@android.com            fCanvas = fList[fIndex++];
486c924ad46c89955e78e071c792ef00df9910b42freed@android.com            return true;
496c924ad46c89955e78e071c792ef00df9910b42freed@android.com        }
506c924ad46c89955e78e071c792ef00df9910b42freed@android.com        return false;
516c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
526c924ad46c89955e78e071c792ef00df9910b42freed@android.com    SkCanvas* operator->() { return fCanvas; }
5374b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org
546c924ad46c89955e78e071c792ef00df9910b42freed@android.comprivate:
556c924ad46c89955e78e071c792ef00df9910b42freed@android.com    const SkTDArray<SkCanvas*>& fList;
566c924ad46c89955e78e071c792ef00df9910b42freed@android.com    int fIndex;
576c924ad46c89955e78e071c792ef00df9910b42freed@android.com    SkCanvas* fCanvas;
586c924ad46c89955e78e071c792ef00df9910b42freed@android.com};
596c924ad46c89955e78e071c792ef00df9910b42freed@android.com
60e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.orgvoid SkNWayCanvas::willSave(SaveFlags flags) {
616c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
626c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
636c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->save(flags);
646c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
65e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org
66e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    this->INHERITED::willSave(flags);
676c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
686c924ad46c89955e78e071c792ef00df9910b42freed@android.com
69e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.orgSkCanvas::SaveLayerStrategy SkNWayCanvas::willSaveLayer(const SkRect* bounds, const SkPaint* paint,
70e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org                                                        SaveFlags flags) {
716c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
726c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
736c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->saveLayer(bounds, paint, flags);
746c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
75e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org
76e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    this->INHERITED::willSaveLayer(bounds, paint, flags);
77e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    // No need for a layer.
78e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    return kNoLayer_SaveLayerStrategy;
796c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
806c924ad46c89955e78e071c792ef00df9910b42freed@android.com
81e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.orgvoid SkNWayCanvas::willRestore() {
826c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
836c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
846c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->restore();
856c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
86e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    this->INHERITED::willRestore();
876c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
886c924ad46c89955e78e071c792ef00df9910b42freed@android.com
8944c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.orgvoid SkNWayCanvas::didConcat(const SkMatrix& matrix) {
906c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
916c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
926c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->concat(matrix);
936c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
9444c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    this->INHERITED::didConcat(matrix);
956c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
966c924ad46c89955e78e071c792ef00df9910b42freed@android.com
9744c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.orgvoid SkNWayCanvas::didSetMatrix(const SkMatrix& matrix) {
986c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
996c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1006c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->setMatrix(matrix);
1016c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
10244c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    this->INHERITED::didSetMatrix(matrix);
1036c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1046c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1058f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.comvoid SkNWayCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edgeStyle) {
1066c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1076c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1088f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        iter->clipRect(rect, op, kSoft_ClipEdgeStyle == edgeStyle);
1096c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1108f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    this->INHERITED::onClipRect(rect, op, edgeStyle);
1116c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1126c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1138f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.comvoid SkNWayCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle edgeStyle) {
1144ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    Iter iter(fList);
1154ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    while (iter.next()) {
1168f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        iter->clipRRect(rrect, op, kSoft_ClipEdgeStyle == edgeStyle);
1174ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    }
1188f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    this->INHERITED::onClipRRect(rrect, op, edgeStyle);
1194ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com}
1204ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com
1218f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.comvoid SkNWayCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edgeStyle) {
1226c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1236c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1248f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        iter->clipPath(path, op, kSoft_ClipEdgeStyle == edgeStyle);
1256c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1268f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    this->INHERITED::onClipPath(path, op, edgeStyle);
1276c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1286c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1298f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.comvoid SkNWayCanvas::onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) {
1306c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1316c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1326c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->clipRegion(deviceRgn, op);
1336c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1348f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    this->INHERITED::onClipRegion(deviceRgn, op);
1356c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1366c924ad46c89955e78e071c792ef00df9910b42freed@android.com
137be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.orgvoid SkNWayCanvas::clear(SkColor color) {
138be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    Iter iter(fList);
139be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    while (iter.next()) {
140be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org        iter->clear(color);
141be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    }
142be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org}
143be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org
1446c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawPaint(const SkPaint& paint) {
1456c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1466c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1476c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPaint(paint);
1486c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1496c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1506c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1516c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawPoints(PointMode mode, size_t count, const SkPoint pts[],
1526c924ad46c89955e78e071c792ef00df9910b42freed@android.com                        const SkPaint& paint) {
1536c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1546c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1556c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPoints(mode, count, pts, paint);
1566c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1576c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1586c924ad46c89955e78e071c792ef00df9910b42freed@android.com
159be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.orgvoid SkNWayCanvas::drawRect(const SkRect& rect, const SkPaint& paint) {
1604ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    Iter iter(fList);
1614ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    while (iter.next()) {
162be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org        iter->drawRect(rect, paint);
1634ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    }
1644ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com}
1654ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com
166be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.orgvoid SkNWayCanvas::drawOval(const SkRect& rect, const SkPaint& paint) {
1676c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1686c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
169be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org        iter->drawOval(rect, paint);
1706c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1716c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1726c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1734ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.comvoid SkNWayCanvas::drawRRect(const SkRRect& rrect, const SkPaint& paint) {
1744ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    Iter iter(fList);
1754ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    while (iter.next()) {
1764ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com        iter->drawRRect(rrect, paint);
1774ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    }
1784ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com}
1794ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com
180ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.orgvoid SkNWayCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner,
181ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org                                const SkPaint& paint) {
182ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    Iter iter(fList);
183ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    while (iter.next()) {
184ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org        iter->drawDRRect(outer, inner, paint);
185ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    }
186ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org}
187ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org
1887ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.comvoid SkNWayCanvas::drawPath(const SkPath& path, const SkPaint& paint) {
1896c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1906c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1916c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPath(path, paint);
1926c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1936c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1946c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1956c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y,
1966c924ad46c89955e78e071c792ef00df9910b42freed@android.com                              const SkPaint* paint) {
1976c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1986c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1996c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawBitmap(bitmap, x, y, paint);
2006c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2016c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2026c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2037112173c3c4cd1b1e7da8cdf971d71f01dd91299reed@google.comvoid SkNWayCanvas::drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
204eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                  const SkRect& dst, const SkPaint* paint,
205eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                  DrawBitmapRectFlags flags) {
2066c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2076c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
208eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org        iter->drawBitmapRectToRect(bitmap, src, dst, paint, flags);
2096c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2106c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2116c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2126c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m,
2136c924ad46c89955e78e071c792ef00df9910b42freed@android.com                                    const SkPaint* paint) {
2146c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2156c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2166c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawBitmapMatrix(bitmap, m, paint);
2176c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2186c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2196c924ad46c89955e78e071c792ef00df9910b42freed@android.com
220be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.orgvoid SkNWayCanvas::drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
221be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org                                  const SkRect& dst, const SkPaint* paint) {
222be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    Iter iter(fList);
223be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    while (iter.next()) {
224be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org        iter->drawBitmapNine(bitmap, center, dst, paint);
225be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    }
226be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org}
227be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org
2286c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawSprite(const SkBitmap& bitmap, int x, int y,
2296c924ad46c89955e78e071c792ef00df9910b42freed@android.com                              const SkPaint* paint) {
2306c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2316c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2326c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawSprite(bitmap, x, y, paint);
2336c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2346c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2356c924ad46c89955e78e071c792ef00df9910b42freed@android.com
236e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkNWayCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
237e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                              const SkPaint& paint) {
2386c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2396c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2406c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawText(text, byteLength, x, y, paint);
2416c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2426c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2436c924ad46c89955e78e071c792ef00df9910b42freed@android.com
244e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkNWayCanvas::onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
245e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                 const SkPaint& paint) {
2466c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2476c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2486c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPosText(text, byteLength, pos, paint);
2496c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2506c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2516c924ad46c89955e78e071c792ef00df9910b42freed@android.com
252e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkNWayCanvas::onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[],
253e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                  SkScalar constY, const SkPaint& paint) {
2546c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2556c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2566c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPosTextH(text, byteLength, xpos, constY, paint);
2576c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2586c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2596c924ad46c89955e78e071c792ef00df9910b42freed@android.com
260e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkNWayCanvas::onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path,
261e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                    const SkMatrix* matrix, const SkPaint& paint) {
2626c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2636c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2646c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawTextOnPath(text, byteLength, path, matrix, paint);
2656c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2666c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2676c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2689b14f26d0f3a974f3dd626c8354e1db1cfcd322frobertphillipsvoid SkNWayCanvas::onDrawPicture(const SkPicture* picture) {
2696c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2706c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2716c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPicture(picture);
2726c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2736c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2746c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2756c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawVertices(VertexMode vmode, int vertexCount,
2766c924ad46c89955e78e071c792ef00df9910b42freed@android.com                          const SkPoint vertices[], const SkPoint texs[],
2776c924ad46c89955e78e071c792ef00df9910b42freed@android.com                          const SkColor colors[], SkXfermode* xmode,
2786c924ad46c89955e78e071c792ef00df9910b42freed@android.com                          const uint16_t indices[], int indexCount,
2796c924ad46c89955e78e071c792ef00df9910b42freed@android.com                          const SkPaint& paint) {
2806c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2816c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2826c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawVertices(vmode, vertexCount, vertices, texs, colors, xmode,
2836c924ad46c89955e78e071c792ef00df9910b42freed@android.com                           indices, indexCount, paint);
2846c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2856c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2866c924ad46c89955e78e071c792ef00df9910b42freed@android.com
287be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.orgvoid SkNWayCanvas::drawData(const void* data, size_t length) {
288be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    Iter iter(fList);
289be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    while (iter.next()) {
290be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org        iter->drawData(data, length);
291be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    }
292be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org}
293be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org
2946c924ad46c89955e78e071c792ef00df9910b42freed@android.comSkDrawFilter* SkNWayCanvas::setDrawFilter(SkDrawFilter* filter) {
2956c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2966c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2976c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->setDrawFilter(filter);
2986c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2996c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::setDrawFilter(filter);
3006c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
30114cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org
30214cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.orgvoid SkNWayCanvas::beginCommentGroup(const char* description) {
30314cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    Iter iter(fList);
30414cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    while (iter.next()) {
30514cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org        iter->beginCommentGroup(description);
30614cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    }
30714cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org}
30814cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org
30914cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.orgvoid SkNWayCanvas::addComment(const char* kywd, const char* value) {
31014cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    Iter iter(fList);
31114cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    while (iter.next()) {
31214cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org        iter->addComment(kywd, value);
31314cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    }
31414cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org}
31514cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org
31614cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.orgvoid SkNWayCanvas::endCommentGroup() {
31714cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    Iter iter(fList);
31814cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    while (iter.next()) {
31914cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org        iter->endCommentGroup();
32014cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    }
32114cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org}
322