/* * 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