epoger@google.com | ec3ed6a | 2011-07-28 14:26:00 +0000 | [diff] [blame] | 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 | */ |
reed@android.com | 49099b2 | 2010-09-09 16:07:53 +0000 | [diff] [blame] | 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; |
reed@google.com | 82065d6 | 2011-02-07 15:30:46 +0000 | [diff] [blame] | 20 | SkSafeRef(ctable); |
reed@android.com | 49099b2 | 2010-09-09 16:07:53 +0000 | [diff] [blame] | 21 | } |
| 22 | |
| 23 | SkMallocPixelRef::~SkMallocPixelRef() { |
| 24 | SkSafeUnref(fCTable); |
| 25 | sk_free(fStorage); |
| 26 | } |
| 27 | |
| 28 | void* SkMallocPixelRef::onLockPixels(SkColorTable** ct) { |
| 29 | *ct = fCTable; |
| 30 | return fStorage; |
| 31 | } |
| 32 | |
| 33 | void SkMallocPixelRef::onUnlockPixels() { |
| 34 | // nothing to do |
| 35 | } |
| 36 | |
djsollen@google.com | 5370cd9 | 2012-03-28 20:47:01 +0000 | [diff] [blame] | 37 | void SkMallocPixelRef::flatten(SkFlattenableWriteBuffer& buffer) { |
reed@android.com | 49099b2 | 2010-09-09 16:07:53 +0000 | [diff] [blame] | 38 | this->INHERITED::flatten(buffer); |
| 39 | |
| 40 | buffer.write32(fSize); |
| 41 | buffer.writePad(fStorage, fSize); |
| 42 | if (fCTable) { |
| 43 | buffer.writeBool(true); |
| 44 | fCTable->flatten(buffer); |
| 45 | } else { |
| 46 | buffer.writeBool(false); |
| 47 | } |
| 48 | } |
| 49 | |
reed@google.com | 82065d6 | 2011-02-07 15:30:46 +0000 | [diff] [blame] | 50 | SkMallocPixelRef::SkMallocPixelRef(SkFlattenableReadBuffer& buffer) |
| 51 | : INHERITED(buffer, NULL) { |
reed@android.com | 49099b2 | 2010-09-09 16:07:53 +0000 | [diff] [blame] | 52 | fSize = buffer.readU32(); |
| 53 | fStorage = sk_malloc_throw(fSize); |
| 54 | buffer.read(fStorage, fSize); |
| 55 | if (buffer.readBool()) { |
| 56 | fCTable = SkNEW_ARGS(SkColorTable, (buffer)); |
| 57 | } else { |
| 58 | fCTable = NULL; |
| 59 | } |
| 60 | } |
| 61 | |
djsollen@google.com | 5370cd9 | 2012-03-28 20:47:01 +0000 | [diff] [blame] | 62 | SK_DEFINE_FLATTENABLE_REGISTRAR(SkMallocPixelRef) |