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
17class SkImageGeneratorCG : public SkImageGenerator {
18public:
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
29protected:
30    SkData* onRefEncodedData() override;
31
32    bool onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes, const Options&)
33    override;
34
35private:
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