Remove old constructors from GrGradientEffect subclasses, and moved their declarations into source files.
Review URL: https://codereview.appspot.com/6449067

git-svn-id: http://skia.googlecode.com/svn/trunk@4870 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/effects/gradients/SkTwoPointConicalGradient.cpp b/src/effects/gradients/SkTwoPointConicalGradient.cpp
index feef3b9..ae20cae 100644
--- a/src/effects/gradients/SkTwoPointConicalGradient.cpp
+++ b/src/effects/gradients/SkTwoPointConicalGradient.cpp
@@ -163,6 +163,8 @@
     fPtsToUnit.reset();
 }
 
+/////////////////////////////////////////////////////////////////////
+
 SkTwoPointConicalGradient::SkTwoPointConicalGradient(
     const SkPoint& start, SkScalar startRadius,
     const SkPoint& end, SkScalar endRadius,
@@ -292,25 +294,6 @@
     return kConical_GradientType;
 }
 
-GrCustomStage* SkTwoPointConicalGradient::asNewCustomStage(
-    GrContext* context, GrSamplerState* sampler) const {
-    SkASSERT(NULL != context && NULL != sampler);
-    SkPoint diff = fCenter2 - fCenter1;
-    SkScalar diffLen = diff.length();
-    if (0 != diffLen) {
-        SkScalar invDiffLen = SkScalarInvert(diffLen);
-        sampler->matrix()->setSinCos(-SkScalarMul(invDiffLen, diff.fY),
-                          SkScalarMul(invDiffLen, diff.fX));
-    } else {
-        sampler->matrix()->reset();
-    }
-    sampler->matrix()->preTranslate(-fCenter1.fX, -fCenter1.fY);
-    sampler->textureParams()->setTileModeX(fTileMode);
-    sampler->textureParams()->setTileModeY(kClamp_TileMode);
-    sampler->textureParams()->setBilerp(true);
-    return SkNEW_ARGS(GrConical2Gradient, (context, *this, sampler));
-}
-
 SkTwoPointConicalGradient::SkTwoPointConicalGradient(
     SkFlattenableReadBuffer& buffer)
     : INHERITED(buffer),
@@ -337,7 +320,6 @@
 static const UniformHandle kInvalidUniformHandle = GrGLUniformManager::kInvalidUniformHandle;
 
 class GrGLConical2Gradient : public GrGLGradientStage {
-
 public:
 
     GrGLConical2Gradient(const GrProgramStageFactory& factory,
@@ -356,9 +338,7 @@
                          const GrRenderTarget*,
                          int stageNum) SK_OVERRIDE;
 
-    static StageKey GenKey(const GrCustomStage& s) {
-        return (static_cast<const GrConical2Gradient&>(s).isDegenerate());
-    }
+    static StageKey GenKey(const GrCustomStage& s);
 
 protected:
 
@@ -385,6 +365,57 @@
 
 };
 
+/////////////////////////////////////////////////////////////////////
+
+class GrConical2Gradient : public GrGradientEffect {
+public:
+
+    GrConical2Gradient(GrContext* ctx, const SkTwoPointConicalGradient& shader,
+                       GrSamplerState* sampler)
+        : INHERITED(ctx, shader, sampler) 
+        , fCenterX1(shader.getCenterX1())
+        , fRadius0(shader.getStartRadius())
+        , fDiffRadius(shader.getDiffRadius()) { }
+
+    virtual ~GrConical2Gradient() { }
+
+    static const char* Name() { return "Two-Point Conical Gradient"; }
+    virtual const GrProgramStageFactory& getFactory() const SK_OVERRIDE {
+        return GrTProgramStageFactory<GrConical2Gradient>::getInstance();
+    }
+    virtual bool isEqual(const GrCustomStage& sBase) const SK_OVERRIDE {
+        const GrConical2Gradient& s = static_cast<const GrConical2Gradient&>(sBase);
+        return (INHERITED::isEqual(sBase) &&
+                this->fCenterX1 == s.fCenterX1 &&
+                this->fRadius0 == s.fRadius0 &&
+                this->fDiffRadius == s.fDiffRadius);
+    }
+
+    // The radial gradient parameters can collapse to a linear (instead of quadratic) equation.
+    bool isDegenerate() const { return SkScalarAbs(fDiffRadius) == SkScalarAbs(fCenterX1); }
+    GrScalar center() const { return fCenterX1; }
+    GrScalar diffRadius() const { return fDiffRadius; }
+    GrScalar radius() const { return fRadius0; }
+
+    typedef GrGLConical2Gradient GLProgramStage;
+
+private:
+
+    // @{
+    // Cache of values - these can change arbitrarily, EXCEPT
+    // we shouldn't change between degenerate and non-degenerate?!
+
+    GrScalar fCenterX1;
+    GrScalar fRadius0;
+    GrScalar fDiffRadius;
+
+    // @}
+
+    typedef GrGradientEffect INHERITED;
+};
+
+/////////////////////////////////////////////////////////////////////
+
 GrGLConical2Gradient::GrGLConical2Gradient(
         const GrProgramStageFactory& factory,
         const GrCustomStage& baseData)
@@ -603,44 +634,28 @@
     }
 }
 
+GrCustomStage::StageKey GrGLConical2Gradient::GenKey(const GrCustomStage& s) {
+    return (static_cast<const GrConical2Gradient&>(s).isDegenerate());
+}
 
 /////////////////////////////////////////////////////////////////////
 
-GrConical2Gradient::GrConical2Gradient(GrTexture* texture,
-                                       GrScalar center,
-                                       GrScalar radius,
-                                       GrScalar diffRadius)
-    : INHERITED(texture)
-    , fCenterX1 (center)
-    , fRadius0 (radius)
-    , fDiffRadius (diffRadius) {
-
+GrCustomStage* SkTwoPointConicalGradient::asNewCustomStage(
+    GrContext* context, GrSamplerState* sampler) const {
+    SkASSERT(NULL != context && NULL != sampler);
+    SkPoint diff = fCenter2 - fCenter1;
+    SkScalar diffLen = diff.length();
+    if (0 != diffLen) {
+        SkScalar invDiffLen = SkScalarInvert(diffLen);
+        sampler->matrix()->setSinCos(-SkScalarMul(invDiffLen, diff.fY),
+                          SkScalarMul(invDiffLen, diff.fX));
+    } else {
+        sampler->matrix()->reset();
+    }
+    sampler->matrix()->preTranslate(-fCenter1.fX, -fCenter1.fY);
+    sampler->textureParams()->setTileModeX(fTileMode);
+    sampler->textureParams()->setTileModeY(kClamp_TileMode);
+    sampler->textureParams()->setBilerp(true);
+    return SkNEW_ARGS(GrConical2Gradient, (context, *this, sampler));
 }
 
-GrConical2Gradient::GrConical2Gradient(GrContext* ctx, 
-                                       const SkTwoPointConicalGradient& shader,
-                                       GrSamplerState* sampler)
-    : INHERITED(ctx, shader, sampler) 
-    , fCenterX1(shader.getCenterX1())
-    , fRadius0(shader.getStartRadius())
-    , fDiffRadius(shader.getDiffRadius()) {
-}
-
-GrConical2Gradient::~GrConical2Gradient() {
-
-}
-
-
-const GrProgramStageFactory& GrConical2Gradient::getFactory() const {
-    return GrTProgramStageFactory<GrConical2Gradient>::getInstance();
-}
-
-bool GrConical2Gradient::isEqual(const GrCustomStage& sBase) const {
-    const GrConical2Gradient& s = static_cast<const GrConical2Gradient&>(sBase);
-    return (INHERITED::isEqual(sBase) &&
-            this->fCenterX1 == s.fCenterX1 &&
-            this->fRadius0 == s.fRadius0 &&
-            this->fDiffRadius == s.fDiffRadius);
-}
-
-