11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2008 The Android Open Source Project
40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */
80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkMallocPixelRef_DEFINED
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkMallocPixelRef_DEFINED
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkPixelRef.h"
140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/** We explicitly use the same allocator for our pixels that SkMask does,
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    so that we can freely assign memory allocated by one class to the other.
170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project*/
180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkMallocPixelRef : public SkPixelRef {
190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    /** Allocate the specified buffer for pixels. The memory is freed when the
2140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger        last owner of this pixelref is gone. If addr is NULL, sk_malloc_throw()
2240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger        is called to allocate it.
230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project     */
240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkMallocPixelRef(void* addr, size_t size, SkColorTable* ctable);
250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    virtual ~SkMallocPixelRef();
260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    //! Return the allocation size for the pixels
280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    size_t getSize() const { return fSize; }
2940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger    void* getAddr() const { return fStorage; }
300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // overrides from SkPixelRef
320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    virtual void flatten(SkFlattenableWriteBuffer&) const;
330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    virtual Factory getFactory() const {
340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        return Create;
350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    static SkPixelRef* Create(SkFlattenableReadBuffer& buffer) {
370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        return SkNEW_ARGS(SkMallocPixelRef, (buffer));
380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
401cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    SK_DECLARE_PIXEL_REF_REGISTRAR()
410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprotected:
420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    // overrides from SkPixelRef
430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    virtual void* onLockPixels(SkColorTable**);
440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    virtual void onUnlockPixels();
450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkMallocPixelRef(SkFlattenableReadBuffer& buffer);
470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    void*           fStorage;
49bdc1207aa05f2f1b013e937f9cbe4795768eaa74Patrick Dubroy
50bdc1207aa05f2f1b013e937f9cbe4795768eaa74Patrick Dubroyprivate:
5187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger
520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    size_t          fSize;
530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkColorTable*   fCTable;
540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    typedef SkPixelRef INHERITED;
560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
5840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger
590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
60