1/*
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 "include/core/SkBitmap.h"
11#include "include/core/SkImage.h"
12#include "src/pdf/SkBitmapKey.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
30 explicit operator bool() const { return fImage != nullptr; }
31 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};
40
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*);
46#endif // SkKeyedImage_DEFINED
47