/* * 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" class SkBitmapProvider; /** * Handles request to scale, filter, and lock a bitmap to be rasterized. */ class SkBitmapController : ::SkNoncopyable { public: class State : ::SkNoncopyable { public: virtual ~State() {} const SkPixmap& pixmap() const { return fPixmap; } const SkMatrix& invMatrix() const { return fInvMatrix; } SkFilterQuality quality() const { return fQuality; } protected: SkPixmap fPixmap; SkMatrix fInvMatrix; SkFilterQuality fQuality; private: friend class SkBitmapController; }; virtual ~SkBitmapController() {} State* requestBitmap(const SkBitmapProvider&, const SkMatrix& inverse, SkFilterQuality, void* storage, size_t storageSize); State* requestBitmap(const SkBitmapProvider& bp, const SkMatrix& inv, SkFilterQuality quality) { return this->requestBitmap(bp, inv, quality, nullptr, 0); } protected: virtual State* onRequestBitmap(const SkBitmapProvider&, const SkMatrix& inv, SkFilterQuality, void* storage, size_t storageSize) = 0; }; /////////////////////////////////////////////////////////////////////////////////////////////////// #include "SkMipMap.h" class SkDefaultBitmapController : public SkBitmapController { public: SkDefaultBitmapController() {} protected: State* onRequestBitmap(const SkBitmapProvider&, const SkMatrix& inverse, SkFilterQuality, void* storage, size_t storageSize) override; }; #endif