/*
* Copyright 2012 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "SkFlattenableBuffers.h"
#include "SkPaint.h"
#include "SkTypeface.h"
#include "SkColorFilter.h"
#include "SkDrawLooper.h"
#include "SkImageFilter.h"
#include "SkMaskFilter.h"
#include "SkPathEffect.h"
#include "SkPixelRef.h"
#include "SkRasterizer.h"
#include "SkShader.h"
#include "SkUnitMapper.h"
#include "SkXfermode.h"
SkFlattenableReadBuffer::SkFlattenableReadBuffer() {
// Set default values. These should be explicitly set by our client
// via setFlags() if the buffer came from serialization.
fFlags = 0;
#ifdef SK_SCALAR_IS_FLOAT
fFlags |= kScalarIsFloat_Flag;
#endif
if (8 == sizeof(void*)) {
fFlags |= kPtrIs64Bit_Flag;
}
}
SkFlattenableReadBuffer::~SkFlattenableReadBuffer() { }
void* SkFlattenableReadBuffer::readFunctionPtr() {
void* proc;
SkASSERT(sizeof(void*) == this->getArrayCount());
this->readByteArray(&proc, sizeof(void*));
return proc;
}
void SkFlattenableReadBuffer::readPaint(SkPaint* paint) {
paint->unflatten(*this);
}
template <typename T> T* SkFlattenableReadBuffer::readFlattenableT() {
return static_cast<T*>(this->readFlattenable(T::GetFlattenableType()));
}
SkColorFilter* SkFlattenableReadBuffer::readColorFilter() {
return this->readFlattenableT<SkColorFilter>();
}
SkDrawLooper* SkFlattenableReadBuffer::readDrawLooper() {
return this->readFlattenableT<SkDrawLooper>();
}
SkImageFilter* SkFlattenableReadBuffer::readImageFilter() {
return this->readFlattenableT<SkImageFilter>();
}
SkMaskFilter* SkFlattenableReadBuffer::readMaskFilter() {
return this->readFlattenableT<SkMaskFilter>();
}
SkPathEffect* SkFlattenableReadBuffer::readPathEffect() {
return this->readFlattenableT<SkPathEffect>();
}
SkPixelRef* SkFlattenableReadBuffer::readPixelRef() {
return this->readFlattenableT<SkPixelRef>();
}
SkRasterizer* SkFlattenableReadBuffer::readRasterizer() {
return this->readFlattenableT<SkRasterizer>();
}
SkShader* SkFlattenableReadBuffer::readShader() {
return this->readFlattenableT<SkShader>();
}
SkUnitMapper* SkFlattenableReadBuffer::readUnitMapper() {
return this->readFlattenableT<SkUnitMapper>();
}
SkXfermode* SkFlattenableReadBuffer::readXfermode() {
return this->readFlattenableT<SkXfermode>();
}
bool SkFlattenableReadBuffer::validate(bool isValid) {
return true;
}
///////////////////////////////////////////////////////////////////////////////
SkFlattenableWriteBuffer::SkFlattenableWriteBuffer() {
fFlags = (Flags)0;
}
SkFlattenableWriteBuffer::~SkFlattenableWriteBuffer() { }
void SkFlattenableWriteBuffer::writeFunctionPtr(void* ptr) {
void* ptrStorage[] = { ptr };
this->writeByteArray(ptrStorage, sizeof(void*));
}
void SkFlattenableWriteBuffer::writePaint(const SkPaint& paint) {
paint.flatten(*this);
}
void SkFlattenableWriteBuffer::flattenObject(const SkFlattenable* obj,
SkFlattenableWriteBuffer& buffer) {
obj->flatten(buffer);
}