1
2/*
3 * Copyright 2012 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9#ifndef SkRadialGradient_DEFINED
10#define SkRadialGradient_DEFINED
11
12#include "SkGradientShaderPriv.h"
13
14class SkRadialGradient : public SkGradientShaderBase {
15public:
16    SkRadialGradient(const SkPoint& center, SkScalar radius, const Descriptor&);
17
18    virtual size_t contextSize() const SK_OVERRIDE;
19
20    class RadialGradientContext : public SkGradientShaderBase::GradientShaderBaseContext {
21    public:
22        RadialGradientContext(const SkRadialGradient&, const ContextRec&);
23
24        virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
25        virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count) SK_OVERRIDE;
26
27    private:
28        typedef SkGradientShaderBase::GradientShaderBaseContext INHERITED;
29    };
30
31    virtual BitmapType asABitmap(SkBitmap* bitmap,
32                                 SkMatrix* matrix,
33                                 TileMode* xy) const SK_OVERRIDE;
34    virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
35    virtual bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix*, GrColor*,
36                                     GrFragmentProcessor**) const SK_OVERRIDE;
37
38    SK_TO_STRING_OVERRIDE()
39    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkRadialGradient)
40
41protected:
42    SkRadialGradient(SkReadBuffer& buffer);
43    virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
44    virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
45
46private:
47    friend class SkGradientShader;
48    typedef SkGradientShaderBase INHERITED;
49    const SkPoint fCenter;
50    const SkScalar fRadius;
51};
52
53#endif
54