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 SkBitmapController_DEFINED 9 #define SkBitmapController_DEFINED 10 11 #include "SkBitmap.h" 12 #include "SkBitmapCache.h" 13 #include "SkFilterQuality.h" 14 #include "SkMatrix.h" 15 #include "SkMipMap.h" 16 17 class SkBitmapProvider; 18 19 /** 20 * Handles request to scale, filter, and lock a bitmap to be rasterized. 21 */ 22 class SkBitmapController : ::SkNoncopyable { 23 public: 24 class State : ::SkNoncopyable { 25 public: 26 State(const SkBitmapProvider&, const SkMatrix& inv, SkFilterQuality); 27 pixmap()28 const SkPixmap& pixmap() const { return fPixmap; } invMatrix()29 const SkMatrix& invMatrix() const { return fInvMatrix; } quality()30 SkFilterQuality quality() const { return fQuality; } 31 32 private: 33 bool processHighRequest(const SkBitmapProvider&); 34 bool processMediumRequest(const SkBitmapProvider&); 35 36 SkPixmap fPixmap; 37 SkMatrix fInvMatrix; 38 SkFilterQuality fQuality; 39 40 // Pixmap storage. 41 SkBitmap fResultBitmap; 42 sk_sp<const SkMipMap> fCurrMip; 43 44 }; 45 46 static State* RequestBitmap(const SkBitmapProvider&, const SkMatrix& inverse, SkFilterQuality, 47 SkArenaAlloc*); 48 49 private: 50 SkBitmapController() = delete; 51 }; 52 53 #endif 54