SkMallocPixelRef.cpp revision ff0da4ff483ba7b4468b862949ffb3de505cba14
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 "SkFlattenable.h" 11 12SkMallocPixelRef::SkMallocPixelRef(void* storage, size_t size, 13 SkColorTable* ctable) { 14 if (NULL == storage) { 15 storage = sk_malloc_throw(size); 16 } 17 fStorage = storage; 18 fSize = size; 19 fCTable = ctable; 20 SkSafeRef(ctable); 21 22 this->setPreLocked(fStorage, fCTable); 23} 24 25SkMallocPixelRef::~SkMallocPixelRef() { 26 SkSafeUnref(fCTable); 27 sk_free(fStorage); 28} 29 30void* SkMallocPixelRef::onLockPixels(SkColorTable** ct) { 31 *ct = fCTable; 32 return fStorage; 33} 34 35void SkMallocPixelRef::onUnlockPixels() { 36 // nothing to do 37} 38 39void SkMallocPixelRef::flatten(SkFlattenableWriteBuffer& buffer) const { 40 this->INHERITED::flatten(buffer); 41 42 buffer.write32(fSize); 43 buffer.writePad(fStorage, fSize); 44 if (fCTable) { 45 buffer.writeBool(true); 46 fCTable->flatten(buffer); 47 } else { 48 buffer.writeBool(false); 49 } 50} 51 52SkMallocPixelRef::SkMallocPixelRef(SkFlattenableReadBuffer& buffer) 53 : INHERITED(buffer, NULL) { 54 fSize = buffer.readU32(); 55 fStorage = sk_malloc_throw(fSize); 56 buffer.read(fStorage, fSize); 57 if (buffer.readBool()) { 58 fCTable = SkNEW_ARGS(SkColorTable, (buffer)); 59 } else { 60 fCTable = NULL; 61 } 62 63 this->setPreLocked(fStorage, fCTable); 64} 65 66SK_DEFINE_FLATTENABLE_REGISTRAR(SkMallocPixelRef) 67