11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc. 41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 87cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed#include "SkNWayCanvas.h" 97cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 10d9689beb7fce225abbaa78063d46717ec92b19fdDerek SollenbergerSkNWayCanvas::SkNWayCanvas(int width, int height) { 11d9689beb7fce225abbaa78063d46717ec92b19fdDerek Sollenberger SkBitmap bm; 12d9689beb7fce225abbaa78063d46717ec92b19fdDerek Sollenberger bm.setConfig(SkBitmap::kNo_Config, width, height); 13d9689beb7fce225abbaa78063d46717ec92b19fdDerek Sollenberger this->setBitmapDevice(bm); 14d9689beb7fce225abbaa78063d46717ec92b19fdDerek Sollenberger} 157cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 167cc0a6ac7b817b217dd614cba96fc533b32d505dMike ReedSkNWayCanvas::~SkNWayCanvas() { 177cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed this->removeAll(); 187cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 197cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 207cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::addCanvas(SkCanvas* canvas) { 217cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed if (canvas) { 227cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed canvas->ref(); 237cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed *fList.append() = canvas; 247cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 257cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 267cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 277cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::removeCanvas(SkCanvas* canvas) { 287cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed int index = fList.find(canvas); 297cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed if (index >= 0) { 307cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed canvas->unref(); 317cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed fList.removeShuffle(index); 327cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 337cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 347cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 357cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::removeAll() { 367cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed fList.unrefAll(); 377cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed fList.reset(); 387cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 397cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 407cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed/////////////////////////////////////////////////////////////////////////// 417cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed// These are forwarded to the N canvases we're referencing 427cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 437cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedclass SkNWayCanvas::Iter { 447cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedpublic: 457cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter(const SkTDArray<SkCanvas*>& list) : fList(list) { 467cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed fIndex = 0; 477cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 487cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed bool next() { 497cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed if (fIndex < fList.count()) { 507cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed fCanvas = fList[fIndex++]; 517cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed return true; 527cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 537cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed return false; 547cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 557cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed SkCanvas* operator->() { return fCanvas; } 564f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger 577cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedprivate: 587cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed const SkTDArray<SkCanvas*>& fList; 597cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed int fIndex; 607cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed SkCanvas* fCanvas; 617cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed}; 627cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 637cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedint SkNWayCanvas::save(SaveFlags flags) { 647cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 657cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 667cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->save(flags); 677cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 687cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed return this->INHERITED::save(flags); 697cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 707cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 717cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedint SkNWayCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint, 727cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed SaveFlags flags) { 737cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 747cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 757cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->saveLayer(bounds, paint, flags); 767cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 777cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed return this->INHERITED::saveLayer(bounds, paint, flags); 787cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 797cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 807cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::restore() { 817cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 827cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 837cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->restore(); 847cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 857cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed this->INHERITED::restore(); 867cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 877cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 887cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedbool SkNWayCanvas::translate(SkScalar dx, SkScalar dy) { 897cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 907cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 917cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->translate(dx, dy); 927cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 937cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed return this->INHERITED::translate(dx, dy); 947cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 957cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 967cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedbool SkNWayCanvas::scale(SkScalar sx, SkScalar sy) { 977cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 987cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 997cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->scale(sx, sy); 1007cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 1017cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed return this->INHERITED::scale(sx, sy); 1027cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 1037cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 1047cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedbool SkNWayCanvas::rotate(SkScalar degrees) { 1057cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 1067cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 1077cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->rotate(degrees); 1087cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 1097cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed return this->INHERITED::rotate(degrees); 1107cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 1117cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 1127cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedbool SkNWayCanvas::skew(SkScalar sx, SkScalar sy) { 1137cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 1147cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 1157cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->skew(sx, sy); 1167cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 1177cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed return this->INHERITED::skew(sx, sy); 1187cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 1197cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 1207cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedbool SkNWayCanvas::concat(const SkMatrix& matrix) { 1217cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 1227cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 1237cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->concat(matrix); 1247cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 1257cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed return this->INHERITED::concat(matrix); 1267cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 1277cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 1287cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::setMatrix(const SkMatrix& matrix) { 1297cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 1307cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 1317cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->setMatrix(matrix); 1327cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 1337cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed this->INHERITED::setMatrix(matrix); 1347cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 1357cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 1361cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerbool SkNWayCanvas::clipRect(const SkRect& rect, SkRegion::Op op, bool doAA) { 1377cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 1387cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 1391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger iter->clipRect(rect, op, doAA); 1407cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 1411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return this->INHERITED::clipRect(rect, op, doAA); 1427cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 1437cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 1441cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerbool SkNWayCanvas::clipPath(const SkPath& path, SkRegion::Op op, bool doAA) { 1457cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 1467cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 1471cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger iter->clipPath(path, op, doAA); 1487cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 1491cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return this->INHERITED::clipPath(path, op, doAA); 1507cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 1517cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 1527cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedbool SkNWayCanvas::clipRegion(const SkRegion& deviceRgn, SkRegion::Op op) { 1537cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 1547cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 1557cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->clipRegion(deviceRgn, op); 1567cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 1577cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed return this->INHERITED::clipRegion(deviceRgn, op); 1587cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 1597cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 1607cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::drawPaint(const SkPaint& paint) { 1617cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 1627cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 1637cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->drawPaint(paint); 1647cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 1657cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 1667cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 1677cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::drawPoints(PointMode mode, size_t count, const SkPoint pts[], 1687cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed const SkPaint& paint) { 1697cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 1707cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 1717cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->drawPoints(mode, count, pts, paint); 1727cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 1737cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 1747cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 1757cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::drawRect(const SkRect& rect, const SkPaint& paint) { 1767cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 1777cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 1787cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->drawRect(rect, paint); 1797cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 1807cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 1817cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 1827cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::drawPath(const SkPath& path, const SkPaint& paint) { 1837cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 1847cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 1857cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->drawPath(path, paint); 1867cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 1877cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 1887cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 1897cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y, 1907cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed const SkPaint* paint) { 1917cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 1927cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 1937cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->drawBitmap(bitmap, x, y, paint); 1947cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 1957cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 1967cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 1977cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src, 1987cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed const SkRect& dst, const SkPaint* paint) { 1997cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 2007cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 2017cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->drawBitmapRect(bitmap, src, dst, paint); 2027cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 2037cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 2047cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 2057cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m, 2067cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed const SkPaint* paint) { 2077cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 2087cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 2097cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->drawBitmapMatrix(bitmap, m, paint); 2107cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 2117cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 2127cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 2137cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::drawSprite(const SkBitmap& bitmap, int x, int y, 2147cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed const SkPaint* paint) { 2157cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 2167cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 2177cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->drawSprite(bitmap, x, y, paint); 2187cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 2197cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 2207cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 2217cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::drawText(const void* text, size_t byteLength, SkScalar x, 2227cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed SkScalar y, const SkPaint& paint) { 2237cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 2247cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 2257cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->drawText(text, byteLength, x, y, paint); 2267cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 2277cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 2287cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 2297cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::drawPosText(const void* text, size_t byteLength, 2307cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed const SkPoint pos[], const SkPaint& paint) { 2317cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 2327cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 2337cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->drawPosText(text, byteLength, pos, paint); 2347cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 2357cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 2367cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 2377cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::drawPosTextH(const void* text, size_t byteLength, 2387cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed const SkScalar xpos[], SkScalar constY, 2397cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed const SkPaint& paint) { 2407cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 2417cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 2427cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->drawPosTextH(text, byteLength, xpos, constY, paint); 2437cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 2447cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 2457cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 2467cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::drawTextOnPath(const void* text, size_t byteLength, 2477cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed const SkPath& path, const SkMatrix* matrix, 2487cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed const SkPaint& paint) { 2497cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 2507cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 2517cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->drawTextOnPath(text, byteLength, path, matrix, paint); 2527cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 2537cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 2547cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 2557cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::drawPicture(SkPicture& picture) { 2567cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 2577cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 2587cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->drawPicture(picture); 2597cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 2607cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 2617cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 2627cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reedvoid SkNWayCanvas::drawVertices(VertexMode vmode, int vertexCount, 2637cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed const SkPoint vertices[], const SkPoint texs[], 2647cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed const SkColor colors[], SkXfermode* xmode, 2657cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed const uint16_t indices[], int indexCount, 2667cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed const SkPaint& paint) { 2677cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 2687cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 2697cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->drawVertices(vmode, vertexCount, vertices, texs, colors, xmode, 2707cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed indices, indexCount, paint); 2717cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 2727cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 2737cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 2747cc0a6ac7b817b217dd614cba96fc533b32d505dMike ReedSkBounder* SkNWayCanvas::setBounder(SkBounder* bounder) { 2757cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 2767cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 2777cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->setBounder(bounder); 2787cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 2797cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed return this->INHERITED::setBounder(bounder); 2807cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 2817cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 2827cc0a6ac7b817b217dd614cba96fc533b32d505dMike ReedSkDrawFilter* SkNWayCanvas::setDrawFilter(SkDrawFilter* filter) { 2837cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed Iter iter(fList); 2847cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed while (iter.next()) { 2857cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed iter->setDrawFilter(filter); 2867cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed } 2877cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed return this->INHERITED::setDrawFilter(filter); 2887cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed} 2897cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 2907cc0a6ac7b817b217dd614cba96fc533b32d505dMike Reed 291