SkMallocPixelRef.h revision 56f8f338b6d2f9c75bfb045db51405fcab351cd0
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    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMallocPixelRef)
32
33protected:
34    // overrides from SkPixelRef
35    virtual void* onLockPixels(SkColorTable**);
36    virtual void onUnlockPixels();
37
38    SkMallocPixelRef(SkFlattenableReadBuffer& buffer);
39    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
40
41private:
42    void*           fStorage;
43    size_t          fSize;
44    SkColorTable*   fCTable;
45
46    typedef SkPixelRef INHERITED;
47};
48
49
50#endif
51