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 explicit SkBitmapProvider(const SkImage* img, SkColorSpace* dstColorSpace) 17 : fImage(img) 18 , fDstColorSpace(dstColorSpace) { 19 SkASSERT(img); 20 } 21 SkBitmapProvider(const SkBitmapProvider& other) 22 : fImage(other.fImage) 23 , fDstColorSpace(other.fDstColorSpace) 24 {} 25 26 int width() const; 27 int height() const; 28 uint32_t getID() const; 29 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 54