add dumpHex option to rect and rrect, to match path

BUG=skia:

Review URL: https://codereview.chromium.org/801383002
diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp
index 2cb33e2..f8280bd 100644
--- a/src/core/SkPath.cpp
+++ b/src/core/SkPath.cpp
@@ -2021,24 +2021,11 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-#include "SkString.h"
+#include "SkStringUtils.h"
 #include "SkStream.h"
 
-static void append_scalar(SkString* str, SkScalar value, bool dumpAsHex) {
-    if (dumpAsHex) {
-        str->appendf("SkBits2Float(0x%08x)", SkFloat2Bits(value));
-        return;
-    }
-    SkString tmp;
-    tmp.printf("%g", value);
-    if (tmp.contains('.')) {
-        tmp.appendUnichar('f');
-    }
-    str->append(tmp);
-}
-
 static void append_params(SkString* str, const char label[], const SkPoint pts[],
-                          int count, bool dumpAsHex, SkScalar conicWeight = -1) {
+                          int count, SkScalarAsStringType strType, SkScalar conicWeight = -1) {
     str->append(label);
     str->append("(");
 
@@ -2046,33 +2033,34 @@
     count *= 2;
 
     for (int i = 0; i < count; ++i) {
-        append_scalar(str, values[i], dumpAsHex);
+        SkAppendScalar(str, values[i], strType);
         if (i < count - 1) {
             str->append(", ");
         }
     }
     if (conicWeight >= 0) {
         str->append(", ");
-        append_scalar(str, conicWeight, dumpAsHex);
+        SkAppendScalar(str, conicWeight, strType);
     }
     str->append(");");
-    if (dumpAsHex) {
+    if (kHex_SkScalarAsStringType == strType) {
         str->append("  // ");
         for (int i = 0; i < count; ++i) {
-            append_scalar(str, values[i], false);
+            SkAppendScalarDec(str, values[i]);
             if (i < count - 1) {
                 str->append(", ");
             }
         }
         if (conicWeight >= 0) {
             str->append(", ");
-            append_scalar(str, conicWeight, false);
+            SkAppendScalarDec(str, conicWeight);
         }
     }
     str->append("\n");
 }
 
 void SkPath::dump(SkWStream* wStream, bool forceClose, bool dumpAsHex) const {
+    SkScalarAsStringType asType = dumpAsHex ? kHex_SkScalarAsStringType : kDec_SkScalarAsStringType;
     Iter    iter(*this, forceClose);
     SkPoint pts[4];
     Verb    verb;
@@ -2085,19 +2073,19 @@
     while ((verb = iter.next(pts, false)) != kDone_Verb) {
         switch (verb) {
             case kMove_Verb:
-                append_params(&builder, "path.moveTo", &pts[0], 1, dumpAsHex);
+                append_params(&builder, "path.moveTo", &pts[0], 1, asType);
                 break;
             case kLine_Verb:
-                append_params(&builder, "path.lineTo", &pts[1], 1, dumpAsHex);
+                append_params(&builder, "path.lineTo", &pts[1], 1, asType);
                 break;
             case kQuad_Verb:
-                append_params(&builder, "path.quadTo", &pts[1], 2, dumpAsHex);
+                append_params(&builder, "path.quadTo", &pts[1], 2, asType);
                 break;
             case kConic_Verb:
-                append_params(&builder, "path.conicTo", &pts[1], 2, dumpAsHex, iter.conicWeight());
+                append_params(&builder, "path.conicTo", &pts[1], 2, asType, iter.conicWeight());
                 break;
             case kCubic_Verb:
-                append_params(&builder, "path.cubicTo", &pts[1], 3, dumpAsHex);
+                append_params(&builder, "path.cubicTo", &pts[1], 3, asType);
                 break;
             case kClose_Verb:
                 builder.append("path.close();\n");