SkBitmapProvider.h revision e13a69baac9dc326510009fa7c0c5966aee9240c
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: 16e13a69baac9dc326510009fa7c0c5966aee9240cFlorin Malita explicit SkBitmapProvider(const SkImage* img) : fImage(img) { SkASSERT(img); } 17013e9e3bb0495ab0b5aff011429a6ac983464d34reed SkBitmapProvider(const SkBitmapProvider& other) 18e13a69baac9dc326510009fa7c0c5966aee9240cFlorin Malita : fImage(other.fImage) 19013e9e3bb0495ab0b5aff011429a6ac983464d34reed {} 20013e9e3bb0495ab0b5aff011429a6ac983464d34reed 21013e9e3bb0495ab0b5aff011429a6ac983464d34reed int width() const; 22013e9e3bb0495ab0b5aff011429a6ac983464d34reed int height() const; 23013e9e3bb0495ab0b5aff011429a6ac983464d34reed uint32_t getID() const; 24013e9e3bb0495ab0b5aff011429a6ac983464d34reed 25013e9e3bb0495ab0b5aff011429a6ac983464d34reed SkImageInfo info() const; 26095530389d8211895309107a4f74beefacce638creed bool isVolatile() const; 27013e9e3bb0495ab0b5aff011429a6ac983464d34reed 28013e9e3bb0495ab0b5aff011429a6ac983464d34reed SkBitmapCacheDesc makeCacheDesc(int w, int h) const; 29013e9e3bb0495ab0b5aff011429a6ac983464d34reed SkBitmapCacheDesc makeCacheDesc() const; 30013e9e3bb0495ab0b5aff011429a6ac983464d34reed void notifyAddedToCache() const; 31013e9e3bb0495ab0b5aff011429a6ac983464d34reed 32013e9e3bb0495ab0b5aff011429a6ac983464d34reed // Only call this if you're sure you need the bits, since it maybe expensive 33013e9e3bb0495ab0b5aff011429a6ac983464d34reed // ... cause a decode and cache, or gpu-readback 34013e9e3bb0495ab0b5aff011429a6ac983464d34reed bool asBitmap(SkBitmap*) const; 35013e9e3bb0495ab0b5aff011429a6ac983464d34reed 36013e9e3bb0495ab0b5aff011429a6ac983464d34reedprivate: 37862a3876086a9367c584598038887b94d8065fd7fmalita // Stack-allocated only. 38862a3876086a9367c584598038887b94d8065fd7fmalita void* operator new(size_t) = delete; 39862a3876086a9367c584598038887b94d8065fd7fmalita void* operator new(size_t, void*) = delete; 40862a3876086a9367c584598038887b94d8065fd7fmalita 41862a3876086a9367c584598038887b94d8065fd7fmalita // SkBitmapProvider is always short-lived/stack allocated, and the source image is guaranteed 42862a3876086a9367c584598038887b94d8065fd7fmalita // to outlive its scope => we can store a raw ptr to avoid ref churn. 43862a3876086a9367c584598038887b94d8065fd7fmalita const SkImage* fImage; 44013e9e3bb0495ab0b5aff011429a6ac983464d34reed}; 45013e9e3bb0495ab0b5aff011429a6ac983464d34reed 46013e9e3bb0495ab0b5aff011429a6ac983464d34reed#endif 47