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