21830d9009
Refactor Picture and Pipe bitmap storage into common data structure Update SkFlattenable buffers to be more modular. This CL is an effort to stage the conversion to named parameters for all SkFlattenable commands. This particular stage only does the following two things... 1. Move flattenable buffers from SkFlattenable.h into their own header. 2. Update and Add new read write methods for better clarity and convenience. BUG= Review URL: https://codereview.appspot.com/6445079 git-svn-id: http://skia.googlecode.com/svn/trunk@4994 2bbb7eff-a529-9590-31e7-b0007b416f81
116 lines
3.7 KiB
C++
116 lines
3.7 KiB
C++
|
|
/*
|
|
* 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 SkOrderedReadBuffer_DEFINED
|
|
#define SkOrderedReadBuffer_DEFINED
|
|
|
|
#include "SkRefCnt.h"
|
|
#include "SkBitmap.h"
|
|
#include "SkBitmapHeap.h"
|
|
#include "SkFlattenableBuffers.h"
|
|
#include "SkReader32.h"
|
|
#include "SkPath.h"
|
|
|
|
class SkOrderedReadBuffer : public SkFlattenableReadBuffer {
|
|
public:
|
|
SkOrderedReadBuffer();
|
|
SkOrderedReadBuffer(const void* data, size_t size);
|
|
SkOrderedReadBuffer(SkStream* stream);
|
|
virtual ~SkOrderedReadBuffer();
|
|
|
|
virtual SkOrderedReadBuffer* getOrderedBinaryBuffer() SK_OVERRIDE { return this; }
|
|
|
|
SkReader32* getReader32() { return &fReader; }
|
|
|
|
uint32_t size() { return fReader.size(); }
|
|
uint32_t offset() { return fReader.offset(); }
|
|
bool eof() { return fReader.eof(); }
|
|
const void* skip(size_t size) { return fReader.skip(size); }
|
|
|
|
// primitives
|
|
virtual bool readBool() SK_OVERRIDE;
|
|
virtual SkColor readColor() SK_OVERRIDE;
|
|
virtual SkFixed readFixed() SK_OVERRIDE;
|
|
virtual int32_t readInt() SK_OVERRIDE;
|
|
virtual SkScalar readScalar() SK_OVERRIDE;
|
|
virtual uint32_t readUInt() SK_OVERRIDE;
|
|
virtual int32_t read32() SK_OVERRIDE;
|
|
|
|
// strings -- the caller is responsible for freeing the string contents
|
|
virtual char* readString() SK_OVERRIDE;
|
|
virtual void* readEncodedString(size_t* length, SkPaint::TextEncoding encoding) SK_OVERRIDE;
|
|
|
|
// common data structures
|
|
virtual SkFlattenable* readFlattenable() SK_OVERRIDE;
|
|
virtual void readPoint(SkPoint* point) SK_OVERRIDE;
|
|
virtual void readMatrix(SkMatrix* matrix) SK_OVERRIDE;
|
|
virtual void readIRect(SkIRect* rect) SK_OVERRIDE;
|
|
virtual void readRect(SkRect* rect) SK_OVERRIDE;
|
|
virtual void readRegion(SkRegion* region) SK_OVERRIDE;
|
|
virtual void readPath(SkPath* path) SK_OVERRIDE;
|
|
|
|
// binary data and arrays
|
|
virtual uint32_t readByteArray(void* value) SK_OVERRIDE;
|
|
virtual uint32_t readColorArray(SkColor* colors) SK_OVERRIDE;
|
|
virtual uint32_t readIntArray(int32_t* values) SK_OVERRIDE;
|
|
virtual uint32_t readPointArray(SkPoint* points) SK_OVERRIDE;
|
|
virtual uint32_t readScalarArray(SkScalar* values) SK_OVERRIDE;
|
|
|
|
// helpers to get info about arrays and binary data
|
|
virtual uint32_t getArrayCount() SK_OVERRIDE;
|
|
|
|
virtual void readBitmap(SkBitmap* bitmap) SK_OVERRIDE;
|
|
virtual SkTypeface* readTypeface() SK_OVERRIDE;
|
|
|
|
void setBitmapStorage(SkBitmapHeapReader* bitmapStorage) {
|
|
SkRefCnt_SafeAssign(fBitmapStorage, bitmapStorage);
|
|
}
|
|
|
|
void setTypefaceArray(SkTypeface* array[], int count) {
|
|
fTFArray = array;
|
|
fTFCount = count;
|
|
}
|
|
|
|
/**
|
|
* Call this with a pre-loaded array of Factories, in the same order as
|
|
* were created/written by the writer. SkPicture uses this.
|
|
*/
|
|
void setFactoryPlayback(SkFlattenable::Factory array[], int count) {
|
|
fFactoryTDArray = NULL;
|
|
fFactoryArray = array;
|
|
fFactoryCount = count;
|
|
}
|
|
|
|
/**
|
|
* Call this with an initially empty array, so the reader can cache each
|
|
* factory it sees by name. Used by the pipe code in conjunction with
|
|
* the writer's kInlineFactoryNames_Flag.
|
|
*/
|
|
void setFactoryArray(SkTDArray<SkFlattenable::Factory>* array) {
|
|
fFactoryTDArray = array;
|
|
fFactoryArray = NULL;
|
|
fFactoryCount = 0;
|
|
}
|
|
|
|
private:
|
|
SkReader32 fReader;
|
|
void* fMemoryPtr;
|
|
|
|
SkBitmapHeapReader* fBitmapStorage;
|
|
SkTypeface** fTFArray;
|
|
int fTFCount;
|
|
|
|
SkTDArray<SkFlattenable::Factory>* fFactoryTDArray;
|
|
SkFlattenable::Factory* fFactoryArray;
|
|
int fFactoryCount;
|
|
|
|
typedef SkFlattenableReadBuffer INHERITED;
|
|
};
|
|
|
|
#endif // SkOrderedReadBuffer_DEFINED
|