180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/*
380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2012 Google Inc.
480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *
580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be
680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file.
780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */
880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru #ifndef SkTwoPointRadialGradient_DEFINED
1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru #define SkTwoPointRadialGradient_DEFINED
1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru #include "SkGradientShaderPriv.h"
1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkTwoPointRadialGradient : public SkGradientShaderBase {
1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkTwoPointRadialGradient(const SkPoint& start, SkScalar startRadius,
1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                              const SkPoint& end, SkScalar endRadius,
18779bf8a99dc7f03e5c43b26d4b85d7920ce89aeeDerek Sollenberger                              const Descriptor&);
1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual BitmapType asABitmap(SkBitmap* bitmap,
2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                                 SkMatrix* matrix,
2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                                 TileMode* xy) const SK_OVERRIDE;
2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
24d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger    virtual GrEffectRef* asNewEffect(GrContext* context, const SkPaint&) const SK_OVERRIDE;
2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void shadeSpan(int x, int y, SkPMColor* dstCParam,
2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                           int count) SK_OVERRIDE;
2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual bool setContext(const SkBitmap& device,
2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                            const SkPaint& paint,
3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                            const SkMatrix& matrix) SK_OVERRIDE;
3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar getCenterX1() const { return fDiff.length(); }
3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar getStartRadius() const { return fStartRadius; }
3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar getDiffRadius() const { return fDiffRadius; }
3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
36d686ac77c2c485c4a3302eda9c1de597a6f8c568Derek Sollenberger    SK_DEVELOPER_TO_STRING()
3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkTwoPointRadialGradient)
3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprotected:
4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkTwoPointRadialGradient(SkFlattenableReadBuffer& buffer);
4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE;
4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    typedef SkGradientShaderBase INHERITED;
4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPoint fCenter1;
4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkPoint fCenter2;
4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkScalar fRadius1;
4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkScalar fRadius2;
4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkPoint fDiff;
5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScalar fStartRadius, fDiffRadius, fSr2D2, fA, fOneOverTwoA;
5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    void init();
5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
56