diff --git a/include/effects/SkArithmeticMode.h b/include/effects/SkArithmeticMode.h
index a073f2f..dc5493f 100644
--- a/include/effects/SkArithmeticMode.h
+++ b/include/effects/SkArithmeticMode.h
@@ -26,7 +26,7 @@
                               SkScalar k3, SkScalar k4);
 
 private:
-    typedef SkXfermode INHERITED;    
+    typedef SkXfermode INHERITED;
 };
 
 #endif
diff --git a/src/core/SkBitmapProcState.cpp b/src/core/SkBitmapProcState.cpp
index 4d66860..92e55e8 100644
--- a/src/core/SkBitmapProcState.cpp
+++ b/src/core/SkBitmapProcState.cpp
@@ -456,7 +456,7 @@
                        SkIntToScalar(y) + SK_ScalarHalf,
                        &pt);
             // When the matrix has a scale component the setup code in
-            // chooseProcs multiples the inverse matrix by the inverse of the 
+            // chooseProcs multiples the inverse matrix by the inverse of the
             // bitmap's width and height. Since this method is going to do
             // its own tiling and sampling we need to undo that here.
             if (SkShader::kClamp_TileMode != s.fTileModeX ||
diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp
index 8c62bb7..a248cda 100644
--- a/src/core/SkXfermode.cpp
+++ b/src/core/SkXfermode.cpp
@@ -779,7 +779,7 @@
     str->append(gModeStrings[fMode]);
 
     static const char* gCoeffStrings[kCoeffCount] = {
-        "Zero", "One", "SC", "ISC", "DC", "IDC", "SA", "ISA", "DA", "IDA" 
+        "Zero", "One", "SC", "ISC", "DC", "IDC", "SA", "ISA", "DA", "IDA"
     };
 
     str->append(" src: ");
diff --git a/src/effects/SkArithmeticMode.cpp b/src/effects/SkArithmeticMode.cpp
index cb3657f..df6ff50 100644
--- a/src/effects/SkArithmeticMode.cpp
+++ b/src/effects/SkArithmeticMode.cpp
@@ -28,7 +28,7 @@
 private:
     SkScalar fK[4];
 
-    typedef SkXfermode INHERITED;    
+    typedef SkXfermode INHERITED;
 };
 
 static int pinToByte(int value) {
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index 077d246..be057fc 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -950,7 +950,7 @@
         path.addOval(oval);
         this->drawPath(paint, path, stroke);
         return;
-    } 
+    }
 
     internalDrawOval(paint, oval, stroke);
 }
@@ -960,10 +960,10 @@
     if (!paint.isAntiAlias()) {
         return false;
     }
- 
+
     // we can draw circles in any style
-    bool isCircle = SkScalarNearlyEqual(oval.width(), oval.height()) 
-                    && circleStaysCircle(this->getMatrix()); 
+    bool isCircle = SkScalarNearlyEqual(oval.width(), oval.height())
+                    && circleStaysCircle(this->getMatrix());
     // and for now, axis-aligned ellipses only with fill or stroke-and-fill
     SkStrokeRec::Style style = stroke.getStyle();
     bool isStroke = (style == SkStrokeRec::kStroke_Style || style == SkStrokeRec::kHairline_Style);
@@ -978,11 +978,11 @@
 
     SkScalar xRadius = SkScalarHalf(oval.width());
     SkScalar yRadius = SkScalarHalf(oval.height());
-   
+
     SkScalar strokeWidth = stroke.getWidth();
     SkStrokeRec::Style style = stroke.getStyle();
 
-    bool isCircle = SkScalarNearlyEqual(xRadius, yRadius) && circleStaysCircle(this->getMatrix()); 
+    bool isCircle = SkScalarNearlyEqual(xRadius, yRadius) && circleStaysCircle(this->getMatrix());
 #ifdef SK_DEBUG
     {
         // we should have checked for this previously
@@ -1080,7 +1080,7 @@
         }
 
         SkScalar ratio = SkScalarDiv(xRadius, yRadius);
-       
+
         for (int i = 0; i < 4; ++i) {
             verts[i].fCenter = center;
             verts[i].fOuterRadius = xRadius;
