Home | History | Annotate | Download | only in ports
      1 /*
      2  * Copyright 2016 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 
      8 #include "SkTypes.h"
      9 #if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS)
     10 
     11 #include "SkCGUtils.h"
     12 #include "SkData.h"
     13 #include "SkEncodedOrigin.h"
     14 #include "SkImageGenerator.h"
     15 #include "SkTemplates.h"
     16 
     17 class SkImageGeneratorCG : public SkImageGenerator {
     18 public:
     19 #ifdef SK_LEGACY_NEW_FROM_ENCODED_CG
     20     /*
     21      * Refs the data if an image generator can be returned.  Otherwise does
     22      * not affect the data.
     23      */
     24     static SkImageGenerator* NewFromEncodedCG(SkData* data);
     25 #endif
     26 
     27     static std::unique_ptr<SkImageGenerator> MakeFromEncodedCG(sk_sp<SkData>);
     28 
     29 protected:
     30     SkData* onRefEncodedData() override;
     31 
     32     bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, const Options&)
     33     override;
     34 
     35 private:
     36     /*
     37      * Takes ownership of the imageSrc
     38      */
     39     SkImageGeneratorCG(const SkImageInfo& info, const void* imageSrc, sk_sp<SkData> data,
     40                        SkEncodedOrigin origin);
     41 
     42     SkAutoTCallVProc<const void, CFRelease> fImageSrc;
     43     sk_sp<SkData>                           fData;
     44     const SkEncodedOrigin                   fOrigin;
     45 
     46     typedef SkImageGenerator INHERITED;
     47 };
     48 
     49 #endif //defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS)
     50