180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/*
380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2008 The Android Open Source Project
480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *
580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be
680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file.
780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */
880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifndef SkMallocPixelRef_DEFINED
1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define SkMallocPixelRef_DEFINED
1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkPixelRef.h"
1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/** We explicitly use the same allocator for our pixels that SkMask does,
1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    so that we can freely assign memory allocated by one class to the other.
1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru*/
1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkMallocPixelRef : public SkPixelRef {
1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    /** Allocate the specified buffer for pixels. The memory is freed when the
2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        last owner of this pixelref is gone. If addr is NULL, sk_malloc_throw()
2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        is called to allocate it.
2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru     */
2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkMallocPixelRef(void* addr, size_t size, SkColorTable* ctable, bool ownPixels = true);
2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual ~SkMallocPixelRef();
2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    //! Return the allocation size for the pixels
2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    size_t getSize() const { return fSize; }
2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    void* getAddr() const { return fStorage; }
3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMallocPixelRef)
3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprotected:
3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    // overrides from SkPixelRef
3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void* onLockPixels(SkColorTable**);
3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void onUnlockPixels();
3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkMallocPixelRef(SkFlattenableReadBuffer& buffer);
3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    void*           fStorage;
4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    size_t          fSize;
4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkColorTable*   fCTable;
4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    bool            fOwnPixels;
4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    typedef SkPixelRef INHERITED;
4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
52