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 14class SkTwoPointRadialGradient : public SkGradientShaderBase { 15public: 16 SkTwoPointRadialGradient(const SkPoint& start, SkScalar startRadius, 17 const SkPoint& end, SkScalar endRadius, 18 const Descriptor&); 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 asFragmentProcessor(GrContext* context, const SkPaint&, const SkMatrix*, GrColor*, 25 GrFragmentProcessor**) 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 46protected: 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 51private: 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 friend class SkGradientShader; 62 typedef SkGradientShaderBase INHERITED; 63}; 64 65#endif 66