SkBitmapProvider.h revision 13bf6227c5701903b38b5c21a15c8323dec7734a
1/*
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 SkBitmapProvider_DEFINED
9#define SkBitmapProvider_DEFINED
10
11#include "SkImage.h"
12#include "SkBitmapCache.h"
13
14class SkBitmapProvider {
15public:
16    explicit SkBitmapProvider(const SkImage* img, SkDestinationSurfaceColorMode colorMode)
17        : fImage(img)
18        , fColorMode(colorMode) {
19        SkASSERT(img);
20    }
21    SkBitmapProvider(const SkBitmapProvider& other)
22        : fImage(other.fImage)
23        , fColorMode(other.fColorMode)
24    {}
25
26    int width() const;
27    int height() const;
28    uint32_t getID() const;
29    SkDestinationSurfaceColorMode colorMode() const { return fColorMode; }
30
31    SkImageInfo info() const;
32    bool isVolatile() const;
33
34    SkBitmapCacheDesc makeCacheDesc(int w, int h) const;
35    SkBitmapCacheDesc makeCacheDesc() const;
36    void notifyAddedToCache() const;
37
38    // Only call this if you're sure you need the bits, since it maybe expensive
39    // ... cause a decode and cache, or gpu-readback
40    bool asBitmap(SkBitmap*) const;
41
42    bool accessScaledImage(const SkRect& srcRect, const SkMatrix& invMatrix, SkFilterQuality fq,
43                           SkBitmap* scaledBitmap, SkRect* adjustedSrcRect,
44                           SkFilterQuality* adjustedFilterQuality) const;
45
46private:
47    // Stack-allocated only.
48    void* operator new(size_t) = delete;
49    void* operator new(size_t, void*) = delete;
50
51    // SkBitmapProvider is always short-lived/stack allocated, and the source image is guaranteed
52    // to outlive its scope => we can store a raw ptr to avoid ref churn.
53    const SkImage*                fImage;
54    SkDestinationSurfaceColorMode fColorMode;
55};
56
57#endif
58