Home | History | Annotate | Download | only in pdf
      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 "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  */
     19 class SkKeyedImage {
     20 public:
     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 
     36 private:
     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  */
     45 SkBitmapKey SkBitmapKeyFromImage(const SkImage*);
     46 #endif  // SkKeyedImage_DEFINED
     47