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 744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
755 if (this->needOpBytes(path.writeToMemory(NULL))) { | 755 if (this->needOpBytes(path.writeToMemory(NULL))) { |
756 this->writeOp(kDrawPath_DrawOp); | 756 this->writeOp(kDrawPath_DrawOp); |
757 fWriter.writePath(path); | 757 fWriter.writePath(path); |
758 } | 758 } |
759 } | 759 } |
760 | 760 |
761 bool SkGPipeCanvas::commonDrawBitmap(const SkBitmap& bm, DrawOps op, | 761 bool SkGPipeCanvas::commonDrawBitmap(const SkBitmap& bm, DrawOps op, |
762 unsigned flags, | 762 unsigned flags, |
763 size_t opBytesNeeded, | 763 size_t opBytesNeeded, |
764 const SkPaint* paint) { | 764 const SkPaint* paint) { |
| 765 if (fDone) { |
| 766 return false; |
| 767 } |
| 768 |
765 if (paint != NULL) { | 769 if (paint != NULL) { |
766 flags |= kDrawBitmap_HasPaint_DrawOpFlag; | 770 flags |= kDrawBitmap_HasPaint_DrawOpFlag; |
767 this->writePaint(*paint); | 771 this->writePaint(*paint); |
768 } | 772 } |
| 773 // This needs to run first so its calls to needOpBytes() and its writes |
| 774 // don't interlace with the needOpBytes() and write below. |
| 775 SkASSERT(fBitmapHeap != NULL); |
| 776 int32_t bitmapIndex = fBitmapHeap->insert(bm); |
| 777 if (SkBitmapHeap::INVALID_SLOT == bitmapIndex) { |
| 778 return false; |
| 779 } |
| 780 |
769 if (this->needOpBytes(opBytesNeeded)) { | 781 if (this->needOpBytes(opBytesNeeded)) { |
770 SkASSERT(fBitmapHeap != NULL); | |
771 int32_t bitmapIndex = fBitmapHeap->insert(bm); | |
772 if (SkBitmapHeap::INVALID_SLOT == bitmapIndex) { | |
773 return false; | |
774 } | |
775 this->writeOp(op, flags, bitmapIndex); | 782 this->writeOp(op, flags, bitmapIndex); |
776 return true; | 783 return true; |
777 } | 784 } |
778 return false; | 785 return false; |
779 } | 786 } |
780 | 787 |
781 void SkGPipeCanvas::drawBitmap(const SkBitmap& bm, SkScalar left, SkScalar top, | 788 void SkGPipeCanvas::drawBitmap(const SkBitmap& bm, SkScalar left, SkScalar top, |
782 const SkPaint* paint) { | 789 const SkPaint* paint) { |
783 NOTIFY_SETUP(this); | 790 NOTIFY_SETUP(this); |
784 size_t opBytesNeeded = sizeof(SkScalar) * 2; | 791 size_t opBytesNeeded = sizeof(SkScalar) * 2; |
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1250 return fCanvas->shuttleBitmap(bitmap, slot); | 1257 return fCanvas->shuttleBitmap(bitmap, slot); |
1251 } | 1258 } |
1252 | 1259 |
1253 void BitmapShuttle::removeCanvas() { | 1260 void BitmapShuttle::removeCanvas() { |
1254 if (NULL == fCanvas) { | 1261 if (NULL == fCanvas) { |
1255 return; | 1262 return; |
1256 } | 1263 } |
1257 fCanvas->unref(); | 1264 fCanvas->unref(); |
1258 fCanvas = NULL; | 1265 fCanvas = NULL; |
1259 } | 1266 } |
OLD | NEW |