diff --git a/samplecode/SampleAnimatedGradient.cpp b/samplecode/SampleAnimatedGradient.cpp
index 1b90cc8..c4a4ec5 100644
--- a/samplecode/SampleAnimatedGradient.cpp
+++ b/samplecode/SampleAnimatedGradient.cpp
@@ -11,12 +11,12 @@
 
 class GradientView : public SampleView {
 public:
-	GradientView() {
+    GradientView() {
         this->setBGColor(0xFFDDDDDD);
-	}
-	
+    }
+
 protected:
-	struct GradData {
+    struct GradData {
         int             fCount;
         const SkColor*  fColors;
         const SkScalar* fPos;
@@ -35,11 +35,11 @@
         paint.setStyle(SkPaint::kStroke_Style);
         paint.setStrokeWidth(SkScalarHalf(SkIntToScalar(3)));
         paint.setStyle(SkPaint::kFill_Style);
-        
+
         SkPoint p = SkPoint::Make(0,0);
         SkPoint q = SkPoint::Make(100,100);
         SkPoint pts[] = {p, q};
-        
+
         SkScalar t, temp, x, y;
         SkColor gColors[] = {
             SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK
@@ -51,42 +51,42 @@
         x =  SkScalarSinCos(angle, &y);
         SkScalar colorPositions[] = { 0, 0.1 + x, 0.4 + y, 0.9 - x + y, 1.0};
         GradData data = { 5, gColors, colorPositions };
-        
-        
+
+
         SkRect r = { 0, 0, SkIntToScalar(200), SkIntToScalar(200) };
         SkShader* shader1 = SkGradientShader::CreateLinear(
-                           pts, data.fColors, data.fPos,data.fCount, 
+                           pts, data.fColors, data.fPos,data.fCount,
                            SkShader::kMirror_TileMode);
         paint.setShader(shader1)->unref();
-        
+
         canvas->drawRect(r, paint);
-        
-        
+
+
         SkPoint s = SkPoint::Make(100,100);
         SkShader* shader2 = SkGradientShader::CreateRadial(
-                           s, 100, data.fColors, data.fPos, data.fCount, 
+                           s, 100, data.fColors, data.fPos, data.fCount,
                            SkShader::kMirror_TileMode);
         paint.setShader(shader2)->unref();
         canvas->translate(250, 0);
         canvas->drawRect(r, paint);
-        
+
         SkShader* shader3 = SkGradientShader::CreateTwoPointRadial(
                            p, 0, q, 100, data.fColors, data.fPos, data.fCount,
                            SkShader::kMirror_TileMode);
         paint.setShader(shader3)->unref();
         canvas->translate(0, 250);
         canvas->drawRect(r, paint);
-        
+
         SkShader* shader4 = SkGradientShader::CreateSweep(
                             100, 100, data.fColors, data.fPos, data.fCount);
- 
+
         paint.setShader(shader4)->unref();
         canvas->translate(-250, 0);
         canvas->drawRect(r, paint);
-        
-        this->inval(NULL);		
+
+        this->inval(NULL);
     }
-	
+
 private:
     typedef SampleView INHERITED;
 };
