/*
|
* Copyright 2017 Google Inc.
|
*
|
* Use of this source code is governed by a BSD-style license that can be
|
* found in the LICENSE file.
|
*/
|
#ifndef SkKeyedImage_DEFINED
|
#define SkKeyedImage_DEFINED
|
|
#include "SkBitmap.h"
|
#include "SkBitmapKey.h"
|
#include "SkImage.h"
|
|
/**
|
This class has all the advantages of SkBitmaps and SkImages.
|
|
The SkImage holds on to encoded data. The SkBitmapKey properly de-dups subsets.
|
*/
|
class SkKeyedImage {
|
public:
|
SkKeyedImage() {}
|
SkKeyedImage(sk_sp<SkImage>);
|
SkKeyedImage(const SkBitmap&);
|
SkKeyedImage(SkKeyedImage&&) = default;
|
SkKeyedImage(const SkKeyedImage&) = default;
|
|
SkKeyedImage& operator=(SkKeyedImage&&) = default;
|
SkKeyedImage& operator=(const SkKeyedImage&) = default;
|
|
explicit operator bool() const { return fImage != nullptr; }
|
const SkBitmapKey& key() const { return fKey; }
|
const sk_sp<SkImage>& image() const { return fImage; }
|
sk_sp<SkImage> release();
|
SkKeyedImage subset(SkIRect subset) const;
|
|
private:
|
sk_sp<SkImage> fImage;
|
SkBitmapKey fKey = {{0, 0, 0, 0}, 0};
|
};
|
|
/**
|
* Given an Image, return the Bitmap Key that corresponds to it. If the Image
|
* wraps a Bitmap, use that Bitmap's key.
|
*/
|
SkBitmapKey SkBitmapKeyFromImage(const SkImage*);
|
#endif // SkKeyedImage_DEFINED
|