Index: include/core/SkWriteBuffer.h |
diff --git a/include/core/SkWriteBuffer.h b/include/core/SkWriteBuffer.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ab56f9d48d9ac02c4513525492324d4439d4ac35 |
--- /dev/null |
+++ b/include/core/SkWriteBuffer.h |
@@ -0,0 +1,121 @@ |
+ |
+/* |
+ * Copyright 2011 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#ifndef SkWriteBuffer_DEFINED |
+#define SkWriteBuffer_DEFINED |
+ |
+#include "SkBitmapHeap.h" |
+#include "SkData.h" |
+#include "SkPath.h" |
+#include "SkPicture.h" |
+#include "SkRefCnt.h" |
+#include "SkWriter32.h" |
+ |
+class SkBitmap; |
+class SkFactorySet; |
+class SkFlattenable; |
+class SkNamedFactorySet; |
+class SkRefCntSet; |
+ |
+class SkWriteBuffer { |
+public: |
+ SkWriteBuffer(); |
+ SkWriteBuffer(void* initialStorage, size_t storageSize); |
+ ~SkWriteBuffer(); |
+ |
+ enum Flags { |
+ kCrossProcess_Flag = 1 << 0, |
+ kValidation_Flag = 1 << 1, |
+ }; |
+ void setFlags(uint32_t flags) { fFlags = flags; } |
+ uint32_t getFlags() const { return fFlags; } |
+ |
+ bool isValidating() const { return SkToBool(fFlags & kValidation_Flag); } |
+ bool isCrossProcess() const { |
+ return this->isValidating() || SkToBool(fFlags & kCrossProcess_Flag); |
+ } |
+ |
+ SkWriter32* getWriter32() { return &fWriter; } |
+ void reset(void* storage = NULL, size_t storageSize = 0) { |
+ fWriter.reset(storage, storageSize); |
+ } |
+ |
+ uint32_t* reserve(size_t size) { return fWriter.reserve(size); } |
+ |
+ size_t bytesWritten() const { return fWriter.bytesWritten(); } |
+ |
+ void writeByteArray(const void* data, size_t size); |
+ void writeDataAsByteArray(SkData* data) { this->writeByteArray(data->data(), data->size()); } |
+ void writeBool(bool value); |
+ void writeFixed(SkFixed value); |
+ void writeScalar(SkScalar value); |
+ void writeScalarArray(const SkScalar* value, uint32_t count); |
+ void writeInt(int32_t value); |
+ void writeIntArray(const int32_t* value, uint32_t count); |
+ void writeUInt(uint32_t value); |
+ void write32(int32_t value); |
+ void writeString(const char* value); |
+ void writeEncodedString(const void* value, size_t byteLength, SkPaint::TextEncoding encoding); |
+ void writeFunctionPtr(void* ptr) { this->writeByteArray(&ptr, sizeof(ptr)); } |
+ |
+ void writeFlattenable(const SkFlattenable* flattenable); |
+ void writeColor(const SkColor& color); |
+ void writeColorArray(const SkColor* color, uint32_t count); |
+ void writePoint(const SkPoint& point); |
+ void writePointArray(const SkPoint* point, uint32_t count); |
+ void writeMatrix(const SkMatrix& matrix); |
+ void writeIRect(const SkIRect& rect); |
+ void writeRect(const SkRect& rect); |
+ void writeRegion(const SkRegion& region); |
+ void writePath(const SkPath& path); |
+ size_t writeStream(SkStream* stream, size_t length); |
+ void writeBitmap(const SkBitmap& bitmap); |
+ void writeTypeface(SkTypeface* typeface); |
+ void writePaint(const SkPaint& paint) { paint.flatten(*this); } |
+ |
+ bool writeToStream(SkWStream*); |
+ void writeToMemory(void* dst) { fWriter.flatten(dst); } |
+ |
+ SkFactorySet* setFactoryRecorder(SkFactorySet*); |
+ SkNamedFactorySet* setNamedFactoryRecorder(SkNamedFactorySet*); |
+ |
+ SkRefCntSet* getTypefaceRecorder() const { return fTFSet; } |
+ SkRefCntSet* setTypefaceRecorder(SkRefCntSet*); |
+ |
+ /** |
+ * Set an SkBitmapHeap to store bitmaps rather than flattening. |
+ * |
+ * Incompatible with an EncodeBitmap function. If an EncodeBitmap function is set, setting an |
+ * SkBitmapHeap will set the function to NULL in release mode and crash in debug. |
+ */ |
+ void setBitmapHeap(SkBitmapHeap*); |
+ |
+ /** |
+ * Provide a function to encode an SkBitmap to an SkData. writeBitmap will attempt to use |
+ * bitmapEncoder to store the SkBitmap. If the reader does not provide a function to decode, it |
+ * will not be able to restore SkBitmaps, but will still be able to read the rest of the stream. |
+ * bitmapEncoder will never be called with a NULL pixelRefOffset. |
+ * |
+ * Incompatible with the SkBitmapHeap. If an encoder is set fBitmapHeap will be set to NULL in |
+ * release and crash in debug. |
+ */ |
+ void setBitmapEncoder(SkPicture::EncodeBitmap bitmapEncoder); |
+ |
+private: |
+ uint32_t fFlags; |
+ SkFactorySet* fFactorySet; |
+ SkNamedFactorySet* fNamedFactorySet; |
+ SkWriter32 fWriter; |
+ |
+ SkBitmapHeap* fBitmapHeap; |
+ SkRefCntSet* fTFSet; |
+ |
+ SkPicture::EncodeBitmap fBitmapEncoder; |
+}; |
+ |
+#endif // SkWriteBuffer_DEFINED |