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
8#ifndef SkToSRGBColorFilter_DEFINED
9#define SkToSRGBColorFilter_DEFINED
10
11#include "SkColorFilter.h"
12#include "SkRefCnt.h"
13
14class SkColorSpace;
15class SkRasterPipeline;
16
17/**
18 *  Color filter that converts from supplied color space to sRGB (both gamut and transfer function).
19 */
20class SK_API SkToSRGBColorFilter : public SkColorFilter {
21public:
22    static sk_sp<SkColorFilter> Make(sk_sp<SkColorSpace> srcColorSpace);
23
24#if SK_SUPPORT_GPU
25    std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(
26            GrContext*, const GrColorSpaceInfo&) const override;
27#endif
28
29    SK_TO_STRING_OVERRIDE()
30    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkToSRGBColorFilter)
31
32private:
33    void flatten(SkWriteBuffer&) const override;
34    SkToSRGBColorFilter(sk_sp<SkColorSpace>);
35    void onAppendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*,
36                        bool shaderIsOpaque) const override;
37
38    sk_sp<SkColorSpace> fSrcColorSpace;
39
40    typedef SkColorFilter INHERITED;
41};
42
43#endif
44