| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 #include "SkPictureFlat.h" | 8 #include "SkPictureFlat.h" |
| 9 | 9 |
| 10 #include "SkChecksum.h" | 10 #include "SkChecksum.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 | 83 |
| 84 void SkFlatController::setTypefacePlayback(SkTypefacePlayback* playback) { | 84 void SkFlatController::setTypefacePlayback(SkTypefacePlayback* playback) { |
| 85 fTypefacePlayback = playback; | 85 fTypefacePlayback = playback; |
| 86 } | 86 } |
| 87 | 87 |
| 88 SkNamedFactorySet* SkFlatController::setNamedFactorySet(SkNamedFactorySet* set)
{ | 88 SkNamedFactorySet* SkFlatController::setNamedFactorySet(SkNamedFactorySet* set)
{ |
| 89 SkRefCnt_SafeAssign(fFactorySet, set); | 89 SkRefCnt_SafeAssign(fFactorySet, set); |
| 90 return set; | 90 return set; |
| 91 } | 91 } |
| 92 | 92 |
| 93 /////////////////////////////////////////////////////////////////////////////// | |
| 94 | |
| 95 SkFlatData* SkFlatData::Create(SkFlatController* controller, | |
| 96 const void* obj, | |
| 97 int index, | |
| 98 void (*flattenProc)(SkOrderedWriteBuffer&, const
void*)) { | |
| 99 // a buffer of 256 bytes should be sufficient for most paints, regions, | |
| 100 // and matrices. | |
| 101 intptr_t storage[256]; | |
| 102 SkOrderedWriteBuffer buffer(256, storage, sizeof(storage)); | |
| 103 | |
| 104 buffer.setBitmapHeap(controller->getBitmapHeap()); | |
| 105 buffer.setTypefaceRecorder(controller->getTypefaceSet()); | |
| 106 buffer.setNamedFactoryRecorder(controller->getNamedFactorySet()); | |
| 107 buffer.setFlags(controller->getWriteBufferFlags()); | |
| 108 | |
| 109 flattenProc(buffer, obj); | |
| 110 uint32_t size = buffer.size(); | |
| 111 SkASSERT(SkIsAlign4(size)); | |
| 112 | |
| 113 // Allocate enough memory to hold SkFlatData struct and the flat data itself
. | |
| 114 size_t allocSize = sizeof(SkFlatData) + size; | |
| 115 SkFlatData* result = (SkFlatData*) controller->allocThrow(allocSize); | |
| 116 | |
| 117 // Put the serialized contents into the data section of the new allocation. | |
| 118 buffer.writeToMemory(result->data()); | |
| 119 // Stamp the index, size and checksum in the header. | |
| 120 result->stampHeader(index, size); | |
| 121 return result; | |
| 122 } | |
| 123 | |
| 124 void SkFlatData::unflatten(void* result, | |
| 125 void (*unflattenProc)(SkOrderedReadBuffer&, void*), | |
| 126 SkBitmapHeap* bitmapHeap, | |
| 127 SkTypefacePlayback* facePlayback) const { | |
| 128 | |
| 129 SkOrderedReadBuffer buffer(this->data(), fFlatSize); | |
| 130 | |
| 131 if (bitmapHeap) { | |
| 132 buffer.setBitmapStorage(bitmapHeap); | |
| 133 } | |
| 134 if (facePlayback) { | |
| 135 facePlayback->setupBuffer(buffer); | |
| 136 } | |
| 137 | |
| 138 unflattenProc(buffer, result); | |
| 139 SkASSERT(fFlatSize == (int32_t)buffer.offset()); | |
| 140 } | |
| OLD | NEW |