1/*
2 * Copyright 2012 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 SkRadialGradient_DEFINED
9#define SkRadialGradient_DEFINED
10
11#include "SkGradientShaderPriv.h"
12
13class SkRadialGradient : public SkGradientShaderBase {
14public:
15    SkRadialGradient(const SkPoint& center, SkScalar radius, const Descriptor&);
16
17    class RadialGradientContext : public SkGradientShaderBase::GradientShaderBaseContext {
18    public:
19        RadialGradientContext(const SkRadialGradient&, const ContextRec&);
20
21        void shadeSpan(int x, int y, SkPMColor dstC[], int count) override;
22
23    private:
24        typedef SkGradientShaderBase::GradientShaderBaseContext INHERITED;
25    };
26
27    GradientType asAGradient(GradientInfo* info) const override;
28#if SK_SUPPORT_GPU
29    sk_sp<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override;
30#endif
31
32    SK_TO_STRING_OVERRIDE()
33    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkRadialGradient)
34
35protected:
36    SkRadialGradient(SkReadBuffer& buffer);
37    void flatten(SkWriteBuffer& buffer) const override;
38    Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override;
39
40private:
41    const SkPoint fCenter;
42    const SkScalar fRadius;
43
44    friend class SkGradientShader;
45    typedef SkGradientShaderBase INHERITED;
46};
47
48#endif
49