/* * Copyright 2015 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkBitmapController_DEFINED #define SkBitmapController_DEFINED #include "SkBitmap.h" #include "SkBitmapCache.h" #include "SkFilterQuality.h" #include "SkMatrix.h" #include "SkMipMap.h" class SkBitmapProvider; /** * Handles request to scale, filter, and lock a bitmap to be rasterized. */ class SkBitmapController : ::SkNoncopyable { public: class State : ::SkNoncopyable { public: State(const SkBitmapProvider&, const SkMatrix& inv, SkFilterQuality); const SkPixmap& pixmap() const { return fPixmap; } const SkMatrix& invMatrix() const { return fInvMatrix; } SkFilterQuality quality() const { return fQuality; } private: bool processHighRequest(const SkBitmapProvider&); bool processMediumRequest(const SkBitmapProvider&); SkPixmap fPixmap; SkMatrix fInvMatrix; SkFilterQuality fQuality; // Pixmap storage. SkBitmap fResultBitmap; sk_sp fCurrMip; }; static State* RequestBitmap(const SkBitmapProvider&, const SkMatrix& inverse, SkFilterQuality, SkArenaAlloc*); private: SkBitmapController() = delete; }; #endif