SkMallocPixelRef.h revision ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976e
1
2/*
3 * Copyright 2008 The Android Open Source Project
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
9
10#ifndef SkMallocPixelRef_DEFINED
11#define SkMallocPixelRef_DEFINED
12
13#include "SkPixelRef.h"
14
15/** We explicitly use the same allocator for our pixels that SkMask does,
16    so that we can freely assign memory allocated by one class to the other.
17*/
18class SkMallocPixelRef : public SkPixelRef {
19public:
20    /** Allocate the specified buffer for pixels. The memory is freed when the
21        last owner of this pixelref is gone. If addr is NULL, sk_malloc_throw()
22        is called to allocate it.
23     */
24    SkMallocPixelRef(void* addr, size_t size, SkColorTable* ctable);
25    virtual ~SkMallocPixelRef();
26
27    //! Return the allocation size for the pixels
28    size_t getSize() const { return fSize; }
29    void* getAddr() const { return fStorage; }
30
31    // overrides from SkPixelRef
32    virtual void flatten(SkFlattenableWriteBuffer&) const;
33    virtual Factory getFactory() const {
34        return Create;
35    }
36    static SkPixelRef* Create(SkFlattenableReadBuffer& buffer) {
37        return SkNEW_ARGS(SkMallocPixelRef, (buffer));
38    }
39
40protected:
41    // overrides from SkPixelRef
42    virtual void* onLockPixels(SkColorTable**);
43    virtual void onUnlockPixels();
44
45    SkMallocPixelRef(SkFlattenableReadBuffer& buffer);
46
47private:
48    void*           fStorage;
49    size_t          fSize;
50    SkColorTable*   fCTable;
51
52    typedef SkPixelRef INHERITED;
53};
54
55
56#endif
57