| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2013 Google Inc. | 3 * Copyright 2013 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 "SkDeferredCanvas.h" | 9 #include "SkDeferredCanvas.h" |
| 10 | 10 |
| (...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 519 return SkNEW_ARGS(SkDeferredCanvas, (deferredDevice)); | 519 return SkNEW_ARGS(SkDeferredCanvas, (deferredDevice)); |
| 520 } | 520 } |
| 521 | 521 |
| 522 SkDeferredCanvas::SkDeferredCanvas(SkDeferredDevice* device) : SkCanvas (device)
{ | 522 SkDeferredCanvas::SkDeferredCanvas(SkDeferredDevice* device) : SkCanvas (device)
{ |
| 523 this->init(); | 523 this->init(); |
| 524 } | 524 } |
| 525 | 525 |
| 526 void SkDeferredCanvas::init() { | 526 void SkDeferredCanvas::init() { |
| 527 fBitmapSizeThreshold = kDeferredCanvasBitmapSizeThreshold; | 527 fBitmapSizeThreshold = kDeferredCanvasBitmapSizeThreshold; |
| 528 fDeferredDrawing = true; // On by default | 528 fDeferredDrawing = true; // On by default |
| 529 fCachedCanvasSize.setEmpty(); |
| 530 fCachedCanvasSizeDirty = true; |
| 529 } | 531 } |
| 530 | 532 |
| 531 void SkDeferredCanvas::setMaxRecordingStorage(size_t maxStorage) { | 533 void SkDeferredCanvas::setMaxRecordingStorage(size_t maxStorage) { |
| 532 this->validate(); | 534 this->validate(); |
| 533 this->getDeferredDevice()->setMaxRecordingStorage(maxStorage); | 535 this->getDeferredDevice()->setMaxRecordingStorage(maxStorage); |
| 534 } | 536 } |
| 535 | 537 |
| 536 size_t SkDeferredCanvas::storageAllocatedForRecording() const { | 538 size_t SkDeferredCanvas::storageAllocatedForRecording() const { |
| 537 return this->getDeferredDevice()->storageAllocatedForRecording(); | 539 return this->getDeferredDevice()->storageAllocatedForRecording(); |
| 538 } | 540 } |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 582 } | 584 } |
| 583 | 585 |
| 584 bool SkDeferredCanvas::isDeferredDrawing() const { | 586 bool SkDeferredCanvas::isDeferredDrawing() const { |
| 585 return fDeferredDrawing; | 587 return fDeferredDrawing; |
| 586 } | 588 } |
| 587 | 589 |
| 588 bool SkDeferredCanvas::isFreshFrame() const { | 590 bool SkDeferredCanvas::isFreshFrame() const { |
| 589 return this->getDeferredDevice()->isFreshFrame(); | 591 return this->getDeferredDevice()->isFreshFrame(); |
| 590 } | 592 } |
| 591 | 593 |
| 594 SkISize SkDeferredCanvas::getCanvasSize() const { |
| 595 if (fCachedCanvasSizeDirty) { |
| 596 fCachedCanvasSize = this->getBaseLayerSize(); |
| 597 fCachedCanvasSizeDirty = false; |
| 598 } |
| 599 return fCachedCanvasSize; |
| 600 } |
| 601 |
| 592 bool SkDeferredCanvas::hasPendingCommands() const { | 602 bool SkDeferredCanvas::hasPendingCommands() const { |
| 593 return this->getDeferredDevice()->hasPendingCommands(); | 603 return this->getDeferredDevice()->hasPendingCommands(); |
| 594 } | 604 } |
| 595 | 605 |
| 596 void SkDeferredCanvas::silentFlush() { | 606 void SkDeferredCanvas::silentFlush() { |
| 597 if (fDeferredDrawing) { | 607 if (fDeferredDrawing) { |
| 598 this->getDeferredDevice()->flushPendingCommands(kSilent_PlaybackMode); | 608 this->getDeferredDevice()->flushPendingCommands(kSilent_PlaybackMode); |
| 599 } | 609 } |
| 600 } | 610 } |
| 601 | 611 |
| 602 SkDeferredCanvas::~SkDeferredCanvas() { | 612 SkDeferredCanvas::~SkDeferredCanvas() { |
| 603 } | 613 } |
| 604 | 614 |
| 605 SkSurface* SkDeferredCanvas::setSurface(SkSurface* surface) { | 615 SkSurface* SkDeferredCanvas::setSurface(SkSurface* surface) { |
| 606 SkDeferredDevice* deferredDevice = this->getDeferredDevice(); | 616 SkDeferredDevice* deferredDevice = this->getDeferredDevice(); |
| 607 SkASSERT(deferredDevice); | 617 SkASSERT(deferredDevice); |
| 608 // By swapping the surface into the existing device, we preserve | 618 // By swapping the surface into the existing device, we preserve |
| 609 // all pending commands, which can help to seamlessly recover from | 619 // all pending commands, which can help to seamlessly recover from |
| 610 // a lost accelerated graphics context. | 620 // a lost accelerated graphics context. |
| 611 deferredDevice->setSurface(surface); | 621 deferredDevice->setSurface(surface); |
| 622 fCachedCanvasSizeDirty = true; |
| 612 return surface; | 623 return surface; |
| 613 } | 624 } |
| 614 | 625 |
| 615 SkDeferredCanvas::NotificationClient* SkDeferredCanvas::setNotificationClient( | 626 SkDeferredCanvas::NotificationClient* SkDeferredCanvas::setNotificationClient( |
| 616 NotificationClient* notificationClient) { | 627 NotificationClient* notificationClient) { |
| 617 | 628 |
| 618 SkDeferredDevice* deferredDevice = this->getDeferredDevice(); | 629 SkDeferredDevice* deferredDevice = this->getDeferredDevice(); |
| 619 SkASSERT(deferredDevice); | 630 SkASSERT(deferredDevice); |
| 620 if (deferredDevice) { | 631 if (deferredDevice) { |
| 621 deferredDevice->setNotificationClient(notificationClient); | 632 deferredDevice->setNotificationClient(notificationClient); |
| 622 } | 633 } |
| 623 return notificationClient; | 634 return notificationClient; |
| 624 } | 635 } |
| 625 | 636 |
| 626 SkImage* SkDeferredCanvas::newImageSnapshot() { | 637 SkImage* SkDeferredCanvas::newImageSnapshot() { |
| 627 SkDeferredDevice* deferredDevice = this->getDeferredDevice(); | 638 SkDeferredDevice* deferredDevice = this->getDeferredDevice(); |
| 628 SkASSERT(deferredDevice); | 639 SkASSERT(deferredDevice); |
| 629 return deferredDevice ? deferredDevice->newImageSnapshot() : NULL; | 640 return deferredDevice ? deferredDevice->newImageSnapshot() : NULL; |
| 630 } | 641 } |
| 631 | 642 |
| 632 bool SkDeferredCanvas::isFullFrame(const SkRect* rect, | 643 bool SkDeferredCanvas::isFullFrame(const SkRect* rect, |
| 633 const SkPaint* paint) const { | 644 const SkPaint* paint) const { |
| 634 SkCanvas* canvas = this->drawingCanvas(); | 645 SkCanvas* canvas = this->drawingCanvas(); |
| 635 SkISize canvasSize = this->getDeviceSize(); | 646 SkISize canvasSize = this->getCanvasSize(); |
| 636 if (rect) { | 647 if (rect) { |
| 637 if (!canvas->getTotalMatrix().rectStaysRect()) { | 648 if (!canvas->getTotalMatrix().rectStaysRect()) { |
| 638 return false; // conservative | 649 return false; // conservative |
| 639 } | 650 } |
| 640 | 651 |
| 641 SkRect transformedRect; | 652 SkRect transformedRect; |
| 642 canvas->getTotalMatrix().mapRect(&transformedRect, *rect); | 653 canvas->getTotalMatrix().mapRect(&transformedRect, *rect); |
| 643 | 654 |
| 644 if (paint) { | 655 if (paint) { |
| 645 SkPaint::Style paintStyle = paint->getStyle(); | 656 SkPaint::Style paintStyle = paint->getStyle(); |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 937 SkDrawFilter* SkDeferredCanvas::setDrawFilter(SkDrawFilter* filter) { | 948 SkDrawFilter* SkDeferredCanvas::setDrawFilter(SkDrawFilter* filter) { |
| 938 this->drawingCanvas()->setDrawFilter(filter); | 949 this->drawingCanvas()->setDrawFilter(filter); |
| 939 this->INHERITED::setDrawFilter(filter); | 950 this->INHERITED::setDrawFilter(filter); |
| 940 this->recordedDrawCommand(); | 951 this->recordedDrawCommand(); |
| 941 return filter; | 952 return filter; |
| 942 } | 953 } |
| 943 | 954 |
| 944 SkCanvas* SkDeferredCanvas::canvasForDrawIter() { | 955 SkCanvas* SkDeferredCanvas::canvasForDrawIter() { |
| 945 return this->drawingCanvas(); | 956 return this->drawingCanvas(); |
| 946 } | 957 } |
| OLD | NEW |