blob: 8462b7f89d1b5a8c66de7a697ec9b1e29d19c39f [file] [log] [blame]
djsollen@google.com2b2ede32012-04-12 13:24:04 +00001
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 SkOrderedReadBuffer_DEFINED
10#define SkOrderedReadBuffer_DEFINED
11
12#include "SkRefCnt.h"
13#include "SkBitmap.h"
djsollen@google.com21830d92012-08-07 19:49:41 +000014#include "SkBitmapHeap.h"
djsollen@google.comc73dd5c2012-08-07 15:54:32 +000015#include "SkFlattenableBuffers.h"
16#include "SkReader32.h"
djsollen@google.com2b2ede32012-04-12 13:24:04 +000017#include "SkPath.h"
18
19class SkOrderedReadBuffer : public SkFlattenableReadBuffer {
20public:
djsollen@google.com21830d92012-08-07 19:49:41 +000021 SkOrderedReadBuffer();
djsollen@google.com2b2ede32012-04-12 13:24:04 +000022 SkOrderedReadBuffer(const void* data, size_t size);
djsollen@google.comc73dd5c2012-08-07 15:54:32 +000023 SkOrderedReadBuffer(SkStream* stream);
24 virtual ~SkOrderedReadBuffer();
djsollen@google.com2b2ede32012-04-12 13:24:04 +000025
djsollen@google.comc73dd5c2012-08-07 15:54:32 +000026 virtual SkOrderedReadBuffer* getOrderedBinaryBuffer() SK_OVERRIDE { return this; }
djsollen@google.com2b2ede32012-04-12 13:24:04 +000027
28 SkReader32* getReader32() { return &fReader; }
29
djsollen@google.comc73dd5c2012-08-07 15:54:32 +000030 uint32_t size() { return fReader.size(); }
31 uint32_t offset() { return fReader.offset(); }
32 bool eof() { return fReader.eof(); }
33 const void* skip(size_t size) { return fReader.skip(size); }
djsollen@google.com2b2ede32012-04-12 13:24:04 +000034
djsollen@google.comc73dd5c2012-08-07 15:54:32 +000035 // primitives
36 virtual bool readBool() SK_OVERRIDE;
37 virtual SkColor readColor() SK_OVERRIDE;
38 virtual SkFixed readFixed() SK_OVERRIDE;
39 virtual int32_t readInt() SK_OVERRIDE;
40 virtual SkScalar readScalar() SK_OVERRIDE;
41 virtual uint32_t readUInt() SK_OVERRIDE;
42 virtual int32_t read32() SK_OVERRIDE;
djsollen@google.com94e75ee2012-06-08 18:30:46 +000043
djsollen@google.comc73dd5c2012-08-07 15:54:32 +000044 // strings -- the caller is responsible for freeing the string contents
45 virtual char* readString() SK_OVERRIDE;
46 virtual void* readEncodedString(size_t* length, SkPaint::TextEncoding encoding) SK_OVERRIDE;
47
48 // common data structures
49 virtual SkFlattenable* readFlattenable() SK_OVERRIDE;
50 virtual void readPoint(SkPoint* point) SK_OVERRIDE;
51 virtual void readMatrix(SkMatrix* matrix) SK_OVERRIDE;
52 virtual void readIRect(SkIRect* rect) SK_OVERRIDE;
53 virtual void readRect(SkRect* rect) SK_OVERRIDE;
54 virtual void readRegion(SkRegion* region) SK_OVERRIDE;
55 virtual void readPath(SkPath* path) SK_OVERRIDE;
56
57 // binary data and arrays
58 virtual uint32_t readByteArray(void* value) SK_OVERRIDE;
59 virtual uint32_t readColorArray(SkColor* colors) SK_OVERRIDE;
60 virtual uint32_t readIntArray(int32_t* values) SK_OVERRIDE;
61 virtual uint32_t readPointArray(SkPoint* points) SK_OVERRIDE;
62 virtual uint32_t readScalarArray(SkScalar* values) SK_OVERRIDE;
63
64 // helpers to get info about arrays and binary data
65 virtual uint32_t getArrayCount() SK_OVERRIDE;
66
djsollen@google.comc73dd5c2012-08-07 15:54:32 +000067 virtual void readBitmap(SkBitmap* bitmap) SK_OVERRIDE;
68 virtual SkTypeface* readTypeface() SK_OVERRIDE;
69
djsollen@google.com21830d92012-08-07 19:49:41 +000070 void setBitmapStorage(SkBitmapHeapReader* bitmapStorage) {
71 SkRefCnt_SafeAssign(fBitmapStorage, bitmapStorage);
djsollen@google.com2b2ede32012-04-12 13:24:04 +000072 }
73
djsollen@google.comc73dd5c2012-08-07 15:54:32 +000074 void setTypefaceArray(SkTypeface* array[], int count) {
75 fTFArray = array;
76 fTFCount = count;
77 }
78
79 /**
80 * Call this with a pre-loaded array of Factories, in the same order as
81 * were created/written by the writer. SkPicture uses this.
82 */
83 void setFactoryPlayback(SkFlattenable::Factory array[], int count) {
84 fFactoryTDArray = NULL;
85 fFactoryArray = array;
86 fFactoryCount = count;
87 }
88
89 /**
90 * Call this with an initially empty array, so the reader can cache each
91 * factory it sees by name. Used by the pipe code in conjunction with
92 * the writer's kInlineFactoryNames_Flag.
93 */
94 void setFactoryArray(SkTDArray<SkFlattenable::Factory>* array) {
95 fFactoryTDArray = array;
96 fFactoryArray = NULL;
97 fFactoryCount = 0;
98 }
djsollen@google.com2b2ede32012-04-12 13:24:04 +000099
100private:
101 SkReader32 fReader;
djsollen@google.comc73dd5c2012-08-07 15:54:32 +0000102 void* fMemoryPtr;
103
djsollen@google.com21830d92012-08-07 19:49:41 +0000104 SkBitmapHeapReader* fBitmapStorage;
djsollen@google.comc73dd5c2012-08-07 15:54:32 +0000105 SkTypeface** fTFArray;
106 int fTFCount;
107
108 SkTDArray<SkFlattenable::Factory>* fFactoryTDArray;
109 SkFlattenable::Factory* fFactoryArray;
110 int fFactoryCount;
djsollen@google.com2b2ede32012-04-12 13:24:04 +0000111
112 typedef SkFlattenableReadBuffer INHERITED;
113};
114
115#endif // SkOrderedReadBuffer_DEFINED