add drawString helper to canvas
authorCary Clark <caryclark@google.com>
Fri, 28 Apr 2017 19:35:12 +0000 (15:35 -0400)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Fri, 28 Apr 2017 20:41:04 +0000 (20:41 +0000)
Many tests and examples use drawText with
a guess of how long the text is in bytes,
or a call to strlen(). Add a helper to
SkCanvas to simplify these examples.

Add another helper for SkString.

R=reed@google.com

Change-Id: I0204a31e938f065606f08ee7cd9a6b36db791ee2
Reviewed-on: https://skia-review.googlesource.com/13642
Commit-Queue: Cary Clark <caryclark@google.com>
Reviewed-by: Cary Clark <caryclark@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Cary Clark <caryclark@skia.org>
124 files changed:
bench/DisplacementBench.cpp
bench/FontScalerBench.cpp
bench/MergeBench.cpp
bench/ShaderMaskBench.cpp
bench/TextBench.cpp
fuzz/FilterFuzz.cpp
gm/aaxfermodes.cpp
gm/all_bitmap_configs.cpp
gm/animatedGif.cpp
gm/arithmode.cpp
gm/bigtext.cpp
gm/bitmapcopy.cpp
gm/bitmapfilters.cpp
gm/blurs.cpp
gm/bmpfilterqualityrepeat.cpp
gm/coloremoji.cpp
gm/coloremoji_blendmodes.cpp
gm/colorwheel.cpp
gm/complexclip.cpp
gm/complexclip3.cpp
gm/constcolorprocessor.cpp
gm/cubicpaths.cpp
gm/dashing.cpp
gm/degeneratesegments.cpp
gm/dftext.cpp
gm/downsamplebitmap.cpp
gm/drawatlascolor.cpp
gm/drawbitmaprect.cpp
gm/drawlooper.cpp
gm/dropshadowimagefilter.cpp
gm/dstreadshuffle.cpp
gm/emptypath.cpp
gm/filterbitmap.cpp
gm/fontcache.cpp
gm/fontmgr.cpp
gm/gamma.cpp
gm/gamut.cpp
gm/gm.cpp
gm/gradtext.cpp
gm/highcontrastfilter.cpp
gm/image.cpp
gm/imageblur.cpp
gm/imageblur2.cpp
gm/imageblurtiled.cpp
gm/imagefiltersbase.cpp
gm/imagefilterscropped.cpp
gm/imagemagnifier.cpp
gm/imageresizetiled.cpp
gm/internal_links.cpp
gm/lcdblendmodes.cpp
gm/lcdtext.cpp
gm/lightingshader2.cpp
gm/lightingshaderbevel.cpp
gm/linepaths.cpp
gm/matrixconvolution.cpp
gm/mipmap.cpp
gm/morphology.cpp
gm/pdf_never_embed.cpp
gm/pictureimagefilter.cpp
gm/pixelsnap.cpp
gm/poly2poly.cpp
gm/quadpaths.cpp
gm/rectangletexture.cpp
gm/samplerstress.cpp
gm/shadertext2.cpp
gm/simpleaaclip.cpp
gm/skbug_257.cpp
gm/srcmode.cpp
gm/stroketext.cpp
gm/surface.cpp
gm/texteffects.cpp
gm/tilemodes.cpp
gm/tilemodes_scaled.cpp
gm/variedtext.cpp
gm/verttext2.cpp
gm/windowrectangles.cpp
gm/xfermodes.cpp
gm/xfermodes2.cpp
gm/xfermodes3.cpp
include/core/SkCanvas.h
samplecode/ClockFaceView.cpp
samplecode/OverView.cpp
samplecode/SampleAAGeometry.cpp
samplecode/SampleAll.cpp
samplecode/SampleAnimatedText.cpp
samplecode/SampleArc.cpp
samplecode/SampleBevel.cpp
samplecode/SampleBitmapRect.cpp
samplecode/SampleBlur.cpp
samplecode/SampleClip.cpp
samplecode/SampleComplexClip.cpp
samplecode/SampleDegenerateTwoPtRadials.cpp
samplecode/SampleFatBits.cpp
samplecode/SampleFilter.cpp
samplecode/SampleFilter2.cpp
samplecode/SampleFilterFuzz.cpp
samplecode/SampleFilterQuality.cpp
samplecode/SampleIdentityScale.cpp
samplecode/SamplePolyToPoly.cpp
samplecode/SampleQuadStroker.cpp
samplecode/SampleRectanizer.cpp
samplecode/SampleRegion.cpp
samplecode/SampleShip.cpp
samplecode/SampleStrokePath.cpp
samplecode/SampleSubpixelTranslate.cpp
samplecode/SampleText.cpp
samplecode/SampleTextAlpha.cpp
samplecode/SampleTiling.cpp
samplecode/SampleUnpremul.cpp
samplecode/SampleXfer.cpp
samplecode/SampleXfermodesBlur.cpp
src/core/SkCanvas.cpp
src/gpu/ops/GrAAConvexTessellator.cpp
tests/DrawTextTest.cpp
tests/FlattenDrawableTest.cpp
tests/FontHostStreamTest.cpp
tests/ImageFilterTest.cpp
tests/PDFDocumentTest.cpp
tests/PictureTest.cpp
tests/SerializationTest.cpp
tests/SurfaceTest.cpp
tools/colorspaceinfo.cpp
tools/sk_tool_utils.cpp
tools/viewer/sk_app/CommandSet.cpp

index 9edf214..3dd7965 100644 (file)
@@ -40,7 +40,7 @@ protected:
         paint.setColor(0xFF884422);
         paint.setTextSize(SkIntToScalar(96));
         const char* str = "g";
-        canvas.drawText(str, strlen(str), SkIntToScalar(15), SkIntToScalar(55), paint);
+        canvas.drawString(str, SkIntToScalar(15), SkIntToScalar(55), paint);
     }
 
     void makeCheckerboard() {
index a5ab7b5..366c54c 100644 (file)
@@ -37,7 +37,7 @@ protected:
 
             for (int ps = 9; ps <= 24; ps += 2) {
                 paint.setTextSize(SkIntToScalar(ps));
-                canvas->drawText(fText.c_str(), fText.size(),
+                canvas->drawString(fText,
                         0, SkIntToScalar(20), paint);
             }
         }
index 8b6004d..c37d198 100644 (file)
@@ -24,7 +24,7 @@ static sk_sp<SkImage> make_bitmap() {
     paint.setColor(0xFF884422);
     paint.setTextSize(SkIntToScalar(96));
     const char* str = "g";
-    surface->getCanvas()->drawText(str, strlen(str), 15, 55, paint);
+    surface->getCanvas()->drawString(str, 15, 55, paint);
     return surface->makeImageSnapshot();
 }
 
index 90a5037..8fd99b6 100644 (file)
@@ -71,14 +71,14 @@ protected:
         for (int i = 0; i < loops; i++) {
             SkScalar x = x0 + rand.nextUScalar1() * dim.fX;
             SkScalar y = y0 + rand.nextUScalar1() * dim.fY;
-            canvas->drawText(fText.c_str(), fText.size(), x, y, paint);
+            canvas->drawString(fText, x, y, paint);
         }
 
         paint.setTextSize(SkIntToScalar(48));
         for (int i = 0; i < loops / 4 ; i++) {
             SkScalar x = x0 + rand.nextUScalar1() * dim.fX;
             SkScalar y = y0 + rand.nextUScalar1() * dim.fY;
-            canvas->drawText(fText.c_str(), fText.size(), x, y, paint);
+            canvas->drawString(fText, x, y, paint);
         }
     }
 
index f4a7cdd..6e9df4a 100644 (file)
@@ -140,7 +140,7 @@ protected:
             } else {
                 SkScalar x = x0 + rand.nextUScalar1() * dim.fX;
                 SkScalar y = y0 + rand.nextUScalar1() * dim.fY;
-                canvas->drawText(fText.c_str(), fText.size(), x, y, paint);
+                canvas->drawString(fText, x, y, paint);
             }
         }
     }
index 312f932..cf65701 100644 (file)
@@ -239,7 +239,7 @@ static void make_g_bitmap(SkBitmap& bitmap) {
     paint.setColor(0xFF884422);
     paint.setTextSize(SkIntToScalar(kBitmapSize/2));
     const char* str = "g";
-    canvas.drawText(str, strlen(str), SkIntToScalar(kBitmapSize/8),
+    canvas.drawString(str, SkIntToScalar(kBitmapSize/8),
                     SkIntToScalar(kBitmapSize/4), paint);
 }
 
@@ -325,7 +325,7 @@ static void drawSomething(SkCanvas* canvas) {
     canvas->drawCircle(SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/3), paint);
     paint.setColor(SK_ColorBLACK);
     paint.setTextSize(SkIntToScalar(kBitmapSize/3));
-    canvas->drawText("Picture", 7, SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/4), paint);
+    canvas->drawString("Picture", SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/4), paint);
 }
 
 static sk_sp<SkColorFilter> make_color_filter() {
index 96b9b48..eab68b4 100644 (file)
@@ -107,10 +107,10 @@ protected:
 
             if (kShape_Pass == drawingPass) {
                 fLabelPaint.setTextAlign(SkPaint::kCenter_Align);
-                canvas->drawText("Src Unknown", sizeof("Src Unknown") - 1,
+                canvas->drawString("Src Unknown",
                         kLabelSpacing + kShapeTypeSpacing * 1.5f + kShapeSpacing / 2,
                         kSubtitleSpacing / 2 + fLabelPaint.getTextSize() / 3, fLabelPaint);
-                canvas->drawText("Src Opaque", sizeof("Src Opaque") - 1,
+                canvas->drawString("Src Opaque",
                         kLabelSpacing + kShapeTypeSpacing * 1.5f + kShapeSpacing / 2 +
                         kPaintSpacing, kSubtitleSpacing / 2 + fLabelPaint.getTextSize() / 3,
                         fLabelPaint);
@@ -180,10 +180,10 @@ protected:
         titlePaint.setTextSize(9 * titlePaint.getTextSize() / 8);
         titlePaint.setFakeBoldText(true);
         titlePaint.setTextAlign(SkPaint::kCenter_Align);
-        canvas->drawText("Porter Duff", sizeof("Porter Duff") - 1,
+        canvas->drawString("Porter Duff",
                          kLabelSpacing + 4 * kShapeTypeSpacing,
                          kTitleSpacing / 2 + titlePaint.getTextSize() / 3, titlePaint);
-        canvas->drawText("Advanced", sizeof("Advanced") - 1,
+        canvas->drawString("Advanced",
                          kXfermodeTypeSpacing + kLabelSpacing + 4 * kShapeTypeSpacing,
                          kTitleSpacing / 2 + titlePaint.getTextSize() / 3, titlePaint);
 
@@ -194,7 +194,7 @@ protected:
     void drawModeName(SkCanvas* canvas, SkBlendMode mode) {
         const char* modeName = SkBlendMode_Name(mode);
         fLabelPaint.setTextAlign(SkPaint::kRight_Align);
-        canvas->drawText(modeName, strlen(modeName), kLabelSpacing - kShapeSize / 4,
+        canvas->drawString(modeName, kLabelSpacing - kShapeSize / 4,
                          fLabelPaint.getTextSize() / 4, fLabelPaint);
     }
 
index 98d6621..4c8ea35 100644 (file)
@@ -150,7 +150,7 @@ static void draw(SkCanvas* canvas,
                  const char text[]) {
     SkASSERT(src.colorType() == colorType);
     canvas->drawBitmap(src, 0.0f, 0.0f);
-    canvas->drawText(text, strlen(text), 0.0f, 12.0f, p);
+    canvas->drawString(text, 0.0f, 12.0f, p);
 }
 
 DEF_SIMPLE_GM(all_bitmap_configs, canvas, SCALE, 6 * SCALE) {
index dd08abf..5f4fe71 100644 (file)
@@ -27,7 +27,7 @@ namespace {
         SkPaint paint;
         SkRect bounds;
         paint.measureText(errorText.c_str(), errorText.size(), &bounds);
-        canvas->drawText(errorText.c_str(), errorText.size(), kOffset, bounds.height() + kOffset,
+        canvas->drawString(errorText, kOffset, bounds.height() + kOffset,
                          paint);
     }
 }
index c01ece7..54169ce 100644 (file)
@@ -60,7 +60,7 @@ static void show_k_text(SkCanvas* canvas, SkScalar x, SkScalar y, const SkScalar
         SkString str;
         str.appendScalar(k[i]);
         SkScalar width = paint.measureText(str.c_str(), str.size());
-        canvas->drawText(str.c_str(), str.size(), x, y + paint.getTextSize(), paint);
+        canvas->drawString(str, x, y + paint.getTextSize(), paint);
         x += width + SkIntToScalar(10);
     }
 }
@@ -152,7 +152,7 @@ protected:
                 paint.setAntiAlias(true);
                 sk_tool_utils::set_portable_typeface(&paint);
                 SkString str(enforcePMColor ? "enforcePM" : "no enforcePM");
-                canvas->drawText(str.c_str(), str.size(), 0, paint.getTextSize(), paint);
+                canvas->drawString(str, 0, paint.getTextSize(), paint);
             }
             canvas->translate(0, HH + 12);
         }
index 4d5005e..6b3c9b1 100644 (file)
@@ -43,7 +43,7 @@ protected:
         };
 
         paint.setColor(SK_ColorRED);
-        canvas->drawText("/", 1, pos.fX, pos.fY, paint);
+        canvas->drawString("/", pos.fX, pos.fY, paint);
 
         paint.setColor(SK_ColorBLUE);
         canvas->drawPosText("\\", 1, &pos, paint);
index 64f1136..ec9e423 100644 (file)
@@ -101,7 +101,7 @@ protected:
             SkScalar textWidth = paint.measureText(name, strlen(name));
             SkScalar x = (width - textWidth) / SkScalar(2);
             SkScalar y = paint.getFontSpacing() / SkScalar(2);
-            canvas->drawText(name, strlen(name), x, y, paint);
+            canvas->drawString(name, x, y, paint);
 
             // Draw destination bitmap
             canvas->translate(0, vertOffset);
index b99ab10..4d31cae 100644 (file)
@@ -52,7 +52,7 @@ static SkScalar draw_row(SkCanvas* canvas, const SkBitmap& bm) {
     paint.setAntiAlias(true);
     sk_tool_utils::set_portable_typeface(&paint);
     const char* name = sk_tool_utils::colortype_name(bm.colorType());
-    canvas->drawText(name, strlen(name), x, SkIntToScalar(bm.height())*scale*5/8,
+    canvas->drawString(name, x, SkIntToScalar(bm.height())*scale*5/8,
                      paint);
     canvas->translate(SkIntToScalar(48), 0);
 
index f1f44e7..a7b1a5f 100644 (file)
@@ -55,14 +55,14 @@ DEF_SIMPLE_GM_BG(blurs, canvas, 700, 500, sk_tool_utils::color_to_565(0xFFDDDDDD
                 SkScalar x = SkIntToScalar(70);
                 SkScalar y = SkIntToScalar(400);
                 paint.setColor(SK_ColorBLACK);
-                canvas->drawText("Hamburgefons Style", 18, x, y, paint);
-                canvas->drawText("Hamburgefons Style", 18,
+                canvas->drawString("Hamburgefons Style", x, y, paint);
+                canvas->drawString("Hamburgefons Style",
                                  x, y + SkIntToScalar(50), paint);
                 paint.setMaskFilter(nullptr);
                 paint.setColor(SK_ColorWHITE);
                 x -= SkIntToScalar(2);
                 y -= SkIntToScalar(2);
-                canvas->drawText("Hamburgefons Style", 18, x, y, paint);
+                canvas->drawString("Hamburgefons Style", x, y, paint);
             }
             canvas->restore();
             flags = SkBlurMaskFilter::kHighQuality_BlurFlag;
index e7ea97d..313fd93 100644 (file)
@@ -76,7 +76,7 @@ private:
             bmpPaint.setShader(SkShader::MakeBitmapShader(fBmp, kTM, kTM, &lm));
             bmpPaint.setFilterQuality(kQualities[q].fQuality);
             canvas->drawRect(rect, bmpPaint);
-            canvas->drawText(kQualities[q].fName, strlen(kQualities[q].fName), 20, 40, textPaint);
+            canvas->drawString(kQualities[q].fName, 20, 40, textPaint);
             canvas->translate(250, 0);
         }
 
index f871e53..7626f9a 100644 (file)
@@ -88,7 +88,7 @@ protected:
             paint.setTextSize(textSize);
             paint.getFontMetrics(&metrics);
             y += -metrics.fAscent;
-            canvas->drawText(text, strlen(text), 10, y, paint);
+            canvas->drawString(text, 10, y, paint);
             y += metrics.fDescent + metrics.fLeading;
         }
 
@@ -124,7 +124,7 @@ protected:
                             shaderPaint.setTextSize(30);
                             shaderPaint.getFontMetrics(&metrics);
                             y += -metrics.fAscent;
-                            canvas->drawText(text, strlen(text), 380, y, shaderPaint);
+                            canvas->drawString(text, 380, y, shaderPaint);
                             y += metrics.fDescent + metrics.fLeading;
                         }
                     }
@@ -162,10 +162,10 @@ protected:
             canvas->save();
             canvas->drawRect(clipRect, clipHairline);
             paint.setAlpha(0x20);
-            canvas->drawText(text, strlen(text), 0, 0, paint);
+            canvas->drawString(text, 0, 0, paint);
             canvas->clipRect(clipRect);
             paint.setAlpha(0xFF);
-            canvas->drawText(text, strlen(text), 0, 0, paint);
+            canvas->drawString(text, 0, 0, paint);
             canvas->restore();
             canvas->translate(0, SkIntToScalar(25));
         }
index d7e8b6c..ee3db76 100644 (file)
@@ -138,7 +138,7 @@ protected:
             }
 #if 1
             const char* label = SkBlendMode_Name(gModes[i]);
-            canvas->drawText(label, strlen(label), x + w/2, y - labelP.getTextSize()/2, labelP);
+            canvas->drawString(label, x + w/2, y - labelP.getTextSize()/2, labelP);
 #endif
             x += w + SkIntToScalar(10);
             if ((i % W) == W - 1) {
index a1ca021..b938cd5 100644 (file)
@@ -46,17 +46,17 @@ DEF_SIMPLE_GM(colorwheelnative, canvas, 128, 28) {
 
     canvas->clear(sk_tool_utils::color_to_565(SK_ColorLTGRAY));
     paint.setColor(SK_ColorRED);
-    canvas->drawText("R", 1, 8.0f, 20.0f, paint);
+    canvas->drawString("R", 8.0f, 20.0f, paint);
     paint.setColor(SK_ColorGREEN);
-    canvas->drawText("G", 1, 24.0f, 20.0f, paint);
+    canvas->drawString("G", 24.0f, 20.0f, paint);
     paint.setColor(SK_ColorBLUE);
-    canvas->drawText("B", 1, 40.0f, 20.0f, paint);
+    canvas->drawString("B", 40.0f, 20.0f, paint);
     paint.setColor(SK_ColorCYAN);
-    canvas->drawText("C", 1, 56.0f, 20.0f, paint);
+    canvas->drawString("C", 56.0f, 20.0f, paint);
     paint.setColor(SK_ColorMAGENTA);
-    canvas->drawText("M", 1, 72.0f, 20.0f, paint);
+    canvas->drawString("M", 72.0f, 20.0f, paint);
     paint.setColor(SK_ColorYELLOW);
-    canvas->drawText("Y", 1, 88.0f, 20.0f, paint);
+    canvas->drawString("Y", 88.0f, 20.0f, paint);
     paint.setColor(SK_ColorBLACK);
-    canvas->drawText("K", 1, 104.0f, 20.0f, paint);
+    canvas->drawString("K", 104.0f, 20.0f, paint);
 }
index 2968715..ae9c4db 100644 (file)
@@ -151,15 +151,14 @@ protected:
                 SkScalar txtX = SkIntToScalar(45);
                 paint.setColor(gClipAColor);
                 const char* aTxt = doInvA ? "InvA " : "A ";
-                canvas->drawText(aTxt, strlen(aTxt), txtX, SkIntToScalar(220), paint);
+                canvas->drawString(aTxt, txtX, SkIntToScalar(220), paint);
                 txtX += paint.measureText(aTxt, strlen(aTxt));
                 paint.setColor(SK_ColorBLACK);
-                canvas->drawText(gOps[op].fName, strlen(gOps[op].fName),
-                                    txtX, SkIntToScalar(220), paint);
+                canvas->drawString(gOps[op].fName, txtX, SkIntToScalar(220), paint);
                 txtX += paint.measureText(gOps[op].fName, strlen(gOps[op].fName));
                 paint.setColor(gClipBColor);
                 const char* bTxt = doInvB ? "InvB " : "B ";
-                canvas->drawText(bTxt, strlen(bTxt), txtX, SkIntToScalar(220), paint);
+                canvas->drawString(bTxt, txtX, SkIntToScalar(220), paint);
 
                 canvas->translate(SkIntToScalar(250),0);
             }
index 47b80ab..7c5c672 100644 (file)
@@ -103,8 +103,7 @@ protected:
                                                    doAAB ? "A" : "B",
                                                    doInvB ? "I" : "N");
 
-                        canvas->drawText(str.c_str(), strlen(str.c_str()), txtX, SkIntToScalar(130),
-                                         paint);
+                        canvas->drawString(str.c_str(), txtX, SkIntToScalar(130), paint);
                         if (doInvB) {
                             canvas->translate(SkIntToScalar(150),0);
                         } else {
index a595a07..2e0fde2 100644 (file)
@@ -135,7 +135,7 @@ protected:
                     // get the bounds of the text in order to position it
                     labelPaint.measureText(inputLabel.c_str(), inputLabel.size(),
                                            &inputLabelBounds);
-                    canvas->drawText(inputLabel.c_str(), inputLabel.size(),
+                    canvas->drawString(inputLabel,
                                      renderRect.fRight + kPad,
                                      -inputLabelBounds.fTop, labelPaint);
                     // update the bounds to reflect the offset we used to draw it.
@@ -144,7 +144,7 @@ protected:
                     SkRect procLabelBounds;
                     labelPaint.measureText(procLabel.c_str(), procLabel.size(),
                                            &procLabelBounds);
-                    canvas->drawText(procLabel.c_str(), procLabel.size(),
+                    canvas->drawString(procLabel,
                                      renderRect.fRight + kPad,
                                      inputLabelBounds.fBottom + 2.f - procLabelBounds.fTop,
                                      labelPaint);
index fd2156c..6bbcd90 100644 (file)
@@ -202,10 +202,10 @@ protected:
         titlePaint.setTextSize(15 * SK_Scalar1);
         const char title[] = "Cubic Drawn Into Rectangle Clips With "
                              "Indicated Style, Fill and Linecaps, with stroke width 10";
-        canvas->drawText(title, strlen(title),
-                            20 * SK_Scalar1,
-                            20 * SK_Scalar1,
-                            titlePaint);
+        canvas->drawString(title,
+                           20 * SK_Scalar1,
+                           20 * SK_Scalar1,
+                           titlePaint);
 
         SkRandom rand;
         SkRect rect = SkRect::MakeWH(100*SK_Scalar1, 30*SK_Scalar1);
@@ -244,18 +244,15 @@ protected:
                     labelPaint.setAntiAlias(true);
                     sk_tool_utils::set_portable_typeface(&labelPaint);
                     labelPaint.setTextSize(10 * SK_Scalar1);
-                    canvas->drawText(gStyles[style].fName,
-                                        strlen(gStyles[style].fName),
-                                        0, rect.height() + 12 * SK_Scalar1,
-                                        labelPaint);
-                    canvas->drawText(gFills[fill].fName,
-                                        strlen(gFills[fill].fName),
-                                        0, rect.height() + 24 * SK_Scalar1,
-                                        labelPaint);
-                    canvas->drawText(gCaps[cap].fName,
-                                        strlen(gCaps[cap].fName),
-                                        0, rect.height() + 36 * SK_Scalar1,
-                                        labelPaint);
+                    canvas->drawString(gStyles[style].fName,
+                                       0, rect.height() + 12 * SK_Scalar1,
+                                       labelPaint);
+                    canvas->drawString(gFills[fill].fName,
+                                       0, rect.height() + 24 * SK_Scalar1,
+                                       labelPaint);
+                    canvas->drawString(gCaps[cap].fName,
+                                       0, rect.height() + 36 * SK_Scalar1,
+                                       labelPaint);
                 }
                 canvas->restore();
             }
@@ -347,10 +344,10 @@ protected:
         titlePaint.setTextSize(15 * SK_Scalar1);
         const char title[] = "Cubic Closed Drawn Into Rectangle Clips With "
                              "Indicated Style, Fill and Linecaps, with stroke width 10";
-        canvas->drawText(title, strlen(title),
-                            20 * SK_Scalar1,
-                            20 * SK_Scalar1,
-                            titlePaint);
+        canvas->drawString(title,
+                           20 * SK_Scalar1,
+                           20 * SK_Scalar1,
+                           titlePaint);
 
         SkRandom rand;
         SkRect rect = SkRect::MakeWH(100*SK_Scalar1, 30*SK_Scalar1);
@@ -389,18 +386,15 @@ protected:
                     labelPaint.setAntiAlias(true);
                     sk_tool_utils::set_portable_typeface(&labelPaint);
                     labelPaint.setTextSize(10 * SK_Scalar1);
-                    canvas->drawText(gStyles[style].fName,
-                                        strlen(gStyles[style].fName),
-                                        0, rect.height() + 12 * SK_Scalar1,
-                                        labelPaint);
-                    canvas->drawText(gFills[fill].fName,
-                                        strlen(gFills[fill].fName),
-                                        0, rect.height() + 24 * SK_Scalar1,
-                                        labelPaint);
-                    canvas->drawText(gCaps[cap].fName,
-                                        strlen(gCaps[cap].fName),
-                                        0, rect.height() + 36 * SK_Scalar1,
-                                        labelPaint);
+                    canvas->drawString(gStyles[style].fName,
+                                       0, rect.height() + 12 * SK_Scalar1,
+                                       labelPaint);
+                    canvas->drawString(gFills[fill].fName,
+                                       0, rect.height() + 24 * SK_Scalar1,
+                                       labelPaint);
+                    canvas->drawString(gCaps[cap].fName,
+                                       0, rect.height() + 36 * SK_Scalar1,
+                                       labelPaint);
                 }
                 canvas->restore();
             }
index 13d45cb..b527fbf 100644 (file)
@@ -543,7 +543,7 @@ DEF_SIMPLE_GM(dashtextcaps, canvas, 512, 512) {
     sk_tool_utils::set_portable_typeface(&p);
     const SkScalar intervals[] = { 12, 12 };
     p.setPathEffect(SkDashPathEffect::Make(intervals, SK_ARRAY_COUNT(intervals), 0));
-    canvas->drawText("Sausages", 8, 10, 90, p);
+    canvas->drawString("Sausages", 10, 90, p);
     canvas->drawLine(8, 120, 456, 120, p);
 }
 
index 25da045..9de66ea 100644 (file)
@@ -294,10 +294,10 @@ protected:
         const char title[] = "Random Paths Drawn Into Rectangle Clips With "
                              "Indicated Style, Fill and Linecaps, "
                              "with Stroke width 6";
-        canvas->drawText(title, strlen(title),
-                            20 * SK_Scalar1,
-                            20 * SK_Scalar1,
-                            titlePaint);
+        canvas->drawString(title,
+                           20 * SK_Scalar1,
+                           20 * SK_Scalar1,
+                           titlePaint);
 
         SkRandom rand;
         SkRect rect = SkRect::MakeWH(220*SK_Scalar1, 50*SK_Scalar1);
@@ -351,38 +351,30 @@ protected:
                 labelPaint.setAntiAlias(true);
                 sk_tool_utils::set_portable_typeface(&labelPaint);
                 labelPaint.setTextSize(10 * SK_Scalar1);
-                canvas->drawText(style.fName,
-                                 strlen(style.fName),
-                                 0, rect.height() + 12 * SK_Scalar1,
-                                 labelPaint);
-                canvas->drawText(fill.fName,
-                                 strlen(fill.fName),
-                                 0, rect.height() + 24 * SK_Scalar1,
-                                 labelPaint);
-                canvas->drawText(cap.fName,
-                                 strlen(cap.fName),
-                                 0, rect.height() + 36 * SK_Scalar1,
-                                 labelPaint);
-                canvas->drawText(gSegmentNames[s1],
-                                 strlen(gSegmentNames[s1]),
-                                 0, rect.height() + 48 * SK_Scalar1,
-                                 labelPaint);
-                canvas->drawText(gSegmentNames[s2],
-                                 strlen(gSegmentNames[s2]),
-                                 0, rect.height() + 60 * SK_Scalar1,
-                                 labelPaint);
-                canvas->drawText(gSegmentNames[s3],
-                                 strlen(gSegmentNames[s3]),
-                                 0, rect.height() + 72 * SK_Scalar1,
-                                 labelPaint);
-                canvas->drawText(gSegmentNames[s4],
-                                 strlen(gSegmentNames[s4]),
-                                 0, rect.height() + 84 * SK_Scalar1,
-                                 labelPaint);
-                canvas->drawText(gSegmentNames[s5],
-                                 strlen(gSegmentNames[s5]),
-                                 0, rect.height() + 96 * SK_Scalar1,
-                                 labelPaint);
+                canvas->drawString(style.fName,
+                                   0, rect.height() + 12 * SK_Scalar1,
+                                   labelPaint);
+                canvas->drawString(fill.fName,
+                                   0, rect.height() + 24 * SK_Scalar1,
+                                   labelPaint);
+                canvas->drawString(cap.fName,
+                                   0, rect.height() + 36 * SK_Scalar1,
+                                   labelPaint);
+                canvas->drawString(gSegmentNames[s1],
+                                   0, rect.height() + 48 * SK_Scalar1,
+                                   labelPaint);
+                canvas->drawString(gSegmentNames[s2],
+                                   0, rect.height() + 60 * SK_Scalar1,
+                                   labelPaint);
+                canvas->drawString(gSegmentNames[s3],
+                                   0, rect.height() + 72 * SK_Scalar1,
+                                   labelPaint);
+                canvas->drawString(gSegmentNames[s4],
+                                   0, rect.height() + 84 * SK_Scalar1,
+                                   labelPaint);
+                canvas->drawString(gSegmentNames[s5],
+                                   0, rect.height() + 96 * SK_Scalar1,
+                                   labelPaint);
             }
             canvas->restore();
         }
index fb69f9b..6067327 100644 (file)
@@ -187,7 +187,7 @@ protected:
         if (fEmojiTypeface) {
             paint.setTypeface(fEmojiTypeface);
             paint.setTextSize(SkIntToScalar(19));
-            canvas->drawText(fEmojiText, strlen(fEmojiText), 670, 90, paint);
+            canvas->drawString(fEmojiText, 670, 90, paint);
         }
 #if SK_SUPPORT_GPU
         // render offscreen buffer
index ba1edc9..fefc94b 100644 (file)
@@ -127,13 +127,13 @@ class DownsampleBitmapTextGM: public DownsampleBitmapGM {
           paint.setTextSize(fTextSize);
 
           setTypeface(&paint, "serif", SkFontStyle());
-          canvas.drawText("Hamburgefons", 12, fTextSize/2, 1.2f*fTextSize, paint);
+          canvas.drawString("Hamburgefons", fTextSize/2, 1.2f*fTextSize, paint);
           setTypeface(&paint, "serif", SkFontStyle::FromOldStyle(SkTypeface::kBold));
-          canvas.drawText("Hamburgefons", 12, fTextSize/2, 2.4f*fTextSize, paint);
+          canvas.drawString("Hamburgefons", fTextSize/2, 2.4f*fTextSize, paint);
           setTypeface(&paint, "serif", SkFontStyle::FromOldStyle(SkTypeface::kItalic));
-          canvas.drawText("Hamburgefons", 12, fTextSize/2, 3.6f*fTextSize, paint);
+          canvas.drawString("Hamburgefons", fTextSize/2, 3.6f*fTextSize, paint);
           setTypeface(&paint, "serif", SkFontStyle::FromOldStyle(SkTypeface::kBoldItalic));
-          canvas.drawText("Hamburgefons", 12, fTextSize/2, 4.8f*fTextSize, paint);
+          canvas.drawString("Hamburgefons", fTextSize/2, 4.8f*fTextSize, paint);
       }
   private:
       typedef DownsampleBitmapGM INHERITED;
index de64cab..548641b 100644 (file)
@@ -138,7 +138,7 @@ protected:
 
         for (int i = 0; i < numModes; ++i) {
             const char* label = SkBlendMode_Name(gModes[i]);
-            canvas->drawText(label, strlen(label),
+            canvas->drawString(label,
                              i*(target.width()+kPad)+kPad, SkIntToScalar(kTextPad),
                              textP);
         }
index 0becf45..2cd1b2f 100644 (file)
@@ -180,7 +180,7 @@ protected:
         sk_tool_utils::set_portable_typeface(&blackPaint);
         SkString title;
         title.printf("Bitmap size: %d x %d", gBmpSize, gBmpSize);
-        canvas->drawText(title.c_str(), title.size(), 0,
+        canvas->drawString(title, 0,
                          titleHeight, blackPaint);
 
         canvas->translate(0, SK_Scalar1 * kPadY / 2  + titleHeight);
@@ -199,7 +199,7 @@ protected:
                 blackPaint.setTextSize(SK_Scalar1 * 10);
                 SkScalar baseline = dstRect.height() +
                                     blackPaint.getTextSize() + SK_Scalar1 * 3;
-                canvas->drawText(label.c_str(), label.size(),
+                canvas->drawString(label,
                                     0, baseline,
                                     blackPaint);
                 blackPaint.setStyle(SkPaint::kStroke_Style);
index c4052e3..07ec8d8 100644 (file)
@@ -43,7 +43,7 @@ protected:
 
         canvas->drawCircle(50, 50, 30, paint);
         canvas->drawRect({ 150, 50, 200, 100 }, paint);
-        canvas->drawText("Looper", 6, 230, 100, paint);
+        canvas->drawString("Looper", 230, 100, paint);
     }
 
 private:
index 87cd798..11de727 100644 (file)
@@ -45,7 +45,7 @@ static void draw_text(SkCanvas* canvas, const SkRect& r, sk_sp<SkImageFilter> im
     paint.setTextAlign(SkPaint::kCenter_Align);
     canvas->save();
     canvas->clipRect(r);
-    canvas->drawText("Text", 4, r.centerX(), r.centerY(), paint);
+    canvas->drawString("Text", r.centerX(), r.centerY(), paint);
     canvas->restore();
 }
 
index f6086b1..3385ae4 100644 (file)
@@ -85,7 +85,7 @@ protected:
                 paint->setTextSize(100.f);
                 paint->setFakeBoldText(true);
                 sk_tool_utils::set_portable_typeface(paint);
-                canvas->drawText(text, strlen(text), 0.f, 100.f, *paint);
+                canvas->drawString(text, 0.f, 100.f, *paint);
             }
             default:
                 break;
index 56377e7..67da93f 100644 (file)
@@ -68,10 +68,10 @@ protected:
         titlePaint.setTextSize(15 * SK_Scalar1);
         const char title[] = "Empty Paths Drawn Into Rectangle Clips With "
                              "Indicated Style and Fill";
-        canvas->drawText(title, strlen(title),
-                            20 * SK_Scalar1,
-                            20 * SK_Scalar1,
-                            titlePaint);
+        canvas->drawString(title,
+                           20 * SK_Scalar1,
+                           20 * SK_Scalar1,
+                           titlePaint);
 
         SkRandom rand;
         SkRect rect = SkRect::MakeWH(100*SK_Scalar1, 30*SK_Scalar1);
@@ -109,14 +109,12 @@ protected:
                 labelPaint.setAntiAlias(true);
                 sk_tool_utils::set_portable_typeface(&labelPaint);
                 labelPaint.setTextSize(12 * SK_Scalar1);
-                canvas->drawText(gStyles[style].fName,
-                                 strlen(gStyles[style].fName),
-                                 0, rect.height() + 15 * SK_Scalar1,
-                                 labelPaint);
-                canvas->drawText(gFills[fill].fName,
-                                 strlen(gFills[fill].fName),
-                                 0, rect.height() + 28 * SK_Scalar1,
-                                 labelPaint);
+                canvas->drawString(gStyles[style].fName,
+                                   0, rect.height() + 15 * SK_Scalar1,
+                                   labelPaint);
+                canvas->drawString(gFills[fill].fName,
+                                   0, rect.height() + 28 * SK_Scalar1,
+                                   labelPaint);
             }
         }
         canvas->restore();
index 0f3371c..92aeddc 100644 (file)
@@ -125,13 +125,13 @@ class FilterBitmapTextGM: public FilterBitmapGM {
           paint.setTextSize(fTextSize);
 
           setTypeface(&paint, "serif", SkFontStyle());
-          canvas.drawText("Hamburgefons", 12, fTextSize/2, 1.2f*fTextSize, paint);
+          canvas.drawString("Hamburgefons", fTextSize/2, 1.2f*fTextSize, paint);
           setTypeface(&paint, "serif", SkFontStyle::FromOldStyle(SkTypeface::kBold));
-          canvas.drawText("Hamburgefons", 12, fTextSize/2, 2.4f*fTextSize, paint);
+          canvas.drawString("Hamburgefons", fTextSize/2, 2.4f*fTextSize, paint);
           setTypeface(&paint, "serif", SkFontStyle::FromOldStyle(SkTypeface::kItalic));
-          canvas.drawText("Hamburgefons", 12, fTextSize/2, 3.6f*fTextSize, paint);
+          canvas.drawString("Hamburgefons", fTextSize/2, 3.6f*fTextSize, paint);
           setTypeface(&paint, "serif", SkFontStyle::FromOldStyle(SkTypeface::kBoldItalic));
-          canvas.drawText("Hamburgefons", 12, fTextSize/2, 4.8f*fTextSize, paint);
+          canvas.drawString("Hamburgefons", fTextSize/2, 4.8f*fTextSize, paint);
       }
   private:
       typedef FilterBitmapGM INHERITED;
index 8775b58..f3f8910 100644 (file)
@@ -15,7 +15,7 @@
 
 static SkScalar draw_string(SkCanvas* canvas, const SkString& text, SkScalar x,
                            SkScalar y, const SkPaint& paint) {
-    canvas->drawText(text.c_str(), text.size(), x, y, paint);
+    canvas->drawString(text, x, y, paint);
     return x + paint.measureText(text.c_str(), text.size());
 }
 
index aecb46e..bef26f3 100644 (file)
@@ -21,7 +21,7 @@
 
 static SkScalar drawString(SkCanvas* canvas, const SkString& text, SkScalar x,
                            SkScalar y, const SkPaint& paint) {
-    canvas->drawText(text.c_str(), text.size(), x, y, paint);
+    canvas->drawString(text, x, y, paint);
     return x + paint.measureText(text.c_str(), text.size());
 }
 
index 8642726..8188957 100644 (file)
@@ -63,9 +63,9 @@ DEF_SIMPLE_GM(gamma, canvas, 850, 200) {
 
     auto nextRect = [&](const char* label, const char* label2) {
         canvas->drawRect(r, p);
-        canvas->drawText(label, strlen(label), 0, sz + textPaint.getFontSpacing(), textPaint);
+        canvas->drawString(label, 0, sz + textPaint.getFontSpacing(), textPaint);
         if (label2) {
-            canvas->drawText(label2, strlen(label2), 0, sz + 2 * textPaint.getFontSpacing(),
+            canvas->drawString(label2, 0, sz + 2 * textPaint.getFontSpacing(),
                              textPaint);
         }
         advance();
@@ -73,7 +73,7 @@ DEF_SIMPLE_GM(gamma, canvas, 850, 200) {
 
     auto nextBitmap = [&](const SkBitmap& bmp, const char* label) {
         canvas->drawBitmap(bmp, 0, 0);
-        canvas->drawText(label, strlen(label), 0, sz + textPaint.getFontSpacing(), textPaint);
+        canvas->drawString(label, 0, sz + textPaint.getFontSpacing(), textPaint);
         advance();
     };
 
@@ -86,12 +86,12 @@ DEF_SIMPLE_GM(gamma, canvas, 850, 200) {
 
         SkString srcText = SkStringPrintf("%08X", srcColor);
         SkString dstText = SkStringPrintf("%08X", dstColor);
-        canvas->drawText(srcText.c_str(), srcText.size(), 0, sz + textPaint.getFontSpacing(),
+        canvas->drawString(srcText, 0, sz + textPaint.getFontSpacing(),
                          textPaint);
         const char* modeName = SkBlendMode_Name(mode);
-        canvas->drawText(modeName, strlen(modeName), 0, sz + 2 * textPaint.getFontSpacing(),
+        canvas->drawString(modeName, 0, sz + 2 * textPaint.getFontSpacing(),
                          textPaint);
-        canvas->drawText(dstText.c_str(), dstText.size(), 0, sz + 3 * textPaint.getFontSpacing(),
+        canvas->drawString(dstText, 0, sz + 3 * textPaint.getFontSpacing(),
                          textPaint);
         advance();
     };
index 2aaa2b3..9339aa8 100644 (file)
@@ -179,8 +179,7 @@ static void draw_gamut_grid(SkCanvas* canvas, SkTArray<std::unique_ptr<CellRende
         wideGamutCanvas->clear(SK_ColorBLACK);
         renderer->draw(wideGamutCanvas);
 
-        canvas->drawText(renderer->label(), strlen(renderer->label()), x, y + textHeight,
-                         textPaint);
+        canvas->drawString(renderer->label(), x, y + textHeight, textPaint);
 
         // Re-interpret the off-screen images, so we can see the raw data (eg, Wide gamut squares
         // will look desaturated, relative to sRGB).
index c8f1250..1ba571a 100644 (file)
--- a/gm/gm.cpp
+++ b/gm/gm.cpp
@@ -82,7 +82,7 @@ void GM::DrawGpuOnlyMessage(SkCanvas* canvas) {
     paint.setColor(SK_ColorRED);
     sk_tool_utils::set_portable_typeface(&paint);
     constexpr char kTxt[] = "GPU Only";
-    bmpCanvas.drawText(kTxt, strlen(kTxt), 20, 40, paint);
+    bmpCanvas.drawString(kTxt, 20, 40, paint);
     SkMatrix localM;
     localM.setRotate(35.f);
     localM.postTranslate(10.f, 0.f);
index 7f7f222..cc0c079 100644 (file)
@@ -57,7 +57,7 @@ protected:
         paint.setShader(make_chrome_solid());
         paint.setTextSize(SkIntToScalar(500));
 
-        canvas->drawText("I", 1, 0, 100, paint);
+        canvas->drawString("I", 0, 100, paint);
     }
 private:
     typedef GM INHERITED;
@@ -77,17 +77,17 @@ protected:
         sk_tool_utils::set_portable_typeface(&paint);
 
         paint.setStyle(SkPaint::kFill_Style);
-        canvas->drawText("Normal Fill Text", 16, 0, 50, paint);
+        canvas->drawString("Normal Fill Text", 0, 50, paint);
         paint.setStyle(SkPaint::kStroke_Style);
-        canvas->drawText("Normal Stroke Text", 18, 0, 100, paint);
+        canvas->drawString("Normal Stroke Text", 0, 100, paint);
 
         // Minimal repro doesn't require AA, LCD, or a nondefault typeface
         paint.setShader(make_chrome_solid());
 
         paint.setStyle(SkPaint::kFill_Style);
-        canvas->drawText("Gradient Fill Text", 18, 0, 150, paint);
+        canvas->drawString("Gradient Fill Text", 0, 150, paint);
         paint.setStyle(SkPaint::kStroke_Style);
-        canvas->drawText("Gradient Stroke Text", 20, 0, 200, paint);
+        canvas->drawString("Gradient Stroke Text", 0, 200, paint);
     }
 private:
     typedef GM INHERITED;
index e5330d2..0c7c5e1 100644 (file)
@@ -52,7 +52,7 @@ static void draw_scene(SkCanvas* canvas, const SkHighContrastConfig& config) {
 
     paint.setARGB(0xff, 0xbb, 0x77, 0x77);
     paint.setTextSize(0.15f);
-    canvas->drawText("A", 1, 0.15f, 0.35f, paint);
+    canvas->drawString("A", 0.15f, 0.35f, paint);
 
     bounds = SkRect::MakeLTRB(0.1f, 0.8f, 0.9f, 1.0f);
     paint.setARGB(0xff, 0xcc, 0xcc, 0xff);
@@ -60,7 +60,7 @@ static void draw_scene(SkCanvas* canvas, const SkHighContrastConfig& config) {
 
     paint.setARGB(0xff, 0x88, 0x88, 0xbb);
     paint.setTextSize(0.15f);
-    canvas->drawText("Z", 1, 0.75f, 0.95f, paint);
+    canvas->drawString("Z", 0.75f, 0.95f, paint);
 
     bounds = SkRect::MakeLTRB(0.1f, 0.4f, 0.9f, 0.6f);
     SkPoint     pts[] = { { 0, 0 }, { 1, 0 } };
index 8e38ae7..fc7a5ff 100644 (file)
@@ -150,17 +150,17 @@ protected:
         sk_tool_utils::set_portable_typeface(&textPaint);
         textPaint.setTextSize(8);
 
-        canvas->drawText(kLabel1, strlen(kLabel1), 10,  60, textPaint);
-        canvas->drawText(kLabel2, strlen(kLabel2), 10, 140, textPaint);
-        canvas->drawText(kLabel3, strlen(kLabel3), 10, 220, textPaint);
-        canvas->drawText(kLabel4, strlen(kLabel4), 10, 300, textPaint);
-        canvas->drawText(kLabel5, strlen(kLabel5), 10, 380, textPaint);
-        canvas->drawText(kLabel6, strlen(kLabel6), 10, 460, textPaint);
-        canvas->drawText(kLabel7, strlen(kLabel7), 10, 540, textPaint);
-
-        canvas->drawText(kLabel8, strlen(kLabel8),  80, 10, textPaint);
-        canvas->drawText(kLabel9, strlen(kLabel9), 160, 10, textPaint);
-        canvas->drawText(kLabel10, strlen(kLabel10), 265, 10, textPaint);
+        canvas->drawString(kLabel1, 10,  60, textPaint);
+        canvas->drawString(kLabel2, 10, 140, textPaint);
+        canvas->drawString(kLabel3, 10, 220, textPaint);
+        canvas->drawString(kLabel4, 10, 300, textPaint);
+        canvas->drawString(kLabel5, 10, 380, textPaint);
+        canvas->drawString(kLabel6, 10, 460, textPaint);
+        canvas->drawString(kLabel7, 10, 540, textPaint);
+
+        canvas->drawString(kLabel8, 80, 10, textPaint);
+        canvas->drawString(kLabel9, 160, 10, textPaint);
+        canvas->drawString(kLabel10, 265, 10, textPaint);
 
         canvas->translate(80, 20);
 
index d15f11c..47d6374 100644 (file)
@@ -28,7 +28,7 @@ void imageblurgm_draw(SkScalar fSigmaX, SkScalar fSigmaY, SkCanvas* canvas) {
             int y = rand.nextULessThan(HEIGHT);
             textPaint.setColor(sk_tool_utils::color_to_565(rand.nextBits(24) | 0xFF000000));
             textPaint.setTextSize(rand.nextRangeScalar(0, 300));
-            canvas->drawText(str, strlen(str), SkIntToScalar(x),
+            canvas->drawString(str, SkIntToScalar(x),
                              SkIntToScalar(y), textPaint);
         }
         canvas->restore();
index 19c92f3..b6f9ff5 100644 (file)
@@ -70,11 +70,10 @@ protected:
                 textPaint.setTextSize(textSize);
 
                 for (int i = 0; i < testStringCount; i++) {
-                    canvas->drawText(kTestStrings[i],
-                                     strlen(kTestStrings[i]),
-                                     SkIntToScalar(x * dx),
-                                     SkIntToScalar(y * dy + textSize * i + textSize),
-                                     textPaint);
+                    canvas->drawString(kTestStrings[i],
+                                       SkIntToScalar(x * dx),
+                                       SkIntToScalar(y * dy + textSize * i + textSize),
+                                       textPaint);
                 }
                 canvas->restore();
             }
index 7d846be..7f1cfbd 100644 (file)
@@ -53,7 +53,7 @@ protected:
                 int posY = 0;
                 for (unsigned i = 0; i < SK_ARRAY_COUNT(str); i++) {
                     posY += 100;
-                    canvas->drawText(str[i], strlen(str[i]), SkIntToScalar(0),
+                    canvas->drawString(str[i], SkIntToScalar(0),
                                      SkIntToScalar(posY), textPaint);
                 }
                 canvas->restore();
index f088f67..6e34713 100644 (file)
@@ -155,7 +155,7 @@ static void draw_text(SkCanvas* canvas, const SkRect& r, sk_sp<SkImageFilter> im
     sk_tool_utils::set_portable_typeface(&paint);
     paint.setTextSize(r.height()/2);
     paint.setTextAlign(SkPaint::kCenter_Align);
-    canvas->drawText("Text", 4, r.centerX(), r.centerY(), paint);
+    canvas->drawString("Text", r.centerX(), r.centerY(), paint);
 }
 
 static void draw_bitmap(SkCanvas* canvas, const SkRect& r, sk_sp<SkImageFilter> imf) {
@@ -271,7 +271,7 @@ protected:
         SkAutoCanvasRestore acr(canvas, true);
         for (size_t i = 0; i < SK_ARRAY_COUNT(flags); ++i) {
             paint.setFlags(flags[i]);
-            canvas->drawText("Hamburgefons", 11, 0, 0, paint);
+            canvas->drawString("Hamburgefon", 0, 0, paint);
             canvas->translate(0, 40);
         }
     }
index b8db8ab..5af6492 100644 (file)
@@ -46,7 +46,7 @@ static void draw_text(SkCanvas* canvas, const SkRect& r, sk_sp<SkImageFilter> im
     sk_tool_utils::set_portable_typeface(&paint);
     paint.setTextSize(r.height()/2);
     paint.setTextAlign(SkPaint::kCenter_Align);
-    canvas->drawText("Text", 4, r.centerX(), r.centerY(), paint);
+    canvas->drawString("Text", r.centerX(), r.centerY(), paint);
 }
 
 static void draw_bitmap(SkCanvas* canvas, const SkRect& r, sk_sp<SkImageFilter> imf) {
index a494f4c..2585ea7 100644 (file)
@@ -35,7 +35,7 @@ DEF_SIMPLE_GM_BG(imagemagnifier, canvas, WIDTH, HEIGHT, SK_ColorBLACK) {
             paint.setColor(sk_tool_utils::color_to_565(rand.nextBits(24) | 0xFF000000));
             paint.setTextSize(rand.nextRangeScalar(0, 300));
             paint.setAntiAlias(true);
-            canvas->drawText(str, strlen(str), SkIntToScalar(x),
+            canvas->drawString(str, SkIntToScalar(x),
                              SkIntToScalar(y), paint);
         }
         canvas->restore();
index 9fa6be0..257e0b2 100644 (file)
@@ -43,7 +43,7 @@ DEF_SIMPLE_GM(imageresizetiled, canvas, WIDTH, HEIGHT) {
                 int posY = 0;
                 for (unsigned i = 0; i < SK_ARRAY_COUNT(str); i++) {
                     posY += 100;
-                    canvas->drawText(str[i], strlen(str[i]), SkIntToScalar(0),
+                    canvas->drawString(str[i], SkIntToScalar(0),
                                      SkIntToScalar(posY), textPaint);
                 }
                 canvas->restore();
index c873754..664b411 100644 (file)
@@ -64,7 +64,7 @@ private:
         sk_tool_utils::set_portable_typeface(&paint);
         paint.setTextSize(SkIntToScalar(25));
         paint.setColor(SK_ColorBLACK);
-        canvas->drawText(text, strlen(text), x, y, paint);
+        canvas->drawString(text, x, y, paint);
     }
 
     typedef GM INHERITED;
index 07b55c5..1345d23 100644 (file)
@@ -133,7 +133,7 @@ protected:
                 paint.setShader(make_shader(r));
             }
             SkString string(SkBlendMode_Name(gModes[m]));
-            canvas->drawText(string.c_str(), string.size(), 0, y, paint);
+            canvas->drawString(string, 0, y, paint);
             y+=fTextHeight;
         }
     }
index 5a549eb..41e83d6 100644 (file)
@@ -58,7 +58,7 @@ protected:
         paint.setLCDRenderText(lcdRenderTextEnabled);
         paint.setTextSize(textHeight);
 
-        canvas->drawText(string.c_str(), string.size(), 0, y, paint);
+        canvas->drawString(string, 0, y, paint);
         y += textHeight;
     }
 
@@ -120,7 +120,7 @@ protected:
 
             paint.setTextSize(rec[i].fTextSize);
             ScaleAbout(canvas, rec[i].fScale, rec[i].fScale, loc.x(), loc.y());
-            canvas->drawText(rec[i].fText, strlen(rec[i].fText), loc.x(), loc.y(), paint);
+            canvas->drawString(rec[i].fText, loc.x(), loc.y(), paint);
         }
     }
 
@@ -138,7 +138,7 @@ DEF_SIMPLE_GM(savelayer_lcdtext, canvas, 620, 260) {
     paint.setLCDRenderText(true);
     paint.setTextSize(20);
 
-    canvas->drawText("Hamburgefons", 12, 30, 30, paint);
+    canvas->drawString("Hamburgefons", 30, 30, paint);
 
     const bool gPreserveLCDText[] = { false, true };
 
@@ -149,15 +149,15 @@ DEF_SIMPLE_GM(savelayer_lcdtext, canvas, 620, 260) {
         if (preserve) {
             SkPaint noLCD = paint;
             noLCD.setLCDRenderText(false);
-            canvas->drawText("LCD not supported", 17, 30, 60, noLCD);
+            canvas->drawString("LCD not supported", 30, 60, noLCD);
         } else {
-            canvas->drawText("Hamburgefons", 12, 30, 60, paint);
+            canvas->drawString("Hamburgefons", 30, 60, paint);
         }
 
         SkPaint p;
         p.setColor(0xFFCCCCCC);
         canvas->drawRect(SkRect::MakeLTRB(25, 70, 200, 100), p);
-        canvas->drawText("Hamburgefons", 12, 30, 90, paint);
+        canvas->drawString("Hamburgefons", 30, 90, paint);
 
         canvas->restore();
         canvas->translate(0, 80);
index c6c246d..edec063 100644 (file)
@@ -171,25 +171,25 @@ protected:
                             canvas->translate(0.0f, LABEL_SIZE);
                             SkString label;
                             label.appendf("useNormalSource: %d", useNormalSource);
-                            canvas->drawText(label.c_str(), label.size(), 0.0f, 0.0f, labelPaint);
+                            canvas->drawString(label, 0.0f, 0.0f, labelPaint);
                         }
                         {
                             canvas->translate(0.0f, LABEL_SIZE);
                             SkString label;
                             label.appendf("useDiffuseShader: %d", useDiffuseShader);
-                            canvas->drawText(label.c_str(), label.size(), 0.0f, 0.0f, labelPaint);
+                            canvas->drawString(label, 0.0f, 0.0f, labelPaint);
                         }
                         {
                             canvas->translate(0.0f, LABEL_SIZE);
                             SkString label;
                             label.appendf("useTranslucentPaint: %d", useTranslucentPaint);
-                            canvas->drawText(label.c_str(), label.size(), 0.0f, 0.0f, labelPaint);
+                            canvas->drawString(label, 0.0f, 0.0f, labelPaint);
                         }
                         {
                             canvas->translate(0.0f, LABEL_SIZE);
                             SkString label;
                             label.appendf("useTranslucentShader: %d", useTranslucentShader);
-                            canvas->drawText(label.c_str(), label.size(), 0.0f, 0.0f, labelPaint);
+                            canvas->drawString(label, 0.0f, 0.0f, labelPaint);
                         }
 
                         canvas->restore();
index 5adf3b8..9e15a8e 100644 (file)
@@ -182,13 +182,13 @@ protected:
                                 label.append("roundedOut");
                                 break;
                         }
-                        canvas->drawText(label.c_str(), label.size(), 0.0f, 0.0f, labelPaint);
+                        canvas->drawString(label, 0.0f, 0.0f, labelPaint);
                     }
                     {
                         canvas->translate(0.0f, LABEL_SIZE);
                         SkString label;
                         label.appendf("bevelHeight: %.1f", bevelHeight);
-                        canvas->drawText(label.c_str(), label.size(), 0.0f, 0.0f, labelPaint);
+                        canvas->drawString(label, 0.0f, 0.0f, labelPaint);
                     }
 
                     canvas->restore();
@@ -218,19 +218,19 @@ protected:
                 canvas->translate(0.0f, LABEL_SIZE);
                 SkString label;
                 label.appendf("bevelType: linear");
-                canvas->drawText(label.c_str(), label.size(), 0.0f, 0.0f, labelPaint);
+                canvas->drawString(label, 0.0f, 0.0f, labelPaint);
             }
             {
                 canvas->translate(0.0f, LABEL_SIZE);
                 SkString label;
                 label.appendf("bevelHeight: %.1f", 7.0f);
-                canvas->drawText(label.c_str(), label.size(), 0.0f, 0.0f, labelPaint);
+                canvas->drawString(label, 0.0f, 0.0f, labelPaint);
             }
             {
                 canvas->translate(0.0f, LABEL_SIZE);
                 SkString label;
                 label.appendf("rotated");
-                canvas->drawText(label.c_str(), label.size(), 0.0f, 0.0f, labelPaint);
+                canvas->drawString(label, 0.0f, 0.0f, labelPaint);
             }
 
             canvas->restore();
index 2583ff1..94a2979 100644 (file)
@@ -83,10 +83,10 @@ static void draw(SkCanvas* canvas, bool doClose) {
         const char titleClose[] = "Line Closed Drawn Into Rectangle Clips With "
             "Indicated Style, Fill and Linecaps, with stroke width 10";
         const char* title = doClose ? titleClose : titleNoClose;
-        canvas->drawText(title, strlen(title),
-                            20 * SK_Scalar1,
-                            20 * SK_Scalar1,
-                            titlePaint);
+        canvas->drawString(title,
+                           20 * SK_Scalar1,
+                           20 * SK_Scalar1,
+                           titlePaint);
 
         SkRandom rand;
         SkRect rect = SkRect::MakeWH(100*SK_Scalar1, 30*SK_Scalar1);
@@ -125,18 +125,15 @@ static void draw(SkCanvas* canvas, bool doClose) {
                     labelPaint.setAntiAlias(true);
                     sk_tool_utils::set_portable_typeface(&labelPaint);
                     labelPaint.setTextSize(10 * SK_Scalar1);
-                    canvas->drawText(gStyles[style].fName,
-                                        strlen(gStyles[style].fName),
-                                        0, rect.height() + 12 * SK_Scalar1,
-                                        labelPaint);
-                    canvas->drawText(gFills[fill].fName,
-                                        strlen(gFills[fill].fName),
-                                        0, rect.height() + 24 * SK_Scalar1,
-                                        labelPaint);
-                    canvas->drawText(gCaps[cap].fName,
-                                        strlen(gCaps[cap].fName),
-                                        0, rect.height() + 36 * SK_Scalar1,
-                                        labelPaint);
+                    canvas->drawString(gStyles[style].fName,
+                                       0, rect.height() + 12 * SK_Scalar1,
+                                       labelPaint);
+                    canvas->drawString(gFills[fill].fName,
+                                       0, rect.height() + 24 * SK_Scalar1,
+                                       labelPaint);
+                    canvas->drawString(gCaps[cap].fName,
+                                       0, rect.height() + 36 * SK_Scalar1,
+                                       labelPaint);
                 }
                 canvas->restore();
             }
index 7c1a215..4af12e1 100644 (file)
@@ -46,7 +46,7 @@ protected:
         paint.setShader(SkGradientShader::MakeLinear(
             pts, fColors, pos, 2, SkShader::kClamp_TileMode));
         const char* str = "e";
-        canvas.drawText(str, strlen(str), SkIntToScalar(-10), SkIntToScalar(80), paint);
+        canvas.drawString(str, SkIntToScalar(-10), SkIntToScalar(80), paint);
 
         // ... tag the data as sRGB, so color-aware devices do gamut adjustment, etc...
         fBitmap.setInfo(SkImageInfo::MakeS32(80, 80, kPremul_SkAlphaType));
index 56a78f4..9769cda 100644 (file)
@@ -38,7 +38,7 @@ DEF_SIMPLE_GM(mipmap, canvas, 400, 200) {
     paint.setTextSize(30);
     SkString str;
     str.printf("scale %g %g", dst.width() / img->width(), dst.height() / img->height());
-//    canvas->drawText(str.c_str(), str.size(), 300, 100, paint);
+//    canvas->drawString(str, 300, 100, paint);
 
     canvas->translate(20, 20);
     for (int i = 0; i < 4; ++i) {
index d1513c4..99603c1 100644 (file)
@@ -36,8 +36,8 @@ protected:
         const char* str2 = "XYZ";
         paint.setColor(0xFFFFFFFF);
         paint.setTextSize(64);
-        canvas.drawText(str1, strlen(str1), 10, 55, paint);
-        canvas.drawText(str2, strlen(str2), 10, 110, paint);
+        canvas.drawString(str1, 10, 55, paint);
+        canvas.drawString(str2, 10, 110, paint);
     }
 
     SkISize onISize() override {
index 4fba40e..ae63432 100644 (file)
@@ -53,5 +53,5 @@ DEF_SIMPLE_GM(pdf_never_embed, canvas, 512, 512) {
 
     canvas->scale(1.0, 0.5);
     p.setColor(0xF0000080);
-    canvas->drawText(text, strlen(text), 30, 700, p);
+    canvas->drawString(text, 30, 700, p);
 }
index aaec850..587ed37 100644 (file)
@@ -33,7 +33,7 @@ static sk_sp<SkPicture> make_picture() {
     paint.setColor(0xFFFFFFFF);
     paint.setTextSize(SkIntToScalar(96));
     const char* str = "e";
-    canvas->drawText(str, strlen(str), SkIntToScalar(20), SkIntToScalar(70), paint);
+    canvas->drawString(str, SkIntToScalar(20), SkIntToScalar(70), paint);
     return recorder.finishRecordingAsPicture();
 }
 
@@ -50,7 +50,7 @@ static sk_sp<SkPicture> make_LCD_picture() {
     // this has to be small enough that it doesn't become a path
     paint.setTextSize(SkIntToScalar(36));
     const char* str = "e";
-    canvas->drawText(str, strlen(str), SkIntToScalar(20), SkIntToScalar(70), paint);
+    canvas->drawString(str, SkIntToScalar(20), SkIntToScalar(70), paint);
     return recorder.finishRecordingAsPicture();
 }
 
index d664d97..f4e4582 100644 (file)
@@ -55,7 +55,7 @@ protected:
             canvas->translate(0, SkIntToScalar(kLabelOffsetY));
             for (int i = 0; i <= kSubPixelSteps; ++i) {
                 offset.printf("%d", i);
-                canvas->drawText(offset.c_str(), offset.size(),
+                canvas->drawString(offset,
                                     0, i * kTrans + labelPaint.getTextSize(),
                                     labelPaint);
             }
@@ -66,7 +66,7 @@ protected:
             canvas->translate(SkIntToScalar(kLabelOffsetX), 0);
             for (int i = 0; i <= kSubPixelSteps; ++i) {
                 offset.printf("%d", i);
-                canvas->drawText(offset.c_str(), offset.size(),
+                canvas->drawString(offset,
                                     i * SkIntToScalar(kTrans), labelPaint.getTextSize(),
                                     labelPaint);
             }
index 9434bf2..2b9b390 100644 (file)
@@ -73,8 +73,7 @@ void SkJSCanvas::stroke() {
 }
 
 void SkJSCanvas::fillText(const char text[], double x, double y) {
-    fTarget->drawText(text, strlen(text),
-                      SkDoubleToScalar(x), SkDoubleToScalar(y), fFillPaint);
+    fTarget->drawString(text, SkDoubleToScalar(x), SkDoubleToScalar(y), fFillPaint);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
index bac37b9..fb10685 100644 (file)
@@ -90,10 +90,10 @@ protected:
         titlePaint.setTextSize(15 * SK_Scalar1);
         const char title[] = "Quad Drawn Into Rectangle Clips With "
                              "Indicated Style, Fill and Linecaps, with stroke width 10";
-        canvas->drawText(title, strlen(title),
-                            20 * SK_Scalar1,
-                            20 * SK_Scalar1,
-                            titlePaint);
+        canvas->drawString(title,
+                           20 * SK_Scalar1,
+                           20 * SK_Scalar1,
+                           titlePaint);
 
         SkRandom rand;
         SkRect rect = SkRect::MakeWH(100*SK_Scalar1, 30*SK_Scalar1);
@@ -132,18 +132,15 @@ protected:
                     labelPaint.setAntiAlias(true);
                     sk_tool_utils::set_portable_typeface(&labelPaint);
                     labelPaint.setTextSize(10 * SK_Scalar1);
-                    canvas->drawText(gStyles[style].fName,
-                                        strlen(gStyles[style].fName),
-                                        0, rect.height() + 12 * SK_Scalar1,
-                                        labelPaint);
-                    canvas->drawText(gFills[fill].fName,
-                                        strlen(gFills[fill].fName),
-                                        0, rect.height() + 24 * SK_Scalar1,
-                                        labelPaint);
-                    canvas->drawText(gCaps[cap].fName,
-                                        strlen(gCaps[cap].fName),
-                                        0, rect.height() + 36 * SK_Scalar1,
-                                        labelPaint);
+                    canvas->drawString(gStyles[style].fName,
+                                       0, rect.height() + 12 * SK_Scalar1,
+                                       labelPaint);
+                    canvas->drawString(gFills[fill].fName,
+                                       0, rect.height() + 24 * SK_Scalar1,
+                                       labelPaint);
+                    canvas->drawString(gCaps[cap].fName,
+                                       0, rect.height() + 36 * SK_Scalar1,
+                                       labelPaint);
                 }
                 canvas->restore();
             }
@@ -234,10 +231,10 @@ protected:
         titlePaint.setTextSize(15 * SK_Scalar1);
         const char title[] = "Quad Closed Drawn Into Rectangle Clips With "
                              "Indicated Style, Fill and Linecaps, with stroke width 10";
-        canvas->drawText(title, strlen(title),
-                            20 * SK_Scalar1,
-                            20 * SK_Scalar1,
-                            titlePaint);
+        canvas->drawString(title,
+                           20 * SK_Scalar1,
+                           20 * SK_Scalar1,
+                           titlePaint);
 
         SkRandom rand;
         SkRect rect = SkRect::MakeWH(100*SK_Scalar1, 30*SK_Scalar1);
@@ -276,18 +273,15 @@ protected:
                     labelPaint.setAntiAlias(true);
                     sk_tool_utils::set_portable_typeface(&labelPaint);
                     labelPaint.setTextSize(10 * SK_Scalar1);
-                    canvas->drawText(gStyles[style].fName,
-                                        strlen(gStyles[style].fName),
-                                        0, rect.height() + 12 * SK_Scalar1,
-                                        labelPaint);
-                    canvas->drawText(gFills[fill].fName,
-                                        strlen(gFills[fill].fName),
-                                        0, rect.height() + 24 * SK_Scalar1,
-                                        labelPaint);
-                    canvas->drawText(gCaps[cap].fName,
-                                        strlen(gCaps[cap].fName),
-                                        0, rect.height() + 36 * SK_Scalar1,
-                                        labelPaint);
+                    canvas->drawString(gStyles[style].fName,
+                                       0, rect.height() + 12 * SK_Scalar1,
+                                       labelPaint);
+                    canvas->drawString(gFills[fill].fName,
+                                       0, rect.height() + 24 * SK_Scalar1,
+                                       labelPaint);
+                    canvas->drawString(gCaps[cap].fName,
+                                       0, rect.height() + 36 * SK_Scalar1,
+                                       labelPaint);
                 }
                 canvas->restore();
             }
index 67ffa9a..5b3dc22 100644 (file)
@@ -138,7 +138,7 @@ protected:
             SkPaint paint;
             paint.setAntiAlias(true);
             const char* kMsg = "Could not create rectangle texture image.";
-            canvas->drawText(kMsg, strlen(kMsg), 10, 100, paint);
+            canvas->drawString(kMsg, 10, 100, paint);
             return;
         }
 
index 6387349..f328743 100644 (file)
@@ -111,7 +111,7 @@ protected:
 
         canvas->clipPath(path, true); // AA is on
 
-        canvas->drawText("M", 1,
+        canvas->drawString("M",
                          SkIntToScalar(100), SkIntToScalar(100),
                          paint);
 
@@ -126,7 +126,7 @@ protected:
         paint2.setStyle(SkPaint::kStroke_Style);
         paint2.setStrokeWidth(1);
         sk_tool_utils::set_portable_typeface(&paint2);
-        canvas->drawText("M", 1,
+        canvas->drawString("M",
                          SkIntToScalar(100), SkIntToScalar(100),
                          paint2);
 
index 9b585bf..d23409a 100644 (file)
@@ -107,14 +107,14 @@ DEF_SIMPLE_GM_BG(shadertext2, canvas, 1800, 900,
         canvas->translate(0, bmp.height() + labelPaint.getTextSize() + 15.f);
 
         constexpr char kLabelLabel[] = "localM / canvasM";
-        canvas->drawText(kLabelLabel, strlen(kLabelLabel), 0, 0, labelPaint);
+        canvas->drawString(kLabelLabel, 0, 0, labelPaint);
         canvas->translate(0, 15.f);
 
         canvas->save();
         SkScalar maxLabelW = 0;
         canvas->translate(0, kPadY / 2 + kPointSize);
         for (int lm = 0; lm < localMatrices.count(); ++lm) {
-            canvas->drawText(matrices[lm].fLabel, strlen(matrices[lm].fLabel),
+            canvas->drawString(matrices[lm].fLabel,
                              0, labelPaint.getTextSize() - 1, labelPaint);
             SkScalar labelW = labelPaint.measureText(matrices[lm].fLabel,
                                                      strlen(matrices[lm].fLabel));
@@ -132,7 +132,7 @@ DEF_SIMPLE_GM_BG(shadertext2, canvas, 1800, 900,
             for (int m = 0; m < matrices.count(); ++m) {
                 columnH = 0;
                 canvas->save();
-                canvas->drawText(matrices[m].fLabel, strlen(matrices[m].fLabel),
+                canvas->drawString(matrices[m].fLabel,
                                  0, labelPaint.getTextSize() - 1, labelPaint);
                 canvas->translate(0, kPadY / 2 + kPointSize);
                 columnH += kPadY / 2 + kPointSize;
@@ -178,8 +178,8 @@ DEF_SIMPLE_GM_BG(shadertext2, canvas, 1800, 900,
                 SkScalar y = columnH + kPadY / 2;
                 SkScalar fillX = -outlinePaint.measureText(kFillLabel, strlen(kFillLabel)) - kPadX;
                 SkScalar strokeX = kPadX;
-                canvas->drawText(kFillLabel, strlen(kFillLabel), fillX, y, labelPaint);
-                canvas->drawText(kStrokeLabel, strlen(kStrokeLabel), strokeX, y, labelPaint);
+                canvas->drawString(kFillLabel, fillX, y, labelPaint);
+                canvas->drawString(kStrokeLabel, strokeX, y, labelPaint);
             }
         }
 }
index 4c7407d..5e4067f 100644 (file)
@@ -162,7 +162,7 @@ protected:
         int xOff = 0;
 
         for (size_t op = 0; op < SK_ARRAY_COUNT(gOps); op++) {
-            canvas->drawText(gOps[op].fName, strlen(gOps[op].fName),
+            canvas->drawString(gOps[op].fName,
                              SkIntToScalar(75), SkIntToScalar(50),
                              textPaint);
 
index fb77532..91c0a16 100644 (file)
@@ -66,7 +66,7 @@ static void test_text(SkCanvas* canvas, SkScalar size,
     sk_tool_utils::set_portable_typeface(&type);
     type.setColor(color);
     const char text[] = "HELLO WORLD";
-    canvas->drawText(text, strlen(text), 32, size / 2 + Y, type);
+    canvas->drawString(text, 32, size / 2 + Y, type);
     SkScalar lineSpacing = type.getFontSpacing();
     exercise_draw_pos_text(canvas, text, 32, size / 2 + Y + lineSpacing, type);
     exercise_draw_pos_text_h(canvas, text, 32,
index 75721f1..e43933c 100644 (file)
@@ -53,7 +53,7 @@ static void draw_oval(SkCanvas* canvas, const SkPaint& paint) {
 static void draw_text(SkCanvas* canvas, const SkPaint& paint) {
     SkPaint p(paint);
     p.setTextSize(H/4);
-    canvas->drawText("Hamburge", 8, 0, H*2/3, p);
+    canvas->drawString("Hamburge", 0, H*2/3, p);
 }
 
 class SrcModeGM : public skiagm::GM {
index f1bb327..ec939d1 100644 (file)
@@ -31,7 +31,7 @@ static void draw_text_stroked(SkCanvas* canvas, const SkPaint& paint, SkScalar s
 
     if (strokeWidth > 0) {
         p.setStyle(SkPaint::kFill_Style);
-        canvas->drawText("P", 1, loc.fX, loc.fY - 225, p);
+        canvas->drawString("P", loc.fX, loc.fY - 225, p);
         canvas->drawPosText("P", 1, &loc, p);
     }
 
@@ -39,7 +39,7 @@ static void draw_text_stroked(SkCanvas* canvas, const SkPaint& paint, SkScalar s
     p.setStyle(SkPaint::kStroke_Style);
     p.setStrokeWidth(strokeWidth);
 
-    canvas->drawText("P", 1, loc.fX, loc.fY - 225, p);
+    canvas->drawString("P", loc.fX, loc.fY - 225, p);
     canvas->drawPosText("P", 1, &loc, p);
 }
 
index ee4decc..4b400ca 100644 (file)
@@ -46,7 +46,7 @@ static void test_draw(SkCanvas* canvas, const char label[]) {
     paint.setTextSize(32);
     paint.setTextAlign(SkPaint::kCenter_Align);
     sk_tool_utils::set_portable_typeface(&paint);
-    canvas->drawText(label, strlen(label), W / 2, H * 3 / 4, paint);
+    canvas->drawString(label, W / 2, H * 3 / 4, paint);
 }
 
 class SurfacePropsGM : public skiagm::GM {
index 5e0f189..b98aea7 100644 (file)
@@ -188,7 +188,7 @@ DEF_SIMPLE_GM(texteffects, canvas, 460, 680) {
             //  paint.setMaskFilter(nullptr);
             //  paint.setColor(SK_ColorBLACK);
 
-            canvas->drawText(str.c_str(), str.size(), x, y, paint);
+            canvas->drawString(str, x, y, paint);
 
             y += paint.getFontSpacing();
         }
index 009ad64..390ce4a 100644 (file)
@@ -105,7 +105,7 @@ protected:
                 str.printf("[%s,%s]", gModeNames[kx], gModeNames[ky]);
 
                 p.setTextAlign(SkPaint::kCenter_Align);
-                canvas->drawText(str.c_str(), str.size(), x + r.width()/2, y, p);
+                canvas->drawString(str, x + r.width()/2, y, p);
 
                 x += r.width() * 4 / 3;
             }
@@ -142,7 +142,7 @@ protected:
                     p.setAntiAlias(true);
                     sk_tool_utils::set_portable_typeface(&p);
                     str.printf("%s, %s", gConfigNames[i], gFilterNames[j]);
-                    canvas->drawText(str.c_str(), str.size(), x, y + r.height() * 2 / 3, p);
+                    canvas->drawString(str, x, y + r.height() * 2 / 3, p);
                 }
 
                 y += r.height() * 4 / 3;
@@ -224,7 +224,7 @@ protected:
 
         for (size_t kx = 0; kx < SK_ARRAY_COUNT(gModes); kx++) {
             SkString str(gModeNames[kx]);
-            canvas->drawText(str.c_str(), str.size(), x + r.width()/2, y, p);
+            canvas->drawString(str, x + r.width()/2, y, p);
             x += r.width() * 4 / 3;
         }
 
@@ -235,7 +235,7 @@ protected:
             x = SkIntToScalar(16) + w;
 
             SkString str(gModeNames[ky]);
-            canvas->drawText(str.c_str(), str.size(), x, y + h/2, p);
+            canvas->drawString(str, x, y + h/2, p);
 
             x += SkIntToScalar(50);
             for (size_t kx = 0; kx < SK_ARRAY_COUNT(gModes); kx++) {
index 807d63b..3833fa2 100644 (file)
@@ -107,7 +107,7 @@ protected:
                 str.printf("[%s,%s]", gModeNames[kx], gModeNames[ky]);
 
                 p.setTextAlign(SkPaint::kCenter_Align);
-                canvas->drawText(str.c_str(), str.size(), scale*(x + r.width()/2), y, p);
+                canvas->drawString(str, scale*(x + r.width()/2), y, p);
 
                 x += r.width() * 4 / 3;
             }
@@ -145,7 +145,7 @@ protected:
                     p.setAntiAlias(true);
                     sk_tool_utils::set_portable_typeface(&p);
                     str.printf("%s, %s", gColorTypeNames[i], gFilterNames[j]);
-                    canvas->drawText(str.c_str(), str.size(), scale*x, scale*(y + r.height() * 2 / 3), p);
+                    canvas->drawString(str, scale*x, scale*(y + r.height() * 2 / 3), p);
                 }
 
                 y += r.height() * 4 / 3;
@@ -228,7 +228,7 @@ protected:
 
         for (size_t kx = 0; kx < SK_ARRAY_COUNT(gModes); kx++) {
             SkString str(gModeNames[kx]);
-            canvas->drawText(str.c_str(), str.size(), x + r.width()/2, y, p);
+            canvas->drawString(str, x + r.width()/2, y, p);
             x += r.width() * 4 / 3;
         }
 
@@ -239,7 +239,7 @@ protected:
             x = SkIntToScalar(16) + w;
 
             SkString str(gModeNames[ky]);
-            canvas->drawText(str.c_str(), str.size(), x, y + h/2, p);
+            canvas->drawString(str, x, y + h/2, p);
 
             x += SkIntToScalar(50);
             for (size_t kx = 0; kx < SK_ARRAY_COUNT(gModes); kx++) {
index 563d138..c0f6cbf 100644 (file)
@@ -116,7 +116,7 @@ protected:
             canvas->save();
                 canvas->clipRect(fClipRects[i]);
                 canvas->translate(fPositions[i].fX, fPositions[i].fY);
-                canvas->drawText(fStrings[i].c_str(), fStrings[i].size(), 0, 0, fPaint);
+                canvas->drawString(fStrings[i], 0, 0, fPaint);
             canvas->restore();
         }
 
index d7da041..a0ebd01 100644 (file)
@@ -76,7 +76,7 @@ protected:
         paint.setTypeface(std::move(family));
         paint.setTextSize(textHeight);
 
-        canvas->drawText(string.c_str(), string.size(), y,
+        canvas->drawString(string, y,
                 SkIntToScalar(alignment == SkPaint::kLeft_Align ? 10 : 240),
                 paint);
         y += textHeight;
index 544f5e0..7083487 100644 (file)
@@ -284,7 +284,7 @@ void WindowRectanglesMaskGM::fail(SkCanvas* canvas) {
 
     canvas->clipRect(SkRect::Make(kCoverRect));
     canvas->clear(SK_ColorWHITE);
-    canvas->drawText(errorMsg.c_str(), errorMsg.size(), SkIntToScalar(kCoverRect.centerX()),
+    canvas->drawString(errorMsg, SkIntToScalar(kCoverRect.centerX()),
                      SkIntToScalar(kCoverRect.centerY() - 10), paint);
 }
 
index 5d23104..9bf46f6 100644 (file)
@@ -259,7 +259,7 @@ protected:
 
 #if 1
                 const char* label = SkBlendMode_Name(gModes[i].fMode);
-                canvas->drawText(label, strlen(label),
+                canvas->drawString(label,
                                  x + w/2, y - labelP.getTextSize()/2, labelP);
 #endif
                 x += w + SkIntToScalar(10);
index 891a864..2db824d 100644 (file)
@@ -72,8 +72,8 @@ protected:
             canvas->restore();
 
 #if 1
-            canvas->drawText(SkBlendMode_Name(mode), strlen(SkBlendMode_Name(mode)),
-                             x + w/2, y - labelP.getTextSize()/2, labelP);
+            canvas->drawString(SkBlendMode_Name(mode),
+                               x + w/2, y - labelP.getTextSize()/2, labelP);
 #endif
             x += w + SkIntToScalar(10);
             if ((m % W) == W - 1) {
index 6e4d8b8..9c78658 100644 (file)
@@ -71,8 +71,7 @@ protected:
         for (size_t s = 0; s < SK_ARRAY_COUNT(kStrokes); ++s) {
             for (size_t m = 0; m <= (size_t)SkBlendMode::kLastMode; ++m) {
                 SkBlendMode mode = static_cast<SkBlendMode>(m);
-                canvas->drawText(SkBlendMode_Name(mode),
-                                 strlen(SkBlendMode_Name(mode)),
+                canvas->drawString(SkBlendMode_Name(mode),
                                  SkIntToScalar(x),
                                  SkIntToScalar(y + kSize + 3) + labelP.getTextSize(),
                                  labelP);
index 33a51f7..7b6ef7d 100644 (file)
@@ -950,6 +950,29 @@ public:
     void drawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
                   const SkPaint& paint);
 
+    /** Draw null-terminated UTF-8 string, with origin at (x,y), using the specified paint.
+        The origin is interpreted based on the Align setting in the paint.
+        @param string   The null-terminated string to be drawn
+        @param x        The x-coordinate of the origin of the string being drawn
+        @param y        The y-coordinate of the origin of the string being drawn
+        @param paint    The paint used for the string (e.g. color, size, style)
+    */
+    void drawString(const char* string, SkScalar x, SkScalar y, const SkPaint& paint) {
+        if (!string) {
+            return;
+        }
+        this->drawText(string, strlen(string), x, y, paint);
+    }
+
+    /** Draw string, with origin at (x,y), using the specified paint.
+        The origin is interpreted based on the Align setting in the paint.
+        @param string   The string to be drawn
+        @param x        The x-coordinate of the origin of the string being drawn
+        @param y        The y-coordinate of the origin of the string being drawn
+        @param paint    The paint used for the string (e.g. color, size, style)
+    */
+    void drawString(const SkString& string, SkScalar x, SkScalar y, const SkPaint& paint);
+
     /** Draw the text, with each character/glyph origin specified by the pos[]
         array. The origin is interpreted by the Align setting in the paint.
         @param text The text to be drawn
index 2721a5b..959ac50 100644 (file)
@@ -235,7 +235,7 @@ protected:
         paint.setTypeface(fFace);
 
         apply_shader(&paint, SkScalarToFloat(fInterp));
-        canvas->drawText(str.c_str(), str.size(), x, y, paint);
+        canvas->drawString(str, x, y, paint);
 
     //    drawdots(canvas, paint);
 
index 62e8c2a..cb56783 100644 (file)
@@ -167,7 +167,7 @@ void OverView::onDraw(SkCanvas* canvas) {
     for (int i = 0; i < fCount; ++i) {
         if (draw_this_name(fNames[i], fMatchStr)) {
             canvas->drawRect(this->bounds(loc), paint);
-            canvas->drawText(fNames[i].c_str(), fNames[i].size(), loc.x(), loc.y(), fNamePaint);
+            canvas->drawString(fNames[i], loc.x(), loc.y(), fNamePaint);
             this->next(&loc);
         }
     }
index 875db26..6f6541b 100644 (file)
@@ -606,8 +606,8 @@ struct UniControl {
         canvas->drawLine(fBounds.fLeft - 5, fYLo, fBounds.fRight + 5, fYLo, paints.fIndicator);
         SkString label;
         label.printf("%0.3g", fValLo);
-        canvas->drawText(label.c_str(), label.size(), fBounds.fLeft + 5, fYLo - 5, paints.fValue);
-        canvas->drawText(fName.c_str(), fName.size(), fBounds.fLeft, fBounds.bottom() + 11,
+        canvas->drawString(label, fBounds.fLeft + 5, fYLo - 5, paints.fValue);
+        canvas->drawString(fName, fBounds.fLeft, fBounds.bottom() + 11,
                 paints.fLabel);
     }
 };
@@ -634,7 +634,7 @@ struct BiControl : public UniControl {
         if (yPos < fYLo + 10) {
             yPos = fYLo + 10;
         }
-        canvas->drawText(label.c_str(), label.size(), fBounds.fLeft + 5, yPos - 5, paints.fValue);
+        canvas->drawString(label, fBounds.fLeft + 5, yPos - 5, paints.fValue);
         SkRect fill = { fBounds.fLeft, fYLo, fBounds.fRight, yPos };
         canvas->drawRect(fill, paints.fFill);
     }
@@ -1819,11 +1819,11 @@ void AAGeometryView::draw_legend(SkCanvas* canvas) {
     SkScalar bottomOffset = this->height() - 10;
     for (int index = kKeyCommandCount - 1; index >= 0; --index) {
         bottomOffset -= 15;
-        canvas->drawText(kKeyCommandList[index].fDescriptionL,
-                strlen(kKeyCommandList[index].fDescriptionL), this->width() - 160, bottomOffset,
+        canvas->drawString(kKeyCommandList[index].fDescriptionL,
+                this->width() - 160, bottomOffset,
                 fLegendLeftPaint);
-        canvas->drawText(kKeyCommandList[index].fDescriptionR,
-                strlen(kKeyCommandList[index].fDescriptionR), this->width() - 20, bottomOffset,
+        canvas->drawString(kKeyCommandList[index].fDescriptionR,
+                this->width() - 20, bottomOffset,
                 fLegendRightPaint);
     }
 }
index 37a0c4b..a8d2458 100644 (file)
@@ -544,7 +544,7 @@ protected:
                                     gLightingColors[index].fAdd));
 #endif
 
-            canvas->drawText(str.c_str(), str.size(), x, y, paint);
+            canvas->drawString(str, x, y, paint);
             SkRect  oval = { x, y - SkIntToScalar(40), x + SkIntToScalar(40), y };
             paint.setStyle(SkPaint::kStroke_Style);
             canvas->drawOval(oval, paint);
index 2b047c2..e70530a 100644 (file)
@@ -126,8 +126,8 @@ protected:
         canvas->restore();
 
         paint.setTextSize(16);
-//        canvas->drawText(outString.c_str(), outString.size(), 512.f, 540.f, paint);
-        canvas->drawText(modeString.c_str(), modeString.size(), 768.f, 540.f, paint);
+//        canvas->drawString(outString, 512.f, 540.f, paint);
+        canvas->drawString(modeString, 768.f, 540.f, paint);
     }
 
     bool onAnimate(const SkAnimTimer& timer) override {
index f95833e..abdcdec 100644 (file)
@@ -127,7 +127,7 @@ protected:
         str.appendScalar(start);
         str.append(", ");
         str.appendScalar(sweep);
-        canvas->drawText(str.c_str(), str.size(), rect.centerX(),
+        canvas->drawString(str, rect.centerX(),
                          rect.fBottom + paint.getTextSize() * 5/4, paint);
     }
 
index fce8885..3f193cf 100644 (file)
@@ -90,7 +90,7 @@ protected:
         labelPaint.setColor(0xFFFFFFFF);
         labelPaint.setTextSize(12.0f);
 
-        canvas->drawText(label.c_str(), label.size(), 0, kLabelHeight - 6.0f, labelPaint);
+        canvas->drawString(label, 0, kLabelHeight - 6.0f, labelPaint);
     }
 
     SkString fName;
index ebfe3bb..ccf2d26 100644 (file)
@@ -171,7 +171,7 @@ static void make_big_bitmap(SkBitmap* bm) {
 
     SkCanvas canvas(*bm);
 
-    canvas.drawText(gText, strlen(gText), 0, paint.getTextSize()*4/5, paint);
+    canvas.drawString(gText, 0, paint.getTextSize()*4/5, paint);
 }
 
 class BitmapRectView2 : public SampleView {
index 4c4082c..a2f90a7 100644 (file)
@@ -111,13 +111,13 @@ protected:
                 SkScalar x = SkIntToScalar(70);
                 SkScalar y = SkIntToScalar(400);
                 paint.setColor(SK_ColorBLACK);
-                canvas->drawText("Hamburgefons Style", 18, x, y, paint);
-                canvas->drawText("Hamburgefons Style", 18, x, y + SkIntToScalar(50), paint);
+                canvas->drawString("Hamburgefons Style", x, y, paint);
+                canvas->drawString("Hamburgefons Style", x, y + SkIntToScalar(50), paint);
                 paint.setMaskFilter(nullptr);
                 paint.setColor(SK_ColorWHITE);
                 x -= SkIntToScalar(2);
                 y -= SkIntToScalar(2);
-                canvas->drawText("Hamburgefons Style", 18, x, y, paint);
+                canvas->drawString("Hamburgefons Style", x, y, paint);
             }
             canvas->restore();
             flags = SkBlurMaskFilter::kHighQuality_BlurFlag;
index 41192fb..05b5a25 100644 (file)
@@ -27,7 +27,7 @@ static void show_text(SkCanvas* canvas, bool doAA) {
 
     for (int i = 0; i < 200; ++i) {
         paint.setColor((SK_A32_MASK << SK_A32_SHIFT) | rand.nextU());
-        canvas->drawText("Hamburgefons", 12,
+        canvas->drawString("Hamburgefons",
                          rand.nextSScalar1() * W, rand.nextSScalar1() * H + 20,
                          paint);
     }
index b9c9307..af7f38e 100644 (file)
@@ -129,14 +129,14 @@ protected:
                 SkScalar txtX = SkIntToScalar(55);
                 paint.setColor(colorA);
                 const char* aTxt = invA ? "InverseA " : "A ";
-                canvas->drawText(aTxt, strlen(aTxt), txtX, SkIntToScalar(220), paint);
+                canvas->drawString(aTxt, txtX, SkIntToScalar(220), paint);
                 txtX += paint.measureText(aTxt, strlen(aTxt));
                 paint.setColor(SK_ColorBLACK);
-                canvas->drawText(gOps[op].fName, strlen(gOps[op].fName),
+                canvas->drawString(gOps[op].fName,
                                     txtX, SkIntToScalar(220), paint);
                 txtX += paint.measureText(gOps[op].fName, strlen(gOps[op].fName));
                 paint.setColor(colorB);
-                canvas->drawText("B", 1, txtX, SkIntToScalar(220), paint);
+                canvas->drawString("B", txtX, SkIntToScalar(220), paint);
 
                 canvas->translate(SkIntToScalar(250),0);
             }
index f171202..cdd5e1c 100644 (file)
@@ -72,7 +72,7 @@ protected:
         SkPaint paint;
         paint.setAntiAlias(true);
         paint.setColor(SK_ColorBLACK);
-        canvas->drawText(txt.c_str(), txt.size(), l + w/2 + w*DELTA_SCALE*delta, t + h + SK_Scalar1 * 10, paint);
+        canvas->drawString(txt, l + w/2 + w*DELTA_SCALE*delta, t + h + SK_Scalar1 * 10, paint);
     }
 
     bool onAnimate(const SkAnimTimer& timer) override {
index c49cdad..1acc1af 100644 (file)
@@ -462,7 +462,7 @@ protected:
             paint.setAntiAlias(true);
             paint.setTextSize(16);
             paint.setColor(SK_ColorBLUE);
-            canvas->drawText(str.c_str(), str.size(), 10, 16, paint);
+            canvas->drawString(str, 10, 16, paint);
         }
     }
 
index 00f3853..60dd7e0 100644 (file)
@@ -59,7 +59,7 @@ static SkScalar draw_row(SkCanvas* canvas, const SkBitmap& bm) {
 
     paint.setAntiAlias(true);
     const char* name = sk_tool_utils::colortype_name(bm.colorType());
-    canvas->drawText(name, strlen(name), x, SkIntToScalar(bm.height())*scale*5/8,
+    canvas->drawString(name, x, SkIntToScalar(bm.height())*scale*5/8,
                      paint);
     canvas->translate(SkIntToScalar(48), 0);
 
index 9b2298a..e6134bd 100644 (file)
@@ -89,7 +89,7 @@ protected:
                         s.appendS32(paint.isDither());
                         s.append(" filter=");
                         s.appendS32(paint.getFilterQuality() != kNone_SkFilterQuality);
-                        canvas->drawText(s.c_str(), s.size(), x + W/2,
+                        canvas->drawString(s, x + W/2,
                                          y - p.getTextSize(), p);
                     }
                     if (k+j == 2) {
@@ -99,7 +99,7 @@ protected:
                         SkString s;
                         s.append(" depth=");
                         s.appendS32(fBitmaps[i].colorType() == kRGB_565_SkColorType ? 16 : 32);
-                        canvas->drawText(s.c_str(), s.size(), x + W + SkIntToScalar(4),
+                        canvas->drawString(s, x + W + SkIntToScalar(4),
                                          y + H/2, p);
                     }
                 }
index 5524f1e..3690612 100644 (file)
@@ -257,7 +257,7 @@ static void make_g_bitmap(SkBitmap& bitmap) {
     paint.setColor(0xFF884422);
     paint.setTextSize(SkIntToScalar(kBitmapSize/2));
     const char* str = "g";
-    canvas.drawText(str, strlen(str), SkIntToScalar(kBitmapSize/8),
+    canvas.drawString(str, SkIntToScalar(kBitmapSize/8),
                     SkIntToScalar(kBitmapSize/4), paint);
 }
 
@@ -339,7 +339,7 @@ static void drawSomething(SkCanvas* canvas) {
     canvas->drawCircle(SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/3), paint);
     paint.setColor(SK_ColorBLACK);
     paint.setTextSize(SkIntToScalar(kBitmapSize/3));
-    canvas->drawText("Picture", 7, SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/4), paint);
+    canvas->drawString("Picture", SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/4), paint);
 }
 
 static void rand_color_table(uint8_t* table) {
index 78aa20e..43cd505 100644 (file)
@@ -277,14 +277,14 @@ protected:
         paint.setTextSize(36);
         SkString str;
         str.appendScalar(fScale);
-        canvas->drawText(str.c_str(), str.size(), textX, 100, paint);
+        canvas->drawString(str, textX, 100, paint);
         str.reset(); str.appendScalar(fAngle);
-        canvas->drawText(str.c_str(), str.size(), textX, 150, paint);
+        canvas->drawString(str, textX, 150, paint);
 
         str.reset(); str.appendScalar(trans[0]);
-        canvas->drawText(str.c_str(), str.size(), textX, 200, paint);
+        canvas->drawString(str, textX, 200, paint);
         str.reset(); str.appendScalar(trans[1]);
-        canvas->drawText(str.c_str(), str.size(), textX, 250, paint);
+        canvas->drawString(str, textX, 250, paint);
     }
 
     bool onAnimate(const SkAnimTimer& timer) override {
index 95970e7..5fbba69 100644 (file)
@@ -71,7 +71,7 @@ protected:
         }
         canvas->drawBitmap( fBM, 100, 100, &paint );
         canvas->restore();
-        canvas->drawText( text, strlen(text), 100, 400, paint );
+        canvas->drawString(text, 100, 400, paint );
         this->inval(nullptr);
     }
 
index 8594c2b..f947251 100644 (file)
@@ -110,7 +110,7 @@ protected:
         float y = D/2 - (fm.fAscent + fm.fDescent)/2;
         SkString str;
         str.appendS32(count);
-        canvas->drawText(str.c_str(), str.size(),
+        canvas->drawString(str,
                          x, y,
                          *paint);
 
index 30b8603..ea5f97f 100644 (file)
@@ -321,7 +321,7 @@ protected:
                     label.appendS32(index);
                     SkRect dot = SkRect::MakeXYWH(pos.x() - 2, pos.y() - 2, 4, 4);
                     canvas->drawRect(dot, labelP);
-                    canvas->drawText(label.c_str(), label.size(),
+                    canvas->drawString(label,
                         pos.x() - tan.x() * 1.25f, pos.y() - tan.y() * 1.25f, labelP);
                 }
             }
@@ -381,7 +381,7 @@ protected:
             if (0 == index % 10) {
                 SkString label;
                 label.appendS32(index);
-                canvas->drawText(label.c_str(), label.size(),
+                canvas->drawString(label,
                     pos.x() + tan.x() * 1.25f, pos.y() + tan.y() * 1.25f, paint);
             }
         }
@@ -509,9 +509,9 @@ protected:
         paint.setColor(0xFF000000);
         paint.setTextSize(11.0f);
         paint.setStyle(SkPaint::kFill_Style);
-        canvas->drawText(label.c_str(), label.size(), bounds.fLeft + 5, yPos - 5, paint);
+        canvas->drawString(label, bounds.fLeft + 5, yPos - 5, paint);
         paint.setTextSize(13.0f);
-        canvas->drawText(name, strlen(name), bounds.fLeft, bounds.bottom() + 11, paint);
+        canvas->drawString(name, bounds.fLeft, bounds.bottom() + 11, paint);
     }
 
     void setForGeometry() {
index 4ff28b2..0657464 100644 (file)
@@ -119,13 +119,13 @@ protected:
                    100.0f * totArea / ((float)kWidth*kHeight),
                    fCurRandRect,
                    kNumRandRects);
-        canvas->drawText(str.c_str(), str.size(), 50, kHeight + 50, blackBigFont);
+        canvas->drawString(str, 50, kHeight + 50, blackBigFont);
 
         str.printf("Press \'j\' to toggle rectanizer");
-        canvas->drawText(str.c_str(), str.size(), 50, kHeight + 100, blackBigFont);
+        canvas->drawString(str, 50, kHeight + 100, blackBigFont);
 
         str.printf("Press \'h\' to toggle rects");
-        canvas->drawText(str.c_str(), str.size(), 50, kHeight + 150, blackBigFont);
+        canvas->drawString(str, 50, kHeight + 150, blackBigFont);
 
         this->inval(nullptr);
     }
index 082ff22..1fee2fa 100644 (file)
@@ -226,7 +226,7 @@ protected:
         paint.setAntiAlias(true);
         paint.setTextSize(SkIntToScalar(20));
         paint.setColor(hilite ? SK_ColorRED : 0x40FF0000);
-        canvas->drawText(text, strlen(text), loc.fX, loc.fY, paint);
+        canvas->drawString(text, loc.fX, loc.fY, paint);
     }
 
     void drawPredicates(SkCanvas* canvas, const SkPoint pts[]) {
@@ -373,7 +373,7 @@ protected:
         canvas->translate(0, SkIntToScalar(200));
 
         for (size_t op = 0; op < SK_ARRAY_COUNT(gOps); op++) {
-            canvas->drawText(gOps[op].fName, strlen(gOps[op].fName), SkIntToScalar(75), SkIntToScalar(50), textPaint);
+            canvas->drawString(gOps[op].fName, SkIntToScalar(75), SkIntToScalar(50), textPaint);
 
             this->drawRgnOped(canvas, gOps[op].fOp, gOps[op].fColor);
 
index 9d65b6f..08f794a 100644 (file)
@@ -150,7 +150,7 @@ protected:
         paint.setColor(SK_ColorBLACK);
         canvas->drawRect(SkRect::MakeXYWH(0, 0, 200, 24), paint);
         paint.setColor(SK_ColorWHITE);
-        canvas->drawText(outString.c_str(), outString.size(), 5, 15, paint);
+        canvas->drawString(outString, 5, 15, paint);
 
         this->inval(nullptr);
     }
index e69625e..3f84482 100644 (file)
@@ -170,7 +170,7 @@ protected:
                     if (x) {
                         paint.setMaskFilter(SkBlurMaskFilter::Make(gStyle[x - 1], sigma));
                     }
-                    canvas->drawText("Title Bar", 9, x*SkIntToScalar(100), y*SkIntToScalar(30), paint);
+                    canvas->drawString("Title Bar", x*SkIntToScalar(100), y*SkIntToScalar(30), paint);
                     sigma *= 0.75f;
                 }
 
index 3bb9056..fd66de2 100644 (file)
@@ -71,7 +71,7 @@ protected:
             canvas->drawBitmapRect( fBM, r, &paint );
         }
 
-        canvas->drawText( "AA Scaled", strlen("AA Scaled"), fCurPos.fX + SK_ARRAY_COUNT(gQualitys) * (fSize + 10), fCurPos.fY + fSize/2, paint );
+        canvas->drawString( "AA Scaled", fCurPos.fX + SK_ARRAY_COUNT(gQualitys) * (fSize + 10), fCurPos.fY + fSize/2, paint );
 
         paint.setAntiAlias(false);
         for (size_t i = 0; i < SK_ARRAY_COUNT(gQualitys); ++i) {
@@ -79,7 +79,7 @@ protected:
             SkRect r = SkRect::MakeXYWH( fCurPos.fX + i * (fSize + 10), fCurPos.fY + fSize + 10, fSize, fSize );
             canvas->drawBitmapRect( fBM, r, &paint );
         }
-        canvas->drawText( "Scaled", strlen("Scaled"), fCurPos.fX + SK_ARRAY_COUNT(gQualitys) * (fSize + 10), fCurPos.fY + fSize + 10 + fSize/2, paint );
+        canvas->drawString( "Scaled", fCurPos.fX + SK_ARRAY_COUNT(gQualitys) * (fSize + 10), fCurPos.fY + fSize + 10 + fSize/2, paint );
 
         paint.setAntiAlias(true);
         for (size_t i = 0; i < SK_ARRAY_COUNT(gQualitys); ++i) {
@@ -87,7 +87,7 @@ protected:
             canvas->drawBitmap( fBM, fCurPos.fX + i * (fBM.width() + 10), fCurPos.fY + 2*(fSize + 10), &paint );
         }
 
-        canvas->drawText( "AA No Scale", strlen("AA No Scale"), fCurPos.fX + SK_ARRAY_COUNT(gQualitys) * (fBM.width() + 10), fCurPos.fY + 2*(fSize + 10) + fSize/2, paint );
+        canvas->drawString( "AA No Scale", fCurPos.fX + SK_ARRAY_COUNT(gQualitys) * (fBM.width() + 10), fCurPos.fY + 2*(fSize + 10) + fSize/2, paint );
 
         paint.setAntiAlias(false);
         for (size_t i = 0; i < SK_ARRAY_COUNT(gQualitys); ++i) {
@@ -95,7 +95,7 @@ protected:
             canvas->drawBitmap( fBM, fCurPos.fX + i * (fBM.width() + 10), fCurPos.fY + 2*(fSize + 10) + fBM.height() + 10, &paint );
         }
 
-        canvas->drawText( "No Scale", strlen("No Scale"), fCurPos.fX + SK_ARRAY_COUNT(gQualitys) * (fBM.width() + 10), fCurPos.fY + 2*(fSize + 10) + fBM.height() + 10 + fSize/2, paint );
+        canvas->drawString( "No Scale", fCurPos.fX + SK_ARRAY_COUNT(gQualitys) * (fBM.width() + 10), fCurPos.fY + 2*(fSize + 10) + fBM.height() + 10 + fSize/2, paint );
 
 
         fCurPos.fX += fHorizontalVelocity;
index 8325cd7..12f345c 100644 (file)
@@ -95,7 +95,7 @@ protected:
         paint.setFlags(paint.getFlags() | SkPaint::kAntiAlias_Flag
                                         | SkPaint::kDevKernText_Flag);
         paint.setTextSize(SkIntToScalar(14));
-        canvas.drawText(s, strlen(s), SkIntToScalar(8), SkIntToScalar(14), paint);
+        canvas.drawString(s, SkIntToScalar(8), SkIntToScalar(14), paint);
     }
 
     static void fill_pts(SkPoint pts[], size_t n, SkRandom* rand) {
@@ -119,7 +119,7 @@ protected:
 
 //        canvas->translate(0, SkIntToScalar(50));
 
-  //      canvas->drawText(style, strlen(style), SkIntToScalar(20), SkIntToScalar(20), paint);
+  //      canvas->drawString(style, SkIntToScalar(20), SkIntToScalar(20), paint);
 
         paint.setTypeface(SkTypeface::MakeFromFile("/skimages/samplefont.ttf"));
         paint.setAntiAlias(true);
index 8286177..c357e6d 100644 (file)
@@ -59,7 +59,7 @@ protected:
             paint.setColor(rand.nextU() | (0xFF << 24));
             paint.setTextSize(SkIntToScalar(ps));
             paint.setTextSize(SkIntToScalar(24));
-            canvas->drawText(str, strlen(str), x, y, paint);
+            canvas->drawString(str, x, y, paint);
             y += paint.getFontMetrics(nullptr);
         }
     }
index 84346b0..e09354e 100644 (file)
@@ -111,7 +111,7 @@ protected:
                     str.printf("[%s,%s]", gModeNames[kx], gModeNames[ky]);
 
                     p.setTextAlign(SkPaint::kCenter_Align);
-                    textCanvas->drawText(str.c_str(), str.size(), x + r.width()/2, y, p);
+                    textCanvas->drawString(str, x + r.width()/2, y, p);
 
                     x += r.width() * 4 / 3;
                 }
@@ -143,7 +143,7 @@ protected:
                     p.setAntiAlias(true);
                     p.setLooper(fLooper);
                     str.printf("%s, %s", gConfigNames[i], gFilterNames[j]);
-                    textCanvas->drawText(str.c_str(), str.size(), x, y + r.height() * 2 / 3, p);
+                    textCanvas->drawString(str, x, y + r.height() * 2 / 3, p);
                 }
 
                 y += r.height() * 4 / 3;
index be42d23..cd05fcf 100644 (file)
@@ -93,7 +93,7 @@ protected:
             } else {
                 failure.printf("Failed to decode %s", fCurrFile.c_str());
             }
-            canvas->drawText(failure.c_str(), failure.size(), 0, height, paint);
+            canvas->drawString(failure, 0, height, paint);
             return;
         }
 
@@ -101,16 +101,16 @@ protected:
         SkString header(SkOSPath::Basename(fCurrFile.c_str()));
         header.appendf("     [%dx%d]     %s", fBitmap.width(), fBitmap.height(),
                        (fPremul ? "premultiplied" : "unpremultiplied"));
-        canvas->drawText(header.c_str(), header.size(), 0, height, paint);
+        canvas->drawString(header, 0, height, paint);
         canvas->translate(0, height);
 
         // Help messages
         header.printf("Press '%c' to move to the next image.'", fNextImageChar);
-        canvas->drawText(header.c_str(), header.size(), 0, height, paint);
+        canvas->drawString(header, 0, height, paint);
         canvas->translate(0, height);
 
         header.printf("Press '%c' to toggle premultiplied decode.", fTogglePremulChar);
-        canvas->drawText(header.c_str(), header.size(), 0, height, paint);
+        canvas->drawString(header, 0, height, paint);
 
         // Now draw the image itself.
         canvas->translate(height * 2, height * 2);
index 9ca2e78..87427fc 100644 (file)
@@ -75,7 +75,7 @@ protected:
         paint.setTextSize(16);
         paint.setTextAlign(SkPaint::kCenter_Align);
         paint.setLCDRenderText(true);
-        canvas->drawText(fLabel.c_str(), fLabel.size(), r.centerX(), r.fTop + 0.68f * r.height(), paint);
+        canvas->drawString(fLabel, r.centerX(), r.fTop + 0.68f * r.height(), paint);
     }
 
     Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned modi) override {
index 2a17e6b..ff198bc 100644 (file)
@@ -160,7 +160,7 @@ protected:
                 canvas->drawRect(r, p);
 
                 const char* label = SkBlendMode_Name(gModes[i]);
-                canvas->drawText(label, strlen(label),
+                canvas->drawString(label,
                                  x + w/2, y - labelP.getTextSize()/2, labelP);
                 x += w + SkIntToScalar(10);
                 if ((i % W) == W - 1) {
index dc5f68f..f339338 100644 (file)
@@ -35,6 +35,7 @@
 #include "SkShadowPaintFilterCanvas.h"
 #include "SkShadowShader.h"
 #include "SkSpecialImage.h"
+#include "SkString.h"
 #include "SkSurface_Base.h"
 #include "SkTextBlob.h"
 #include "SkTextFormatParams.h"
@@ -2575,6 +2576,10 @@ void SkCanvas::onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y,
     fMCRec->fFilter = drawFilter;
 }
 
+void SkCanvas::drawString(const SkString& string, SkScalar x, SkScalar y, const SkPaint& paint) {
+    this->drawText(string.c_str(), string.size(), x, y, paint);
+}
+
 // These will become non-virtual, so they always call the (virtual) onDraw... method
 void SkCanvas::drawText(const void* text, size_t byteLength, SkScalar x, SkScalar y,
                         const SkPaint& paint) {
index 5fa07fb..aea7ce7 100644 (file)
@@ -1049,7 +1049,7 @@ void GrAAConvexTessellator::Ring::draw(SkCanvas* canvas, const GrAAConvexTessell
 
         SkString num;
         num.printf("%d", this->origEdgeID(cur));
-        canvas->drawText(num.c_str(), num.size(), mid.fX, mid.fY, paint);
+        canvas->drawString(num, mid.fX, mid.fY, paint);
 
         if (fPts.count()) {
             draw_arrow(canvas, tess.point(fPts[cur].fIndex), fPts[cur].fBisector,
@@ -1094,7 +1094,7 @@ void GrAAConvexTessellator::draw(SkCanvas* canvas) const {
 
         SkString num;
         num.printf("%d", i);
-        canvas->drawText(num.c_str(), num.size(),
+        canvas->drawString(num,
                          this->point(i).fX, this->point(i).fY+(kPointRadius/2.0f),
                          paint);
     }
index a98b36f..2f8fe05 100644 (file)
@@ -120,11 +120,11 @@ DEF_TEST(DrawText_weirdCoordinates, r) {
     SkScalar oddballs[] = { 0.0f, (float)INFINITY, (float)NAN, 34359738368.0f };
 
     for (auto x : oddballs) {
-        canvas->drawText("a", 1, +x, 0.0f, SkPaint());
-        canvas->drawText("a", 1, -x, 0.0f, SkPaint());
+        canvas->drawString("a", +x, 0.0f, SkPaint());
+        canvas->drawString("a", -x, 0.0f, SkPaint());
     }
     for (auto y : oddballs) {
-        canvas->drawText("a", 1, 0.0f, +y, SkPaint());
-        canvas->drawText("a", 1, 0.0f, -y, SkPaint());
+        canvas->drawString("a", 0.0f, +y, SkPaint());
+        canvas->drawString("a", 0.0f, -y, SkPaint());
     }
 }
index d8f5142..9df8ba0 100644 (file)
@@ -257,7 +257,7 @@ DEF_TEST(FlattenRecordedDrawable, r) {
     canvas->drawPaint(paint);
     SkPaint textPaint;
     textPaint.setColor(SK_ColorBLUE);
-    canvas->drawText("TEXT", 4, 467.0f, 100.0f, textPaint);
+    canvas->drawString("TEXT", 467.0f, 100.0f, textPaint);
 
     // Draw some drawables as well
     sk_sp<SkDrawable> drawable(new IntDrawable(1, 2, 3, 4));
index 2bb439b..c3bc878 100644 (file)
@@ -82,7 +82,7 @@ DEF_TEST(FontHostStream, reporter) {
 
         // Test: origTypeface and streamTypeface from orig data draw the same
         drawBG(&origCanvas);
-        origCanvas.drawText("A", 1, point.fX, point.fY, paint);
+        origCanvas.drawString("A", point.fX, point.fY, paint);
 
         sk_sp<SkTypeface> typeface(paint.getTypeface() ? paint.refTypeface()
                                                        : SkTypeface::MakeDefault());
index 8a19a22..d884644 100644 (file)
@@ -738,14 +738,14 @@ DEF_TEST(ImageFilterDrawTiled, reporter) {
             SkScalar ypos = SkIntToScalar(height);
             untiledCanvas.save();
             untiledCanvas.scale(SkIntToScalar(scale), SkIntToScalar(scale));
-            untiledCanvas.drawText(text, strlen(text), 0, ypos, paint);
+            untiledCanvas.drawString(text, 0, ypos, paint);
             untiledCanvas.restore();
             for (int y = 0; y < height; y += tileSize) {
                 for (int x = 0; x < width; x += tileSize) {
                     tiledCanvas.save();
                     tiledCanvas.clipRect(SkRect::Make(SkIRect::MakeXYWH(x, y, tileSize, tileSize)));
                     tiledCanvas.scale(SkIntToScalar(scale), SkIntToScalar(scale));
-                    tiledCanvas.drawText(text, strlen(text), 0, ypos, paint);
+                    tiledCanvas.drawString(text, 0, ypos, paint);
                     tiledCanvas.restore();
                 }
             }
index b320015..f01d0f9 100644 (file)
@@ -161,7 +161,7 @@ DEF_TEST(SkPDF_document_skbug_4734, r) {
     canvas->translate(20.0f, 10.0f);
     canvas->rotate(30.0f);
     const char text[] = "HELLO";
-    canvas->drawText(text, strlen(text), 0, 0, SkPaint());
+    canvas->drawString(text, 0, 0, SkPaint());
 }
 
 static bool contains(const uint8_t* result, size_t size, const char expectation[]) {
index fd4bf4e..0dc3bfe 100644 (file)
@@ -850,7 +850,7 @@ static void test_typeface(skiatest::Reporter* reporter) {
     SkPaint paint;
     paint.setTypeface(SkTypeface::MakeFromName("Arial",
                                                SkFontStyle::FromOldStyle(SkTypeface::kItalic)));
-    canvas->drawText("Q", 1, 0, 10, paint);
+    canvas->drawString("Q", 0, 10, paint);
     sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture());
     SkDynamicMemoryWStream stream;
     picture->serialize(&stream);
index 10aec53..bb49df0 100644 (file)
@@ -438,7 +438,7 @@ static void draw_something(SkCanvas* canvas) {
     canvas->drawCircle(SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/3), paint);
     paint.setColor(SK_ColorBLACK);
     paint.setTextSize(SkIntToScalar(kBitmapSize/3));
-    canvas->drawText("Picture", 7, SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/4), paint);
+    canvas->drawString("Picture", SkIntToScalar(kBitmapSize/2), SkIntToScalar(kBitmapSize/4), paint);
 }
 
 DEF_TEST(Serialization, reporter) {
index 58ced7e..aa351ed 100644 (file)
@@ -332,7 +332,7 @@ static void test_copy_on_write(skiatest::Reporter* reporter, SkSurface* surface)
     EXPECT_COPY_ON_WRITE(drawBitmap(testBitmap, 0, 0))
     EXPECT_COPY_ON_WRITE(drawBitmapRect(testBitmap, testRect, nullptr))
     EXPECT_COPY_ON_WRITE(drawBitmapNine(testBitmap, testIRect, testRect, nullptr))
-    EXPECT_COPY_ON_WRITE(drawText(testText.c_str(), testText.size(), 0, 1, testPaint))
+    EXPECT_COPY_ON_WRITE(drawString(testText, 0, 1, testPaint))
     EXPECT_COPY_ON_WRITE(drawPosText(testText.c_str(), testText.size(), testPoints2, \
         testPaint))
     EXPECT_COPY_ON_WRITE(drawTextOnPath(testText.c_str(), testText.size(), testPath, nullptr, \
index 30880b9..d605d50 100644 (file)
@@ -252,9 +252,9 @@ static void draw_gamut(SkCanvas* canvas, const SkMatrix44& xyz, const char* name
     paint.setTextSize(75.0f);
     canvas->drawPoints(SkCanvas::kPolygon_PointMode, 4, rgb, paint);
     if (label) {
-        canvas->drawText("R", 1, rgb[0].fX + 5.0f, rgb[0].fY + 75.0f, paint);
-        canvas->drawText("G", 1, rgb[1].fX + 5.0f, rgb[1].fY - 5.0f, paint);
-        canvas->drawText("B", 1, rgb[2].fX - 75.0f, rgb[2].fY - 5.0f, paint);
+        canvas->drawString("R", rgb[0].fX + 5.0f, rgb[0].fY + 75.0f, paint);
+        canvas->drawString("G", rgb[1].fX + 5.0f, rgb[1].fY - 5.0f, paint);
+        canvas->drawString("B", rgb[2].fX - 75.0f, rgb[2].fY - 5.0f, paint);
     }
 }
 
index c69b17d..95f4cb1 100644 (file)
@@ -269,7 +269,7 @@ SkBitmap create_string_bitmap(int w, int h, SkColor c, int x, int y,
     paint.setTextSize(SkIntToScalar(textSize));
 
     canvas.clear(0x00000000);
-    canvas.drawText(str, strlen(str), SkIntToScalar(x), SkIntToScalar(y), paint);
+    canvas.drawString(str, SkIntToScalar(x), SkIntToScalar(y), paint);
 
     // Tag data as sRGB (without doing any color space conversion). Color-space aware configs
     // will process this correctly but legacy configs will render as if this returned N32.
index 689b97f..d0154d6 100644 (file)
@@ -138,14 +138,14 @@ void CommandSet::drawHelp(SkCanvas* canvas) {
         if (kGrouped_HelpMode == fHelpMode && lastGroup != cmd.fGroup) {
             // Group change. Advance and print header:
             y += paint.getTextSize();
-            canvas->drawText(cmd.fGroup.c_str(), cmd.fGroup.size(), x, y, groupPaint);
+            canvas->drawString(cmd.fGroup, x, y, groupPaint);
             y += groupPaint.getTextSize() + 2;
             lastGroup = cmd.fGroup;
         }
 
-        canvas->drawText(cmd.fKeyName.c_str(), cmd.fKeyName.size(), x, y, paint);
+        canvas->drawString(cmd.fKeyName, x, y, paint);
         SkString text = SkStringPrintf(": %s", cmd.fDescription.c_str());
-        canvas->drawText(text.c_str(), text.size(), x + keyWidth, y, paint);
+        canvas->drawString(text, x + keyWidth, y, paint);
         y += paint.getTextSize() + 2;
     }
 }