• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
getAddr()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 
rowBytes()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