gfx/skia/trunk/include/core/SkMallocPixelRef.h

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:2614e0ab8d2a
1 /*
2 * Copyright 2008 The Android Open Source Project
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8
9 #ifndef SkMallocPixelRef_DEFINED
10 #define SkMallocPixelRef_DEFINED
11
12 #include "SkPixelRef.h"
13
14 /** We explicitly use the same allocator for our pixels that SkMask does,
15 so that we can freely assign memory allocated by one class to the other.
16 */
17 class SK_API SkMallocPixelRef : public SkPixelRef {
18 public:
19 SK_DECLARE_INST_COUNT(SkMallocPixelRef)
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. If rowBytes are 0, an optimal value will be chosen automatically.
36 * If rowBytes is > 0, then it will be respected, or NULL will be returned
37 * if rowBytes is invalid for the specified info.
38 *
39 * This pixelref will ref() the specified colortable (if not NULL).
40 *
41 * Returns NULL on failure.
42 */
43 static SkMallocPixelRef* NewAllocate(const SkImageInfo& info,
44 size_t rowBytes, SkColorTable*);
45
46 /**
47 * Return a new SkMallocPixelRef with the provided pixel storage,
48 * rowBytes, and optional colortable. On destruction, ReleaseProc
49 * will be called.
50 *
51 * This pixelref will ref() the specified colortable (if not NULL).
52 *
53 * Returns NULL on failure.
54 */
55 typedef void (*ReleaseProc)(void* addr, void* context);
56 static SkMallocPixelRef* NewWithProc(const SkImageInfo& info,
57 size_t rowBytes, SkColorTable*,
58 void* addr, ReleaseProc proc,
59 void* context);
60
61 /**
62 * Return a new SkMallocPixelRef that will use the provided
63 * SkData, rowBytes, and optional colortable as pixel storage.
64 * The SkData will be ref()ed and on destruction of the PielRef,
65 * the SkData will be unref()ed.
66 *
67 * @param offset (in bytes) into the provided SkData that the
68 * first pixel is located at.
69 *
70 * This pixelref will ref() the specified colortable (if not NULL).
71 *
72 * Returns NULL on failure.
73 */
74 static SkMallocPixelRef* NewWithData(const SkImageInfo& info,
75 size_t rowBytes,
76 SkColorTable* ctable,
77 SkData* data,
78 size_t offset = 0);
79
80 void* getAddr() const { return fStorage; }
81
82 class PRFactory : public SkPixelRefFactory {
83 public:
84 virtual SkPixelRef* create(const SkImageInfo&,
85 SkColorTable*) SK_OVERRIDE;
86 };
87
88 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMallocPixelRef)
89
90 protected:
91 // The ownPixels version of this constructor is deprecated.
92 SkMallocPixelRef(const SkImageInfo&, void* addr, size_t rb, SkColorTable*,
93 bool ownPixels);
94 SkMallocPixelRef(SkReadBuffer& buffer);
95 virtual ~SkMallocPixelRef();
96
97 virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE;
98 virtual void onUnlockPixels() SK_OVERRIDE;
99 virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
100 virtual size_t getAllocatedSizeInBytes() const SK_OVERRIDE;
101
102 private:
103 void* fStorage;
104 SkColorTable* fCTable;
105 size_t fRB;
106 ReleaseProc fReleaseProc;
107 void* fReleaseProcContext;
108
109 SkMallocPixelRef(const SkImageInfo&, void* addr, size_t rb, SkColorTable*,
110 ReleaseProc proc, void* context);
111
112 typedef SkPixelRef INHERITED;
113 };
114
115
116 #endif

mercurial