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 fReader->readBitmap(bm); |
136 } | 136 } |
137 | 137 |
138 /** | 138 /** |
139 * Override of SkBitmapHeapReader, so that SkOrderedReadBuffer can use | 139 * Override of SkBitmapHeapReader, so that SkOrderedReadBuffer can use |
140 * these SkBitmaps for bitmap shaders. | 140 * these SkBitmaps for bitmap shaders. |
141 */ | 141 */ |
142 virtual SkBitmap* getBitmap(int32_t index) const SK_OVERRIDE { | 142 virtual SkBitmap* getBitmap(int32_t index) const SK_OVERRIDE { |
143 return fBitmaps[index]; | 143 return fBitmaps[index]; |
144 } | 144 } |
145 | 145 |
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
765 SkSafeUnref(fSharedHeap); | 765 SkSafeUnref(fSharedHeap); |
766 } | 766 } |
767 | 767 |
768 /////////////////////////////////////////////////////////////////////////////// | 768 /////////////////////////////////////////////////////////////////////////////// |
769 | 769 |
770 #include "SkGPipe.h" | 770 #include "SkGPipe.h" |
771 | 771 |
772 SkGPipeReader::SkGPipeReader() { | 772 SkGPipeReader::SkGPipeReader() { |
773 fCanvas = NULL; | 773 fCanvas = NULL; |
774 fState = NULL; | 774 fState = NULL; |
| 775 fProc = NULL; |
775 } | 776 } |
776 | 777 |
777 SkGPipeReader::SkGPipeReader(SkCanvas* target) { | 778 SkGPipeReader::SkGPipeReader(SkCanvas* target) { |
778 fCanvas = NULL; | 779 fCanvas = NULL; |
779 this->setCanvas(target); | 780 this->setCanvas(target); |
780 fState = NULL; | 781 fState = NULL; |
| 782 fProc = NULL; |
781 } | 783 } |
782 | 784 |
783 void SkGPipeReader::setCanvas(SkCanvas *target) { | 785 void SkGPipeReader::setCanvas(SkCanvas *target) { |
784 SkRefCnt_SafeAssign(fCanvas, target); | 786 SkRefCnt_SafeAssign(fCanvas, target); |
785 } | 787 } |
786 | 788 |
787 SkGPipeReader::~SkGPipeReader() { | 789 SkGPipeReader::~SkGPipeReader() { |
788 SkSafeUnref(fCanvas); | 790 SkSafeUnref(fCanvas); |
789 delete fState; | 791 delete fState; |
790 } | 792 } |
791 | 793 |
792 SkGPipeReader::Status SkGPipeReader::playback(const void* data, size_t length, | 794 SkGPipeReader::Status SkGPipeReader::playback(const void* data, size_t length, |
793 uint32_t playbackFlags, size_t* by
tesRead) { | 795 uint32_t playbackFlags, size_t* by
tesRead) { |
794 if (NULL == fCanvas) { | 796 if (NULL == fCanvas) { |
795 return kError_Status; | 797 return kError_Status; |
796 } | 798 } |
797 | 799 |
798 if (NULL == fState) { | 800 if (NULL == fState) { |
799 fState = new SkGPipeState; | 801 fState = new SkGPipeState; |
800 } | 802 } |
801 | 803 |
802 fState->setSilent(playbackFlags & kSilent_PlaybackFlag); | 804 fState->setSilent(playbackFlags & kSilent_PlaybackFlag); |
803 | 805 |
804 SkASSERT(SK_ARRAY_COUNT(gReadTable) == (kDone_DrawOp + 1)); | 806 SkASSERT(SK_ARRAY_COUNT(gReadTable) == (kDone_DrawOp + 1)); |
805 | 807 |
806 const ReadProc* table = gReadTable; | 808 const ReadProc* table = gReadTable; |
807 SkOrderedReadBuffer reader(data, length); | 809 SkOrderedReadBuffer reader(data, length); |
| 810 reader.setBitmapDecoder(fProc); |
808 SkCanvas* canvas = fCanvas; | 811 SkCanvas* canvas = fCanvas; |
809 Status status = kEOF_Status; | 812 Status status = kEOF_Status; |
810 | 813 |
811 fState->setReader(&reader); | 814 fState->setReader(&reader); |
812 while (!reader.eof()) { | 815 while (!reader.eof()) { |
813 uint32_t op32 = reader.readUInt(); | 816 uint32_t op32 = reader.readUInt(); |
814 unsigned op = DrawOp_unpackOp(op32); | 817 unsigned op = DrawOp_unpackOp(op32); |
815 // SkDEBUGCODE(DrawOps drawOp = (DrawOps)op;) | 818 // SkDEBUGCODE(DrawOps drawOp = (DrawOps)op;) |
816 | 819 |
817 if (op >= SK_ARRAY_COUNT(gReadTable)) { | 820 if (op >= SK_ARRAY_COUNT(gReadTable)) { |
(...skipping 15 matching lines...) Expand all Loading... |
833 status = kReadAtom_Status; | 836 status = kReadAtom_Status; |
834 break; | 837 break; |
835 } | 838 } |
836 } | 839 } |
837 | 840 |
838 if (bytesRead) { | 841 if (bytesRead) { |
839 *bytesRead = reader.offset(); | 842 *bytesRead = reader.offset(); |
840 } | 843 } |
841 return status; | 844 return status; |
842 } | 845 } |
OLD | NEW |