OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "SkAnnotation.h" | 9 #include "SkAnnotation.h" |
10 #include "SkBitmapDevice.h" | 10 #include "SkBitmapDevice.h" |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 } | 222 } |
223 | 223 |
224 void flushRecording(bool detachCurrentBlock); | 224 void flushRecording(bool detachCurrentBlock); |
225 size_t freeMemoryIfPossible(size_t bytesToFree); | 225 size_t freeMemoryIfPossible(size_t bytesToFree); |
226 | 226 |
227 size_t storageAllocatedForRecording() { | 227 size_t storageAllocatedForRecording() { |
228 return (NULL == fBitmapHeap) ? 0 : fBitmapHeap->bytesAllocated(); | 228 return (NULL == fBitmapHeap) ? 0 : fBitmapHeap->bytesAllocated(); |
229 } | 229 } |
230 | 230 |
231 // overrides from SkCanvas | 231 // overrides from SkCanvas |
| 232 virtual int save(SaveFlags) SK_OVERRIDE; |
| 233 virtual int saveLayer(const SkRect* bounds, const SkPaint*, |
| 234 SaveFlags) SK_OVERRIDE; |
| 235 virtual void restore() SK_OVERRIDE; |
232 virtual bool isDrawingToLayer() const SK_OVERRIDE; | 236 virtual bool isDrawingToLayer() const SK_OVERRIDE; |
233 virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE; | 237 virtual bool translate(SkScalar dx, SkScalar dy) SK_OVERRIDE; |
234 virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE; | 238 virtual bool scale(SkScalar sx, SkScalar sy) SK_OVERRIDE; |
235 virtual bool rotate(SkScalar degrees) SK_OVERRIDE; | 239 virtual bool rotate(SkScalar degrees) SK_OVERRIDE; |
236 virtual bool skew(SkScalar sx, SkScalar sy) SK_OVERRIDE; | 240 virtual bool skew(SkScalar sx, SkScalar sy) SK_OVERRIDE; |
237 virtual bool concat(const SkMatrix& matrix) SK_OVERRIDE; | 241 virtual bool concat(const SkMatrix& matrix) SK_OVERRIDE; |
238 virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE; | 242 virtual void setMatrix(const SkMatrix& matrix) SK_OVERRIDE; |
239 virtual void clear(SkColor) SK_OVERRIDE; | 243 virtual void clear(SkColor) SK_OVERRIDE; |
240 virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE; | 244 virtual void drawPaint(const SkPaint& paint) SK_OVERRIDE; |
241 virtual void drawPoints(PointMode, size_t count, const SkPoint pts[], | 245 virtual void drawPoints(PointMode, size_t count, const SkPoint pts[], |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
276 virtual void addComment(const char* kywd, const char* value) SK_OVERRIDE; | 280 virtual void addComment(const char* kywd, const char* value) SK_OVERRIDE; |
277 virtual void endCommentGroup() SK_OVERRIDE; | 281 virtual void endCommentGroup() SK_OVERRIDE; |
278 | 282 |
279 /** | 283 /** |
280 * Flatten an SkBitmap to send to the reader, where it will be referenced | 284 * Flatten an SkBitmap to send to the reader, where it will be referenced |
281 * according to slot. | 285 * according to slot. |
282 */ | 286 */ |
283 bool shuttleBitmap(const SkBitmap&, int32_t slot); | 287 bool shuttleBitmap(const SkBitmap&, int32_t slot); |
284 | 288 |
285 protected: | 289 protected: |
286 virtual void onSave(SaveFlags) SK_OVERRIDE; | |
287 virtual bool onSaveLayer(const SkRect*, const SkPaint*, SaveFlags) SK_OVERRI
DE; | |
288 virtual void onRestore() SK_OVERRIDE; | |
289 | |
290 virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK
_OVERRIDE; | 290 virtual void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) SK
_OVERRIDE; |
291 | 291 |
292 virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERR
IDE; | 292 virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERR
IDE; |
293 virtual void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVE
RRIDE; | 293 virtual void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVE
RRIDE; |
294 virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERR
IDE; | 294 virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERR
IDE; |
295 virtual void onClipRegion(const SkRegion&, SkRegion::Op) SK_OVERRIDE; | 295 virtual void onClipRegion(const SkRegion&, SkRegion::Op) SK_OVERRIDE; |
296 | 296 |
297 private: | 297 private: |
298 enum { | 298 enum { |
299 kNoSaveLayer = -1, | 299 kNoSaveLayer = -1, |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
507 } | 507 } |
508 } | 508 } |
509 return id; | 509 return id; |
510 } | 510 } |
511 | 511 |
512 /////////////////////////////////////////////////////////////////////////////// | 512 /////////////////////////////////////////////////////////////////////////////// |
513 | 513 |
514 #define NOTIFY_SETUP(canvas) \ | 514 #define NOTIFY_SETUP(canvas) \ |
515 AutoPipeNotify apn(canvas) | 515 AutoPipeNotify apn(canvas) |
516 | 516 |
517 void SkGPipeCanvas::onSave(SaveFlags flags) { | 517 int SkGPipeCanvas::save(SaveFlags flags) { |
518 NOTIFY_SETUP(this); | 518 NOTIFY_SETUP(this); |
519 if (this->needOpBytes()) { | 519 if (this->needOpBytes()) { |
520 this->writeOp(kSave_DrawOp, 0, flags); | 520 this->writeOp(kSave_DrawOp, 0, flags); |
521 } | 521 } |
522 | 522 return this->INHERITED::save(flags); |
523 this->INHERITED::onSave(flags); | |
524 } | 523 } |
525 | 524 |
526 bool SkGPipeCanvas::onSaveLayer(const SkRect* bounds, const SkPaint* paint, | 525 int SkGPipeCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint, |
527 SaveFlags saveFlags) { | 526 SaveFlags saveFlags) { |
528 NOTIFY_SETUP(this); | 527 NOTIFY_SETUP(this); |
529 size_t size = 0; | 528 size_t size = 0; |
530 unsigned opFlags = 0; | 529 unsigned opFlags = 0; |
531 | 530 |
532 if (bounds) { | 531 if (bounds) { |
533 opFlags |= kSaveLayer_HasBounds_DrawOpFlag; | 532 opFlags |= kSaveLayer_HasBounds_DrawOpFlag; |
534 size += sizeof(SkRect); | 533 size += sizeof(SkRect); |
535 } | 534 } |
536 if (paint) { | 535 if (paint) { |
537 opFlags |= kSaveLayer_HasPaint_DrawOpFlag; | 536 opFlags |= kSaveLayer_HasPaint_DrawOpFlag; |
538 this->writePaint(*paint); | 537 this->writePaint(*paint); |
539 } | 538 } |
540 | 539 |
541 if (this->needOpBytes(size)) { | 540 if (this->needOpBytes(size)) { |
542 this->writeOp(kSaveLayer_DrawOp, opFlags, saveFlags); | 541 this->writeOp(kSaveLayer_DrawOp, opFlags, saveFlags); |
543 if (bounds) { | 542 if (bounds) { |
544 fWriter.writeRect(*bounds); | 543 fWriter.writeRect(*bounds); |
545 } | 544 } |
546 } | 545 } |
547 | 546 |
548 if (kNoSaveLayer == fFirstSaveLayerStackLevel){ | 547 if (kNoSaveLayer == fFirstSaveLayerStackLevel){ |
549 fFirstSaveLayerStackLevel = this->getSaveCount(); | 548 fFirstSaveLayerStackLevel = this->getSaveCount(); |
550 } | 549 } |
551 | 550 // we just pass on the save, so we don't create a layer |
552 this->INHERITED::onSaveLayer(bounds, paint, saveFlags); | 551 return this->INHERITED::save(saveFlags); |
553 // we don't create a layer | |
554 return false; | |
555 } | 552 } |
556 | 553 |
557 void SkGPipeCanvas::onRestore() { | 554 void SkGPipeCanvas::restore() { |
558 NOTIFY_SETUP(this); | 555 NOTIFY_SETUP(this); |
559 if (this->needOpBytes()) { | 556 if (this->needOpBytes()) { |
560 this->writeOp(kRestore_DrawOp); | 557 this->writeOp(kRestore_DrawOp); |
561 } | 558 } |
562 | 559 |
563 if (this->getSaveCount() - 1 == fFirstSaveLayerStackLevel){ | 560 this->INHERITED::restore(); |
| 561 |
| 562 if (this->getSaveCount() == fFirstSaveLayerStackLevel){ |
564 fFirstSaveLayerStackLevel = kNoSaveLayer; | 563 fFirstSaveLayerStackLevel = kNoSaveLayer; |
565 } | 564 } |
566 | |
567 this->INHERITED::onRestore(); | |
568 } | 565 } |
569 | 566 |
570 bool SkGPipeCanvas::isDrawingToLayer() const { | 567 bool SkGPipeCanvas::isDrawingToLayer() const { |
571 return kNoSaveLayer != fFirstSaveLayerStackLevel; | 568 return kNoSaveLayer != fFirstSaveLayerStackLevel; |
572 } | 569 } |
573 | 570 |
574 bool SkGPipeCanvas::translate(SkScalar dx, SkScalar dy) { | 571 bool SkGPipeCanvas::translate(SkScalar dx, SkScalar dy) { |
575 if (dx || dy) { | 572 if (dx || dy) { |
576 NOTIFY_SETUP(this); | 573 NOTIFY_SETUP(this); |
577 if (this->needOpBytes(2 * sizeof(SkScalar))) { | 574 if (this->needOpBytes(2 * sizeof(SkScalar))) { |
(...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1257 return fCanvas->shuttleBitmap(bitmap, slot); | 1254 return fCanvas->shuttleBitmap(bitmap, slot); |
1258 } | 1255 } |
1259 | 1256 |
1260 void BitmapShuttle::removeCanvas() { | 1257 void BitmapShuttle::removeCanvas() { |
1261 if (NULL == fCanvas) { | 1258 if (NULL == fCanvas) { |
1262 return; | 1259 return; |
1263 } | 1260 } |
1264 fCanvas->unref(); | 1261 fCanvas->unref(); |
1265 fCanvas = NULL; | 1262 fCanvas = NULL; |
1266 } | 1263 } |
OLD | NEW |