SkMallocPixelRef.cpp revision 0daa1adb03b4b1fc11d854cb7754416ac05a31e8
1 2/* 3 * Copyright 2011 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 "SkMallocPixelRef.h" 9#include "SkBitmap.h" 10#include "SkFlattenableBuffers.h" 11 12SkMallocPixelRef::SkMallocPixelRef(void* storage, size_t size, 13 SkColorTable* ctable, bool ownPixels) { 14 if (NULL == storage) { 15 SkASSERT(ownPixels); 16 storage = sk_malloc_throw(size); 17 } 18 fStorage = storage; 19 fSize = size; 20 fCTable = ctable; 21 SkSafeRef(ctable); 22 fOwnPixels = ownPixels; 23 24 this->setPreLocked(fStorage, fCTable); 25} 26 27SkMallocPixelRef::~SkMallocPixelRef() { 28 SkSafeUnref(fCTable); 29 if (fOwnPixels) { 30 sk_free(fStorage); 31 } 32} 33 34void* SkMallocPixelRef::onLockPixels(SkColorTable** ct) { 35 *ct = fCTable; 36 return fStorage; 37} 38 39void SkMallocPixelRef::onUnlockPixels() { 40 // nothing to do 41} 42 43void SkMallocPixelRef::flatten(SkFlattenableWriteBuffer& buffer) const { 44 this->INHERITED::flatten(buffer); 45 46 buffer.writeByteArray(fStorage, fSize); 47 buffer.writeBool(fCTable != NULL); 48 if (fCTable) { 49 fCTable->writeToBuffer(buffer); 50 } 51} 52 53SkMallocPixelRef::SkMallocPixelRef(SkFlattenableReadBuffer& buffer) 54 : INHERITED(buffer, NULL) { 55 fSize = buffer.getArrayCount(); 56 fStorage = sk_malloc_throw(fSize); 57 buffer.readByteArray(fStorage, fSize); 58 if (buffer.readBool()) { 59 fCTable = SkNEW_ARGS(SkColorTable, (buffer)); 60 } else { 61 fCTable = NULL; 62 } 63 fOwnPixels = true; 64 65 this->setPreLocked(fStorage, fCTable); 66} 67