1 2/* 3 * Copyright 2012 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#include "SkFlattenableBuffers.h" 9#include "SkPaint.h" 10#include "SkTypeface.h" 11 12#include "SkColorFilter.h" 13#include "SkDrawLooper.h" 14#include "SkImageFilter.h" 15#include "SkMaskFilter.h" 16#include "SkPathEffect.h" 17#include "SkPixelRef.h" 18#include "SkRasterizer.h" 19#include "SkShader.h" 20#include "SkUnitMapper.h" 21#include "SkXfermode.h" 22 23SkFlattenableReadBuffer::SkFlattenableReadBuffer() { 24 // Set default values. These should be explicitly set by our client 25 // via setFlags() if the buffer came from serialization. 26 fFlags = 0; 27#ifdef SK_SCALAR_IS_FLOAT 28 fFlags |= kScalarIsFloat_Flag; 29#endif 30 if (8 == sizeof(void*)) { 31 fFlags |= kPtrIs64Bit_Flag; 32 } 33} 34 35SkFlattenableReadBuffer::~SkFlattenableReadBuffer() { } 36 37void* SkFlattenableReadBuffer::readFunctionPtr() { 38 void* proc; 39 SkASSERT(sizeof(void*) == this->getArrayCount()); 40 this->readByteArray(&proc, sizeof(void*)); 41 return proc; 42} 43 44void SkFlattenableReadBuffer::readPaint(SkPaint* paint) { 45 paint->unflatten(*this); 46} 47 48template <typename T> T* SkFlattenableReadBuffer::readFlattenableT() { 49 return static_cast<T*>(this->readFlattenable(T::GetFlattenableType())); 50} 51 52SkColorFilter* SkFlattenableReadBuffer::readColorFilter() { 53 return this->readFlattenableT<SkColorFilter>(); 54} 55 56SkDrawLooper* SkFlattenableReadBuffer::readDrawLooper() { 57 return this->readFlattenableT<SkDrawLooper>(); 58} 59 60SkImageFilter* SkFlattenableReadBuffer::readImageFilter() { 61 return this->readFlattenableT<SkImageFilter>(); 62} 63 64SkMaskFilter* SkFlattenableReadBuffer::readMaskFilter() { 65 return this->readFlattenableT<SkMaskFilter>(); 66} 67 68SkPathEffect* SkFlattenableReadBuffer::readPathEffect() { 69 return this->readFlattenableT<SkPathEffect>(); 70} 71 72SkPixelRef* SkFlattenableReadBuffer::readPixelRef() { 73 return this->readFlattenableT<SkPixelRef>(); 74} 75 76SkRasterizer* SkFlattenableReadBuffer::readRasterizer() { 77 return this->readFlattenableT<SkRasterizer>(); 78} 79 80SkShader* SkFlattenableReadBuffer::readShader() { 81 return this->readFlattenableT<SkShader>(); 82} 83 84SkUnitMapper* SkFlattenableReadBuffer::readUnitMapper() { 85 return this->readFlattenableT<SkUnitMapper>(); 86} 87 88SkXfermode* SkFlattenableReadBuffer::readXfermode() { 89 return this->readFlattenableT<SkXfermode>(); 90} 91 92bool SkFlattenableReadBuffer::validate(bool isValid) { 93 return true; 94} 95 96/////////////////////////////////////////////////////////////////////////////// 97 98SkFlattenableWriteBuffer::SkFlattenableWriteBuffer() { 99 fFlags = (Flags)0; 100} 101 102SkFlattenableWriteBuffer::~SkFlattenableWriteBuffer() { } 103 104void SkFlattenableWriteBuffer::writeFunctionPtr(void* ptr) { 105 void* ptrStorage[] = { ptr }; 106 this->writeByteArray(ptrStorage, sizeof(void*)); 107} 108 109void SkFlattenableWriteBuffer::writePaint(const SkPaint& paint) { 110 paint.flatten(*this); 111} 112 113void SkFlattenableWriteBuffer::flattenObject(const SkFlattenable* obj, 114 SkFlattenableWriteBuffer& buffer) { 115 obj->flatten(buffer); 116} 117