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