1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
76c924ad46c89955e78e071c792ef00df9910b42freed@android.com#include "SkNWayCanvas.h"
86c924ad46c89955e78e071c792ef00df9910b42freed@android.com
9439ace939b6aaa58408ece0e9e89b633353571aeFlorin MalitaSkNWayCanvas::SkNWayCanvas(int width, int height) : INHERITED(width, height) {}
106ae24e0f5fa3306054679d0ec8f9d1f5d35c2617reed@google.com
116c924ad46c89955e78e071c792ef00df9910b42freed@android.comSkNWayCanvas::~SkNWayCanvas() {
126c924ad46c89955e78e071c792ef00df9910b42freed@android.com    this->removeAll();
136c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
146c924ad46c89955e78e071c792ef00df9910b42freed@android.com
156c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::addCanvas(SkCanvas* canvas) {
166c924ad46c89955e78e071c792ef00df9910b42freed@android.com    if (canvas) {
176c924ad46c89955e78e071c792ef00df9910b42freed@android.com        *fList.append() = canvas;
186c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
196c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
206c924ad46c89955e78e071c792ef00df9910b42freed@android.com
216c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::removeCanvas(SkCanvas* canvas) {
226c924ad46c89955e78e071c792ef00df9910b42freed@android.com    int index = fList.find(canvas);
236c924ad46c89955e78e071c792ef00df9910b42freed@android.com    if (index >= 0) {
246c924ad46c89955e78e071c792ef00df9910b42freed@android.com        fList.removeShuffle(index);
256c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
266c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
276c924ad46c89955e78e071c792ef00df9910b42freed@android.com
286c924ad46c89955e78e071c792ef00df9910b42freed@android.comvoid SkNWayCanvas::removeAll() {
296c924ad46c89955e78e071c792ef00df9910b42freed@android.com    fList.reset();
306c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
316c924ad46c89955e78e071c792ef00df9910b42freed@android.com
326c924ad46c89955e78e071c792ef00df9910b42freed@android.com///////////////////////////////////////////////////////////////////////////
336c924ad46c89955e78e071c792ef00df9910b42freed@android.com// These are forwarded to the N canvases we're referencing
346c924ad46c89955e78e071c792ef00df9910b42freed@android.com
356c924ad46c89955e78e071c792ef00df9910b42freed@android.comclass SkNWayCanvas::Iter {
366c924ad46c89955e78e071c792ef00df9910b42freed@android.compublic:
376c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter(const SkTDArray<SkCanvas*>& list) : fList(list) {
386c924ad46c89955e78e071c792ef00df9910b42freed@android.com        fIndex = 0;
396c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
406c924ad46c89955e78e071c792ef00df9910b42freed@android.com    bool next() {
416c924ad46c89955e78e071c792ef00df9910b42freed@android.com        if (fIndex < fList.count()) {
426c924ad46c89955e78e071c792ef00df9910b42freed@android.com            fCanvas = fList[fIndex++];
436c924ad46c89955e78e071c792ef00df9910b42freed@android.com            return true;
446c924ad46c89955e78e071c792ef00df9910b42freed@android.com        }
456c924ad46c89955e78e071c792ef00df9910b42freed@android.com        return false;
466c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
476c924ad46c89955e78e071c792ef00df9910b42freed@android.com    SkCanvas* operator->() { return fCanvas; }
4874b461961607fa57a150a9282c410ef0cab38764vandebo@chromium.org
496c924ad46c89955e78e071c792ef00df9910b42freed@android.comprivate:
506c924ad46c89955e78e071c792ef00df9910b42freed@android.com    const SkTDArray<SkCanvas*>& fList;
516c924ad46c89955e78e071c792ef00df9910b42freed@android.com    int fIndex;
526c924ad46c89955e78e071c792ef00df9910b42freed@android.com    SkCanvas* fCanvas;
536c924ad46c89955e78e071c792ef00df9910b42freed@android.com};
546c924ad46c89955e78e071c792ef00df9910b42freed@android.com
555f6102d07982043542343ff0a6c67b1319ac9fc7Florin Malitavoid SkNWayCanvas::willSave() {
566c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
576c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
585f6102d07982043542343ff0a6c67b1319ac9fc7Florin Malita        iter->save();
596c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
60e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org
615f6102d07982043542343ff0a6c67b1319ac9fc7Florin Malita    this->INHERITED::willSave();
626c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
636c924ad46c89955e78e071c792ef00df9910b42freed@android.com
644960eeec4a1f2a772654883d7f3615d47bcd5dc3reedSkCanvas::SaveLayerStrategy SkNWayCanvas::getSaveLayerStrategy(const SaveLayerRec& rec) {
656c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
666c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
674960eeec4a1f2a772654883d7f3615d47bcd5dc3reed        iter->saveLayer(rec);
686c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
69e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org
704960eeec4a1f2a772654883d7f3615d47bcd5dc3reed    this->INHERITED::getSaveLayerStrategy(rec);
71e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    // No need for a layer.
72e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    return kNoLayer_SaveLayerStrategy;
736c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
746c924ad46c89955e78e071c792ef00df9910b42freed@android.com
75e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.orgvoid SkNWayCanvas::willRestore() {
766c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
776c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
786c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->restore();
796c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
80e54a23fcfa42b2fc9d320650de72bcb2d9566b2dcommit-bot@chromium.org    this->INHERITED::willRestore();
816c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
826c924ad46c89955e78e071c792ef00df9910b42freed@android.com
8344c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.orgvoid SkNWayCanvas::didConcat(const SkMatrix& matrix) {
846c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
856c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
866c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->concat(matrix);
876c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
8844c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    this->INHERITED::didConcat(matrix);
896c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
906c924ad46c89955e78e071c792ef00df9910b42freed@android.com
9144c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.orgvoid SkNWayCanvas::didSetMatrix(const SkMatrix& matrix) {
926c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
936c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
946c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->setMatrix(matrix);
956c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
9644c48d062f7996b5b46917e1b312a32ad101f326commit-bot@chromium.org    this->INHERITED::didSetMatrix(matrix);
976c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
986c924ad46c89955e78e071c792ef00df9910b42freed@android.com
99c1f7774e8d327e3c98b4094c9c01d26e27013f71Mike Reedvoid SkNWayCanvas::onClipRect(const SkRect& rect, SkClipOp op, ClipEdgeStyle edgeStyle) {
1006c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1016c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1028f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        iter->clipRect(rect, op, kSoft_ClipEdgeStyle == edgeStyle);
1036c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1048f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    this->INHERITED::onClipRect(rect, op, edgeStyle);
1056c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1066c924ad46c89955e78e071c792ef00df9910b42freed@android.com
107c1f7774e8d327e3c98b4094c9c01d26e27013f71Mike Reedvoid SkNWayCanvas::onClipRRect(const SkRRect& rrect, SkClipOp op, ClipEdgeStyle edgeStyle) {
1084ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    Iter iter(fList);
1094ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    while (iter.next()) {
1108f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        iter->clipRRect(rrect, op, kSoft_ClipEdgeStyle == edgeStyle);
1114ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    }
1128f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    this->INHERITED::onClipRRect(rrect, op, edgeStyle);
1134ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com}
1144ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com
115c1f7774e8d327e3c98b4094c9c01d26e27013f71Mike Reedvoid SkNWayCanvas::onClipPath(const SkPath& path, SkClipOp op, ClipEdgeStyle edgeStyle) {
1166c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1176c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1188f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com        iter->clipPath(path, op, kSoft_ClipEdgeStyle == edgeStyle);
1196c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1208f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    this->INHERITED::onClipPath(path, op, edgeStyle);
1216c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1226c924ad46c89955e78e071c792ef00df9910b42freed@android.com
123c1f7774e8d327e3c98b4094c9c01d26e27013f71Mike Reedvoid SkNWayCanvas::onClipRegion(const SkRegion& deviceRgn, SkClipOp op) {
1246c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1256c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1266c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->clipRegion(deviceRgn, op);
1276c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1288f90a892c5130d4d26b5588e1ff151d01a40688arobertphillips@google.com    this->INHERITED::onClipRegion(deviceRgn, op);
1296c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1306c924ad46c89955e78e071c792ef00df9910b42freed@android.com
13141af966ab338e95eee81ab618ab28195075338f7reedvoid SkNWayCanvas::onDrawPaint(const SkPaint& paint) {
1326c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1336c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1346c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPaint(paint);
1356c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1366c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1376c924ad46c89955e78e071c792ef00df9910b42freed@android.com
13841af966ab338e95eee81ab618ab28195075338f7reedvoid SkNWayCanvas::onDrawPoints(PointMode mode, size_t count, const SkPoint pts[],
13941af966ab338e95eee81ab618ab28195075338f7reed                                const SkPaint& paint) {
1406c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1416c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1426c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPoints(mode, count, pts, paint);
1436c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1446c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1456c924ad46c89955e78e071c792ef00df9910b42freed@android.com
14641af966ab338e95eee81ab618ab28195075338f7reedvoid SkNWayCanvas::onDrawRect(const SkRect& rect, const SkPaint& paint) {
1474ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    Iter iter(fList);
1484ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    while (iter.next()) {
149be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org        iter->drawRect(rect, paint);
1504ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    }
1514ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com}
1524ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com
15341af966ab338e95eee81ab618ab28195075338f7reedvoid SkNWayCanvas::onDrawOval(const SkRect& rect, const SkPaint& paint) {
1546c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1556c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
156be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org        iter->drawOval(rect, paint);
1576c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1586c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1596c924ad46c89955e78e071c792ef00df9910b42freed@android.com
160ac3aa245acc7b469aa2f0d0078e53401d78ac8b9bsalomonvoid SkNWayCanvas::onDrawArc(const SkRect& rect, SkScalar startAngle, SkScalar sweepAngle,
161ac3aa245acc7b469aa2f0d0078e53401d78ac8b9bsalomon                             bool useCenter, const SkPaint& paint) {
162ac3aa245acc7b469aa2f0d0078e53401d78ac8b9bsalomon    Iter iter(fList);
163ac3aa245acc7b469aa2f0d0078e53401d78ac8b9bsalomon    while (iter.next()) {
164ac3aa245acc7b469aa2f0d0078e53401d78ac8b9bsalomon        iter->drawArc(rect, startAngle, sweepAngle, useCenter, paint);
165ac3aa245acc7b469aa2f0d0078e53401d78ac8b9bsalomon    }
166ac3aa245acc7b469aa2f0d0078e53401d78ac8b9bsalomon}
167ac3aa245acc7b469aa2f0d0078e53401d78ac8b9bsalomon
16841af966ab338e95eee81ab618ab28195075338f7reedvoid SkNWayCanvas::onDrawRRect(const SkRRect& rrect, const SkPaint& paint) {
1694ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    Iter iter(fList);
1704ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    while (iter.next()) {
1714ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com        iter->drawRRect(rrect, paint);
1724ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com    }
1734ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com}
1744ed0fb768409bf97b79899c3990d8c15f5e9d784reed@google.com
175a5517e2b190a8083b38964972b031c13e99f1012reedvoid SkNWayCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner, const SkPaint& paint) {
176ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    Iter iter(fList);
177ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    while (iter.next()) {
178ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org        iter->drawDRRect(outer, inner, paint);
179ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org    }
180ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org}
181ab5827354e2c23624acc3fc1fe4a83788bc99e96commit-bot@chromium.org
18241af966ab338e95eee81ab618ab28195075338f7reedvoid SkNWayCanvas::onDrawPath(const SkPath& path, const SkPaint& paint) {
1836c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1846c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1856c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPath(path, paint);
1866c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1876c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1886c924ad46c89955e78e071c792ef00df9910b42freed@android.com
18941af966ab338e95eee81ab618ab28195075338f7reedvoid SkNWayCanvas::onDrawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y,
19041af966ab338e95eee81ab618ab28195075338f7reed                                const SkPaint* paint) {
1916c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
1926c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
1936c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawBitmap(bitmap, x, y, paint);
1946c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
1956c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
1966c924ad46c89955e78e071c792ef00df9910b42freed@android.com
19741af966ab338e95eee81ab618ab28195075338f7reedvoid SkNWayCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const SkRect& dst,
198562fe4767cc73e08a4e039362bc0336aea66ecfbreed                                    const SkPaint* paint, SrcRectConstraint constraint) {
1996c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2006c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
201e47829b6b1eeb6b0c97ccb3df3016d197046824creed        iter->legacy_drawBitmapRect(bitmap, src, dst, paint, (SrcRectConstraint)constraint);
2026c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2036c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2046c924ad46c89955e78e071c792ef00df9910b42freed@android.com
20541af966ab338e95eee81ab618ab28195075338f7reedvoid SkNWayCanvas::onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
20641af966ab338e95eee81ab618ab28195075338f7reed                                    const SkRect& dst, const SkPaint* paint) {
207be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    Iter iter(fList);
208be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    while (iter.next()) {
209be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org        iter->drawBitmapNine(bitmap, center, dst, paint);
210be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org    }
211be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org}
212be65a4c9d6ce40e7fc27e5a830196bcaa7be97c9commit-bot@chromium.org
21341af966ab338e95eee81ab618ab28195075338f7reedvoid SkNWayCanvas::onDrawImage(const SkImage* image, SkScalar left, SkScalar top,
21441af966ab338e95eee81ab618ab28195075338f7reed                               const SkPaint* paint) {
215b7bac3d015cd1c85343d6c49316bfd942efa3f9fpiotaixr    Iter iter(fList);
216b7bac3d015cd1c85343d6c49316bfd942efa3f9fpiotaixr    while (iter.next()) {
217b7bac3d015cd1c85343d6c49316bfd942efa3f9fpiotaixr        iter->drawImage(image, left, top, paint);
218b7bac3d015cd1c85343d6c49316bfd942efa3f9fpiotaixr    }
219b7bac3d015cd1c85343d6c49316bfd942efa3f9fpiotaixr}
220b7bac3d015cd1c85343d6c49316bfd942efa3f9fpiotaixr
22141af966ab338e95eee81ab618ab28195075338f7reedvoid SkNWayCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, const SkRect& dst,
222562fe4767cc73e08a4e039362bc0336aea66ecfbreed                                   const SkPaint* paint, SrcRectConstraint constraint) {
223b7bac3d015cd1c85343d6c49316bfd942efa3f9fpiotaixr    Iter iter(fList);
224b7bac3d015cd1c85343d6c49316bfd942efa3f9fpiotaixr    while (iter.next()) {
225e47829b6b1eeb6b0c97ccb3df3016d197046824creed        iter->legacy_drawImageRect(image, src, dst, paint, constraint);
226b7bac3d015cd1c85343d6c49316bfd942efa3f9fpiotaixr    }
227b7bac3d015cd1c85343d6c49316bfd942efa3f9fpiotaixr}
228b7bac3d015cd1c85343d6c49316bfd942efa3f9fpiotaixr
229e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkNWayCanvas::onDrawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
230e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                              const SkPaint& paint) {
2316c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2326c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2336c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawText(text, byteLength, x, y, paint);
2346c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2356c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2366c924ad46c89955e78e071c792ef00df9910b42freed@android.com
237e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkNWayCanvas::onDrawPosText(const void* text, size_t byteLength, const SkPoint pos[],
238e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                 const SkPaint& paint) {
2396c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2406c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2416c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPosText(text, byteLength, pos, paint);
2426c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2436c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2446c924ad46c89955e78e071c792ef00df9910b42freed@android.com
245e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkNWayCanvas::onDrawPosTextH(const void* text, size_t byteLength, const SkScalar xpos[],
246e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                  SkScalar constY, const SkPaint& paint) {
2476c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2486c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2496c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawPosTextH(text, byteLength, xpos, constY, paint);
2506c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2516c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2526c924ad46c89955e78e071c792ef00df9910b42freed@android.com
253e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.comvoid SkNWayCanvas::onDrawTextOnPath(const void* text, size_t byteLength, const SkPath& path,
254e0d9ce890e67d02727ac2811bb456ddb64f827d4reed@google.com                                    const SkMatrix* matrix, const SkPaint& paint) {
2556c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2566c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
2576c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->drawTextOnPath(text, byteLength, path, matrix, paint);
2586c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2596c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2606c924ad46c89955e78e071c792ef00df9910b42freed@android.com
26145561a0b15fe045ba272c328684c3f7ae290785areedvoid SkNWayCanvas::onDrawTextRSXform(const void* text, size_t byteLength, const SkRSXform xform[],
26245561a0b15fe045ba272c328684c3f7ae290785areed                                     const SkRect* cull, const SkPaint& paint) {
26345561a0b15fe045ba272c328684c3f7ae290785areed    Iter iter(fList);
26445561a0b15fe045ba272c328684c3f7ae290785areed    while (iter.next()) {
26545561a0b15fe045ba272c328684c3f7ae290785areed        iter->drawTextRSXform(text, byteLength, xform, cull, paint);
26645561a0b15fe045ba272c328684c3f7ae290785areed    }
26745561a0b15fe045ba272c328684c3f7ae290785areed}
26845561a0b15fe045ba272c328684c3f7ae290785areed
269b7425173f96e93b090787e2386ba5f022b6c2869fmalitavoid SkNWayCanvas::onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y,
270b7425173f96e93b090787e2386ba5f022b6c2869fmalita                                  const SkPaint &paint) {
271b7425173f96e93b090787e2386ba5f022b6c2869fmalita    Iter iter(fList);
272b7425173f96e93b090787e2386ba5f022b6c2869fmalita    while (iter.next()) {
273b7425173f96e93b090787e2386ba5f022b6c2869fmalita        iter->drawTextBlob(blob, x, y, paint);
274b7425173f96e93b090787e2386ba5f022b6c2869fmalita    }
275b7425173f96e93b090787e2386ba5f022b6c2869fmalita}
276b7425173f96e93b090787e2386ba5f022b6c2869fmalita
277d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reedvoid SkNWayCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matrix,
278d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed                                 const SkPaint* paint) {
2796c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2806c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
281d5fa1a455aad61f3e99081fe7a9b065cb3b115c6reed        iter->drawPicture(picture, matrix, paint);
2826c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2836c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2846c924ad46c89955e78e071c792ef00df9910b42freed@android.com
285fed9cfdc0216152d7fffe6d838ea7281466ffe74Mike Reedvoid SkNWayCanvas::onDrawVerticesObject(const SkVertices* vertices, SkBlendMode bmode,
286fed9cfdc0216152d7fffe6d838ea7281466ffe74Mike Reed                                        const SkPaint& paint) {
2876c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
2886c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
289fed9cfdc0216152d7fffe6d838ea7281466ffe74Mike Reed        iter->drawVertices(vertices, bmode, paint);
2906c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
2916c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
2926c924ad46c89955e78e071c792ef00df9910b42freed@android.com
293b3c9d1c33caf325aada244204215eb790c228c12dandovvoid SkNWayCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4],
294faba3715b8ddfaa0ce4df79bc8006e9bc7694e5bMike Reed                               const SkPoint texCoords[4], SkBlendMode bmode,
295b3c9d1c33caf325aada244204215eb790c228c12dandov                               const SkPaint& paint) {
296963137b75c0a1fe91f35e9826742f36309f5e65ddandov    Iter iter(fList);
297963137b75c0a1fe91f35e9826742f36309f5e65ddandov    while (iter.next()) {
298faba3715b8ddfaa0ce4df79bc8006e9bc7694e5bMike Reed        iter->drawPatch(cubics, colors, texCoords, bmode, paint);
299963137b75c0a1fe91f35e9826742f36309f5e65ddandov    }
300963137b75c0a1fe91f35e9826742f36309f5e65ddandov}
301963137b75c0a1fe91f35e9826742f36309f5e65ddandov
302f70b531daaf47db1ee95c70da9843f1dd1f418d3reedvoid SkNWayCanvas::onDrawAnnotation(const SkRect& rect, const char key[], SkData* data) {
303f70b531daaf47db1ee95c70da9843f1dd1f418d3reed    Iter iter(fList);
304f70b531daaf47db1ee95c70da9843f1dd1f418d3reed    while (iter.next()) {
305f70b531daaf47db1ee95c70da9843f1dd1f418d3reed        iter->drawAnnotation(rect, key, data);
306f70b531daaf47db1ee95c70da9843f1dd1f418d3reed    }
307f70b531daaf47db1ee95c70da9843f1dd1f418d3reed}
308f70b531daaf47db1ee95c70da9843f1dd1f418d3reed
30953d9f1cfbd5ddbf57c2f22b9e613ce48e5b2896cfmalita#ifdef SK_SUPPORT_LEGACY_DRAWFILTER
3106c924ad46c89955e78e071c792ef00df9910b42freed@android.comSkDrawFilter* SkNWayCanvas::setDrawFilter(SkDrawFilter* filter) {
3116c924ad46c89955e78e071c792ef00df9910b42freed@android.com    Iter iter(fList);
3126c924ad46c89955e78e071c792ef00df9910b42freed@android.com    while (iter.next()) {
3136c924ad46c89955e78e071c792ef00df9910b42freed@android.com        iter->setDrawFilter(filter);
3146c924ad46c89955e78e071c792ef00df9910b42freed@android.com    }
3156c924ad46c89955e78e071c792ef00df9910b42freed@android.com    return this->INHERITED::setDrawFilter(filter);
3166c924ad46c89955e78e071c792ef00df9910b42freed@android.com}
3177765000709dc64eb23be7df47d1f995d1f787115fmalita#endif
318