use font instead of paint
Bug: skia:
Change-Id: I653de31a22545cd78fba7e4aa7b7f85b6057a8e0
Reviewed-on: https://skia-review.googlesource.com/c/179984
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Auto-Submit: Mike Reed <reed@google.com>
diff --git a/gm/skbug_5321.cpp b/gm/skbug_5321.cpp
index be7e756..00021c8 100644
--- a/gm/skbug_5321.cpp
+++ b/gm/skbug_5321.cpp
@@ -6,28 +6,34 @@
*/
#include "gm.h"
+#include "SkTextBlob.h"
// https://bugs.skia.org/5321
// two strings should draw the same. PDF did not.
DEF_SIMPLE_GM(skbug_5321, canvas, 128, 128) {
- SkPaint paint;
- paint.setStyle(SkPaint::kFill_Style);
- paint.setTextSize(30);
+ SkFont font;
+ font.setEdging(SkFont::Edging::kAlias);
+ font.setSize(30);
- paint.setTextEncoding(kUTF8_SkTextEncoding);
const char text[] = "x\314\200y"; // utf8(u"x\u0300y")
SkScalar x = 20, y = 45;
- size_t byteLength = strlen(text);
- canvas->drawText(text, byteLength, x, y, paint);
- int glyph_count = paint.countText(text, byteLength);
- SkAutoTMalloc<SkScalar> widths(glyph_count);
- (void)paint.getTextWidths(text, byteLength, &widths[0]);
+ size_t byteLength = strlen(text);
+ canvas->drawSimpleText(text, byteLength, kUTF8_SkTextEncoding, x, y, font, SkPaint());
+
+ y += font.getMetrics(nullptr);
+ int glyph_count = font.countText(text, byteLength, kUTF8_SkTextEncoding);
+ SkTextBlobBuilder builder;
+
+ auto rec = builder.allocRunPosH(font, glyph_count, y);
+ font.textToGlyphs(text, byteLength, kUTF8_SkTextEncoding, rec.glyphs, glyph_count);
+
+ font.getWidths(rec.glyphs, glyph_count, rec.pos);
for (int i = 0; i < glyph_count; ++i) {
- SkScalar w = widths[i];
- widths[i] = x;
+ SkScalar w = rec.pos[i];
+ rec.pos[i] = x;
x += w;
}
- y += paint.getFontMetrics(nullptr);
- canvas->drawPosTextH(text, byteLength, &widths[0], y, paint);
+
+ canvas->drawTextBlob(builder.make(), 0, 0, SkPaint());
}