blob: f31c8eef5561ae18755e486c0993d5c29dd5e6af [file] [log] [blame]
reed64045422015-06-04 06:31:31 -07001/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkBitmapController_DEFINED
9#define SkBitmapController_DEFINED
10
11#include "SkBitmap.h"
reed98ed7b62015-09-15 12:38:12 -070012#include "SkBitmapCache.h"
reed64045422015-06-04 06:31:31 -070013#include "SkFilterQuality.h"
14#include "SkMatrix.h"
15
reed013e9e32015-09-15 14:46:27 -070016class SkBitmapProvider;
reed98ed7b62015-09-15 12:38:12 -070017
reed64045422015-06-04 06:31:31 -070018/**
19 * Handles request to scale, filter, and lock a bitmap to be rasterized.
20 */
21class SkBitmapController : ::SkNoncopyable {
22public:
23 class State : ::SkNoncopyable {
24 public:
25 virtual ~State() {}
26
reedad7ae6c2015-06-04 14:12:25 -070027 const SkPixmap& pixmap() const { return fPixmap; }
reed64045422015-06-04 06:31:31 -070028 const SkMatrix& invMatrix() const { return fInvMatrix; }
29 SkFilterQuality quality() const { return fQuality; }
halcanary9d524f22016-03-29 09:03:52 -070030
reed64045422015-06-04 06:31:31 -070031 protected:
reedad7ae6c2015-06-04 14:12:25 -070032 SkPixmap fPixmap;
reed64045422015-06-04 06:31:31 -070033 SkMatrix fInvMatrix;
34 SkFilterQuality fQuality;
halcanary9d524f22016-03-29 09:03:52 -070035
reed64045422015-06-04 06:31:31 -070036 private:
37 friend class SkBitmapController;
38 };
39
40 virtual ~SkBitmapController() {}
41
reed98ed7b62015-09-15 12:38:12 -070042 State* requestBitmap(const SkBitmapProvider&, const SkMatrix& inverse, SkFilterQuality,
reed64045422015-06-04 06:31:31 -070043 void* storage, size_t storageSize);
44
reed98ed7b62015-09-15 12:38:12 -070045 State* requestBitmap(const SkBitmapProvider& bp, const SkMatrix& inv, SkFilterQuality quality) {
46 return this->requestBitmap(bp, inv, quality, nullptr, 0);
reed64045422015-06-04 06:31:31 -070047 }
48
49protected:
reed98ed7b62015-09-15 12:38:12 -070050 virtual State* onRequestBitmap(const SkBitmapProvider&, const SkMatrix& inv, SkFilterQuality,
reed64045422015-06-04 06:31:31 -070051 void* storage, size_t storageSize) = 0;
52};
53
54///////////////////////////////////////////////////////////////////////////////////////////////////
55
reed6644d932016-06-10 11:41:47 -070056#include "SkMipMap.h"
57
reed64045422015-06-04 06:31:31 -070058class SkDefaultBitmapController : public SkBitmapController {
59public:
reed6644d932016-06-10 11:41:47 -070060 SkDefaultBitmapController(SkSourceGammaTreatment treatment) : fSrcGammaTreatment(treatment) {}
halcanary9d524f22016-03-29 09:03:52 -070061
reed64045422015-06-04 06:31:31 -070062protected:
reed98ed7b62015-09-15 12:38:12 -070063 State* onRequestBitmap(const SkBitmapProvider&, const SkMatrix& inverse, SkFilterQuality,
reed64045422015-06-04 06:31:31 -070064 void* storage, size_t storageSize) override;
reed6644d932016-06-10 11:41:47 -070065
66private:
67 const SkSourceGammaTreatment fSrcGammaTreatment;
reed64045422015-06-04 06:31:31 -070068};
69
70#endif