tweak textbox to use subpixel
This makes it line-up with the coretext version.
Bug: skia:9836
Change-Id: I39f51e56ecb0d55ab970a8fa247bede9f4f0f394
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/267445
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/samplecode/SampleTextBox.cpp b/samplecode/SampleTextBox.cpp
index 455c7cc..c13b981 100644
--- a/samplecode/SampleTextBox.cpp
+++ b/samplecode/SampleTextBox.cpp
@@ -59,6 +59,7 @@
SkTextBlobBuilderRunHandler builder(gText, { margin, margin });
SkFont srcFont(nullptr, SkIntToScalar(i));
srcFont.setEdging(SkFont::Edging::kSubpixelAntiAlias);
+ srcFont.setSubpixel(true);
const char* utf8 = gText;
size_t utf8Bytes = sizeof(gText) - 1;
@@ -116,3 +117,71 @@
#ifdef SK_BUILD_FOR_MAC
DEF_SAMPLE( return new TextBoxView(SkShaper::MakeCoreText, "coretext"); );
#endif
+
+class SampleShaper : public Sample {
+public:
+ SampleShaper() {}
+
+protected:
+ SkString name() override { return SkString("shaper"); }
+
+ void drawTest(SkCanvas* canvas, const char str[], SkScalar size,
+ std::unique_ptr<SkShaper> shaper) {
+ if (!shaper) return;
+
+ SkTextBlobBuilderRunHandler builder(str, {0, 0});
+ SkFont srcFont;
+ srcFont.setSize(size);
+ srcFont.setEdging(SkFont::Edging::kSubpixelAntiAlias);
+ srcFont.setSubpixel(true);
+
+ size_t len = strlen(str);
+
+ std::unique_ptr<SkShaper::BiDiRunIterator> bidi(
+ SkShaper::MakeBiDiRunIterator(str, len, 0xfe));
+ if (!bidi) {
+ return;
+ }
+
+ std::unique_ptr<SkShaper::LanguageRunIterator> language(
+ SkShaper::MakeStdLanguageRunIterator(str, len));
+ if (!language) {
+ return;
+ }
+
+ SkFourByteTag undeterminedScript = SkSetFourByteTag('Z','y','y','y');
+ std::unique_ptr<SkShaper::ScriptRunIterator> script(
+ SkShaper::MakeScriptRunIterator(str, len, undeterminedScript));
+ if (!script) {
+ return;
+ }
+
+ std::unique_ptr<SkShaper::FontRunIterator> font(
+ SkShaper::MakeFontMgrRunIterator(str, len, srcFont, SkFontMgr::RefDefault(),
+ "Arial", SkFontStyle::Bold(), &*language));
+ if (!font) {
+ return;
+ }
+
+ shaper->shape(str, len, *font, *bidi, *script, *language, 2000, &builder);
+
+ canvas->drawTextBlob(builder.makeBlob(), 0, 0, SkPaint());
+ }
+
+ void onDrawContent(SkCanvas* canvas) override {
+ canvas->translate(10, 30);
+
+ const char text[] = "world";
+
+ for (SkScalar size = 30; size <= 30; size += 10) {
+ this->drawTest(canvas, text, size, SkShaper::Make());
+ canvas->translate(0, size + 5);
+ this->drawTest(canvas, text, size, SkShaper::MakeCoreText());
+ canvas->translate(0, size*2);
+ }
+ }
+
+private:
+ typedef Sample INHERITED;
+};
+DEF_SAMPLE( return new SampleShaper; );