blob: f229e9de34d0fa8dbdd29304dd0ac0f7a78e5611 [file] [log] [blame]
reed@google.com398337b2013-12-11 21:22:39 +00001
epoger@google.comec3ed6a2011-07-28 14:26:00 +00002/*
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"
djsollen@google.comc73dd5c2012-08-07 15:54:32 +000010#include "SkFlattenableBuffers.h"
reed@android.com49099b22010-09-09 16:07:53 +000011
reed@google.com398337b2013-12-11 21:22:39 +000012SkMallocPixelRef::SkMallocPixelRef(void* storage, size_t size,
13 SkColorTable* ctable, bool ownPixels) {
14 if (NULL == storage) {
15 SkASSERT(ownPixels);
16 storage = sk_malloc_throw(size);
reed@android.com49099b22010-09-09 16:07:53 +000017 }
reed@google.coma0d183d2013-12-11 21:15:58 +000018 fStorage = storage;
reed@google.com398337b2013-12-11 21:22:39 +000019 fSize = size;
reed@google.coma0d183d2013-12-11 21:15:58 +000020 fCTable = ctable;
reed@google.coma0d183d2013-12-11 21:15:58 +000021 SkSafeRef(ctable);
reed@google.com398337b2013-12-11 21:22:39 +000022 fOwnPixels = ownPixels;
23
24 this->setPreLocked(fStorage, fCTable);
reed@android.com49099b22010-09-09 16:07:53 +000025}
26
27SkMallocPixelRef::~SkMallocPixelRef() {
28 SkSafeUnref(fCTable);
djsollen@google.comc84b8332012-07-27 13:41:44 +000029 if (fOwnPixels) {
30 sk_free(fStorage);
31 }
reed@android.com49099b22010-09-09 16:07:53 +000032}
33
reed@google.com398337b2013-12-11 21:22:39 +000034void* SkMallocPixelRef::onLockPixels(SkColorTable** ct) {
35 *ct = fCTable;
36 return fStorage;
reed@android.com49099b22010-09-09 16:07:53 +000037}
38
39void SkMallocPixelRef::onUnlockPixels() {
40 // nothing to do
41}
42
djsollen@google.com54924242012-03-29 15:18:04 +000043void SkMallocPixelRef::flatten(SkFlattenableWriteBuffer& buffer) const {
reed@android.com49099b22010-09-09 16:07:53 +000044 this->INHERITED::flatten(buffer);
45
reed@google.com398337b2013-12-11 21:22:39 +000046 buffer.writeByteArray(fStorage, fSize);
djsollen@google.comc73dd5c2012-08-07 15:54:32 +000047 buffer.writeBool(fCTable != NULL);
reed@android.com49099b22010-09-09 16:07:53 +000048 if (fCTable) {
commit-bot@chromium.orge0e1da32013-10-15 20:36:16 +000049 fCTable->writeToBuffer(buffer);
reed@android.com49099b22010-09-09 16:07:53 +000050 }
51}
52
reed@google.com82065d62011-02-07 15:30:46 +000053SkMallocPixelRef::SkMallocPixelRef(SkFlattenableReadBuffer& buffer)
reed@google.com398337b2013-12-11 21:22:39 +000054 : INHERITED(buffer, NULL) {
55 fSize = buffer.getArrayCount();
56 fStorage = sk_malloc_throw(fSize);
57 buffer.readByteArray(fStorage, fSize);
reed@android.com49099b22010-09-09 16:07:53 +000058 if (buffer.readBool()) {
commit-bot@chromium.orge0e1da32013-10-15 20:36:16 +000059 fCTable = SkNEW_ARGS(SkColorTable, (buffer));
reed@android.com49099b22010-09-09 16:07:53 +000060 } else {
61 fCTable = NULL;
62 }
reed@google.com398337b2013-12-11 21:22:39 +000063 fOwnPixels = true;
reed@google.comff0da4f2012-05-17 13:14:52 +000064
reed@google.com398337b2013-12-11 21:22:39 +000065 this->setPreLocked(fStorage, fCTable);
reed@android.com49099b22010-09-09 16:07:53 +000066}