SkMallocPixelRef.cpp revision 82065d667f64e232bcde2ad849756a6096fcbe6f
149099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com#include "SkMallocPixelRef.h" 249099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com#include "SkBitmap.h" 349099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com#include "SkFlattenable.h" 449099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com 549099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.comSkMallocPixelRef::SkMallocPixelRef(void* storage, size_t size, 649099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com SkColorTable* ctable) { 749099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com if (NULL == storage) { 849099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com storage = sk_malloc_throw(size); 949099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com } 1049099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com fStorage = storage; 1149099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com fSize = size; 1249099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com fCTable = ctable; 1382065d667f64e232bcde2ad849756a6096fcbe6freed@google.com SkSafeRef(ctable); 1449099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com} 1549099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com 1649099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.comSkMallocPixelRef::~SkMallocPixelRef() { 1749099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com SkSafeUnref(fCTable); 1849099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com sk_free(fStorage); 1949099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com} 2049099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com 2149099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.comvoid* SkMallocPixelRef::onLockPixels(SkColorTable** ct) { 2249099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com *ct = fCTable; 2349099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com return fStorage; 2449099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com} 2549099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com 2649099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.comvoid SkMallocPixelRef::onUnlockPixels() { 2749099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com // nothing to do 2849099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com} 2949099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com 3049099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.comvoid SkMallocPixelRef::flatten(SkFlattenableWriteBuffer& buffer) const { 3149099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com this->INHERITED::flatten(buffer); 3249099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com 3349099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com buffer.write32(fSize); 3449099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com buffer.writePad(fStorage, fSize); 3549099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com if (fCTable) { 3649099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com buffer.writeBool(true); 3749099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com fCTable->flatten(buffer); 3849099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com } else { 3949099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com buffer.writeBool(false); 4049099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com } 4149099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com} 4249099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com 4382065d667f64e232bcde2ad849756a6096fcbe6freed@google.comSkMallocPixelRef::SkMallocPixelRef(SkFlattenableReadBuffer& buffer) 4482065d667f64e232bcde2ad849756a6096fcbe6freed@google.com : INHERITED(buffer, NULL) { 4549099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com fSize = buffer.readU32(); 4649099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com fStorage = sk_malloc_throw(fSize); 4749099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com buffer.read(fStorage, fSize); 4849099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com if (buffer.readBool()) { 4949099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com fCTable = SkNEW_ARGS(SkColorTable, (buffer)); 5049099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com } else { 5149099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com fCTable = NULL; 5249099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com } 5349099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com} 5449099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com 5549099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.comstatic SkPixelRef::Registrar reg("SkMallocPixelRef", 5649099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com SkMallocPixelRef::Create); 5749099b25367d1b9ef45ccaa7fe370facea6b89bfreed@android.com 58