SkBitmapProvider.h revision 13bf6227c5701903b38b5c21a15c8323dec7734a
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 14class SkBitmapProvider { 15public: 16 explicit SkBitmapProvider(const SkImage* img, SkDestinationSurfaceColorMode colorMode) 17 : fImage(img) 18 , fColorMode(colorMode) { 19 SkASSERT(img); 20 } 21 SkBitmapProvider(const SkBitmapProvider& other) 22 : fImage(other.fImage) 23 , fColorMode(other.fColorMode) 24 {} 25 26 int width() const; 27 int height() const; 28 uint32_t getID() const; 29 SkDestinationSurfaceColorMode colorMode() const { return fColorMode; } 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 bool accessScaledImage(const SkRect& srcRect, const SkMatrix& invMatrix, SkFilterQuality fq, 43 SkBitmap* scaledBitmap, SkRect* adjustedSrcRect, 44 SkFilterQuality* adjustedFilterQuality) const; 45 46private: 47 // Stack-allocated only. 48 void* operator new(size_t) = delete; 49 void* operator new(size_t, void*) = delete; 50 51 // SkBitmapProvider is always short-lived/stack allocated, and the source image is guaranteed 52 // to outlive its scope => we can store a raw ptr to avoid ref churn. 53 const SkImage* fImage; 54 SkDestinationSurfaceColorMode fColorMode; 55}; 56 57#endif 58