Line data Source code
1 : /*
2 : * Copyright 2015 Google Inc.
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 : #ifndef SkBitmapProvider_DEFINED
9 : #define SkBitmapProvider_DEFINED
10 :
11 : #include "SkImage.h"
12 : #include "SkBitmapCache.h"
13 :
14 : class SkBitmapProvider {
15 : public:
16 141 : explicit SkBitmapProvider(const SkImage* img, SkColorSpace* dstColorSpace)
17 141 : : fImage(img)
18 141 : , fDstColorSpace(dstColorSpace) {
19 141 : SkASSERT(img);
20 141 : }
21 141 : SkBitmapProvider(const SkBitmapProvider& other)
22 141 : : fImage(other.fImage)
23 141 : , fDstColorSpace(other.fDstColorSpace)
24 141 : {}
25 :
26 : int width() const;
27 : int height() const;
28 : uint32_t getID() const;
29 0 : SkColorSpace* dstColorSpace() const { return fDstColorSpace; }
30 :
31 : SkImageInfo info() const;
32 : bool isVolatile() const;
33 :
34 : SkBitmapCacheDesc makeCacheDesc(int w, int h) const;
35 : SkBitmapCacheDesc makeCacheDesc() const;
36 : void notifyAddedToCache() const;
37 :
38 : // Only call this if you're sure you need the bits, since it maybe expensive
39 : // ... cause a decode and cache, or gpu-readback
40 : bool asBitmap(SkBitmap*) const;
41 :
42 : private:
43 : // Stack-allocated only.
44 : void* operator new(size_t) = delete;
45 : void* operator new(size_t, void*) = delete;
46 :
47 : // SkBitmapProvider is always short-lived/stack allocated, and the source image and destination
48 : // color space are guaranteed to outlive its scope => we can store raw ptrs to avoid ref churn.
49 : const SkImage* fImage;
50 : SkColorSpace* fDstColorSpace;
51 : };
52 :
53 : #endif
|