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