SkNWayCanvas.cpp revision 29348cb0612e19030d979156860946241e2ff4bd
1#include "SkNWayCanvas.h" 2 3SkNWayCanvas::SkNWayCanvas() {} 4 5SkNWayCanvas::~SkNWayCanvas() { 6 this->removeAll(); 7} 8 9void SkNWayCanvas::addCanvas(SkCanvas* canvas) { 10 if (canvas) { 11 canvas->ref(); 12 *fList.append() = canvas; 13 } 14} 15 16void SkNWayCanvas::removeCanvas(SkCanvas* canvas) { 17 int index = fList.find(canvas); 18 if (index >= 0) { 19 canvas->unref(); 20 fList.removeShuffle(index); 21 } 22} 23 24void SkNWayCanvas::removeAll() { 25 fList.unrefAll(); 26 fList.reset(); 27} 28 29/////////////////////////////////////////////////////////////////////////// 30// These are forwarded to the N canvases we're referencing 31 32class SkNWayCanvas::Iter { 33public: 34 Iter(const SkTDArray<SkCanvas*>& list) : fList(list) { 35 fIndex = 0; 36 } 37 bool next() { 38 if (fIndex < fList.count()) { 39 fCanvas = fList[fIndex++]; 40 return true; 41 } 42 return false; 43 } 44 SkCanvas* operator->() { return fCanvas; } 45 46private: 47 const SkTDArray<SkCanvas*>& fList; 48 int fIndex; 49 SkCanvas* fCanvas; 50}; 51 52int SkNWayCanvas::save(SaveFlags flags) { 53 Iter iter(fList); 54 while (iter.next()) { 55 iter->save(flags); 56 } 57 return this->INHERITED::save(flags); 58} 59 60int SkNWayCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint, 61 SaveFlags flags) { 62 Iter iter(fList); 63 while (iter.next()) { 64 iter->saveLayer(bounds, paint, flags); 65 } 66 return this->INHERITED::saveLayer(bounds, paint, flags); 67} 68 69void SkNWayCanvas::restore() { 70 Iter iter(fList); 71 while (iter.next()) { 72 iter->restore(); 73 } 74 this->INHERITED::restore(); 75} 76 77bool SkNWayCanvas::translate(SkScalar dx, SkScalar dy) { 78 Iter iter(fList); 79 while (iter.next()) { 80 iter->translate(dx, dy); 81 } 82 return this->INHERITED::translate(dx, dy); 83} 84 85bool SkNWayCanvas::scale(SkScalar sx, SkScalar sy) { 86 Iter iter(fList); 87 while (iter.next()) { 88 iter->scale(sx, sy); 89 } 90 return this->INHERITED::scale(sx, sy); 91} 92 93bool SkNWayCanvas::rotate(SkScalar degrees) { 94 Iter iter(fList); 95 while (iter.next()) { 96 iter->rotate(degrees); 97 } 98 return this->INHERITED::rotate(degrees); 99} 100 101bool SkNWayCanvas::skew(SkScalar sx, SkScalar sy) { 102 Iter iter(fList); 103 while (iter.next()) { 104 iter->skew(sx, sy); 105 } 106 return this->INHERITED::skew(sx, sy); 107} 108 109bool SkNWayCanvas::concat(const SkMatrix& matrix) { 110 Iter iter(fList); 111 while (iter.next()) { 112 iter->concat(matrix); 113 } 114 return this->INHERITED::concat(matrix); 115} 116 117void SkNWayCanvas::setMatrix(const SkMatrix& matrix) { 118 Iter iter(fList); 119 while (iter.next()) { 120 iter->setMatrix(matrix); 121 } 122 this->INHERITED::setMatrix(matrix); 123} 124 125bool SkNWayCanvas::clipRect(const SkRect& rect, SkRegion::Op op) { 126 Iter iter(fList); 127 while (iter.next()) { 128 iter->clipRect(rect, op); 129 } 130 return this->INHERITED::clipRect(rect, op); 131} 132 133bool SkNWayCanvas::clipPath(const SkPath& path, SkRegion::Op op) { 134 Iter iter(fList); 135 while (iter.next()) { 136 iter->clipPath(path, op); 137 } 138 return this->INHERITED::clipPath(path, op); 139} 140 141bool SkNWayCanvas::clipRegion(const SkRegion& deviceRgn, SkRegion::Op op) { 142 Iter iter(fList); 143 while (iter.next()) { 144 iter->clipRegion(deviceRgn, op); 145 } 146 return this->INHERITED::clipRegion(deviceRgn, op); 147} 148 149void SkNWayCanvas::drawPaint(const SkPaint& paint) { 150 Iter iter(fList); 151 while (iter.next()) { 152 iter->drawPaint(paint); 153 } 154} 155 156void SkNWayCanvas::drawPoints(PointMode mode, size_t count, const SkPoint pts[], 157 const SkPaint& paint) { 158 Iter iter(fList); 159 while (iter.next()) { 160 iter->drawPoints(mode, count, pts, paint); 161 } 162} 163 164void SkNWayCanvas::drawRect(const SkRect& rect, const SkPaint& paint) { 165 Iter iter(fList); 166 while (iter.next()) { 167 iter->drawRect(rect, paint); 168 } 169} 170 171void SkNWayCanvas::drawPath(const SkPath& path, const SkPaint& paint) { 172 Iter iter(fList); 173 while (iter.next()) { 174 iter->drawPath(path, paint); 175 } 176} 177 178void SkNWayCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y, 179 const SkPaint* paint) { 180 Iter iter(fList); 181 while (iter.next()) { 182 iter->drawBitmap(bitmap, x, y, paint); 183 } 184} 185 186void SkNWayCanvas::drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src, 187 const SkRect& dst, const SkPaint* paint) { 188 Iter iter(fList); 189 while (iter.next()) { 190 iter->drawBitmapRect(bitmap, src, dst, paint); 191 } 192} 193 194void SkNWayCanvas::drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m, 195 const SkPaint* paint) { 196 Iter iter(fList); 197 while (iter.next()) { 198 iter->drawBitmapMatrix(bitmap, m, paint); 199 } 200} 201 202void SkNWayCanvas::drawSprite(const SkBitmap& bitmap, int x, int y, 203 const SkPaint* paint) { 204 Iter iter(fList); 205 while (iter.next()) { 206 iter->drawSprite(bitmap, x, y, paint); 207 } 208} 209 210void SkNWayCanvas::drawText(const void* text, size_t byteLength, SkScalar x, 211 SkScalar y, const SkPaint& paint) { 212 Iter iter(fList); 213 while (iter.next()) { 214 iter->drawText(text, byteLength, x, y, paint); 215 } 216} 217 218void SkNWayCanvas::drawPosText(const void* text, size_t byteLength, 219 const SkPoint pos[], const SkPaint& paint) { 220 Iter iter(fList); 221 while (iter.next()) { 222 iter->drawPosText(text, byteLength, pos, paint); 223 } 224} 225 226void SkNWayCanvas::drawPosTextH(const void* text, size_t byteLength, 227 const SkScalar xpos[], SkScalar constY, 228 const SkPaint& paint) { 229 Iter iter(fList); 230 while (iter.next()) { 231 iter->drawPosTextH(text, byteLength, xpos, constY, paint); 232 } 233} 234 235void SkNWayCanvas::drawTextOnPath(const void* text, size_t byteLength, 236 const SkPath& path, const SkMatrix* matrix, 237 const SkPaint& paint) { 238 Iter iter(fList); 239 while (iter.next()) { 240 iter->drawTextOnPath(text, byteLength, path, matrix, paint); 241 } 242} 243 244void SkNWayCanvas::drawPicture(SkPicture& picture) { 245 Iter iter(fList); 246 while (iter.next()) { 247 iter->drawPicture(picture); 248 } 249} 250 251void SkNWayCanvas::drawShape(SkShape* shape) { 252 Iter iter(fList); 253 while (iter.next()) { 254 iter->drawShape(shape); 255 } 256} 257 258void SkNWayCanvas::drawVertices(VertexMode vmode, int vertexCount, 259 const SkPoint vertices[], const SkPoint texs[], 260 const SkColor colors[], SkXfermode* xmode, 261 const uint16_t indices[], int indexCount, 262 const SkPaint& paint) { 263 Iter iter(fList); 264 while (iter.next()) { 265 iter->drawVertices(vmode, vertexCount, vertices, texs, colors, xmode, 266 indices, indexCount, paint); 267 } 268} 269 270SkBounder* SkNWayCanvas::setBounder(SkBounder* bounder) { 271 Iter iter(fList); 272 while (iter.next()) { 273 iter->setBounder(bounder); 274 } 275 return this->INHERITED::setBounder(bounder); 276} 277 278SkDrawFilter* SkNWayCanvas::setDrawFilter(SkDrawFilter* filter) { 279 Iter iter(fList); 280 while (iter.next()) { 281 iter->setDrawFilter(filter); 282 } 283 return this->INHERITED::setDrawFilter(filter); 284} 285 286 287