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 12 SkMallocPixelRef::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 25 SkMallocPixelRef::~SkMallocPixelRef() { 26 SkSafeUnref(fCTable); 27 sk_free(fStorage); 28 } 29 30 void* SkMallocPixelRef::onLockPixels(SkColorTable** ct) { 31 *ct = fCTable; 32 return fStorage; 33 } 34 35 void SkMallocPixelRef::onUnlockPixels() { 36 // nothing to do 37 } 38 39 void 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 52 SkMallocPixelRef::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 66 SK_DEFINE_PIXEL_REF_REGISTRAR(SkMallocPixelRef) 67