SkBitmapProvider.h revision 862a3876086a9367c584598038887b94d8065fd7
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 "SkBitmap.h" 12013e9e3bb0495ab0b5aff011429a6ac983464d34reed#include "SkImage.h" 13013e9e3bb0495ab0b5aff011429a6ac983464d34reed#include "SkBitmapCache.h" 14013e9e3bb0495ab0b5aff011429a6ac983464d34reed 15013e9e3bb0495ab0b5aff011429a6ac983464d34reedclass SkBitmapProvider { 16013e9e3bb0495ab0b5aff011429a6ac983464d34reedpublic: 17013e9e3bb0495ab0b5aff011429a6ac983464d34reed explicit SkBitmapProvider(const SkBitmap& bm) : fBitmap(bm) {} 18862a3876086a9367c584598038887b94d8065fd7fmalita explicit SkBitmapProvider(const SkImage* img) : fImage(img) {} 19013e9e3bb0495ab0b5aff011429a6ac983464d34reed SkBitmapProvider(const SkBitmapProvider& other) 20013e9e3bb0495ab0b5aff011429a6ac983464d34reed : fBitmap(other.fBitmap) 21862a3876086a9367c584598038887b94d8065fd7fmalita , fImage(other.fImage) 22013e9e3bb0495ab0b5aff011429a6ac983464d34reed {} 23013e9e3bb0495ab0b5aff011429a6ac983464d34reed 24013e9e3bb0495ab0b5aff011429a6ac983464d34reed int width() const; 25013e9e3bb0495ab0b5aff011429a6ac983464d34reed int height() const; 26013e9e3bb0495ab0b5aff011429a6ac983464d34reed uint32_t getID() const; 27013e9e3bb0495ab0b5aff011429a6ac983464d34reed 28013e9e3bb0495ab0b5aff011429a6ac983464d34reed bool validForDrawing() const; 29013e9e3bb0495ab0b5aff011429a6ac983464d34reed SkImageInfo info() const; 30095530389d8211895309107a4f74beefacce638creed bool isVolatile() const; 31013e9e3bb0495ab0b5aff011429a6ac983464d34reed 32013e9e3bb0495ab0b5aff011429a6ac983464d34reed SkBitmapCacheDesc makeCacheDesc(int w, int h) const; 33013e9e3bb0495ab0b5aff011429a6ac983464d34reed SkBitmapCacheDesc makeCacheDesc() const; 34013e9e3bb0495ab0b5aff011429a6ac983464d34reed void notifyAddedToCache() const; 35013e9e3bb0495ab0b5aff011429a6ac983464d34reed 36013e9e3bb0495ab0b5aff011429a6ac983464d34reed // Only call this if you're sure you need the bits, since it maybe expensive 37013e9e3bb0495ab0b5aff011429a6ac983464d34reed // ... cause a decode and cache, or gpu-readback 38013e9e3bb0495ab0b5aff011429a6ac983464d34reed bool asBitmap(SkBitmap*) const; 39013e9e3bb0495ab0b5aff011429a6ac983464d34reed 40013e9e3bb0495ab0b5aff011429a6ac983464d34reedprivate: 41862a3876086a9367c584598038887b94d8065fd7fmalita // Stack-allocated only. 42862a3876086a9367c584598038887b94d8065fd7fmalita void* operator new(size_t) = delete; 43862a3876086a9367c584598038887b94d8065fd7fmalita void* operator new(size_t, void*) = delete; 44862a3876086a9367c584598038887b94d8065fd7fmalita 45862a3876086a9367c584598038887b94d8065fd7fmalita SkBitmap fBitmap; 46862a3876086a9367c584598038887b94d8065fd7fmalita // SkBitmapProvider is always short-lived/stack allocated, and the source image is guaranteed 47862a3876086a9367c584598038887b94d8065fd7fmalita // to outlive its scope => we can store a raw ptr to avoid ref churn. 48862a3876086a9367c584598038887b94d8065fd7fmalita const SkImage* fImage; 49013e9e3bb0495ab0b5aff011429a6ac983464d34reed}; 50013e9e3bb0495ab0b5aff011429a6ac983464d34reed 51013e9e3bb0495ab0b5aff011429a6ac983464d34reed#endif 52