16c432337818ff15e553c957d466a67e54684f97brileya@google.com
26c432337818ff15e553c957d466a67e54684f97brileya@google.com/*
36c432337818ff15e553c957d466a67e54684f97brileya@google.com * Copyright 2012 Google Inc.
46c432337818ff15e553c957d466a67e54684f97brileya@google.com *
56c432337818ff15e553c957d466a67e54684f97brileya@google.com * Use of this source code is governed by a BSD-style license that can be
66c432337818ff15e553c957d466a67e54684f97brileya@google.com * found in the LICENSE file.
76c432337818ff15e553c957d466a67e54684f97brileya@google.com */
86c432337818ff15e553c957d466a67e54684f97brileya@google.com
96c432337818ff15e553c957d466a67e54684f97brileya@google.com #ifndef SkTwoPointRadialGradient_DEFINED
106c432337818ff15e553c957d466a67e54684f97brileya@google.com #define SkTwoPointRadialGradient_DEFINED
116c432337818ff15e553c957d466a67e54684f97brileya@google.com
126c432337818ff15e553c957d466a67e54684f97brileya@google.com #include "SkGradientShaderPriv.h"
136c432337818ff15e553c957d466a67e54684f97brileya@google.com
146c432337818ff15e553c957d466a67e54684f97brileya@google.comclass SkTwoPointRadialGradient : public SkGradientShaderBase {
156c432337818ff15e553c957d466a67e54684f97brileya@google.compublic:
166c432337818ff15e553c957d466a67e54684f97brileya@google.com    SkTwoPointRadialGradient(const SkPoint& start, SkScalar startRadius,
176c432337818ff15e553c957d466a67e54684f97brileya@google.com                              const SkPoint& end, SkScalar endRadius,
1852d6fb7020e41328b86785a5ea12d42f44f36b8creed@google.com                              const Descriptor&);
196c432337818ff15e553c957d466a67e54684f97brileya@google.com
206c432337818ff15e553c957d466a67e54684f97brileya@google.com    virtual BitmapType asABitmap(SkBitmap* bitmap,
216c432337818ff15e553c957d466a67e54684f97brileya@google.com                                 SkMatrix* matrix,
226c432337818ff15e553c957d466a67e54684f97brileya@google.com                                 TileMode* xy) const SK_OVERRIDE;
236c432337818ff15e553c957d466a67e54684f97brileya@google.com    virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
2438b58f31a3070ea9254d55894a59528270ac67ddbsalomon@google.com    virtual GrEffectRef* asNewEffect(GrContext* context, const SkPaint&) const SK_OVERRIDE;
256c432337818ff15e553c957d466a67e54684f97brileya@google.com
266c432337818ff15e553c957d466a67e54684f97brileya@google.com    virtual void shadeSpan(int x, int y, SkPMColor* dstCParam,
276c432337818ff15e553c957d466a67e54684f97brileya@google.com                           int count) SK_OVERRIDE;
286c432337818ff15e553c957d466a67e54684f97brileya@google.com    virtual bool setContext(const SkBitmap& device,
296c432337818ff15e553c957d466a67e54684f97brileya@google.com                            const SkPaint& paint,
306c432337818ff15e553c957d466a67e54684f97brileya@google.com                            const SkMatrix& matrix) SK_OVERRIDE;
316c432337818ff15e553c957d466a67e54684f97brileya@google.com
3224a508e688b595f3381afc9a0e9d069e483fa360rileya@google.com    SkScalar getCenterX1() const { return fDiff.length(); }
3324a508e688b595f3381afc9a0e9d069e483fa360rileya@google.com    SkScalar getStartRadius() const { return fStartRadius; }
3424a508e688b595f3381afc9a0e9d069e483fa360rileya@google.com    SkScalar getDiffRadius() const { return fDiffRadius; }
3524a508e688b595f3381afc9a0e9d069e483fa360rileya@google.com
36bc0c7b3fc892adc21eeac2d56b02a525ee811fdbrobertphillips@google.com    SK_DEVELOPER_TO_STRING()
376c432337818ff15e553c957d466a67e54684f97brileya@google.com    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkTwoPointRadialGradient)
386c432337818ff15e553c957d466a67e54684f97brileya@google.com
396c432337818ff15e553c957d466a67e54684f97brileya@google.comprotected:
406c432337818ff15e553c957d466a67e54684f97brileya@google.com    SkTwoPointRadialGradient(SkFlattenableReadBuffer& buffer);
416c432337818ff15e553c957d466a67e54684f97brileya@google.com    virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE;
426c432337818ff15e553c957d466a67e54684f97brileya@google.com
436c432337818ff15e553c957d466a67e54684f97brileya@google.comprivate:
446c432337818ff15e553c957d466a67e54684f97brileya@google.com    typedef SkGradientShaderBase INHERITED;
456c432337818ff15e553c957d466a67e54684f97brileya@google.com    const SkPoint fCenter1;
466c432337818ff15e553c957d466a67e54684f97brileya@google.com    const SkPoint fCenter2;
476c432337818ff15e553c957d466a67e54684f97brileya@google.com    const SkScalar fRadius1;
486c432337818ff15e553c957d466a67e54684f97brileya@google.com    const SkScalar fRadius2;
496c432337818ff15e553c957d466a67e54684f97brileya@google.com    SkPoint fDiff;
506c432337818ff15e553c957d466a67e54684f97brileya@google.com    SkScalar fStartRadius, fDiffRadius, fSr2D2, fA, fOneOverTwoA;
516c432337818ff15e553c957d466a67e54684f97brileya@google.com
526c432337818ff15e553c957d466a67e54684f97brileya@google.com    void init();
536c432337818ff15e553c957d466a67e54684f97brileya@google.com};
546c432337818ff15e553c957d466a67e54684f97brileya@google.com
556c432337818ff15e553c957d466a67e54684f97brileya@google.com#endif
56