Chromium Code Reviews| 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" |
| 11 #include "SkCanvas.h" | 11 #include "SkCanvas.h" |
| 12 #include "SkPaint.h" | 12 #include "SkPaint.h" |
| 13 #include "SkGPipe.h" | 13 #include "SkGPipe.h" |
| 14 #include "SkGPipePriv.h" | 14 #include "SkGPipePriv.h" |
| 15 #include "SkReader32.h" | 15 #include "SkReader32.h" |
| 16 #include "SkStream.h" | 16 #include "SkStream.h" |
| 17 | 17 |
| 18 #include "SkAnnotation.h" | 18 #include "SkAnnotation.h" |
| 19 #include "SkColorFilter.h" | 19 #include "SkColorFilter.h" |
| 20 #include "SkDrawLooper.h" | 20 #include "SkDrawLooper.h" |
| 21 #include "SkImageFilter.h" | 21 #include "SkImageFilter.h" |
| 22 #include "SkMaskFilter.h" | 22 #include "SkMaskFilter.h" |
| 23 #include "SkOrderedReadBuffer.h" | 23 #include "SkReadBuffer.h" |
| 24 #include "SkPathEffect.h" | 24 #include "SkPathEffect.h" |
| 25 #include "SkRasterizer.h" | 25 #include "SkRasterizer.h" |
| 26 #include "SkRRect.h" | 26 #include "SkRRect.h" |
| 27 #include "SkShader.h" | 27 #include "SkShader.h" |
| 28 #include "SkTypeface.h" | 28 #include "SkTypeface.h" |
| 29 #include "SkXfermode.h" | 29 #include "SkXfermode.h" |
| 30 | 30 |
| 31 static SkFlattenable::Type paintflat_to_flattype(PaintFlats pf) { | 31 static SkFlattenable::Type paintflat_to_flattype(PaintFlats pf) { |
| 32 static const uint8_t gEffectTypesInPaintFlatsOrder[] = { | 32 static const uint8_t gEffectTypesInPaintFlatsOrder[] = { |
| 33 SkFlattenable::kSkColorFilter_Type, | 33 SkFlattenable::kSkColorFilter_Type, |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 98 if (fFlags != flags) { | 98 if (fFlags != flags) { |
| 99 fFlags = flags; | 99 fFlags = flags; |
| 100 this->updateReader(); | 100 this->updateReader(); |
| 101 } | 101 } |
| 102 } | 102 } |
| 103 | 103 |
| 104 unsigned getFlags() const { | 104 unsigned getFlags() const { |
| 105 return fFlags; | 105 return fFlags; |
| 106 } | 106 } |
| 107 | 107 |
| 108 void setReader(SkOrderedReadBuffer* reader) { | 108 void setReader(SkReadBuffer* reader) { |
| 109 fReader = reader; | 109 fReader = reader; |
| 110 this->updateReader(); | 110 this->updateReader(); |
| 111 } | 111 } |
| 112 | 112 |
| 113 const SkPaint& paint() const { return fPaint; } | 113 const SkPaint& paint() const { return fPaint; } |
| 114 SkPaint* editPaint() { return &fPaint; } | 114 SkPaint* editPaint() { return &fPaint; } |
| 115 | 115 |
| 116 SkFlattenable* getFlat(unsigned index) const { | 116 SkFlattenable* getFlat(unsigned index) const { |
| 117 if (0 == index) { | 117 if (0 == index) { |
| 118 return NULL; | 118 return NULL; |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 149 if(fBitmaps.count() == index) { | 149 if(fBitmaps.count() == index) { |
| 150 bm = SkNEW(SkBitmap); | 150 bm = SkNEW(SkBitmap); |
| 151 *fBitmaps.append() = bm; | 151 *fBitmaps.append() = bm; |
| 152 } else { | 152 } else { |
| 153 bm = fBitmaps[index]; | 153 bm = fBitmaps[index]; |
| 154 } | 154 } |
| 155 fReader->readBitmap(bm); | 155 fReader->readBitmap(bm); |
| 156 } | 156 } |
| 157 | 157 |
| 158 /** | 158 /** |
| 159 * Override of SkBitmapHeapReader, so that SkOrderedReadBuffer can use | 159 * Override of SkBitmapHeapReader, so that SkReadBuffer can use |
| 160 * these SkBitmaps for bitmap shaders. Used only in cross process mode | 160 * these SkBitmaps for bitmap shaders. Used only in cross process mode |
| 161 * without a shared heap. | 161 * without a shared heap. |
| 162 */ | 162 */ |
| 163 virtual SkBitmap* getBitmap(int32_t index) const SK_OVERRIDE { | 163 virtual SkBitmap* getBitmap(int32_t index) const SK_OVERRIDE { |
| 164 SkASSERT(shouldFlattenBitmaps(fFlags)); | 164 SkASSERT(shouldFlattenBitmaps(fFlags)); |
| 165 return fBitmaps[index]; | 165 return fBitmaps[index]; |
| 166 } | 166 } |
| 167 | 167 |
| 168 /** | 168 /** |
| 169 * Needed to be a non-abstract subclass of SkBitmapHeapReader. | 169 * Needed to be a non-abstract subclass of SkBitmapHeapReader. |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 196 paint->setTypeface(id ? fTypefaces[id - 1] : NULL); | 196 paint->setTypeface(id ? fTypefaces[id - 1] : NULL); |
| 197 } | 197 } |
| 198 | 198 |
| 199 private: | 199 private: |
| 200 void updateReader() { | 200 void updateReader() { |
| 201 if (NULL == fReader) { | 201 if (NULL == fReader) { |
| 202 return; | 202 return; |
| 203 } | 203 } |
| 204 bool crossProcess = SkToBool(fFlags & SkGPipeWriter::kCrossProcess_Flag) ; | 204 bool crossProcess = SkToBool(fFlags & SkGPipeWriter::kCrossProcess_Flag) ; |
| 205 fReader->setFlags(SkSetClearMask(fReader->getFlags(), crossProcess, | 205 fReader->setFlags(SkSetClearMask(fReader->getFlags(), crossProcess, |
| 206 SkFlattenableReadBuffer::kCrossProcess_ Flag)); | 206 SkReadBuffer::kCrossProcess_Flag)); |
| 207 if (crossProcess) { | 207 if (crossProcess) { |
| 208 fReader->setFactoryArray(&fFactoryArray); | 208 fReader->setFactoryArray(&fFactoryArray); |
| 209 } else { | 209 } else { |
| 210 fReader->setFactoryArray(NULL); | 210 fReader->setFactoryArray(NULL); |
| 211 } | 211 } |
| 212 | 212 |
| 213 if (shouldFlattenBitmaps(fFlags)) { | 213 if (shouldFlattenBitmaps(fFlags)) { |
| 214 fReader->setBitmapStorage(this); | 214 fReader->setBitmapStorage(this); |
| 215 } else { | 215 } else { |
| 216 fReader->setBitmapStorage(fSharedHeap); | 216 fReader->setBitmapStorage(fSharedHeap); |
| 217 } | 217 } |
| 218 } | 218 } |
| 219 SkOrderedReadBuffer* fReader; | 219 SkReadBuffer* fReader; |
|
scroggo
2014/01/29 20:07:21
nit: fReader no longer lines up with other members
mtklein
2014/01/29 20:38:29
Done.
| |
| 220 SkPaint fPaint; | 220 SkPaint fPaint; |
| 221 SkTDArray<SkFlattenable*> fFlatArray; | 221 SkTDArray<SkFlattenable*> fFlatArray; |
| 222 SkTDArray<SkTypeface*> fTypefaces; | 222 SkTDArray<SkTypeface*> fTypefaces; |
| 223 SkTDArray<SkFlattenable::Factory> fFactoryArray; | 223 SkTDArray<SkFlattenable::Factory> fFactoryArray; |
| 224 SkTDArray<SkBitmap*> fBitmaps; | 224 SkTDArray<SkBitmap*> fBitmaps; |
| 225 bool fSilent; | 225 bool fSilent; |
| 226 // Only used when sharing bitmaps with the writer. | 226 // Only used when sharing bitmaps with the writer. |
| 227 SkBitmapHeap* fSharedHeap; | 227 SkBitmapHeap* fSharedHeap; |
| 228 unsigned fFlags; | 228 unsigned fFlags; |
| 229 }; | 229 }; |
| (...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 689 SkPaint* p = state->editPaint(); | 689 SkPaint* p = state->editPaint(); |
| 690 p->setTypeface(static_cast<SkTypeface*>(reader->readPtr())); | 690 p->setTypeface(static_cast<SkTypeface*>(reader->readPtr())); |
| 691 } | 691 } |
| 692 | 692 |
| 693 static void annotation_rp(SkCanvas*, SkReader32* reader, uint32_t op32, | 693 static void annotation_rp(SkCanvas*, SkReader32* reader, uint32_t op32, |
| 694 SkGPipeState* state) { | 694 SkGPipeState* state) { |
| 695 SkPaint* p = state->editPaint(); | 695 SkPaint* p = state->editPaint(); |
| 696 | 696 |
| 697 const size_t size = DrawOp_unpackData(op32); | 697 const size_t size = DrawOp_unpackData(op32); |
| 698 if (size > 0) { | 698 if (size > 0) { |
| 699 SkOrderedReadBuffer buffer(reader->skip(size), size); | 699 SkReadBuffer buffer(reader->skip(size), size); |
| 700 p->setAnnotation(SkNEW_ARGS(SkAnnotation, (buffer)))->unref(); | 700 p->setAnnotation(SkNEW_ARGS(SkAnnotation, (buffer)))->unref(); |
| 701 SkASSERT(buffer.offset() == size); | 701 SkASSERT(buffer.offset() == size); |
| 702 } else { | 702 } else { |
| 703 p->setAnnotation(NULL); | 703 p->setAnnotation(NULL); |
| 704 } | 704 } |
| 705 } | 705 } |
| 706 | 706 |
| 707 /////////////////////////////////////////////////////////////////////////////// | 707 /////////////////////////////////////////////////////////////////////////////// |
| 708 | 708 |
| 709 static void def_Typeface_rp(SkCanvas*, SkReader32*, uint32_t, SkGPipeState* stat e) { | 709 static void def_Typeface_rp(SkCanvas*, SkReader32*, uint32_t, SkGPipeState* stat e) { |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 850 | 850 |
| 851 if (NULL == fState) { | 851 if (NULL == fState) { |
| 852 fState = new SkGPipeState; | 852 fState = new SkGPipeState; |
| 853 } | 853 } |
| 854 | 854 |
| 855 fState->setSilent(playbackFlags & kSilent_PlaybackFlag); | 855 fState->setSilent(playbackFlags & kSilent_PlaybackFlag); |
| 856 | 856 |
| 857 SkASSERT(SK_ARRAY_COUNT(gReadTable) == (kDone_DrawOp + 1)); | 857 SkASSERT(SK_ARRAY_COUNT(gReadTable) == (kDone_DrawOp + 1)); |
| 858 | 858 |
| 859 const ReadProc* table = gReadTable; | 859 const ReadProc* table = gReadTable; |
| 860 SkOrderedReadBuffer reader(data, length); | 860 SkReadBuffer reader(data, length); |
| 861 reader.setBitmapDecoder(fProc); | 861 reader.setBitmapDecoder(fProc); |
| 862 SkCanvas* canvas = fCanvas; | 862 SkCanvas* canvas = fCanvas; |
| 863 Status status = kEOF_Status; | 863 Status status = kEOF_Status; |
| 864 | 864 |
| 865 fState->setReader(&reader); | 865 fState->setReader(&reader); |
| 866 while (!reader.eof()) { | 866 while (!reader.eof()) { |
| 867 uint32_t op32 = reader.readUInt(); | 867 uint32_t op32 = reader.readUInt(); |
| 868 unsigned op = DrawOp_unpackOp(op32); | 868 unsigned op = DrawOp_unpackOp(op32); |
| 869 // SkDEBUGCODE(DrawOps drawOp = (DrawOps)op;) | 869 // SkDEBUGCODE(DrawOps drawOp = (DrawOps)op;) |
| 870 | 870 |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 887 status = kReadAtom_Status; | 887 status = kReadAtom_Status; |
| 888 break; | 888 break; |
| 889 } | 889 } |
| 890 } | 890 } |
| 891 | 891 |
| 892 if (bytesRead) { | 892 if (bytesRead) { |
| 893 *bytesRead = reader.offset(); | 893 *bytesRead = reader.offset(); |
| 894 } | 894 } |
| 895 return status; | 895 return status; |
| 896 } | 896 } |
| OLD | NEW |