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"
122880df2609eba09b555ca37be04b6ad89290c765Tom Hudson#include "SkBitmapCache.h"
1364045423ddb0159cf857d55e25bad11026355902reed#include "SkFilterQuality.h"
1464045423ddb0159cf857d55e25bad11026355902reed#include "SkMatrix.h"
1564045423ddb0159cf857d55e25bad11026355902reed
162880df2609eba09b555ca37be04b6ad89290c765Tom Hudsonclass SkBitmapProvider;
172880df2609eba09b555ca37be04b6ad89290c765Tom Hudson
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; }
3064045423ddb0159cf857d55e25bad11026355902reed
3164045423ddb0159cf857d55e25bad11026355902reed    protected:
32ad7ae6c821c530dd6cb54b0e8931ba8b10e8d87dreed        SkPixmap        fPixmap;
3364045423ddb0159cf857d55e25bad11026355902reed        SkMatrix        fInvMatrix;
3464045423ddb0159cf857d55e25bad11026355902reed        SkFilterQuality fQuality;
3564045423ddb0159cf857d55e25bad11026355902reed
3664045423ddb0159cf857d55e25bad11026355902reed    private:
3764045423ddb0159cf857d55e25bad11026355902reed        friend class SkBitmapController;
3864045423ddb0159cf857d55e25bad11026355902reed    };
3964045423ddb0159cf857d55e25bad11026355902reed
4064045423ddb0159cf857d55e25bad11026355902reed    virtual ~SkBitmapController() {}
4164045423ddb0159cf857d55e25bad11026355902reed
422880df2609eba09b555ca37be04b6ad89290c765Tom Hudson    State* requestBitmap(const SkBitmapProvider&, const SkMatrix& inverse, SkFilterQuality,
4364045423ddb0159cf857d55e25bad11026355902reed                         void* storage, size_t storageSize);
4464045423ddb0159cf857d55e25bad11026355902reed
452880df2609eba09b555ca37be04b6ad89290c765Tom Hudson    State* requestBitmap(const SkBitmapProvider& bp, const SkMatrix& inv, SkFilterQuality quality) {
462880df2609eba09b555ca37be04b6ad89290c765Tom Hudson        return this->requestBitmap(bp, inv, quality, nullptr, 0);
4764045423ddb0159cf857d55e25bad11026355902reed    }
4864045423ddb0159cf857d55e25bad11026355902reed
4964045423ddb0159cf857d55e25bad11026355902reedprotected:
502880df2609eba09b555ca37be04b6ad89290c765Tom Hudson    virtual State* onRequestBitmap(const SkBitmapProvider&, const SkMatrix& inv, SkFilterQuality,
5164045423ddb0159cf857d55e25bad11026355902reed                                   void* storage, size_t storageSize) = 0;
5264045423ddb0159cf857d55e25bad11026355902reed};
5364045423ddb0159cf857d55e25bad11026355902reed
5464045423ddb0159cf857d55e25bad11026355902reed///////////////////////////////////////////////////////////////////////////////////////////////////
5564045423ddb0159cf857d55e25bad11026355902reed
5664045423ddb0159cf857d55e25bad11026355902reedclass SkDefaultBitmapController : public SkBitmapController {
5764045423ddb0159cf857d55e25bad11026355902reedpublic:
5864045423ddb0159cf857d55e25bad11026355902reed    SkDefaultBitmapController() {}
5964045423ddb0159cf857d55e25bad11026355902reed
6064045423ddb0159cf857d55e25bad11026355902reedprotected:
612880df2609eba09b555ca37be04b6ad89290c765Tom Hudson    State* onRequestBitmap(const SkBitmapProvider&, const SkMatrix& inverse, SkFilterQuality,
6264045423ddb0159cf857d55e25bad11026355902reed                           void* storage, size_t storageSize) override;
6364045423ddb0159cf857d55e25bad11026355902reed};
6464045423ddb0159cf857d55e25bad11026355902reed
6564045423ddb0159cf857d55e25bad11026355902reed#endif
66