use drawSimpleText
Bug: skia:
Change-Id: I4aa6190e66478595a409f93a406fd42f19394302
Reviewed-on: https://skia-review.googlesource.com/c/180927
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Auto-Submit: Mike Reed <reed@google.com>
diff --git a/bench/DisplacementBench.cpp b/bench/DisplacementBench.cpp
index 3dd7965..37d53d1 100644
--- a/bench/DisplacementBench.cpp
+++ b/bench/DisplacementBench.cpp
@@ -7,6 +7,7 @@
#include "Benchmark.h"
#include "SkCanvas.h"
+#include "SkFont.h"
#include "SkDisplacementMapEffect.h"
#include "SkImageSource.h"
#include "SkSurface.h"
@@ -36,11 +37,11 @@
SkCanvas canvas(fBitmap);
canvas.clear(0x00000000);
SkPaint paint;
- paint.setAntiAlias(true);
paint.setColor(0xFF884422);
- paint.setTextSize(SkIntToScalar(96));
- const char* str = "g";
- canvas.drawString(str, SkIntToScalar(15), SkIntToScalar(55), paint);
+
+ SkFont font;
+ font.setSize(SkIntToScalar(96));
+ canvas.drawSimpleText("g", 1, kUTF8_SkTextEncoding, SkIntToScalar(15), SkIntToScalar(55), font, paint);
}
void makeCheckerboard() {
diff --git a/bench/FontScalerBench.cpp b/bench/FontScalerBench.cpp
deleted file mode 100644
index 366c54c..0000000
--- a/bench/FontScalerBench.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "Benchmark.h"
-#include "SkCanvas.h"
-#include "SkGraphics.h"
-#include "SkPaint.h"
-#include "SkRandom.h"
-#include "SkString.h"
-
-class FontScalerBench : public Benchmark {
- SkString fName;
- SkString fText;
- bool fDoLCD;
-public:
- FontScalerBench(bool doLCD) {
- fName.printf("fontscaler_%s", doLCD ? "lcd" : "aa");
- fText.set("abcdefghijklmnopqrstuvwxyz01234567890");
- fDoLCD = doLCD;
- }
-
-protected:
- virtual const char* onGetName() { return fName.c_str(); }
- virtual void onDraw(int loops, SkCanvas* canvas) {
- SkPaint paint;
- this->setupPaint(&paint);
- paint.setLCDRenderText(fDoLCD);
-
- for (int i = 0; i < loops; i++) {
- // this is critical - we want to time the creation process, so we
- // explicitly flush our cache before each run
- SkGraphics::PurgeFontCache();
-
- for (int ps = 9; ps <= 24; ps += 2) {
- paint.setTextSize(SkIntToScalar(ps));
- canvas->drawString(fText,
- 0, SkIntToScalar(20), paint);
- }
- }
- }
-private:
- typedef Benchmark INHERITED;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-
-DEF_BENCH(return new FontScalerBench(false);)
-DEF_BENCH(return new FontScalerBench(true);)
diff --git a/bench/MergeBench.cpp b/bench/MergeBench.cpp
index 10aa8b8..dd0e07c 100644
--- a/bench/MergeBench.cpp
+++ b/bench/MergeBench.cpp
@@ -7,6 +7,7 @@
#include "Benchmark.h"
#include "SkCanvas.h"
+#include "SkFont.h"
#include "SkImageSource.h"
#include "SkMergeImageFilter.h"
#include "SkSurface.h"
@@ -20,11 +21,10 @@
sk_sp<SkSurface> surface(SkSurface::MakeRasterN32Premul(80, 80));
surface->getCanvas()->clear(0x00000000);
SkPaint paint;
- paint.setAntiAlias(true);
paint.setColor(0xFF884422);
- paint.setTextSize(SkIntToScalar(96));
- const char* str = "g";
- surface->getCanvas()->drawString(str, 15, 55, paint);
+ SkFont font;
+ font.setSize(SkIntToScalar(96));
+ surface->getCanvas()->drawSimpleText("g", 1, kUTF8_SkTextEncoding, 15, 55, font, paint);
return surface->makeImageSnapshot();
}
diff --git a/bench/ShaderMaskBench.cpp b/bench/ShaderMaskBench.cpp
deleted file mode 100644
index 1cc2347..0000000
--- a/bench/ShaderMaskBench.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "Benchmark.h"
-#include "SkCanvas.h"
-#include "SkPaint.h"
-#include "SkRandom.h"
-#include "SkShader.h"
-#include "SkString.h"
-#include "SkTemplates.h"
-
-#define STR "Hamburgefons"
-
-enum FontQuality {
- kBW,
- kAA,
- kLCD
-};
-
-static const char* fontQualityName(const SkPaint& paint) {
- if (!paint.isAntiAlias()) {
- return "BW";
- }
- if (paint.isLCDRenderText()) {
- return "LCD";
- }
- return "AA";
-}
-
-class ShaderMaskBench : public Benchmark {
- SkPaint fPaint;
- SkString fText;
- SkString fName;
- FontQuality fFQ;
-public:
- ShaderMaskBench(bool isOpaque, FontQuality fq) {
- fFQ = fq;
- fText.set(STR);
-
- fPaint.setAntiAlias(kBW != fq);
- fPaint.setLCDRenderText(kLCD == fq);
- fPaint.setShader(SkShader::MakeColorShader(isOpaque ? 0xFFFFFFFF : 0x80808080));
- }
-
-protected:
- virtual const char* onGetName() {
- fName.printf("shadermask");
- fName.appendf("_%s", fontQualityName(fPaint));
- fName.appendf("_%02X", fPaint.getAlpha());
- return fName.c_str();
- }
-
- virtual void onDraw(int loops, SkCanvas* canvas) {
- const SkIPoint dim = this->getSize();
- SkRandom rand;
-
- SkPaint paint(fPaint);
- this->setupPaint(&paint);
- // explicitly need these
- paint.setAlpha(fPaint.getAlpha());
- paint.setAntiAlias(kBW != fFQ);
- paint.setLCDRenderText(kLCD == fFQ);
-
- const SkScalar x0 = SkIntToScalar(-10);
- const SkScalar y0 = SkIntToScalar(-10);
-
- paint.setTextSize(SkIntToScalar(12));
- for (int i = 0; i < loops; i++) {
- SkScalar x = x0 + rand.nextUScalar1() * dim.fX;
- SkScalar y = y0 + rand.nextUScalar1() * dim.fY;
- 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->drawString(fText, x, y, paint);
- }
- }
-
-private:
- typedef Benchmark INHERITED;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-
-DEF_BENCH( return new ShaderMaskBench(true, kBW); )
-DEF_BENCH( return new ShaderMaskBench(false, kBW); )
-DEF_BENCH( return new ShaderMaskBench(true, kAA); )
-DEF_BENCH( return new ShaderMaskBench(false, kAA); )
-DEF_BENCH( return new ShaderMaskBench(true, kLCD); )
-DEF_BENCH( return new ShaderMaskBench(false, kLCD); )
diff --git a/gn/bench.gni b/gn/bench.gni
index 206ad77..91391f8 100644
--- a/gn/bench.gni
+++ b/gn/bench.gni
@@ -46,7 +46,6 @@
"$_bench/DrawLatticeBench.cpp",
"$_bench/EncodeBench.cpp",
"$_bench/FontCacheBench.cpp",
- "$_bench/FontScalerBench.cpp",
"$_bench/FSRectBench.cpp",
"$_bench/GameBench.cpp",
"$_bench/GeometryBench.cpp",
@@ -105,7 +104,6 @@
"$_bench/RotatedRectBench.cpp",
"$_bench/RTreeBench.cpp",
"$_bench/ScalarBench.cpp",
- "$_bench/ShaderMaskBench.cpp",
"$_bench/ShaderMaskFilterBench.cpp",
"$_bench/ShadowBench.cpp",
"$_bench/ShapesBench.cpp",
diff --git a/gn/samples.gni b/gn/samples.gni
index b7435e0..7fed925 100644
--- a/gn/samples.gni
+++ b/gn/samples.gni
@@ -24,7 +24,6 @@
"$_samplecode/SampleBigBlur.cpp",
"$_samplecode/SampleBigGradient.cpp",
"$_samplecode/SampleBitmapRect.cpp",
- "$_samplecode/SampleBlur.cpp",
"$_samplecode/SampleCCPRGeometry.cpp",
"$_samplecode/SampleCamera.cpp",
"$_samplecode/SampleChart.cpp",
diff --git a/samplecode/SampleAAGeometry.cpp b/samplecode/SampleAAGeometry.cpp
index 9e60891..397ba5f 100644
--- a/samplecode/SampleAAGeometry.cpp
+++ b/samplecode/SampleAAGeometry.cpp
@@ -564,6 +564,9 @@
SkPaint fLabel;
SkPaint fValue;
+ SkFont fLabelFont;
+ SkFont fValueFont;
+
ControlPaints() {
fOutline.setAntiAlias(true);
fOutline.setStyle(SkPaint::kStroke_Style);
@@ -572,9 +575,9 @@
fFill.setAntiAlias(true);
fFill.setColor(0x7fff0000);
fLabel.setAntiAlias(true);
- fLabel.setTextSize(13.0f);
+ fLabelFont.setSize(13.0f);
fValue.setAntiAlias(true);
- fValue.setTextSize(11.0f);
+ fValueFont.setSize(11.0f);
}
};
@@ -610,9 +613,10 @@
canvas->drawLine(fBounds.fLeft - 5, fYLo, fBounds.fRight + 5, fYLo, paints.fIndicator);
SkString label;
label.printf("%0.3g", fValLo);
- canvas->drawString(label, fBounds.fLeft + 5, fYLo - 5, paints.fValue);
- canvas->drawString(fName, fBounds.fLeft, fBounds.bottom() + 11,
- paints.fLabel);
+ canvas->drawSimpleText(label.c_str(), label.size(), kUTF8_SkTextEncoding,
+ fBounds.fLeft + 5, fYLo - 5, paints.fValueFont, paints.fValue);
+ canvas->drawSimpleText(fName.c_str(), fName.size(), kUTF8_SkTextEncoding,
+ fBounds.fLeft, fBounds.bottom() + 11, paints.fLabelFont, paints.fLabel);
}
};
diff --git a/samplecode/SampleBlur.cpp b/samplecode/SampleBlur.cpp
deleted file mode 100644
index 6b5481e..0000000
--- a/samplecode/SampleBlur.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "Sample.h"
-#include "SkBitmap.h"
-#include "SkBlurMask.h"
-#include "SkCanvas.h"
-#include "SkColorPriv.h"
-#include "SkGradientShader.h"
-#include "SkMaskFilter.h"
-#include "SkUTF.h"
-
-class BlurView : public Sample {
- SkBitmap fBM;
-public:
- BlurView() {}
-
-protected:
- virtual bool onQuery(Sample::Event* evt) {
- if (Sample::TitleQ(*evt)) {
- Sample::TitleR(evt, "Blur");
- return true;
- }
- return this->INHERITED::onQuery(evt);
- }
-
- void drawBG(SkCanvas* canvas) {
- canvas->drawColor(0xFFDDDDDD);
- }
-
- virtual void onDrawContent(SkCanvas* canvas) {
- drawBG(canvas);
-
- SkBlurStyle NONE = SkBlurStyle(-999);
- static const struct {
- SkBlurStyle fStyle;
- int fCx, fCy;
- } gRecs[] = {
- { NONE, 0, 0 },
- { kInner_SkBlurStyle, -1, 0 },
- { kNormal_SkBlurStyle, 0, 1 },
- { kSolid_SkBlurStyle, 0, -1 },
- { kOuter_SkBlurStyle, 1, 0 },
- };
-
- SkPaint paint;
- paint.setAntiAlias(true);
- paint.setTextSize(25);
- canvas->translate(-40, 0);
-
- paint.setColor(SK_ColorBLUE);
- for (size_t i = 0; i < SK_ARRAY_COUNT(gRecs); i++) {
- if (gRecs[i].fStyle != NONE) {
- paint.setMaskFilter(SkMaskFilter::MakeBlur(gRecs[i].fStyle,
- SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(20))));
- } else {
- paint.setMaskFilter(nullptr);
- }
- canvas->drawCircle(200 + gRecs[i].fCx*100.f,
- 200 + gRecs[i].fCy*100.f, 50, paint);
- }
- // draw text
- {
- paint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle,
- SkBlurMask::ConvertRadiusToSigma(4)));
- SkScalar x = SkIntToScalar(70);
- SkScalar y = SkIntToScalar(400);
- paint.setColor(SK_ColorBLACK);
- 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->drawString("Hamburgefons Style", x, y, paint);
- }
- }
-
-private:
- typedef Sample INHERITED;
-};
-
-//////////////////////////////////////////////////////////////////////////////
-
-DEF_SAMPLE( return new BlurView(); )
diff --git a/samplecode/SampleComplexClip.cpp b/samplecode/SampleComplexClip.cpp
index 897b045..f4da38c 100644
--- a/samplecode/SampleComplexClip.cpp
+++ b/samplecode/SampleComplexClip.cpp
@@ -129,7 +129,7 @@
SkScalar txtX = SkIntToScalar(55);
paint.setColor(colorA);
const char* aTxt = invA ? "InverseA " : "A ";
- canvas->drawString(aTxt, txtX, SkIntToScalar(220), paint);
+ canvas->drawSimpleText(aTxt, strlen(aTxt), kUTF8_SkTextEncoding, txtX, SkIntToScalar(220), font, paint);
txtX += font.measureText(aTxt, strlen(aTxt), kUTF8_SkTextEncoding);
paint.setColor(SK_ColorBLACK);
canvas->drawSimpleText(gOps[op].fName, strlen(gOps[op].fName), kUTF8_SkTextEncoding,
diff --git a/samplecode/SampleCusp.cpp b/samplecode/SampleCusp.cpp
index 7eb85f1..32ba90d 100644
--- a/samplecode/SampleCusp.cpp
+++ b/samplecode/SampleCusp.cpp
@@ -4,9 +4,11 @@
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
+
#include "Sample.h"
#include "SkAnimTimer.h"
#include "SkCanvas.h"
+#include "SkFont.h"
#include "SkGeometry.h"
#include "SkPath.h"
#include <string>
@@ -165,7 +167,7 @@
canvas->drawPath(path, p);
// draw time to make it easier to guess when the bad cubic was drawn
std::string timeStr = std::to_string((float) (curTime - start) / 1000.f);
- canvas->drawString(timeStr.c_str(), 20, 20, SkPaint());
+ canvas->drawSimpleText(timeStr.c_str(), timeStr.size(), kUTF8_SkTextEncoding, 20, 20, SkFont(), SkPaint());
SkDebugf("");
}
diff --git a/samplecode/SampleDegenerateTwoPtRadials.cpp b/samplecode/SampleDegenerateTwoPtRadials.cpp
index b9044c1..32c5fec 100644
--- a/samplecode/SampleDegenerateTwoPtRadials.cpp
+++ b/samplecode/SampleDegenerateTwoPtRadials.cpp
@@ -8,6 +8,7 @@
#include "Sample.h"
#include "SkAnimTimer.h"
#include "SkCanvas.h"
+#include "SkFont.h"
#include "SkGradientShader.h"
#include "SkString.h"
@@ -68,10 +69,8 @@
draw_gradient2(canvas, SkRect::MakeXYWH(l, t, w, h), delta);
SkString txt;
txt.appendf("gap at \"tangent\" pt = %f", SkScalarToFloat(delta));
- SkPaint paint;
- paint.setAntiAlias(true);
- paint.setColor(SK_ColorBLACK);
- canvas->drawString(txt, l + w/2 + w*DELTA_SCALE*delta, t + h + SK_Scalar1 * 10, paint);
+ canvas->drawSimpleText(txt.c_str(), txt.size(), kUTF8_SkTextEncoding,
+ l + w/2 + w*DELTA_SCALE*delta, t + h + SK_Scalar1 * 10, SkFont(), SkPaint());
}
bool onAnimate(const SkAnimTimer& timer) override {
diff --git a/samplecode/SampleRectanizer.cpp b/samplecode/SampleRectanizer.cpp
index 317d24c..10fc2e8 100644
--- a/samplecode/SampleRectanizer.cpp
+++ b/samplecode/SampleRectanizer.cpp
@@ -7,6 +7,7 @@
#include "Sample.h"
#include "SkCanvas.h"
+#include "SkFont.h"
#include "SkRandom.h"
#include "SkPaint.h"
#include "SkUTF.h"
@@ -88,8 +89,8 @@
}
}
- SkPaint blackBigFont;
- blackBigFont.setTextSize(20);
+ SkFont blackBigFont;
+ blackBigFont.setSize(20);
SkPaint blackStroke;
blackStroke.setStyle(SkPaint::kStroke_Style);
SkPaint redFill;
@@ -121,13 +122,16 @@
100.0f * totArea / ((float)kWidth*kHeight),
fCurRandRect,
kNumRandRects);
- canvas->drawString(str, 50, kHeight + 50, blackBigFont);
+ canvas->drawSimpleText(str.c_str(), str.size(), kUTF8_SkTextEncoding,
+ 50, kHeight + 50, blackBigFont, SkPaint());
str.printf("Press \'j\' to toggle rectanizer");
- canvas->drawString(str, 50, kHeight + 100, blackBigFont);
+ canvas->drawSimpleText(str.c_str(), str.size(), kUTF8_SkTextEncoding,
+ 50, kHeight + 100, blackBigFont, SkPaint());
str.printf("Press \'h\' to toggle rects");
- canvas->drawString(str, 50, kHeight + 150, blackBigFont);
+ canvas->drawSimpleText(str.c_str(), str.size(), kUTF8_SkTextEncoding,
+ 50, kHeight + 150, blackBigFont, SkPaint());
}
private:
diff --git a/samplecode/SampleRegion.cpp b/samplecode/SampleRegion.cpp
index 409222e..2ae5f87 100644
--- a/samplecode/SampleRegion.cpp
+++ b/samplecode/SampleRegion.cpp
@@ -185,10 +185,10 @@
static void drawstr(SkCanvas* canvas, const char text[], const SkPoint& loc,
bool hilite) {
SkPaint paint;
- paint.setAntiAlias(true);
- paint.setTextSize(SkIntToScalar(20));
paint.setColor(hilite ? SK_ColorRED : 0x40FF0000);
- canvas->drawString(text, loc.fX, loc.fY, paint);
+ SkFont font;
+ font.setSize(SkIntToScalar(20));
+ canvas->drawSimpleText(text, strlen(text), kUTF8_SkTextEncoding, loc.fX, loc.fY, font, paint);
}
void drawPredicates(SkCanvas* canvas, const SkPoint pts[]) {
@@ -303,9 +303,8 @@
{ SK_ColorBLUE, "XOR", SkRegion::kXOR_Op }
};
- SkPaint textPaint;
- textPaint.setAntiAlias(true);
- textPaint.setTextSize(SK_Scalar1*24);
+ SkFont font;
+ font.setSize(SK_Scalar1*24);
this->drawOrig(canvas, false);
canvas->save();
@@ -316,7 +315,8 @@
canvas->translate(0, SkIntToScalar(200));
for (size_t op = 0; op < SK_ARRAY_COUNT(gOps); op++) {
- canvas->drawString(gOps[op].fName, SkIntToScalar(75), SkIntToScalar(50), textPaint);
+ canvas->drawSimpleText(gOps[op].fName, strlen(gOps[op].fName), kUTF8_SkTextEncoding,
+ SkIntToScalar(75), SkIntToScalar(50), font, SkPaint());
this->drawRgnOped(canvas, gOps[op].fOp, gOps[op].fColor);
diff --git a/samplecode/SampleShip.cpp b/samplecode/SampleShip.cpp
index a4871fa..feca632 100644
--- a/samplecode/SampleShip.cpp
+++ b/samplecode/SampleShip.cpp
@@ -9,6 +9,7 @@
#include "Resources.h"
#include "SkAnimTimer.h"
#include "SkCanvas.h"
+#include "SkFont.h"
#include "SkRSXform.h"
#include "SkSurface.h"
#include "Timer.h"
@@ -106,7 +107,9 @@
SkPaint paint;
paint.setFilterQuality(kLow_SkFilterQuality);
paint.setColor(SK_ColorWHITE);
- paint.setTextSize(15.0f);
+
+ SkFont font;
+ font.setSize(15.0f);
fTimer.end();
@@ -148,7 +151,7 @@
paint.setColor(SK_ColorBLACK);
canvas->drawRect(SkRect::MakeXYWH(0, 0, 200, 24), paint);
paint.setColor(SK_ColorWHITE);
- canvas->drawString(outString, 5, 15, paint);
+ canvas->drawSimpleText(outString.c_str(), outString.size(), kUTF8_SkTextEncoding, 5, 15, font, paint);
}
#if 0
diff --git a/tools/sk_tool_utils.cpp b/tools/sk_tool_utils.cpp
index b899271..374d00f 100644
--- a/tools/sk_tool_utils.cpp
+++ b/tools/sk_tool_utils.cpp
@@ -120,13 +120,13 @@
SkCanvas canvas(bitmap);
SkPaint paint;
- paint.setAntiAlias(true);
- sk_tool_utils::set_portable_typeface(&paint);
paint.setColor(c);
- paint.setTextSize(SkIntToScalar(textSize));
+
+ SkFont font(sk_tool_utils::create_portable_typeface(), textSize);
canvas.clear(0x00000000);
- canvas.drawString(str, SkIntToScalar(x), SkIntToScalar(y), paint);
+ canvas.drawSimpleText(str, strlen(str), kUTF8_SkTextEncoding,
+ SkIntToScalar(x), SkIntToScalar(y), font, 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.