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