blob: fc38529ef7909d4ff726b5561e56e4344767640a [file] [log] [blame]
djsollen@google.comc73dd5c2012-08-07 15:54:32 +00001
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
commit-bot@chromium.orgc0b7e102013-10-23 17:06:21 +000012#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
robertphillips@google.com24ddde92013-09-16 14:04:05 +000023SkFlattenableReadBuffer::SkFlattenableReadBuffer() {
djsollen@google.comc73dd5c2012-08-07 15:54:32 +000024 // Set default values. These should be explicitly set by our client
25 // via setFlags() if the buffer came from serialization.
26 fFlags = 0;
reed@google.com8f4d2302013-12-17 16:44:46 +000027 // TODO: remove this flag, since we're always floats (now)
djsollen@google.comc73dd5c2012-08-07 15:54:32 +000028 fFlags |= kScalarIsFloat_Flag;
djsollen@google.comc73dd5c2012-08-07 15:54:32 +000029 if (8 == sizeof(void*)) {
30 fFlags |= kPtrIs64Bit_Flag;
31 }
32}
33
34SkFlattenableReadBuffer::~SkFlattenableReadBuffer() { }
35
36void* SkFlattenableReadBuffer::readFunctionPtr() {
37 void* proc;
38 SkASSERT(sizeof(void*) == this->getArrayCount());
commit-bot@chromium.org02512882013-10-31 18:37:50 +000039 this->readByteArray(&proc, sizeof(void*));
djsollen@google.comc73dd5c2012-08-07 15:54:32 +000040 return proc;
41}
42
43void SkFlattenableReadBuffer::readPaint(SkPaint* paint) {
44 paint->unflatten(*this);
45}
46
commit-bot@chromium.orgc0b7e102013-10-23 17:06:21 +000047template <typename T> T* SkFlattenableReadBuffer::readFlattenableT() {
48 return static_cast<T*>(this->readFlattenable(T::GetFlattenableType()));
49}
50
51SkColorFilter* SkFlattenableReadBuffer::readColorFilter() {
52 return this->readFlattenableT<SkColorFilter>();
53}
54
55SkDrawLooper* SkFlattenableReadBuffer::readDrawLooper() {
56 return this->readFlattenableT<SkDrawLooper>();
57}
58
59SkImageFilter* SkFlattenableReadBuffer::readImageFilter() {
60 return this->readFlattenableT<SkImageFilter>();
61}
62
63SkMaskFilter* SkFlattenableReadBuffer::readMaskFilter() {
64 return this->readFlattenableT<SkMaskFilter>();
65}
66
67SkPathEffect* SkFlattenableReadBuffer::readPathEffect() {
68 return this->readFlattenableT<SkPathEffect>();
69}
70
71SkPixelRef* SkFlattenableReadBuffer::readPixelRef() {
72 return this->readFlattenableT<SkPixelRef>();
73}
74
75SkRasterizer* SkFlattenableReadBuffer::readRasterizer() {
76 return this->readFlattenableT<SkRasterizer>();
77}
78
79SkShader* SkFlattenableReadBuffer::readShader() {
80 return this->readFlattenableT<SkShader>();
81}
82
83SkUnitMapper* SkFlattenableReadBuffer::readUnitMapper() {
84 return this->readFlattenableT<SkUnitMapper>();
85}
86
87SkXfermode* SkFlattenableReadBuffer::readXfermode() {
88 return this->readFlattenableT<SkXfermode>();
89}
90
commit-bot@chromium.org8f457e32013-11-08 19:22:57 +000091bool SkFlattenableReadBuffer::validate(bool isValid) {
92 return true;
93}
94
djsollen@google.comc73dd5c2012-08-07 15:54:32 +000095///////////////////////////////////////////////////////////////////////////////
96
97SkFlattenableWriteBuffer::SkFlattenableWriteBuffer() {
98 fFlags = (Flags)0;
99}
100
101SkFlattenableWriteBuffer::~SkFlattenableWriteBuffer() { }
102
103void SkFlattenableWriteBuffer::writeFunctionPtr(void* ptr) {
104 void* ptrStorage[] = { ptr };
105 this->writeByteArray(ptrStorage, sizeof(void*));
106}
107
108void SkFlattenableWriteBuffer::writePaint(const SkPaint& paint) {
109 paint.flatten(*this);
110}
111
robertphillips@google.comc2eae472013-10-21 12:26:10 +0000112void SkFlattenableWriteBuffer::flattenObject(const SkFlattenable* obj,
113 SkFlattenableWriteBuffer& buffer) {
djsollen@google.comc73dd5c2012-08-07 15:54:32 +0000114 obj->flatten(buffer);
115}