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 fCanvasSizeChanged = true; | |
reed1
2014/09/11 15:38:13
nit: often in skia we name this sort of boolean "D
yunchao
2014/09/12 10:13:28
Done.
| |
530 fCanvasSize.setEmpty(); | |
reed1
2014/09/11 15:38:13
nit: may be clear to name this fCachedCanvasSize,
yunchao
2014/09/12 10:13:28
Done.
| |
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() { | |
595 if (fCanvasSizeChanged) { | |
596 fCanvasSize = this->getBaseLayerSize(); | |
597 fCanvasSizeChanged = false; | |
598 } | |
599 return fCanvasSize; | |
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 fCanvasSizeChanged = 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) { |
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 |