164045423ddb0159cf857d55e25bad11026355902reed/* 264045423ddb0159cf857d55e25bad11026355902reed * Copyright 2015 Google Inc. 364045423ddb0159cf857d55e25bad11026355902reed * 464045423ddb0159cf857d55e25bad11026355902reed * Use of this source code is governed by a BSD-style license that can be 564045423ddb0159cf857d55e25bad11026355902reed * found in the LICENSE file. 664045423ddb0159cf857d55e25bad11026355902reed */ 764045423ddb0159cf857d55e25bad11026355902reed 864045423ddb0159cf857d55e25bad11026355902reed#ifndef SkBitmapController_DEFINED 964045423ddb0159cf857d55e25bad11026355902reed#define SkBitmapController_DEFINED 1064045423ddb0159cf857d55e25bad11026355902reed 1164045423ddb0159cf857d55e25bad11026355902reed#include "SkBitmap.h" 1298ed7b6d01c16ad9ace652ec25861689d765d0b5reed#include "SkBitmapCache.h" 1364045423ddb0159cf857d55e25bad11026355902reed#include "SkFilterQuality.h" 1464045423ddb0159cf857d55e25bad11026355902reed#include "SkMatrix.h" 1564045423ddb0159cf857d55e25bad11026355902reed 16013e9e3bb0495ab0b5aff011429a6ac983464d34reedclass SkBitmapProvider; 1798ed7b6d01c16ad9ace652ec25861689d765d0b5reed 1864045423ddb0159cf857d55e25bad11026355902reed/** 1964045423ddb0159cf857d55e25bad11026355902reed * Handles request to scale, filter, and lock a bitmap to be rasterized. 2064045423ddb0159cf857d55e25bad11026355902reed */ 2164045423ddb0159cf857d55e25bad11026355902reedclass SkBitmapController : ::SkNoncopyable { 2264045423ddb0159cf857d55e25bad11026355902reedpublic: 2364045423ddb0159cf857d55e25bad11026355902reed class State : ::SkNoncopyable { 2464045423ddb0159cf857d55e25bad11026355902reed public: 2564045423ddb0159cf857d55e25bad11026355902reed virtual ~State() {} 2664045423ddb0159cf857d55e25bad11026355902reed 27ad7ae6c821c530dd6cb54b0e8931ba8b10e8d87dreed const SkPixmap& pixmap() const { return fPixmap; } 2864045423ddb0159cf857d55e25bad11026355902reed const SkMatrix& invMatrix() const { return fInvMatrix; } 2964045423ddb0159cf857d55e25bad11026355902reed SkFilterQuality quality() const { return fQuality; } 309d524f22bfde5dc3dc8f48e1be39bdebd3bb0304halcanary 3164045423ddb0159cf857d55e25bad11026355902reed protected: 32ad7ae6c821c530dd6cb54b0e8931ba8b10e8d87dreed SkPixmap fPixmap; 3364045423ddb0159cf857d55e25bad11026355902reed SkMatrix fInvMatrix; 3464045423ddb0159cf857d55e25bad11026355902reed SkFilterQuality fQuality; 359d524f22bfde5dc3dc8f48e1be39bdebd3bb0304halcanary 3664045423ddb0159cf857d55e25bad11026355902reed private: 3764045423ddb0159cf857d55e25bad11026355902reed friend class SkBitmapController; 3864045423ddb0159cf857d55e25bad11026355902reed }; 3964045423ddb0159cf857d55e25bad11026355902reed 4064045423ddb0159cf857d55e25bad11026355902reed virtual ~SkBitmapController() {} 4164045423ddb0159cf857d55e25bad11026355902reed 4298ed7b6d01c16ad9ace652ec25861689d765d0b5reed State* requestBitmap(const SkBitmapProvider&, const SkMatrix& inverse, SkFilterQuality, 4364045423ddb0159cf857d55e25bad11026355902reed void* storage, size_t storageSize); 4464045423ddb0159cf857d55e25bad11026355902reed 4598ed7b6d01c16ad9ace652ec25861689d765d0b5reed State* requestBitmap(const SkBitmapProvider& bp, const SkMatrix& inv, SkFilterQuality quality) { 4698ed7b6d01c16ad9ace652ec25861689d765d0b5reed return this->requestBitmap(bp, inv, quality, nullptr, 0); 4764045423ddb0159cf857d55e25bad11026355902reed } 4864045423ddb0159cf857d55e25bad11026355902reed 4964045423ddb0159cf857d55e25bad11026355902reedprotected: 5098ed7b6d01c16ad9ace652ec25861689d765d0b5reed virtual State* onRequestBitmap(const SkBitmapProvider&, const SkMatrix& inv, SkFilterQuality, 5164045423ddb0159cf857d55e25bad11026355902reed void* storage, size_t storageSize) = 0; 5264045423ddb0159cf857d55e25bad11026355902reed}; 5364045423ddb0159cf857d55e25bad11026355902reed 5464045423ddb0159cf857d55e25bad11026355902reed/////////////////////////////////////////////////////////////////////////////////////////////////// 5564045423ddb0159cf857d55e25bad11026355902reed 566644d9353f3f0c09914385fd762e073f98d54205reed#include "SkMipMap.h" 576644d9353f3f0c09914385fd762e073f98d54205reed 5864045423ddb0159cf857d55e25bad11026355902reedclass SkDefaultBitmapController : public SkBitmapController { 5964045423ddb0159cf857d55e25bad11026355902reedpublic: 60b0b17d1e5375a65b8956a8990d63e0d02357fdafMike Klein enum class CanShadeHQ { kNo, kYes }; 61b0b17d1e5375a65b8956a8990d63e0d02357fdafMike Klein SkDefaultBitmapController(CanShadeHQ canShadeHQ) 62b0b17d1e5375a65b8956a8990d63e0d02357fdafMike Klein : fCanShadeHQ(canShadeHQ == CanShadeHQ::kYes) {} 639d524f22bfde5dc3dc8f48e1be39bdebd3bb0304halcanary 6464045423ddb0159cf857d55e25bad11026355902reedprotected: 6598ed7b6d01c16ad9ace652ec25861689d765d0b5reed State* onRequestBitmap(const SkBitmapProvider&, const SkMatrix& inverse, SkFilterQuality, 6664045423ddb0159cf857d55e25bad11026355902reed void* storage, size_t storageSize) override; 67b0b17d1e5375a65b8956a8990d63e0d02357fdafMike Klein bool fCanShadeHQ; 6864045423ddb0159cf857d55e25bad11026355902reed}; 6964045423ddb0159cf857d55e25bad11026355902reed 7064045423ddb0159cf857d55e25bad11026355902reed#endif 71