blob: f74ec5c170f371f4ae5a8a2d623eef771bb3abd1 [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
30 explicit operator bool() const { return fImage; }
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#endif // SkKeyedImage_DEFINED