blob: 1cf64a1db023585463dff0e87fc4e33502da1d57 [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
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.com49099b22010-09-09 16:07:53 +00008#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;
reed@google.com82065d62011-02-07 15:30:46 +000020 SkSafeRef(ctable);
reed@android.com49099b22010-09-09 16:07:53 +000021}
22
23SkMallocPixelRef::~SkMallocPixelRef() {
24 SkSafeUnref(fCTable);
25 sk_free(fStorage);
26}
27
28void* SkMallocPixelRef::onLockPixels(SkColorTable** ct) {
29 *ct = fCTable;
30 return fStorage;
31}
32
33void SkMallocPixelRef::onUnlockPixels() {
34 // nothing to do
35}
36
djsollen@google.com5370cd92012-03-28 20:47:01 +000037void SkMallocPixelRef::flatten(SkFlattenableWriteBuffer& buffer) {
reed@android.com49099b22010-09-09 16:07:53 +000038 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.com82065d62011-02-07 15:30:46 +000050SkMallocPixelRef::SkMallocPixelRef(SkFlattenableReadBuffer& buffer)
51 : INHERITED(buffer, NULL) {
reed@android.com49099b22010-09-09 16:07:53 +000052 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.com5370cd92012-03-28 20:47:01 +000062SK_DEFINE_FLATTENABLE_REGISTRAR(SkMallocPixelRef)