diff --git a/samplecode/Sample.cpp b/samplecode/Sample.cpp
index 5a87c9e..e79313d 100644
--- a/samplecode/Sample.cpp
+++ b/samplecode/Sample.cpp
@@ -32,7 +32,7 @@
 void Sample::draw(SkCanvas* canvas) {
     if (fWidth && fHeight) {
         SkRect    r;
-        r.set(0, 0, fWidth, fHeight);
+        r.setLTRB(0, 0, fWidth, fHeight);
         if (canvas->quickReject(r)) {
             return;
         }
diff --git a/samplecode/SampleAAClip.cpp b/samplecode/SampleAAClip.cpp
index 8733be5..46e4fe2 100644
--- a/samplecode/SampleAAClip.cpp
+++ b/samplecode/SampleAAClip.cpp
@@ -65,7 +65,7 @@
         SkPath path;
         SkRect bounds;
 
-        bounds.set(0, 0, 20, 20);
+        bounds.setLTRB(0, 0, 20, 20);
         bounds.inset(SK_ScalarHalf, SK_ScalarHalf);
 
 //        path.addRect(bounds);
diff --git a/samplecode/SampleAARects.cpp b/samplecode/SampleAARects.cpp
index 028c30d..834a1e5 100644
--- a/samplecode/SampleAARects.cpp
+++ b/samplecode/SampleAARects.cpp
@@ -17,7 +17,7 @@
 
     SkCanvas canvas(bitmap);
     SkRect r;
-    r.set(0, 0, SkIntToScalar(n), SkIntToScalar(n));
+    r.setWH(SkIntToScalar(n), SkIntToScalar(n));
     SkPaint paint;
     paint.setAntiAlias(true);
 
diff --git a/samplecode/SampleArc.cpp b/samplecode/SampleArc.cpp
index 2d5892d..043bc57 100644
--- a/samplecode/SampleArc.cpp
+++ b/samplecode/SampleArc.cpp
@@ -26,7 +26,7 @@
 #include "include/utils/SkParsePath.h"
 static void testparse() {
     SkRect r;
-    r.set(0, 0, 10, 10.5f);
+    r.setLTRB(0, 0, 10, 10.5f);
     SkPath p, p2;
     SkString str, str2;
 
@@ -109,7 +109,7 @@
         SkScalar w = 75;
         SkScalar h = 50;
 
-        r.set(0, 0, w, h);
+        r.setWH(w, h);
         paint.setAntiAlias(true);
         paint.setStyle(SkPaint::kStroke_Style);
 
diff --git a/samplecode/SampleColorFilter.cpp b/samplecode/SampleColorFilter.cpp
index d30f760..7f57a32 100644
--- a/samplecode/SampleColorFilter.cpp
+++ b/samplecode/SampleColorFilter.cpp
@@ -89,7 +89,7 @@
 
     SkCanvas canvas(bitmap);
     SkRect r;
-    r.set(0, 0, SkIntToScalar(n), SkIntToScalar(n));
+    r.setWH(SkIntToScalar(n), SkIntToScalar(n));
     r.inset(SK_Scalar1, SK_Scalar1);
 
     SkPaint paint;
@@ -136,7 +136,7 @@
             p.setAntiAlias(true);
             SkRect r = { 20.4f, 10, 20.6f, 20 };
             canvas->drawRect(r, p);
-            r.set(30.9f, 10, 31.1f, 20);
+            r.setLTRB(30.9f, 10, 31.1f, 20);
             canvas->drawRect(r, p);
             return;
         }
diff --git a/samplecode/SampleFatBits.cpp b/samplecode/SampleFatBits.cpp
index 796fdd5..385c9e1 100644
--- a/samplecode/SampleFatBits.cpp
+++ b/samplecode/SampleFatBits.cpp
@@ -59,7 +59,7 @@
         fUseTriangle = false;
         fStrokeCap = SkPaint::kButt_Cap;
 
-        fClipRect.set(2, 2, 11, 8 );
+        fClipRect.setLTRB(2, 2, 11, 8 );
     }
 
     int getZoom() const { return fZoom; }
@@ -102,7 +102,7 @@
         fW = width;
         fH = height;
         fZoom = zoom;
-        fBounds.set(0, 0, SkIntToScalar(width * zoom), SkIntToScalar(height * zoom));
+        fBounds.setIWH(width * zoom, height * zoom);
         fMatrix.setScale(SkIntToScalar(zoom), SkIntToScalar(zoom));
         fInverse.setScale(SK_Scalar1 / zoom, SK_Scalar1 / zoom);
         fShader0 = ToolUtils::create_checkerboard_shader(0xFFDDDDDD, 0xFFFFFFFF, zoom);
@@ -297,7 +297,7 @@
     }
 
     SkRect r;
-    r.set(pts, 2);
+    r.setBounds(pts, 2);
 
     erase(fMinSurface.get());
     this->setupPaint(&paint);
@@ -311,7 +311,7 @@
     SkCanvas* max = fMaxSurface->getCanvas();
 
     fMatrix.mapPoints(pts, 2);
-    r.set(pts, 2);
+    r.setBounds(pts, 2);
     this->drawRectSkeleton(max, r);
 
     fMaxSurface->draw(canvas, 0, 0, nullptr);
diff --git a/samplecode/SampleGradients.cpp b/samplecode/SampleGradients.cpp
index d52c1fe..9eb4e71 100644
--- a/samplecode/SampleGradients.cpp
+++ b/samplecode/SampleGradients.cpp
@@ -16,8 +16,7 @@
 
 static void test_alphagradients(SkCanvas* canvas) {
     SkRect r;
-    r.set(SkIntToScalar(10), SkIntToScalar(10),
-          SkIntToScalar(410), SkIntToScalar(30));
+    r.setLTRB(10, 10, 410, 30);
     SkPaint p, p2;
     p2.setStyle(SkPaint::kStroke_Style);
 
diff --git a/samplecode/SampleLayerMask.cpp b/samplecode/SampleLayerMask.cpp
index ab6b0e0..9785e88 100644
--- a/samplecode/SampleLayerMask.cpp
+++ b/samplecode/SampleLayerMask.cpp
@@ -50,7 +50,7 @@
 
     virtual void onDrawContent(SkCanvas* canvas) {
         SkRect  r;
-        r.set(SkIntToScalar(20), SkIntToScalar(20), SkIntToScalar(120), SkIntToScalar(120));
+        r.setLTRB(20, 20, 120, 120);
         canvas->saveLayer(&r, nullptr);
         canvas->drawColor(SK_ColorRED);
         drawMask(canvas, r);
diff --git a/samplecode/SampleLayers.cpp b/samplecode/SampleLayers.cpp
index 422d360..94913ae 100644
--- a/samplecode/SampleLayers.cpp
+++ b/samplecode/SampleLayers.cpp
@@ -44,7 +44,7 @@
 
     // create the layers
 
-    r.set(0, 0, SkIntToScalar(100), SkIntToScalar(100));
+    r.setWH(100, 100);
     canvas->clipRect(r);
 
     r.fBottom = SkIntToScalar(20);
@@ -57,7 +57,7 @@
     // now draw the "content"
 
     if (true) {
-        r.set(0, 0, SkIntToScalar(100), SkIntToScalar(100));
+        r.setWH(100, 100);
 
         canvas->saveLayerAlpha(&r, 0x80);
 
@@ -68,7 +68,7 @@
 
         canvas->restore();
     } else {
-        r.set(0, 0, SkIntToScalar(100), SkIntToScalar(100));
+        r.setWH(100, 100);
 
         SkPaint p;
         p.setColor(SK_ColorRED);
@@ -85,7 +85,7 @@
 
     SkPaint paint;
     make_paint(&paint, m);
-    r.set(0, 0, SkIntToScalar(100), SkIntToScalar(20));
+    r.setWH(100, 20);
 //    SkDebugf("--------- draw top grad\n");
     canvas->drawRect(r, paint);
 
@@ -111,8 +111,7 @@
 
         if (true) {
             SkRect r;
-            r.set(SkIntToScalar(0), SkIntToScalar(0),
-                  SkIntToScalar(220), SkIntToScalar(120));
+            r.setWH(220, 120);
             SkPaint p;
             canvas->saveLayer(&r, &p);
             canvas->drawColor(0xFFFF0000);
@@ -125,8 +124,7 @@
 
         if (false) {
             SkRect r;
-            r.set(SkIntToScalar(0), SkIntToScalar(0),
-                  SkIntToScalar(220), SkIntToScalar(120));
+            r.setWH(220, 120);
             SkPaint p;
             p.setAlpha(0x88);
             p.setAntiAlias(true);
@@ -151,13 +149,11 @@
             canvas->translate(SkIntToScalar(300), 0);
 
             SkRect r;
-            r.set(SkIntToScalar(0), SkIntToScalar(0),
-                  SkIntToScalar(220), SkIntToScalar(60));
+            r.setWH(220, 60);
 
             canvas->saveLayer(&r, &p);
 
-            r.set(SkIntToScalar(0), SkIntToScalar(0),
-                  SkIntToScalar(220), SkIntToScalar(120));
+            r.setWH(220, 120);
             p.setColor(SK_ColorBLUE);
             canvas->drawOval(r, p);
             canvas->restore();
diff --git a/samplecode/SampleMegaStroke.cpp b/samplecode/SampleMegaStroke.cpp
index 0d13b49..33fa431 100644
--- a/samplecode/SampleMegaStroke.cpp
+++ b/samplecode/SampleMegaStroke.cpp
@@ -13,7 +13,7 @@
 class MegaStrokeView : public Sample {
 public:
     MegaStrokeView() {
-        fClip.set(0, 0, 950, 600);
+        fClip.setLTRB(0, 0, 950, 600);
         fAngle = 0;
         fPlusMinus = 0;
         SkRandom rand;
@@ -29,7 +29,7 @@
     SkString name() override { return SkString("MegaStroke"); }
 
     bool onChar(SkUnichar uni) override {
-        fClip.set(0, 0, 950, 600);
+        fClip.setLTRB(0, 0, 950, 600);
         return true;
     }
 
@@ -66,7 +66,7 @@
     }
 
     void onSizeChange() override {
-        fClip.set(0, 0, 950, 600);
+        fClip.setWH(950, 600);
     }
 
     bool onAnimate(double /*nanos*/) override { return true; }
diff --git a/samplecode/SamplePathEffects.cpp b/samplecode/SamplePathEffects.cpp
index 4522d93..ccdc541 100644
--- a/samplecode/SamplePathEffects.cpp
+++ b/samplecode/SamplePathEffects.cpp
@@ -97,8 +97,7 @@
 
         {
             SkRect  oval;
-            oval.set(SkIntToScalar(20), SkIntToScalar(30),
-                     SkIntToScalar(100), SkIntToScalar(60));
+            oval.setLTRB(20, 30, 100, 60);
             oval.offset(x, 0);
             fPath.addRoundRect(oval, SkIntToScalar(8), SkIntToScalar(8));
         }
diff --git a/samplecode/SampleQuadStroker.cpp b/samplecode/SampleQuadStroker.cpp
index 20f5ff7..7a68541 100644
--- a/samplecode/SampleQuadStroker.cpp
+++ b/samplecode/SampleQuadStroker.cpp
@@ -276,7 +276,7 @@
 
    void setWHZ(int width, int height, int zoom) {
         fZoom = zoom;
-        fBounds.set(0, 0, SkIntToScalar(width * zoom), SkIntToScalar(height * zoom));
+        fBounds.setIWH(width * zoom, height * zoom);
         fMatrix.setScale(SkIntToScalar(zoom), SkIntToScalar(zoom));
         fInverse.setScale(SK_Scalar1 / zoom, SK_Scalar1 / zoom);
         fShader = ToolUtils::create_checkerboard_shader(0xFFCCCCCC, 0xFFFFFFFF, zoom);
@@ -635,7 +635,7 @@
         if (fRRectButton.fEnabled) {
             SkScalar rad = 32;
             SkRect r;
-            r.set(&fPts[13], 2);
+            r.setBounds(&fPts[13], 2);
             path.reset();
             SkRRect rr;
             rr.setRectXY(r, rad, rad);
@@ -658,15 +658,15 @@
         if (fCircleButton.fEnabled) {
             path.reset();
             SkRect r;
-            r.set(&fPts[15], 2);
+            r.setBounds(&fPts[15], 2);
             path.addOval(r);
             setForGeometry();
             if (fCircleButton.fFill) {
                 if (fArcButton.fEnabled) {
                     SkPoint center;
                     if (arcCenter(&center)) {
-                        r.set(center.fX - fRadius, center.fY - fRadius, center.fX + fRadius,
-                                center.fY + fRadius);
+                        r.setLTRB(center.fX - fRadius, center.fY - fRadius,
+                                  center.fX + fRadius, center.fY + fRadius);
                     }
                 }
                 draw_fill(canvas, r, width);
diff --git a/samplecode/SampleRegion.cpp b/samplecode/SampleRegion.cpp
index 21b2da7..688d57d 100644
--- a/samplecode/SampleRegion.cpp
+++ b/samplecode/SampleRegion.cpp
@@ -61,7 +61,8 @@
     SkFontMetrics fm;
 
     font.getMetrics(&fm);
-    bounds.set(x, y + fm.fTop, x + font.measureText(text, len, SkTextEncoding::kUTF8), y + fm.fBottom);
+    bounds.setLTRB(x, y + fm.fTop,
+                   x + font.measureText(text, len, SkTextEncoding::kUTF8), y + fm.fBottom);
 
     // may need to outset bounds a little, to account for hinting and/or
     // antialiasing
@@ -155,7 +156,7 @@
 class RegionView : public Sample {
 public:
     RegionView() {
-        fBase.set(100, 100, 150, 150);
+        fBase.setLTRB(100, 100, 150, 150);
         fRect = fBase;
         fRect.inset(5, 5);
         fRect.offset(25, 25);
diff --git a/samplecode/SampleXfermodesBlur.cpp b/samplecode/SampleXfermodesBlur.cpp
index 1d31524..9ec35dc 100644
--- a/samplecode/SampleXfermodesBlur.cpp
+++ b/samplecode/SampleXfermodesBlur.cpp
@@ -50,7 +50,7 @@
         // left three quarters of the canvas
         p.setColor(0xFFCC44FF);
         SkRect r;
-        r.set(0, 0, ww*3/4, hh*3/4);
+        r.setLTRB(0, 0, ww*3/4, hh*3/4);
         r.offset(x, y);
         canvas->drawOval(r, p);
 
@@ -59,7 +59,7 @@
         // draw a square overlapping the circle
         // in the lower right of the canvas
         p.setColor(0x00AA6633 | alpha << 24);
-        r.set(ww/3, hh/3, ww*19/20, hh*19/20);
+        r.setLTRB(ww/3, hh/3, ww*19/20, hh*19/20);
         r.offset(x, y);
         canvas->drawRect(r, p);
     }
@@ -111,7 +111,7 @@
             SkScalar x = x0, y = 0;
             for (size_t i = 0; i < SK_ARRAY_COUNT(gModes); i++) {
                 SkRect r;
-                r.set(x, y, x+w, y+h);
+                r.setLTRB(x, y, x+w, y+h);
 
                 SkPaint p;
                 p.setStyle(SkPaint::kFill_Style);
