diff --git a/samplecode/ClockFaceView.cpp b/samplecode/ClockFaceView.cpp
index 1e9b89e..32c8161 100644
--- a/samplecode/ClockFaceView.cpp
+++ b/samplecode/ClockFaceView.cpp
@@ -154,7 +154,7 @@
     SkLayerRasterizer*  rast = new SkLayerRasterizer;
 
     p.setAntiAlias(true);
-    r7(rast, p, SkFloatToScalar(scale));
+    r7(rast, p, scale);
     paint->setRasterizer(rast)->unref();
 
     paint->setColor(SK_ColorBLUE);
diff --git a/samplecode/SampleAARects.cpp b/samplecode/SampleAARects.cpp
index 0f84900..e84c966 100644
--- a/samplecode/SampleAARects.cpp
+++ b/samplecode/SampleAARects.cpp
@@ -85,95 +85,95 @@
                     paints[p].setAlpha(a > 1 ? 0x80 : 0xff);
 
                     canvas->save();
-                        rect = SkRect::MakeLTRB(SkFloatToScalar(0.f),
-                                                SkFloatToScalar(0.f),
-                                                SkFloatToScalar(40.f),
-                                                SkFloatToScalar(40.f));
+                        rect = SkRect::MakeLTRB(0.f,
+                                                0.f,
+                                                40.f,
+                                                40.f);
                         canvas->drawRect(rect, paints[p]);
                         canvas->translate(dx, 0);
 
-                        rect = SkRect::MakeLTRB(SkFloatToScalar(0.5f),
-                                                SkFloatToScalar(0.5f),
-                                                SkFloatToScalar(40.5f),
-                                                SkFloatToScalar(40.5f));
+                        rect = SkRect::MakeLTRB(0.5f,
+                                                0.5f,
+                                                40.5f,
+                                                40.5f);
                         canvas->drawRect(rect, paints[p]);
                         canvas->translate(dx, 0);
 
-                        rect = SkRect::MakeLTRB(SkFloatToScalar(0.5f),
-                                                SkFloatToScalar(0.5f),
-                                                SkFloatToScalar(40.f),
-                                                SkFloatToScalar(40.f));
+                        rect = SkRect::MakeLTRB(0.5f,
+                                                0.5f,
+                                                40.f,
+                                                40.f);
                         canvas->drawRect(rect, paints[p]);
                         canvas->translate(dx, 0);
 
-                        rect = SkRect::MakeLTRB(SkFloatToScalar(0.75f),
-                                                SkFloatToScalar(0.75f),
-                                                SkFloatToScalar(40.75f),
-                                                SkFloatToScalar(40.75f));
+                        rect = SkRect::MakeLTRB(0.75f,
+                                                0.75f,
+                                                40.75f,
+                                                40.75f);
                         canvas->drawRect(rect, paints[p]);
                         canvas->translate(dx, 0);
 
                         canvas->save();
-                            canvas->translate(SkFloatToScalar(.33f), SkFloatToScalar(.67f));
-                            rect = SkRect::MakeLTRB(SkFloatToScalar(0.0f),
-                                                    SkFloatToScalar(0.0f),
-                                                    SkFloatToScalar(40.0f),
-                                                    SkFloatToScalar(40.0f));
+                            canvas->translate(.33f, .67f);
+                            rect = SkRect::MakeLTRB(0.0f,
+                                                    0.0f,
+                                                    40.0f,
+                                                    40.0f);
                             canvas->drawRect(rect, paints[p]);
                         canvas->restore();
                         canvas->translate(dx, 0);
 
                         canvas->save();
-                            matrix.setRotate(SkFloatToScalar(45.f));
+                            matrix.setRotate(45.f);
                             canvas->concat(matrix);
-                            canvas->translate(SkFloatToScalar(20.0f / sqrtf(2.f)),
-                                                SkFloatToScalar(20.0f / sqrtf(2.f)));
-                            rect = SkRect::MakeLTRB(SkFloatToScalar(-20.0f),
-                                                    SkFloatToScalar(-20.0f),
-                                                    SkFloatToScalar(20.0f),
-                                                    SkFloatToScalar(20.0f));
+                            canvas->translate(20.0f / sqrtf(2.f),
+                                                20.0f / sqrtf(2.f));
+                            rect = SkRect::MakeLTRB(-20.0f,
+                                                    -20.0f,
+                                                    20.0f,
+                                                    20.0f);
                             canvas->drawRect(rect, paints[p]);
                         canvas->restore();
                         canvas->translate(dx, 0);
 
                         canvas->save();
-                            canvas->rotate(SkFloatToScalar(90.f));
-                            rect = SkRect::MakeLTRB(SkFloatToScalar(0.0f),
-                                                    SkFloatToScalar(0.0f),
-                                                    SkFloatToScalar(40.0f),
-                                                    SkFloatToScalar(-40.0f));
+                            canvas->rotate(90.f);
+                            rect = SkRect::MakeLTRB(0.0f,
+                                                    0.0f,
+                                                    40.0f,
+                                                    -40.0f);
                             canvas->drawRect(rect, paints[p]);
                         canvas->restore();
                         canvas->translate(dx, 0);
 
                         canvas->save();
-                            canvas->rotate(SkFloatToScalar(90.f));
-                            rect = SkRect::MakeLTRB(SkFloatToScalar(0.5f),
-                                                    SkFloatToScalar(0.5f),
-                                                    SkFloatToScalar(40.5f),
-                                                    SkFloatToScalar(-40.5f));
+                            canvas->rotate(90.f);
+                            rect = SkRect::MakeLTRB(0.5f,
+                                                    0.5f,
+                                                    40.5f,
+                                                    -40.5f);
                             canvas->drawRect(rect, paints[p]);
                         canvas->restore();
                         canvas->translate(dx, 0);
 
                         canvas->save();
-                            matrix.setScale(SkFloatToScalar(-1.f), SkFloatToScalar(-1.f));
+                            matrix.setScale(-1.f, -1.f);
                             canvas->concat(matrix);
-                            rect = SkRect::MakeLTRB(SkFloatToScalar(0.5f),
-                                                    SkFloatToScalar(0.5f),
-                                                    SkFloatToScalar(-40.5f),
-                                                    SkFloatToScalar(-40.5f));
+                            rect = SkRect::MakeLTRB(0.5f,
+                                                    0.5f,
+                                                    -40.5f,
+                                                    -40.5f);
                             canvas->drawRect(rect, paints[p]);
                         canvas->restore();
                         canvas->translate(dx, 0);
 
                         canvas->save();
-                            matrix.setScale(SkFloatToScalar(2.1f), SkFloatToScalar(4.1f));
+                            matrix.setScale(2.1f, 4.1f);
                             canvas->concat(matrix);
-                            rect = SkRect::MakeLTRB(SkFloatToScalar(0.1f),
-                                                    SkFloatToScalar(0.1f),
-                                                    SkFloatToScalar(19.1f),
-                                                    SkFloatToScalar(9.1f));
+                            rect = SkRect::MakeLTRB(0.1f,
+                                                    0.1f,
+                                                    19.1f,
+                                                    9.1f);
                             canvas->drawRect(rect, paints[p]);
                         canvas->restore();
                         canvas->translate(dx, 0);
diff --git a/samplecode/SampleAll.cpp b/samplecode/SampleAll.cpp
index 133b653..8907a34 100644
--- a/samplecode/SampleAll.cpp
+++ b/samplecode/SampleAll.cpp
@@ -285,8 +285,8 @@
         path.addCircle(SkIntToScalar(20), SkIntToScalar(20), SkIntToScalar(20),
             SkPath::kCCW_Direction);
         for (int index = 0; index < 10; index++) {
-            SkScalar x = SkFloatToScalar((float) cos(index / 10.0f * 2 * 3.1415925358f));
-            SkScalar y = SkFloatToScalar((float) sin(index / 10.0f * 2 * 3.1415925358f));
+            SkScalar x = (float) cos(index / 10.0f * 2 * 3.1415925358f);
+            SkScalar y = (float) sin(index / 10.0f * 2 * 3.1415925358f);
             x *= index & 1 ? 7 : 14;
             y *= index & 1 ? 7 : 14;
             x += SkIntToScalar(20);
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index de0640e..7162b7b 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -658,8 +658,8 @@
 
 void SampleWindow::setZoomCenter(float x, float y)
 {
-    fZoomCenterX = SkFloatToScalar(x);
-    fZoomCenterY = SkFloatToScalar(y);
+    fZoomCenterX = x;
+    fZoomCenterY = y;
 }
 
 bool SampleWindow::zoomIn()
@@ -1549,7 +1549,7 @@
 }
 
 void SampleWindow::changeZoomLevel(float delta) {
-    fZoomLevel += SkFloatToScalar(delta);
+    fZoomLevel += delta;
     if (fZoomLevel > 0) {
         fZoomLevel = SkMinScalar(fZoomLevel, MAX_ZOOM_LEVEL);
         fZoomScale = fZoomLevel + SK_Scalar1;
diff --git a/samplecode/SampleArc.cpp b/samplecode/SampleArc.cpp
index 6af37b6..8209c3b 100644
--- a/samplecode/SampleArc.cpp
+++ b/samplecode/SampleArc.cpp
@@ -25,7 +25,7 @@
 #include "SkParsePath.h"
 static void testparse() {
     SkRect r;
-    r.set(0, 0, SkFloatToScalar(10), SkFloatToScalar(10.5f));
+    r.set(0, 0, 10, 10.5f);
     SkPath p, p2;
     SkString str, str2;
 
@@ -123,7 +123,7 @@
     virtual void onDrawContent(SkCanvas* canvas) {
         fSweep = SampleCode::GetAnimScalar(SkIntToScalar(360)/24,
                                            SkIntToScalar(360));
-//        fSweep = SkFloatToScalar(359.99f);
+//        fSweep = 359.99f;
 
         SkRect  r;
         SkPaint paint;
diff --git a/samplecode/SampleDegenerateTwoPtRadials.cpp b/samplecode/SampleDegenerateTwoPtRadials.cpp
index 4e83ed8..07adae8 100644
--- a/samplecode/SampleDegenerateTwoPtRadials.cpp
+++ b/samplecode/SampleDegenerateTwoPtRadials.cpp
@@ -14,7 +14,7 @@
 
 static void draw_gradient2(SkCanvas* canvas, const SkRect& rect, SkScalar delta) {
     SkColor colors[] = { SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorMAGENTA };
-    SkScalar pos[] = { 0, SkFloatToScalar(0.25f), SkFloatToScalar(0.75f), SK_Scalar1 };
+    SkScalar pos[] = { 0, 0.25f, 0.75f, SK_Scalar1 };
 
     SkScalar l = rect.fLeft;
     SkScalar t = rect.fTop;
diff --git a/samplecode/SampleDither.cpp b/samplecode/SampleDither.cpp
index 2468df7..38d67ad 100644
--- a/samplecode/SampleDither.cpp
+++ b/samplecode/SampleDither.cpp
@@ -55,7 +55,7 @@
         SkScalar y = r.centerY();
         SkScalar radius = r.width() / 2;
         SkScalar thickness = p.getStrokeWidth();
-        SkScalar sweep = SkFloatToScalar(360.0f);
+        SkScalar sweep = 360.0f;
         SkPath path;
 
         path.moveTo(x + radius, y);
diff --git a/samplecode/SampleEffects.cpp b/samplecode/SampleEffects.cpp
index a65b10b..cbefae8 100644
--- a/samplecode/SampleEffects.cpp
+++ b/samplecode/SampleEffects.cpp
@@ -33,8 +33,8 @@
     paint->setMaskFilter(
             SkBlurMaskFilter::CreateEmboss(SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(1)),
                                            dir,
-                                           SkFloatToScalar(0.1f),
-                                           SkFloatToScalar(0.05f)))->unref();
+                                           0.1f,
+                                           0.05f))->unref();
 }
 
 static void paint_proc3(SkPaint* paint) {
diff --git a/samplecode/SampleFilter2.cpp b/samplecode/SampleFilter2.cpp
index e982778..b4314c5 100644
--- a/samplecode/SampleFilter2.cpp
+++ b/samplecode/SampleFilter2.cpp
@@ -72,7 +72,7 @@
         const SkScalar H = SkIntToScalar(fBitmaps[0].height() + 1);
         SkPaint paint;
 
-        const SkScalar scale = SkFloatToScalar(0.897917f);
+        const SkScalar scale = 0.897917f;
         canvas->scale(SK_Scalar1, scale);
 
         for (int k = 0; k < 2; k++) {
diff --git a/samplecode/SampleFilterFuzz.cpp b/samplecode/SampleFilterFuzz.cpp
index b10fb31..3e3436f 100644
--- a/samplecode/SampleFilterFuzz.cpp
+++ b/samplecode/SampleFilterFuzz.cpp
@@ -80,7 +80,7 @@
 }
 
 static SkScalar make_scalar(bool positiveOnly = false) {
-    return SkFloatToScalar(make_number(positiveOnly));
+    return make_number(positiveOnly);
 }
 
 static SkRect make_rect(int offset = 1) {
diff --git a/samplecode/SampleFontScalerTest.cpp b/samplecode/SampleFontScalerTest.cpp
index a01de03..bbfd5a5 100644
--- a/samplecode/SampleFontScalerTest.cpp
+++ b/samplecode/SampleFontScalerTest.cpp
@@ -77,12 +77,12 @@
         if (false) {
             SkPoint pts[4];
             pts[0].set(1.61061274e+09f, 6291456);
-            pts[1].set(SkFloatToScalar(-7.18397061e+15f),
-                       SkFloatToScalar(-1.53091184e+13f));
-            pts[2].set(SkFloatToScalar(-1.30077315e+16f),
-                       SkFloatToScalar(-2.77196141e+13f));
-            pts[3].set(SkFloatToScalar(-1.30077315e+16f),
-                       SkFloatToScalar(-2.77196162e+13f));
+            pts[1].set(-7.18397061e+15f,
+                       -1.53091184e+13f);
+            pts[2].set(-1.30077315e+16f,
+                       -2.77196141e+13f);
+            pts[3].set(-1.30077315e+16f,
+                       -2.77196162e+13f);
 
             SkPath path;
             path.moveTo(pts[0]);
diff --git a/samplecode/SampleHairline.cpp b/samplecode/SampleHairline.cpp
index fb42e2c..bb43d84 100644
--- a/samplecode/SampleHairline.cpp
+++ b/samplecode/SampleHairline.cpp
@@ -39,8 +39,8 @@
 
     SkCanvas canvas(bm);
 
-    SkPoint pt0 = { SkFloatToScalar(799.33374f), SkFloatToScalar(1.2360189f) };
-    SkPoint pt1 = { SkFloatToScalar(808.49969f), SkFloatToScalar(-7.4338055f) };
+    SkPoint pt0 = { 799.33374f, 1.2360189f };
+    SkPoint pt1 = { 808.49969f, -7.4338055f };
 
     SkPaint paint;
     paint.setAntiAlias(true);
diff --git a/samplecode/SamplePicture.cpp b/samplecode/SamplePicture.cpp
index 7ae8757..66289af 100644
--- a/samplecode/SamplePicture.cpp
+++ b/samplecode/SamplePicture.cpp
@@ -104,7 +104,7 @@
         SkPaint paint;
 
         canvas->save();
-        canvas->scale(SkFloatToScalar(0.5f), SkFloatToScalar(0.5f));
+        canvas->scale(0.5f, 0.5f);
         canvas->drawBitmap(fBitmap, 0, 0, NULL);
         canvas->restore();
 
diff --git a/samplecode/SamplePolyToPoly.cpp b/samplecode/SamplePolyToPoly.cpp
index a0401f6..1283a23 100644
--- a/samplecode/SamplePolyToPoly.cpp
+++ b/samplecode/SamplePolyToPoly.cpp
@@ -41,11 +41,11 @@
             m1.reset();
 
             const SkScalar src1[] = {
-                0, 0, 0, SkFloatToScalar(427), SkFloatToScalar(316), SkFloatToScalar(427), SkFloatToScalar(316), 0
+                0, 0, 0, 427, 316, 427, 316, 0
             };
             const SkScalar dst1[] = {
-                SkFloatToScalar(158), SkFloatToScalar(177.5f), SkFloatToScalar(158), SkFloatToScalar(249.5f),
-                SkFloatToScalar(158), SkFloatToScalar(604.5f), SkFloatToScalar(158), SkFloatToScalar(-177.5f)
+                158, 177.5f, 158, 249.5f,
+                158, 604.5f, 158, -177.5f
             };
 
             (void) m2.setPolyToPoly((const SkPoint*)src1, (SkPoint*)dst1, 4);
@@ -112,7 +112,7 @@
         SkString str;
         str.appendS32(count);
         canvas->drawText(str.c_str(), str.size(),
-                         x, SkFloatToScalar(y),
+                         x, y,
                          *paint);
 
         canvas->restore();
diff --git a/samplecode/SampleRegion.cpp b/samplecode/SampleRegion.cpp
index 39c27a8..886eb96 100644
--- a/samplecode/SampleRegion.cpp
+++ b/samplecode/SampleRegion.cpp
@@ -76,7 +76,7 @@
 
     // pos[1] value is where we start to fade, relative to the width
     // of our pts[] array.
-    const SkScalar pos[] = { 0, SkFloatToScalar(0.9f), SK_Scalar1 };
+    const SkScalar pos[] = { 0, 0.9f, SK_Scalar1 };
 
     SkShader* s = SkGradientShader::CreateLinear(pts, colors, pos, 3,
                                                  SkShader::kClamp_TileMode);
diff --git a/samplecode/SampleSlides.cpp b/samplecode/SampleSlides.cpp
index 3dba782..9372d5d 100644
--- a/samplecode/SampleSlides.cpp
+++ b/samplecode/SampleSlides.cpp
@@ -80,7 +80,7 @@
         path.lineTo(SkIntToScalar(gXY[i]), SkIntToScalar(gXY[i+1]));
     path.close();
     path.offset(SkIntToScalar(-6), 0);
-    scale(&path, SkFloatToScalar(1.5f));
+    scale(&path, 1.5f);
 
     paint->setPathEffect(new SkPath1DPathEffect(path, SkIntToScalar(21), 0,
                                 SkPath1DPathEffect::kRotate_Style))->unref();
diff --git a/samplecode/SampleText.cpp b/samplecode/SampleText.cpp
index c6aaa52..aa314dd 100644
--- a/samplecode/SampleText.cpp
+++ b/samplecode/SampleText.cpp
@@ -176,7 +176,7 @@
      //   printf(" %d %g", i, x);
         x = powf(x, ee);
      //   printf(" %g", x);
-        int xx = SkScalarRound(SkFloatToScalar(x * 255));
+        int xx = SkScalarRound(x * 255);
      //   printf(" %d\n", xx);
         fTable[i] = SkToU8(xx);
     }
diff --git a/samplecode/SampleTextOnPath.cpp b/samplecode/SampleTextOnPath.cpp
index bfb35f8..f2b9af6 100644
--- a/samplecode/SampleTextOnPath.cpp
+++ b/samplecode/SampleTextOnPath.cpp
@@ -22,29 +22,29 @@
     canvas->save();
     canvas->scale(SkIntToScalar(250),SkIntToScalar(250));
 
-    rect.set(SkFloatToScalar(0.0f),  SkFloatToScalar(0.21f),
-             SkFloatToScalar(0.78f), SkFloatToScalar(0.99f));
+    rect.set(0.0f,  0.21f,
+             0.78f, 0.99f);
 
     path.addArc(rect, SkIntToScalar(280), SkIntToScalar(350));
 
     paint.setAntiAlias(true);
     paint.setStyle(SkPaint::kStroke_Style);
     paint.setColor(0xFFFF0000);
-    paint.setTextSize(SkFloatToScalar(0.085f));
-    paint.setStrokeWidth(SkFloatToScalar(.005f));
+    paint.setTextSize(0.085f);
+    paint.setStrokeWidth(.005f);
 
     canvas->drawPath(path, paint);
 
     paint.setLooper(new SkBlurDrawLooper(SK_ColorBLACK,
-                                         SkBlurMask::ConvertRadiusToSigma(SkFloatToScalar(0.002f)),
-                                         SkFloatToScalar(0.0f),
-                                         SkFloatToScalar(0.0f)))->unref();
+                                         SkBlurMask::ConvertRadiusToSigma(0.002f),
+                                         0.0f,
+                                         0.0f))->unref();
 
     const char* text = "DRAWING STROKED TEXT WITH A BLUR ON A PATH";
     size_t      len = strlen(text);
 
     canvas->drawTextOnPathHV(text, len, path, 0,
-                             SkFloatToScalar(-0.025f), paint);
+                             -0.025f, paint);
     canvas->restore();
 }
 
diff --git a/samplecode/TransitionView.cpp b/samplecode/TransitionView.cpp
index d185854..3a37172 100644
--- a/samplecode/TransitionView.cpp
+++ b/samplecode/TransitionView.cpp
@@ -158,8 +158,8 @@
         fEnd[kPrevX] = -lr;
         fEnd[kPrevY] = -ud;
         fEnd[kNextX] = fEnd[kNextY] = 0;
-        SkScalar blend[] = { SkFloatToScalar(0.8f), SkFloatToScalar(0.0f),
-                             SkFloatToScalar(0.0f), SK_Scalar1 };
+        SkScalar blend[] = { 0.8f, 0.0f,
+                             0.0f, SK_Scalar1 };
         fInterp.setKeyFrame(0, SkTime::GetMSecs(), fBegin, blend);
         fInterp.setKeyFrame(1, SkTime::GetMSecs()+kDurationMS, fEnd, blend);
     }
diff --git a/samplecode/vertexdump.cpp b/samplecode/vertexdump.cpp
index ae310a5..9bfb0ce 100644
--- a/samplecode/vertexdump.cpp
+++ b/samplecode/vertexdump.cpp
@@ -10,38 +10,38 @@
 void setup_vertexbug(SkPoint verts[], SkPoint texs[], uint16_t index[]);
 
 void setup_vertexbug(SkPoint verts[], SkPoint texs[], uint16_t index[]) {
-    verts[0].set(SkFloatToScalar(107), SkFloatToScalar(189));
-    texs[0].set(SkFloatToScalar(0), SkFloatToScalar(0));
-    verts[1].set(SkFloatToScalar(116), SkFloatToScalar(189));
-    texs[1].set(SkFloatToScalar(9), SkFloatToScalar(0));
-    verts[2].set(SkFloatToScalar(203), SkFloatToScalar(189));
-    texs[2].set(SkFloatToScalar(35), SkFloatToScalar(0));
-    verts[3].set(SkFloatToScalar(212), SkFloatToScalar(189));
-    texs[3].set(SkFloatToScalar(44), SkFloatToScalar(0));
-    verts[4].set(SkFloatToScalar(107), SkFloatToScalar(198));
-    texs[4].set(SkFloatToScalar(0), SkFloatToScalar(9));
-    verts[5].set(SkFloatToScalar(116), SkFloatToScalar(198));
-    texs[5].set(SkFloatToScalar(9), SkFloatToScalar(9));
-    verts[6].set(SkFloatToScalar(203), SkFloatToScalar(198));
-    texs[6].set(SkFloatToScalar(35), SkFloatToScalar(9));
-    verts[7].set(SkFloatToScalar(212), SkFloatToScalar(198));
-    texs[7].set(SkFloatToScalar(44), SkFloatToScalar(9));
-    verts[8].set(SkFloatToScalar(107), SkFloatToScalar(224));
-    texs[8].set(SkFloatToScalar(0), SkFloatToScalar(39));
-    verts[9].set(SkFloatToScalar(116), SkFloatToScalar(224));
-    texs[9].set(SkFloatToScalar(9), SkFloatToScalar(39));
-    verts[10].set(SkFloatToScalar(203), SkFloatToScalar(224));
-    texs[10].set(SkFloatToScalar(35), SkFloatToScalar(39));
-    verts[11].set(SkFloatToScalar(212), SkFloatToScalar(224));
-    texs[11].set(SkFloatToScalar(44), SkFloatToScalar(39));
-    verts[12].set(SkFloatToScalar(107), SkFloatToScalar(233));
-    texs[12].set(SkFloatToScalar(0), SkFloatToScalar(48));
-    verts[13].set(SkFloatToScalar(116), SkFloatToScalar(233));
-    texs[13].set(SkFloatToScalar(9), SkFloatToScalar(48));
-    verts[14].set(SkFloatToScalar(203), SkFloatToScalar(233));
-    texs[14].set(SkFloatToScalar(35), SkFloatToScalar(48));
-    verts[15].set(SkFloatToScalar(212), SkFloatToScalar(233));
-    texs[15].set(SkFloatToScalar(44), SkFloatToScalar(48));
+    verts[0].set(107, 189);
+    texs[0].set(0, 0);
+    verts[1].set(116, 189);
+    texs[1].set(9, 0);
+    verts[2].set(203, 189);
+    texs[2].set(35, 0);
+    verts[3].set(212, 189);
+    texs[3].set(44, 0);
+    verts[4].set(107, 198);
+    texs[4].set(0, 9);
+    verts[5].set(116, 198);
+    texs[5].set(9, 9);
+    verts[6].set(203, 198);
+    texs[6].set(35, 9);
+    verts[7].set(212, 198);
+    texs[7].set(44, 9);
+    verts[8].set(107, 224);
+    texs[8].set(0, 39);
+    verts[9].set(116, 224);
+    texs[9].set(9, 39);
+    verts[10].set(203, 224);
+    texs[10].set(35, 39);
+    verts[11].set(212, 224);
+    texs[11].set(44, 39);
+    verts[12].set(107, 233);
+    texs[12].set(0, 48);
+    verts[13].set(116, 233);
+    texs[13].set(9, 48);
+    verts[14].set(203, 233);
+    texs[14].set(35, 48);
+    verts[15].set(212, 233);
+    texs[15].set(44, 48);
     index[0] = 0; index[1] = 5; index[2] = 1;
     index[3] = 0; index[4] = 4; index[5] = 5;
 #if 0
