reed | 013e9e3 | 2015-09-15 14:46:27 -0700 | [diff] [blame] | 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 | |
reed | 013e9e3 | 2015-09-15 14:46:27 -0700 | [diff] [blame] | 11 | #include "SkImage.h" |
| 12 | #include "SkBitmapCache.h" |
| 13 | |
| 14 | class SkBitmapProvider { |
| 15 | public: |
Brian Osman | 61624f0 | 2016-12-09 14:51:59 -0500 | [diff] [blame] | 16 | explicit SkBitmapProvider(const SkImage* img, SkColorSpace* dstColorSpace) |
Brian Osman | 7992da3 | 2016-11-18 11:28:24 -0500 | [diff] [blame] | 17 | : fImage(img) |
Brian Osman | 61624f0 | 2016-12-09 14:51:59 -0500 | [diff] [blame] | 18 | , fDstColorSpace(dstColorSpace) { |
Brian Osman | 7992da3 | 2016-11-18 11:28:24 -0500 | [diff] [blame] | 19 | SkASSERT(img); |
| 20 | } |
reed | 013e9e3 | 2015-09-15 14:46:27 -0700 | [diff] [blame] | 21 | SkBitmapProvider(const SkBitmapProvider& other) |
Florin Malita | e13a69b | 2016-11-10 11:10:30 -0500 | [diff] [blame] | 22 | : fImage(other.fImage) |
Brian Osman | 61624f0 | 2016-12-09 14:51:59 -0500 | [diff] [blame] | 23 | , fDstColorSpace(other.fDstColorSpace) |
reed | 013e9e3 | 2015-09-15 14:46:27 -0700 | [diff] [blame] | 24 | {} |
| 25 | |
| 26 | int width() const; |
| 27 | int height() const; |
| 28 | uint32_t getID() const; |
Brian Osman | 61624f0 | 2016-12-09 14:51:59 -0500 | [diff] [blame] | 29 | SkColorSpace* dstColorSpace() const { return fDstColorSpace; } |
reed | 013e9e3 | 2015-09-15 14:46:27 -0700 | [diff] [blame] | 30 | |
reed | 013e9e3 | 2015-09-15 14:46:27 -0700 | [diff] [blame] | 31 | SkImageInfo info() const; |
reed | 0955303 | 2015-11-23 12:32:16 -0800 | [diff] [blame] | 32 | bool isVolatile() const; |
reed | 013e9e3 | 2015-09-15 14:46:27 -0700 | [diff] [blame] | 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: |
fmalita | 862a387 | 2016-10-17 07:16:05 -0700 | [diff] [blame] | 43 | // Stack-allocated only. |
| 44 | void* operator new(size_t) = delete; |
| 45 | void* operator new(size_t, void*) = delete; |
| 46 | |
Brian Osman | 61624f0 | 2016-12-09 14:51:59 -0500 | [diff] [blame] | 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; |
reed | 013e9e3 | 2015-09-15 14:46:27 -0700 | [diff] [blame] | 51 | }; |
| 52 | |
| 53 | #endif |