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,
