blob: 792e802b1577fb5819c32c0b1c678c8bf4acad7f [file] [log] [blame]
Hal Canary7cbf5e32017-07-12 13:10:23 -04001/*
2 * Copyright 2017 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#ifndef SkKeyedImage_DEFINED
8#define SkKeyedImage_DEFINED
9
10#include "SkBitmap.h"
11#include "SkBitmapKey.h"
12#include "SkImage.h"
13
14/**
15 This class has all the advantages of SkBitmaps and SkImages.
16
17 The SkImage holds on to encoded data. The SkBitmapKey properly de-dups subsets.
18 */
19class SkKeyedImage {
20public:
21 SkKeyedImage() {}
22 SkKeyedImage(sk_sp<SkImage>);
23 SkKeyedImage(const SkBitmap&);
24 SkKeyedImage(SkKeyedImage&&) = default;
25 SkKeyedImage(const SkKeyedImage&) = default;
26
27 SkKeyedImage& operator=(SkKeyedImage&&) = default;
28 SkKeyedImage& operator=(const SkKeyedImage&) = default;
29
Ben Wagner5d1adbf2018-05-28 13:35:39 -040030 explicit operator bool() const { return fImage != nullptr; }
Hal Canary7cbf5e32017-07-12 13:10:23 -040031 const SkBitmapKey& key() const { return fKey; }
32 const sk_sp<SkImage>& image() const { return fImage; }
33 sk_sp<SkImage> release();
34 SkKeyedImage subset(SkIRect subset) const;
35
36private:
37 sk_sp<SkImage> fImage;
38 SkBitmapKey fKey = {{0, 0, 0, 0}, 0};
39};
Hal Canary4f29c202017-07-18 10:28:31 -040040
41/**
42 * Given an Image, return the Bitmap Key that corresponds to it. If the Image
43 * wraps a Bitmap, use that Bitmap's key.
44 */
45SkBitmapKey SkBitmapKeyFromImage(const SkImage*);
Hal Canary7cbf5e32017-07-12 13:10:23 -040046#endif // SkKeyedImage_DEFINED