9 #ifndef SkWriteBuffer_DEFINED
10 #define SkWriteBuffer_DEFINED
15 #include "SkPicture.h"
16 #include "SkPixelSerializer.h"
18 #include "SkWriter32.h"
19 #include "../private/SkTHash.h"
32 virtual bool isCrossProcess()
const = 0;
34 virtual void writeByteArray(
const void* data,
size_t size) = 0;
35 void writeDataAsByteArray(
SkData* data) {
36 this->writeByteArray(data->
data(), data->
size());
38 virtual void writeBool(
bool value) = 0;
39 virtual void writeScalar(SkScalar value) = 0;
40 virtual void writeScalarArray(
const SkScalar* value, uint32_t count) = 0;
41 virtual void writeInt(int32_t value) = 0;
42 virtual void writeIntArray(
const int32_t* value, uint32_t count) = 0;
43 virtual void writeUInt(uint32_t value) = 0;
44 void write32(int32_t value) {
45 this->writeInt(value);
47 virtual void writeString(
const char* value) = 0;
49 virtual void writeFlattenable(
const SkFlattenable* flattenable) = 0;
50 virtual void writeColor(
SkColor color) = 0;
51 virtual void writeColorArray(
const SkColor* color, uint32_t count) = 0;
52 virtual void writeColor4f(
const SkColor4f& color) = 0;
53 virtual void writeColor4fArray(
const SkColor4f* color, uint32_t count) = 0;
54 virtual void writePoint(
const SkPoint& point) = 0;
55 virtual void writePointArray(
const SkPoint* point, uint32_t count) = 0;
56 virtual void writeMatrix(
const SkMatrix& matrix) = 0;
57 virtual void writeIRect(
const SkIRect& rect) = 0;
58 virtual void writeRect(
const SkRect& rect) = 0;
59 virtual void writeRegion(
const SkRegion& region) = 0;
60 virtual void writePath(
const SkPath& path) = 0;
61 virtual size_t writeStream(
SkStream* stream,
size_t length) = 0;
62 virtual void writeBitmap(
const SkBitmap& bitmap) = 0;
63 virtual void writeImage(
const SkImage*) = 0;
64 virtual void writeTypeface(
SkTypeface* typeface) = 0;
65 virtual void writePaint(
const SkPaint& paint) = 0;
67 void setDeduper(SkDeduper* deduper) { fDeduper = deduper; }
70 SkDeduper* fDeduper =
nullptr;
79 kCrossProcess_Flag = 1 << 0,
86 bool isCrossProcess()
const override {
87 return SkToBool(fFlags & kCrossProcess_Flag);
90 void write(
const void* buffer,
size_t bytes) {
91 fWriter.write(buffer, bytes);
94 void reset(
void* storage = NULL,
size_t storageSize = 0) {
95 fWriter.reset(storage, storageSize);
98 size_t bytesWritten()
const {
return fWriter.bytesWritten(); }
100 void writeByteArray(
const void* data,
size_t size)
override;
101 void writeBool(
bool value)
override;
102 void writeScalar(SkScalar value)
override;
103 void writeScalarArray(
const SkScalar* value, uint32_t count)
override;
104 void writeInt(int32_t value)
override;
105 void writeIntArray(
const int32_t* value, uint32_t count)
override;
106 void writeUInt(uint32_t value)
override;
107 void writeString(
const char* value)
override;
109 void writeFlattenable(
const SkFlattenable* flattenable)
override;
110 void writeColor(
SkColor color)
override;
111 void writeColorArray(
const SkColor* color, uint32_t count)
override;
112 void writeColor4f(
const SkColor4f& color)
override;
113 void writeColor4fArray(
const SkColor4f* color, uint32_t count)
override;
114 void writePoint(
const SkPoint& point)
override;
115 void writePointArray(
const SkPoint* point, uint32_t count)
override;
116 void writeMatrix(
const SkMatrix& matrix)
override;
117 void writeIRect(
const SkIRect& rect)
override;
118 void writeRect(
const SkRect& rect)
override;
119 void writeRegion(
const SkRegion& region)
override;
120 void writePath(
const SkPath& path)
override;
121 size_t writeStream(
SkStream* stream,
size_t length)
override;
122 void writeBitmap(
const SkBitmap& bitmap)
override;
123 void writeImage(
const SkImage*)
override;
124 void writeTypeface(
SkTypeface* typeface)
override;
125 void writePaint(
const SkPaint& paint)
override;
128 void writeToMemory(
void* dst) { fWriter.flatten(dst); }
130 SkFactorySet* setFactoryRecorder(SkFactorySet*);
131 SkRefCntSet* setTypefaceRecorder(SkRefCntSet*);
143 const uint32_t fFlags;
144 SkFactorySet* fFactorySet;
152 SkTHashMap<SkString, uint32_t> fFlattenableDict;
155 #endif // SkWriteBuffer_DEFINED
The SkPath class encapsulates compound (multiple contour) geometric paths consisting of straight line...
Definition: SkPath.h:25
Definition: SkPoint.h:156
size_t size() const
Returns the number of bytes stored.
Definition: SkData.h:27
The SkMatrix class holds a 3x3 matrix for transforming coordinates.
Definition: SkMatrix.h:28
Definition: SkWriter32.h:26
The SkPaint class holds the style and color information about how to draw geometries, text and bitmaps.
Definition: SkPaint.h:45
Definition: SkColor.h:179
Concrete implementation that serializes to a flat binary blob.
Definition: SkWriteBuffer.h:76
SkData holds an immutable data buffer.
Definition: SkData.h:22
#define SkToBool(cond)
Returns 0 or 1 based on the condition.
Definition: SkTypes.h:227
SkFlattenable is the base class for objects that need to be flattened into a data stream for either t...
Definition: SkFlattenable.h:70
The SkTypeface class specifies the typeface and intrinsic style of a font.
Definition: SkTypeface.h:43
The SkBitmap class specifies a raster bitmap.
Definition: SkBitmap.h:37
The SkRegion class encapsulates the geometric region used to specify clipping areas for drawing...
Definition: SkRegion.h:30
Interface for serializing pixels, e.g.
Definition: SkPixelSerializer.h:19
uint32_t SkColor
32 bit ARGB color value, not premultiplied.
Definition: SkColor.h:28
SkStream – abstraction for a source of bytes.
Definition: SkStream.h:40
Definition: SkStream.h:182
Definition: SkWriteBuffer.h:27
const void * data() const
Returns the ptr to the data.
Definition: SkData.h:34
SkIRect holds four 32 bit integer coordinates for a rectangle.
Definition: SkRect.h:20
SkImage is an abstraction for drawing a rectagle of pixels, though the particular type of image could...
Definition: SkImage.h:48