diff --git a/samplecode/SampleAAClip.cpp b/samplecode/SampleAAClip.cpp
index 93a77cb..f2a025d 100644
--- a/samplecode/SampleAAClip.cpp
+++ b/samplecode/SampleAAClip.cpp
@@ -23,7 +23,10 @@
     bm.setPixels(mask.fImage);
 
     SkPaint paint;
-    canvas->drawBitmap(bm, mask.fBounds.fLeft, mask.fBounds.fTop, &paint);
+    canvas->drawBitmap(bm,
+                       SK_Scalar1 * mask.fBounds.fLeft,
+                       SK_Scalar1 * mask.fBounds.fTop,
+                       &paint);
 }
 
 class AAClipView : public SampleView {
diff --git a/samplecode/SampleAAClip2.cpp b/samplecode/SampleAAClip2.cpp
index e8f5a14..d12e13c 100644
--- a/samplecode/SampleAAClip2.cpp
+++ b/samplecode/SampleAAClip2.cpp
@@ -33,7 +33,10 @@
     bm.setPixels(mask.fImage);
     
     SkPaint paint;
-    canvas->drawBitmap(bm, mask.fBounds.fLeft, mask.fBounds.fTop, &paint);
+    canvas->drawBitmap(bm,
+                       SK_Scalar1 * mask.fBounds.fLeft,
+                       SK_Scalar1 * mask.fBounds.fTop,
+                       &paint);
 }
 
 static void paint_rgn(SkCanvas* canvas, const SkAAClip& clip,
@@ -48,7 +51,10 @@
                  mask.fBounds.height(), mask.fRowBytes);
     bm.setPixels(mask.fImage);
     
-    canvas->drawBitmap(bm, mask.fBounds.fLeft, mask.fBounds.fTop, &paint);
+    canvas->drawBitmap(bm,
+                       SK_Scalar1 * mask.fBounds.fLeft,
+                       SK_Scalar1 * mask.fBounds.fTop,
+                       &paint);
 }
 
 class AAClipView2 : public SampleView {
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index 740047e..441d2fa 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -728,8 +728,10 @@
     SkMatrix m = canvas->getTotalMatrix();
     m.invert(&m);
     SkPoint offset, center;
-    m.mapXY(fMouseX - clipW/2, fMouseY - clipH/2, &offset);
-    m.mapXY(fMouseX, fMouseY, &center);
+    SkScalar mouseX = fMouseX * SK_Scalar1;
+    SkScalar mouseY = fMouseY * SK_Scalar1;
+    m.mapXY(mouseX - clipW/2, mouseY - clipH/2, &offset);
+    m.mapXY(mouseX, mouseY, &center);
     
     r.set(0, 0, clipW * m.getScaleX(), clipH * m.getScaleX());
     r.offset(offset.fX, offset.fY);
@@ -737,7 +739,7 @@
     SkPaint paint;
     paint.setColor(0xFF66AAEE);
     paint.setStyle(SkPaint::kStroke_Style);
-    paint.setStrokeWidth(10.0 * m.getScaleX());
+    paint.setStrokeWidth(10.f * m.getScaleX());
     //lense offset
     //canvas->translate(0, -250);
     canvas->drawRect(r, paint);
@@ -745,7 +747,7 @@
     
     m = canvas->getTotalMatrix();
     m.setTranslate(-center.fX, -center.fY);
-    m.postScale(0.5 * fFatBitsScale, 0.5 * fFatBitsScale);
+    m.postScale(0.5f * fFatBitsScale, 0.5f * fFatBitsScale);
     m.postTranslate(center.fX, center.fY);
     canvas->concat(m);
     
diff --git a/samplecode/SampleFontScalerTest.cpp b/samplecode/SampleFontScalerTest.cpp
index 9d3e153..062eca3 100644
--- a/samplecode/SampleFontScalerTest.cpp
+++ b/samplecode/SampleFontScalerTest.cpp
@@ -102,7 +102,8 @@
                 SkScalar y = SkIntToScalar(20);
 
                 SkAutoCanvasRestore acr(canvas, true);
-                canvas->translate(50 + i * 230, 20);
+                canvas->translate(SkIntToScalar(50 + i * 230),
+                                  SkIntToScalar(20));
                 rotate_about(canvas, i * 5, x, y * 10);
 
                 {
diff --git a/samplecode/SampleImageDir.cpp b/samplecode/SampleImageDir.cpp
index c2de10c..8d6f5e0 100644
--- a/samplecode/SampleImageDir.cpp
+++ b/samplecode/SampleImageDir.cpp
@@ -72,33 +72,33 @@
 
    // set up clipper
    SkRect skclip;
-   skclip.set(SkIntToFixed(284), SkIntToFixed(40), SkIntToFixed(1370), SkIntToFixed(708));
+   skclip.set(SkIntToScalar(284), SkIntToScalar(40), SkIntToScalar(1370), SkIntToScalar(708));
 
 //   ret = canvas.clipRect(skclip);
 //   SkASSERT(ret);
 
-   matrix.set(SkMatrix::kMTransX, SkFloatToFixed(-1153.28));
-   matrix.set(SkMatrix::kMTransY, SkFloatToFixed(1180.50));
+   matrix.set(SkMatrix::kMTransX, SkFloatToScalar(-1153.28f));
+   matrix.set(SkMatrix::kMTransY, SkFloatToScalar(1180.50f));
 
-   matrix.set(SkMatrix::kMScaleX, SkFloatToFixed(0.177171));
-   matrix.set(SkMatrix::kMScaleY, SkFloatToFixed(0.177043));
+   matrix.set(SkMatrix::kMScaleX, SkFloatToScalar(0.177171f));
+   matrix.set(SkMatrix::kMScaleY, SkFloatToScalar(0.177043f));
 
-   matrix.set(SkMatrix::kMSkewX, SkFloatToFixed(0.126968));
-   matrix.set(SkMatrix::kMSkewY, SkFloatToFixed(-0.126876));
+   matrix.set(SkMatrix::kMSkewX, SkFloatToScalar(0.126968f));
+   matrix.set(SkMatrix::kMSkewY, SkFloatToScalar(-0.126876f));
 
-   matrix.set(SkMatrix::kMPersp0, SkFloatToFixed(0.0));
-   matrix.set(SkMatrix::kMPersp1, SkFloatToFixed(0.0));
+   matrix.set(SkMatrix::kMPersp0, SkFloatToScalar(0.0f));
+   matrix.set(SkMatrix::kMPersp1, SkFloatToScalar(0.0f));
 
    ret = canvas.concat(matrix);
 
    paint.setAntiAlias(true);
    paint.setColor(0xb2202020);
    paint.setStyle(SkPaint::kStroke_Style);
-   paint.setStrokeWidth(SkFloatToFixed(68.13));
+   paint.setStrokeWidth(SkFloatToScalar(68.13f));
 
    SkRect r;
-   r.set(SkFloatToFixed(-313.714417), SkFloatToFixed(-4.826389), SkFloatToFixed(18014.447266), SkFloatToFixed(1858.154541));
-   canvas.drawRoundRect(r, SkFloatToFixed(91.756363), SkFloatToFixed(91.756363), paint);
+   r.set(SkFloatToScalar(-313.714417f), SkFloatToScalar(-4.826389f), SkFloatToScalar(18014.447266f), SkFloatToScalar(1858.154541f));
+   canvas.drawRoundRect(r, SkFloatToScalar(91.756363f), SkFloatToScalar(91.756363f), paint);
 }
 
 static bool SetImageRef(SkBitmap* bitmap, SkStream* stream,
diff --git a/samplecode/SamplePolyToPoly.cpp b/samplecode/SamplePolyToPoly.cpp
index 7f9f076..dbda4da 100644
--- a/samplecode/SamplePolyToPoly.cpp
+++ b/samplecode/SamplePolyToPoly.cpp
@@ -63,8 +63,9 @@
                     { SkIntToScalar(32), SkIntToScalar(17) }
                 };
 
-                SkMatrix m0, m1;
+                SkMatrix m0;
                 m0.setPolyToPoly(src, dst, 3);
+              //  SkMatrix m1;
               //  SkSetPoly3To3(&m1, src, dst);
               //  m0.dump();
               //  m1.dump();
