Home | History | Annotate | Download | only in gradients
      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 SkTwoPointRadialGradient_DEFINED
     10  #define SkTwoPointRadialGradient_DEFINED
     11 
     12  #include "SkGradientShaderPriv.h"
     13 
     14 class SkTwoPointRadialGradient : public SkGradientShaderBase {
     15 public:
     16     SkTwoPointRadialGradient(const SkPoint& start, SkScalar startRadius,
     17                               const SkPoint& end, SkScalar endRadius,
     18                               const Descriptor&, const SkMatrix* localMatrix);
     19 
     20     virtual BitmapType asABitmap(SkBitmap* bitmap,
     21                                  SkMatrix* matrix,
     22                                  TileMode* xy) const SK_OVERRIDE;
     23     virtual GradientType asAGradient(GradientInfo* info) const SK_OVERRIDE;
     24     virtual bool asNewEffect(GrContext* context, const SkPaint&, const SkMatrix*, GrColor*,
     25                              GrEffectRef**)  const SK_OVERRIDE;
     26 
     27     virtual size_t contextSize() const SK_OVERRIDE;
     28 
     29     class TwoPointRadialGradientContext : public SkGradientShaderBase::GradientShaderBaseContext {
     30     public:
     31         TwoPointRadialGradientContext(const SkTwoPointRadialGradient&, const ContextRec&);
     32 
     33         virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count) SK_OVERRIDE;
     34 
     35     private:
     36         typedef SkGradientShaderBase::GradientShaderBaseContext INHERITED;
     37     };
     38 
     39     SkScalar getCenterX1() const { return fDiff.length(); }
     40     SkScalar getStartRadius() const { return fStartRadius; }
     41     SkScalar getDiffRadius() const { return fDiffRadius; }
     42 
     43     SK_TO_STRING_OVERRIDE()
     44     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkTwoPointRadialGradient)
     45 
     46 protected:
     47     SkTwoPointRadialGradient(SkReadBuffer& buffer);
     48     virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
     49     virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
     50 
     51 private:
     52     const SkPoint fCenter1;
     53     const SkPoint fCenter2;
     54     const SkScalar fRadius1;
     55     const SkScalar fRadius2;
     56     SkPoint fDiff;
     57     SkScalar fStartRadius, fDiffRadius, fSr2D2, fA, fOneOverTwoA;
     58 
     59     void init();
     60 
     61     typedef SkGradientShaderBase INHERITED;
     62 };
     63 
     64 #endif
     65