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 */ 18 class SkMallocPixelRef : public SkPixelRef { 19 public: 20 /** 21 * Return a new SkMallocPixelRef with the provided pixel storage, rowBytes, 22 * and optional colortable. The caller is responsible for managing the 23 * lifetime of the pixel storage buffer, as this pixelref will not try 24 * to delete it. 25 * 26 * The pixelref will ref() the colortable (if not NULL). 27 * 28 * Returns NULL on failure. 29 */ 30 static SkMallocPixelRef* NewDirect(const SkImageInfo&, void* addr, 31 size_t rowBytes, SkColorTable*); 32 33 /** 34 * Return a new SkMallocPixelRef, automatically allocating storage for the 35 * pixels. 36 * 37 * If rowBytes is 0, an optimal value will be chosen automatically. 38 * If rowBytes is > 0, then it will be used, unless it is invald for the 39 * specified info, in which case NULL will be returned (failure). 40 * 41 * This pixelref will ref() the specified colortable (if not NULL). 42 * 43 * Returns NULL on failure. 44 */ 45 static SkMallocPixelRef* NewAllocate(const SkImageInfo& info, 46 size_t rowBytes, SkColorTable*); 47 48 void* getAddr() const { return fStorage; } 49 50 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMallocPixelRef) 51 52 protected: 53 SkMallocPixelRef(const SkImageInfo&, void* addr, size_t rb, SkColorTable*, 54 bool ownPixels); 55 SkMallocPixelRef(SkFlattenableReadBuffer& buffer); 56 virtual ~SkMallocPixelRef(); 57 58 virtual void* onLockPixels(SkColorTable**) SK_OVERRIDE; 59 virtual void onUnlockPixels() SK_OVERRIDE; 60 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 61 virtual size_t getAllocatedSizeInBytes() const SK_OVERRIDE; 62 63 size_t rowBytes() const { return fRB; } 64 65 private: 66 void* fStorage; 67 SkColorTable* fCTable; 68 size_t fRB; 69 const bool fOwnPixels; 70 71 typedef SkPixelRef INHERITED; 72 }; 73 74 75 #endif 76