1013e9e3bb0495ab0b5aff011429a6ac983464d34reed/* 2013e9e3bb0495ab0b5aff011429a6ac983464d34reed * Copyright 2015 Google Inc. 3013e9e3bb0495ab0b5aff011429a6ac983464d34reed * 4013e9e3bb0495ab0b5aff011429a6ac983464d34reed * Use of this source code is governed by a BSD-style license that can be 5013e9e3bb0495ab0b5aff011429a6ac983464d34reed * found in the LICENSE file. 6013e9e3bb0495ab0b5aff011429a6ac983464d34reed */ 7013e9e3bb0495ab0b5aff011429a6ac983464d34reed 8013e9e3bb0495ab0b5aff011429a6ac983464d34reed#ifndef SkBitmapProvider_DEFINED 9013e9e3bb0495ab0b5aff011429a6ac983464d34reed#define SkBitmapProvider_DEFINED 10013e9e3bb0495ab0b5aff011429a6ac983464d34reed 11013e9e3bb0495ab0b5aff011429a6ac983464d34reed#include "SkImage.h" 12013e9e3bb0495ab0b5aff011429a6ac983464d34reed#include "SkBitmapCache.h" 13013e9e3bb0495ab0b5aff011429a6ac983464d34reed 14013e9e3bb0495ab0b5aff011429a6ac983464d34reedclass SkBitmapProvider { 15013e9e3bb0495ab0b5aff011429a6ac983464d34reedpublic: 1661624f0c716b576706659750d87b6956f4c15722Brian Osman explicit SkBitmapProvider(const SkImage* img, SkColorSpace* dstColorSpace) 177992da32f02f90e0ac9ab6914eb31676b502eb71Brian Osman : fImage(img) 1861624f0c716b576706659750d87b6956f4c15722Brian Osman , fDstColorSpace(dstColorSpace) { 197992da32f02f90e0ac9ab6914eb31676b502eb71Brian Osman SkASSERT(img); 207992da32f02f90e0ac9ab6914eb31676b502eb71Brian Osman } 21013e9e3bb0495ab0b5aff011429a6ac983464d34reed SkBitmapProvider(const SkBitmapProvider& other) 22e13a69baac9dc326510009fa7c0c5966aee9240cFlorin Malita : fImage(other.fImage) 2361624f0c716b576706659750d87b6956f4c15722Brian Osman , fDstColorSpace(other.fDstColorSpace) 24013e9e3bb0495ab0b5aff011429a6ac983464d34reed {} 25013e9e3bb0495ab0b5aff011429a6ac983464d34reed 26013e9e3bb0495ab0b5aff011429a6ac983464d34reed int width() const; 27013e9e3bb0495ab0b5aff011429a6ac983464d34reed int height() const; 28013e9e3bb0495ab0b5aff011429a6ac983464d34reed uint32_t getID() const; 2961624f0c716b576706659750d87b6956f4c15722Brian Osman SkColorSpace* dstColorSpace() const { return fDstColorSpace; } 30013e9e3bb0495ab0b5aff011429a6ac983464d34reed 31013e9e3bb0495ab0b5aff011429a6ac983464d34reed SkImageInfo info() const; 32095530389d8211895309107a4f74beefacce638creed bool isVolatile() const; 33013e9e3bb0495ab0b5aff011429a6ac983464d34reed 34013e9e3bb0495ab0b5aff011429a6ac983464d34reed SkBitmapCacheDesc makeCacheDesc(int w, int h) const; 35013e9e3bb0495ab0b5aff011429a6ac983464d34reed SkBitmapCacheDesc makeCacheDesc() const; 36013e9e3bb0495ab0b5aff011429a6ac983464d34reed void notifyAddedToCache() const; 37013e9e3bb0495ab0b5aff011429a6ac983464d34reed 38013e9e3bb0495ab0b5aff011429a6ac983464d34reed // Only call this if you're sure you need the bits, since it maybe expensive 39013e9e3bb0495ab0b5aff011429a6ac983464d34reed // ... cause a decode and cache, or gpu-readback 40013e9e3bb0495ab0b5aff011429a6ac983464d34reed bool asBitmap(SkBitmap*) const; 41013e9e3bb0495ab0b5aff011429a6ac983464d34reed 42013e9e3bb0495ab0b5aff011429a6ac983464d34reedprivate: 43862a3876086a9367c584598038887b94d8065fd7fmalita // Stack-allocated only. 44862a3876086a9367c584598038887b94d8065fd7fmalita void* operator new(size_t) = delete; 45862a3876086a9367c584598038887b94d8065fd7fmalita void* operator new(size_t, void*) = delete; 46862a3876086a9367c584598038887b94d8065fd7fmalita 4761624f0c716b576706659750d87b6956f4c15722Brian Osman // SkBitmapProvider is always short-lived/stack allocated, and the source image and destination 4861624f0c716b576706659750d87b6956f4c15722Brian Osman // color space are guaranteed to outlive its scope => we can store raw ptrs to avoid ref churn. 4961624f0c716b576706659750d87b6956f4c15722Brian Osman const SkImage* fImage; 5061624f0c716b576706659750d87b6956f4c15722Brian Osman SkColorSpace* fDstColorSpace; 51013e9e3bb0495ab0b5aff011429a6ac983464d34reed}; 52013e9e3bb0495ab0b5aff011429a6ac983464d34reed 53013e9e3bb0495ab0b5aff011429a6ac983464d34reed#endif 54