| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2008 The Android Open Source Project | 2 * Copyright 2008 The Android Open Source Project |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkCanvas.h" | 8 #include "SkCanvas.h" |
| 9 #include "SkCanvasPriv.h" | 9 #include "SkCanvasPriv.h" |
| 10 #include "SkBitmapDevice.h" | 10 #include "SkBitmapDevice.h" |
| (...skipping 694 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 705 } | 705 } |
| 706 | 706 |
| 707 bool weAllocated = false; | 707 bool weAllocated = false; |
| 708 if (NULL == bitmap->pixelRef()) { | 708 if (NULL == bitmap->pixelRef()) { |
| 709 if (!bitmap->tryAllocPixels()) { | 709 if (!bitmap->tryAllocPixels()) { |
| 710 return false; | 710 return false; |
| 711 } | 711 } |
| 712 weAllocated = true; | 712 weAllocated = true; |
| 713 } | 713 } |
| 714 | 714 |
| 715 SkBitmap bm(*bitmap); | 715 SkAutoPixmapUnlock unlocker; |
| 716 bm.lockPixels(); | 716 if (bitmap->requestLock(&unlocker)) { |
| 717 if (bm.getPixels() && this->readPixels(bm.info(), bm.getPixels(), bm.rowByte
s(), x, y)) { | 717 const SkPixmap& pm = unlocker.pixmap(); |
| 718 return true; | 718 if (this->readPixels(pm.info(), pm.writable_addr(), pm.rowBytes(), x, y)
) { |
| 719 return true; |
| 720 } |
| 719 } | 721 } |
| 720 | 722 |
| 721 if (weAllocated) { | 723 if (weAllocated) { |
| 722 bitmap->setPixelRef(NULL); | 724 bitmap->setPixelRef(NULL); |
| 723 } | 725 } |
| 724 return false; | 726 return false; |
| 725 } | 727 } |
| 726 | 728 |
| 727 bool SkCanvas::readPixels(const SkIRect& srcRect, SkBitmap* bitmap) { | 729 bool SkCanvas::readPixels(const SkIRect& srcRect, SkBitmap* bitmap) { |
| 728 SkIRect r = srcRect; | 730 SkIRect r = srcRect; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 756 } | 758 } |
| 757 | 759 |
| 758 // The device can assert that the requested area is always contained in its
bounds | 760 // The device can assert that the requested area is always contained in its
bounds |
| 759 return device->readPixels(rec.fInfo, rec.fPixels, rec.fRowBytes, rec.fX, rec
.fY); | 761 return device->readPixels(rec.fInfo, rec.fPixels, rec.fRowBytes, rec.fX, rec
.fY); |
| 760 } | 762 } |
| 761 | 763 |
| 762 bool SkCanvas::writePixels(const SkBitmap& bitmap, int x, int y) { | 764 bool SkCanvas::writePixels(const SkBitmap& bitmap, int x, int y) { |
| 763 if (bitmap.getTexture()) { | 765 if (bitmap.getTexture()) { |
| 764 return false; | 766 return false; |
| 765 } | 767 } |
| 766 SkBitmap bm(bitmap); | 768 |
| 767 bm.lockPixels(); | 769 SkAutoPixmapUnlock unlocker; |
| 768 if (bm.getPixels()) { | 770 if (bitmap.requestLock(&unlocker)) { |
| 769 return this->writePixels(bm.info(), bm.getPixels(), bm.rowBytes(), x, y)
; | 771 const SkPixmap& pm = unlocker.pixmap(); |
| 772 return this->writePixels(pm.info(), pm.addr(), pm.rowBytes(), x, y); |
| 770 } | 773 } |
| 771 return false; | 774 return false; |
| 772 } | 775 } |
| 773 | 776 |
| 774 bool SkCanvas::writePixels(const SkImageInfo& origInfo, const void* pixels, size
_t rowBytes, | 777 bool SkCanvas::writePixels(const SkImageInfo& origInfo, const void* pixels, size
_t rowBytes, |
| 775 int x, int y) { | 778 int x, int y) { |
| 776 switch (origInfo.colorType()) { | 779 switch (origInfo.colorType()) { |
| 777 case kUnknown_SkColorType: | 780 case kUnknown_SkColorType: |
| 778 case kIndex_8_SkColorType: | 781 case kIndex_8_SkColorType: |
| 779 return false; | 782 return false; |
| (...skipping 1907 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2687 } | 2690 } |
| 2688 | 2691 |
| 2689 if (matrix) { | 2692 if (matrix) { |
| 2690 canvas->concat(*matrix); | 2693 canvas->concat(*matrix); |
| 2691 } | 2694 } |
| 2692 } | 2695 } |
| 2693 | 2696 |
| 2694 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { | 2697 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { |
| 2695 fCanvas->restoreToCount(fSaveCount); | 2698 fCanvas->restoreToCount(fSaveCount); |
| 2696 } | 2699 } |
| OLD | NEW |