OLD | NEW |
(Empty) | |
| 1 |
| 2 /* |
| 3 * Copyright 2011 Google Inc. |
| 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. |
| 7 */ |
| 8 |
| 9 #ifndef SkWriteBuffer_DEFINED |
| 10 #define SkWriteBuffer_DEFINED |
| 11 |
| 12 #include "SkBitmapHeap.h" |
| 13 #include "SkData.h" |
| 14 #include "SkPath.h" |
| 15 #include "SkPicture.h" |
| 16 #include "SkRefCnt.h" |
| 17 #include "SkWriter32.h" |
| 18 |
| 19 class SkBitmap; |
| 20 class SkFactorySet; |
| 21 class SkFlattenable; |
| 22 class SkNamedFactorySet; |
| 23 class SkRefCntSet; |
| 24 |
| 25 class SkWriteBuffer { |
| 26 public: |
| 27 SkWriteBuffer(); |
| 28 SkWriteBuffer(void* initialStorage, size_t storageSize); |
| 29 ~SkWriteBuffer(); |
| 30 |
| 31 enum Flags { |
| 32 kCrossProcess_Flag = 1 << 0, |
| 33 kValidation_Flag = 1 << 1, |
| 34 }; |
| 35 void setFlags(uint32_t flags) { fFlags = flags; } |
| 36 uint32_t getFlags() const { return fFlags; } |
| 37 |
| 38 bool isValidating() const { return SkToBool(fFlags & kValidation_Flag); } |
| 39 bool isCrossProcess() const { |
| 40 return this->isValidating() || SkToBool(fFlags & kCrossProcess_Flag); |
| 41 } |
| 42 |
| 43 SkWriter32* getWriter32() { return &fWriter; } |
| 44 void reset(void* storage = NULL, size_t storageSize = 0) { |
| 45 fWriter.reset(storage, storageSize); |
| 46 } |
| 47 |
| 48 uint32_t* reserve(size_t size) { return fWriter.reserve(size); } |
| 49 |
| 50 size_t bytesWritten() const { return fWriter.bytesWritten(); } |
| 51 |
| 52 void writeByteArray(const void* data, size_t size); |
| 53 void writeDataAsByteArray(SkData* data) { this->writeByteArray(data->data(),
data->size()); } |
| 54 void writeBool(bool value); |
| 55 void writeFixed(SkFixed value); |
| 56 void writeScalar(SkScalar value); |
| 57 void writeScalarArray(const SkScalar* value, uint32_t count); |
| 58 void writeInt(int32_t value); |
| 59 void writeIntArray(const int32_t* value, uint32_t count); |
| 60 void writeUInt(uint32_t value); |
| 61 void write32(int32_t value); |
| 62 void writeString(const char* value); |
| 63 void writeEncodedString(const void* value, size_t byteLength, SkPaint::TextE
ncoding encoding); |
| 64 void writeFunctionPtr(void* ptr) { this->writeByteArray(&ptr, sizeof(ptr));
} |
| 65 |
| 66 void writeFlattenable(const SkFlattenable* flattenable); |
| 67 void writeColor(const SkColor& color); |
| 68 void writeColorArray(const SkColor* color, uint32_t count); |
| 69 void writePoint(const SkPoint& point); |
| 70 void writePointArray(const SkPoint* point, uint32_t count); |
| 71 void writeMatrix(const SkMatrix& matrix); |
| 72 void writeIRect(const SkIRect& rect); |
| 73 void writeRect(const SkRect& rect); |
| 74 void writeRegion(const SkRegion& region); |
| 75 void writePath(const SkPath& path); |
| 76 size_t writeStream(SkStream* stream, size_t length); |
| 77 void writeBitmap(const SkBitmap& bitmap); |
| 78 void writeTypeface(SkTypeface* typeface); |
| 79 void writePaint(const SkPaint& paint) { paint.flatten(*this); } |
| 80 |
| 81 bool writeToStream(SkWStream*); |
| 82 void writeToMemory(void* dst) { fWriter.flatten(dst); } |
| 83 |
| 84 SkFactorySet* setFactoryRecorder(SkFactorySet*); |
| 85 SkNamedFactorySet* setNamedFactoryRecorder(SkNamedFactorySet*); |
| 86 |
| 87 SkRefCntSet* getTypefaceRecorder() const { return fTFSet; } |
| 88 SkRefCntSet* setTypefaceRecorder(SkRefCntSet*); |
| 89 |
| 90 /** |
| 91 * Set an SkBitmapHeap to store bitmaps rather than flattening. |
| 92 * |
| 93 * Incompatible with an EncodeBitmap function. If an EncodeBitmap function i
s set, setting an |
| 94 * SkBitmapHeap will set the function to NULL in release mode and crash in d
ebug. |
| 95 */ |
| 96 void setBitmapHeap(SkBitmapHeap*); |
| 97 |
| 98 /** |
| 99 * Provide a function to encode an SkBitmap to an SkData. writeBitmap will a
ttempt to use |
| 100 * bitmapEncoder to store the SkBitmap. If the reader does not provide a fun
ction to decode, it |
| 101 * will not be able to restore SkBitmaps, but will still be able to read the
rest of the stream. |
| 102 * bitmapEncoder will never be called with a NULL pixelRefOffset. |
| 103 * |
| 104 * Incompatible with the SkBitmapHeap. If an encoder is set fBitmapHeap will
be set to NULL in |
| 105 * release and crash in debug. |
| 106 */ |
| 107 void setBitmapEncoder(SkPicture::EncodeBitmap bitmapEncoder); |
| 108 |
| 109 private: |
| 110 uint32_t fFlags; |
| 111 SkFactorySet* fFactorySet; |
| 112 SkNamedFactorySet* fNamedFactorySet; |
| 113 SkWriter32 fWriter; |
| 114 |
| 115 SkBitmapHeap* fBitmapHeap; |
| 116 SkRefCntSet* fTFSet; |
| 117 |
| 118 SkPicture::EncodeBitmap fBitmapEncoder; |
| 119 }; |
| 120 |
| 121 #endif // SkWriteBuffer_DEFINED |
OLD | NEW |