SkNWayCanvas.cpp revision ab5827354e2c23624acc3fc1fe4a83788bc99e96
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
606c924ad46c89955e78e071c792ef00df9910b42freed@android.comint SkNWayCanvas::save(SaveFlags flags) {
616c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
626c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
636c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->save(flags);
646c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
656c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::save(flags);
666c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
676c924ad46c89955e78e071c792ef00df9910b42freed@android.com
686c924ad46c89955e78e071c792ef00df9910b42freed@android.comint SkNWayCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
696c924ad46c89955e78e071c792ef00df9910b42freed@android.com                                    SaveFlags flags) {
706c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
716c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
726c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->saveLayer(bounds, paint, flags);
736c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
746c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::saveLayer(bounds, paint, flags);
756c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
766c924ad46c89955e78e071c792ef00df9910b42freed@android.com
776c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::restore() {
786c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
796c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
806c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->restore();
816c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
826c924ad46c89955e78e071c792ef00df9910b42freed@android.com    this->INHERITED::restore();
836c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
846c924ad46c89955e78e071c792ef00df9910b42freed@android.com
856c924ad46c89955e78e071c792ef00df9910b42freed@android.combool SkNWayCanvas::translate(SkScalar dx, SkScalar dy) {
866c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
876c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
886c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->translate(dx, dy);
896c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
906c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::translate(dx, dy);
916c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
926c924ad46c89955e78e071c792ef00df9910b42freed@android.com
936c924ad46c89955e78e071c792ef00df9910b42freed@android.combool SkNWayCanvas::scale(SkScalar sx, SkScalar sy) {
946c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
956c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
966c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->scale(sx, sy);
976c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
986c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::scale(sx, sy);
996c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1006c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1016c924ad46c89955e78e071c792ef00df9910b42freed@android.combool SkNWayCanvas::rotate(SkScalar degrees) {
1026c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1036c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1046c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->rotate(degrees);
1056c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1066c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::rotate(degrees);
1076c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1086c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1096c924ad46c89955e78e071c792ef00df9910b42freed@android.combool SkNWayCanvas::skew(SkScalar sx, SkScalar sy) {
1106c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1116c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1126c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->skew(sx, sy);
1136c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1146c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::skew(sx, sy);
1156c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1166c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1176c924ad46c89955e78e071c792ef00df9910b42freed@android.combool SkNWayCanvas::concat(const SkMatrix& matrix) {
1186c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1196c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1206c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->concat(matrix);
1216c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1226c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::concat(matrix);
1236c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1246c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1256c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::setMatrix(const SkMatrix& matrix) {
1266c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1276c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1286c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->setMatrix(matrix);
1296c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1306c924ad46c89955e78e071c792ef00df9910b42freed@android.com    this->INHERITED::setMatrix(matrix);
1316c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1326c924ad46c89955e78e071c792ef00df9910b42freed@android.com
133071eef918d70b6ca8334bc1241d1ea6923e828d5reed@google.combool SkNWayCanvas::clipRect(const SkRect& rect, SkRegion::Op op, bool doAA) {
1346c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1356c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
136071eef918d70b6ca8334bc1241d1ea6923e828d5reed@google.com        iter->clipRect(rect, op, doAA);
1376c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
138071eef918d70b6ca8334bc1241d1ea6923e828d5reed@google.com    return this->INHERITED::clipRect(rect, op, doAA);
1396c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1406c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1414ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.combool SkNWayCanvas::clipRRect(const SkRRect& rrect, SkRegion::Op op, bool doAA) {
1424ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    Iter iter(fList);
1434ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    while (iter.next()) {
1444ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com        iter->clipRRect(rrect, op, doAA);
1454ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    }
1464ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    return this->INHERITED::clipRRect(rrect, op, doAA);
1474ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com}
1484ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com
149071eef918d70b6ca8334bc1241d1ea6923e828d5reed@google.combool SkNWayCanvas::clipPath(const SkPath& path, SkRegion::Op op, bool doAA) {
1506c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1516c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
152071eef918d70b6ca8334bc1241d1ea6923e828d5reed@google.com        iter->clipPath(path, op, doAA);
1536c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
154071eef918d70b6ca8334bc1241d1ea6923e828d5reed@google.com    return this->INHERITED::clipPath(path, op, doAA);
1556c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1566c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1576c924ad46c89955e78e071c792ef00df9910b42freed@android.combool SkNWayCanvas::clipRegion(const SkRegion& deviceRgn, SkRegion::Op op) {
1586c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1596c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1606c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->clipRegion(deviceRgn, op);
1616c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1626c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::clipRegion(deviceRgn, op);
1636c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1646c924ad46c89955e78e071c792ef00df9910b42freed@android.com
165be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.orgvoid SkNWayCanvas::clear(SkColor color) {
166be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    Iter iter(fList);
167be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    while (iter.next()) {
168be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org        iter->clear(color);
169be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    }
170be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org}
171be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org
1726c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawPaint(const SkPaint& paint) {
1736c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1746c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1756c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPaint(paint);
1766c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1776c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1786c924ad46c89955e78e071c792ef00df9910b42freed@android.com
1796c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawPoints(PointMode mode, size_t count, const SkPoint pts[],
1806c924ad46c89955e78e071c792ef00df9910b42freed@android.com                        const SkPaint& paint) {
1816c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1826c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1836c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPoints(mode, count, pts, paint);
1846c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1856c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1866c924ad46c89955e78e071c792ef00df9910b42freed@android.com
187be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.orgvoid SkNWayCanvas::drawRect(const SkRect& rect, const SkPaint& paint) {
1884ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    Iter iter(fList);
1894ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    while (iter.next()) {
190be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org        iter->drawRect(rect, paint);
1914ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    }
1924ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com}
1934ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com
194be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.orgvoid SkNWayCanvas::drawOval(const SkRect& rect, const SkPaint& paint) {
1956c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1966c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
197be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org        iter->drawOval(rect, paint);
1986c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1996c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2006c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2014ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.comvoid SkNWayCanvas::drawRRect(const SkRRect& rrect, const SkPaint& paint) {
2024ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    Iter iter(fList);
2034ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    while (iter.next()) {
2044ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com        iter->drawRRect(rrect, paint);
2054ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    }
2064ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com}
2074ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com
208ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.orgvoid SkNWayCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner,
209ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org                                const SkPaint& paint) {
210ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    Iter iter(fList);
211ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    while (iter.next()) {
212ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org        iter->drawDRRect(outer, inner, paint);
213ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    }
214ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org}
215ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org
2167ce564cccb246ec56427085872b2e1458fe74bd1bsalomon@google.comvoid SkNWayCanvas::drawPath(const SkPath& path, const SkPaint& paint) {
2176c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2186c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2196c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPath(path, paint);
2206c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2216c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2226c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2236c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y,
2246c924ad46c89955e78e071c792ef00df9910b42freed@android.com                              const SkPaint* paint) {
2256c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2266c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2276c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawBitmap(bitmap, x, y, paint);
2286c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2296c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2306c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2317112173c3c4cd1b1e7da8cdf971d71f01dd91299reed@google.comvoid SkNWayCanvas::drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
232eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                  const SkRect& dst, const SkPaint* paint,
233eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org                                  DrawBitmapRectFlags flags) {
2346c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2356c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
236eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org        iter->drawBitmapRectToRect(bitmap, src, dst, paint, flags);
2376c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2386c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2396c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2406c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m,
2416c924ad46c89955e78e071c792ef00df9910b42freed@android.com                                    const SkPaint* paint) {
2426c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2436c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2446c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawBitmapMatrix(bitmap, m, paint);
2456c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2466c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2476c924ad46c89955e78e071c792ef00df9910b42freed@android.com
248be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.orgvoid SkNWayCanvas::drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
249be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org                                  const SkRect& dst, const SkPaint* paint) {
250be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    Iter iter(fList);
251be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    while (iter.next()) {
252be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org        iter->drawBitmapNine(bitmap, center, dst, paint);
253be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    }
254be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org}
255be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org
2566c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawSprite(const SkBitmap& bitmap, int x, int y,
2576c924ad46c89955e78e071c792ef00df9910b42freed@android.com                              const SkPaint* paint) {
2586c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2596c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2606c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawSprite(bitmap, x, y, paint);
2616c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2626c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2636c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2646c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawText(const void* text, size_t byteLength, SkScalar x,
2656c924ad46c89955e78e071c792ef00df9910b42freed@android.com                            SkScalar y, const SkPaint& paint) {
2666c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2676c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2686c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawText(text, byteLength, x, y, paint);
2696c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2706c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2716c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2726c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawPosText(const void* text, size_t byteLength,
2736c924ad46c89955e78e071c792ef00df9910b42freed@android.com                               const SkPoint pos[], const SkPaint& paint) {
2746c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2756c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2766c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPosText(text, byteLength, pos, paint);
2776c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2786c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2796c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2806c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawPosTextH(const void* text, size_t byteLength,
2816c924ad46c89955e78e071c792ef00df9910b42freed@android.com                                const SkScalar xpos[], SkScalar constY,
2826c924ad46c89955e78e071c792ef00df9910b42freed@android.com                                const SkPaint& paint) {
2836c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2846c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2856c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPosTextH(text, byteLength, xpos, constY, paint);
2866c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2876c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2886c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2896c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawTextOnPath(const void* text, size_t byteLength,
2906c924ad46c89955e78e071c792ef00df9910b42freed@android.com                                  const SkPath& path, const SkMatrix* matrix,
2916c924ad46c89955e78e071c792ef00df9910b42freed@android.com                                  const SkPaint& paint) {
2926c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2936c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2946c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawTextOnPath(text, byteLength, path, matrix, paint);
2956c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2966c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2976c924ad46c89955e78e071c792ef00df9910b42freed@android.com
2986c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawPicture(SkPicture& picture) {
2996c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
3006c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
3016c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPicture(picture);
3026c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
3036c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
3046c924ad46c89955e78e071c792ef00df9910b42freed@android.com
3056c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::drawVertices(VertexMode vmode, int vertexCount,
3066c924ad46c89955e78e071c792ef00df9910b42freed@android.com                          const SkPoint vertices[], const SkPoint texs[],
3076c924ad46c89955e78e071c792ef00df9910b42freed@android.com                          const SkColor colors[], SkXfermode* xmode,
3086c924ad46c89955e78e071c792ef00df9910b42freed@android.com                          const uint16_t indices[], int indexCount,
3096c924ad46c89955e78e071c792ef00df9910b42freed@android.com                          const SkPaint& paint) {
3106c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
3116c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
3126c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawVertices(vmode, vertexCount, vertices, texs, colors, xmode,
3136c924ad46c89955e78e071c792ef00df9910b42freed@android.com                           indices, indexCount, paint);
3146c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
3156c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
3166c924ad46c89955e78e071c792ef00df9910b42freed@android.com
317be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.orgvoid SkNWayCanvas::drawData(const void* data, size_t length) {
318be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    Iter iter(fList);
319be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    while (iter.next()) {
320be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org        iter->drawData(data, length);
321be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    }
322be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org}
323be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org
3246c924ad46c89955e78e071c792ef00df9910b42freed@android.comSkBounder* SkNWayCanvas::setBounder(SkBounder* bounder) {
3256c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
3266c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
3276c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->setBounder(bounder);
3286c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
3296c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::setBounder(bounder);
3306c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
3316c924ad46c89955e78e071c792ef00df9910b42freed@android.com
3326c924ad46c89955e78e071c792ef00df9910b42freed@android.comSkDrawFilter* SkNWayCanvas::setDrawFilter(SkDrawFilter* filter) {
3336c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
3346c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
3356c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->setDrawFilter(filter);
3366c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
3376c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::setDrawFilter(filter);
3386c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
33914cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org
34014cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.orgvoid SkNWayCanvas::beginCommentGroup(const char* description) {
34114cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    Iter iter(fList);
34214cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    while (iter.next()) {
34314cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org        iter->beginCommentGroup(description);
34414cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    }
34514cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org}
34614cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org
34714cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.orgvoid SkNWayCanvas::addComment(const char* kywd, const char* value) {
34814cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    Iter iter(fList);
34914cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    while (iter.next()) {
35014cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org        iter->addComment(kywd, value);
35114cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    }
35214cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org}
35314cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org
35414cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.orgvoid SkNWayCanvas::endCommentGroup() {
35514cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    Iter iter(fList);
35614cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    while (iter.next()) {
35714cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org        iter->endCommentGroup();
35814cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org    }
35914cec91fe1dbe4986bfacdff8e2eb8928d60fb77commit-bot@chromium.org}
360