| 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 | 9 |
| 10 #include "SkBitmapHeap.h" | 10 #include "SkBitmapHeap.h" |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 } | 125 } |
| 126 | 126 |
| 127 void addBitmap(int index) { | 127 void addBitmap(int index) { |
| 128 SkBitmap* bm; | 128 SkBitmap* bm; |
| 129 if(fBitmaps.count() == index) { | 129 if(fBitmaps.count() == index) { |
| 130 bm = SkNEW(SkBitmap); | 130 bm = SkNEW(SkBitmap); |
| 131 *fBitmaps.append() = bm; | 131 *fBitmaps.append() = bm; |
| 132 } else { | 132 } else { |
| 133 bm = fBitmaps[index]; | 133 bm = fBitmaps[index]; |
| 134 } | 134 } |
| 135 bm->unflatten(*fReader); | 135 // When adding bitmaps, never use the bitmap storage. Bitmaps will alway
s |
| 136 // be either unflattened or decoded. Since bitmap storage takes priority
in |
| 137 // readBitmap, remove the bitmap storage and set it back afterwards. |
| 138 SkBitmapHeapReader* storage = fReader->getBitmapStorage(); |
| 139 // The storage must be either this or the fSharedHeap, depending on fFla
gs. |
| 140 SkASSERT((shouldFlattenBitmaps(fFlags) && this == storage) |
| 141 || (!shouldFlattenBitmaps(fFlags) && fSharedHeap == storage &&
storage != NULL)); |
| 142 fReader->setBitmapStorage(NULL); |
| 143 fReader->readBitmap(bm); |
| 144 fReader->setBitmapStorage(storage); |
| 136 } | 145 } |
| 137 | 146 |
| 138 /** | 147 /** |
| 139 * Override of SkBitmapHeapReader, so that SkOrderedReadBuffer can use | 148 * Override of SkBitmapHeapReader, so that SkOrderedReadBuffer can use |
| 140 * these SkBitmaps for bitmap shaders. | 149 * these SkBitmaps for bitmap shaders. |
| 141 */ | 150 */ |
| 142 virtual SkBitmap* getBitmap(int32_t index) const SK_OVERRIDE { | 151 virtual SkBitmap* getBitmap(int32_t index) const SK_OVERRIDE { |
| 143 return fBitmaps[index]; | 152 return fBitmaps[index]; |
| 144 } | 153 } |
| 145 | 154 |
| (...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 765 SkSafeUnref(fSharedHeap); | 774 SkSafeUnref(fSharedHeap); |
| 766 } | 775 } |
| 767 | 776 |
| 768 /////////////////////////////////////////////////////////////////////////////// | 777 /////////////////////////////////////////////////////////////////////////////// |
| 769 | 778 |
| 770 #include "SkGPipe.h" | 779 #include "SkGPipe.h" |
| 771 | 780 |
| 772 SkGPipeReader::SkGPipeReader() { | 781 SkGPipeReader::SkGPipeReader() { |
| 773 fCanvas = NULL; | 782 fCanvas = NULL; |
| 774 fState = NULL; | 783 fState = NULL; |
| 784 fProc = NULL; |
| 775 } | 785 } |
| 776 | 786 |
| 777 SkGPipeReader::SkGPipeReader(SkCanvas* target) { | 787 SkGPipeReader::SkGPipeReader(SkCanvas* target) { |
| 778 fCanvas = NULL; | 788 fCanvas = NULL; |
| 779 this->setCanvas(target); | 789 this->setCanvas(target); |
| 780 fState = NULL; | 790 fState = NULL; |
| 791 fProc = NULL; |
| 781 } | 792 } |
| 782 | 793 |
| 783 void SkGPipeReader::setCanvas(SkCanvas *target) { | 794 void SkGPipeReader::setCanvas(SkCanvas *target) { |
| 784 SkRefCnt_SafeAssign(fCanvas, target); | 795 SkRefCnt_SafeAssign(fCanvas, target); |
| 785 } | 796 } |
| 786 | 797 |
| 787 SkGPipeReader::~SkGPipeReader() { | 798 SkGPipeReader::~SkGPipeReader() { |
| 788 SkSafeUnref(fCanvas); | 799 SkSafeUnref(fCanvas); |
| 789 delete fState; | 800 delete fState; |
| 790 } | 801 } |
| 791 | 802 |
| 792 SkGPipeReader::Status SkGPipeReader::playback(const void* data, size_t length, | 803 SkGPipeReader::Status SkGPipeReader::playback(const void* data, size_t length, |
| 793 uint32_t playbackFlags, size_t* by
tesRead) { | 804 uint32_t playbackFlags, size_t* by
tesRead) { |
| 794 if (NULL == fCanvas) { | 805 if (NULL == fCanvas) { |
| 795 return kError_Status; | 806 return kError_Status; |
| 796 } | 807 } |
| 797 | 808 |
| 798 if (NULL == fState) { | 809 if (NULL == fState) { |
| 799 fState = new SkGPipeState; | 810 fState = new SkGPipeState; |
| 800 } | 811 } |
| 801 | 812 |
| 802 fState->setSilent(playbackFlags & kSilent_PlaybackFlag); | 813 fState->setSilent(playbackFlags & kSilent_PlaybackFlag); |
| 803 | 814 |
| 804 SkASSERT(SK_ARRAY_COUNT(gReadTable) == (kDone_DrawOp + 1)); | 815 SkASSERT(SK_ARRAY_COUNT(gReadTable) == (kDone_DrawOp + 1)); |
| 805 | 816 |
| 806 const ReadProc* table = gReadTable; | 817 const ReadProc* table = gReadTable; |
| 807 SkOrderedReadBuffer reader(data, length); | 818 SkOrderedReadBuffer reader(data, length); |
| 819 reader.setBitmapDecoder(fProc); |
| 808 SkCanvas* canvas = fCanvas; | 820 SkCanvas* canvas = fCanvas; |
| 809 Status status = kEOF_Status; | 821 Status status = kEOF_Status; |
| 810 | 822 |
| 811 fState->setReader(&reader); | 823 fState->setReader(&reader); |
| 812 while (!reader.eof()) { | 824 while (!reader.eof()) { |
| 813 uint32_t op32 = reader.readUInt(); | 825 uint32_t op32 = reader.readUInt(); |
| 814 unsigned op = DrawOp_unpackOp(op32); | 826 unsigned op = DrawOp_unpackOp(op32); |
| 815 // SkDEBUGCODE(DrawOps drawOp = (DrawOps)op;) | 827 // SkDEBUGCODE(DrawOps drawOp = (DrawOps)op;) |
| 816 | 828 |
| 817 if (op >= SK_ARRAY_COUNT(gReadTable)) { | 829 if (op >= SK_ARRAY_COUNT(gReadTable)) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 833 status = kReadAtom_Status; | 845 status = kReadAtom_Status; |
| 834 break; | 846 break; |
| 835 } | 847 } |
| 836 } | 848 } |
| 837 | 849 |
| 838 if (bytesRead) { | 850 if (bytesRead) { |
| 839 *bytesRead = reader.offset(); | 851 *bytesRead = reader.offset(); |
| 840 } | 852 } |
| 841 return status; | 853 return status; |
| 842 } | 854 } |
| OLD | NEW |