Fix aliased Edging in PaintFlags::ToSkFont()
PaintFlags::ToSkFont() assumes the default SkFont Edging is kAliased,
but that is no longer the case.
Set kAliased Edging explicitly when AA is disabled.
Bug: 918030
Change-Id: Ia8b38a1190a70eff109d4f9c9ddf50bdcb3b3f56
Reviewed-on: https://chromium-review.googlesource.com/c/1409343
Reviewed-by: enne <enne@chromium.org>
Reviewed-by: Michael Wasserman <msw@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
Cr-Commit-Position: refs/heads/master@{#622553}
diff --git a/cc/paint/paint_flags.cc b/cc/paint/paint_flags.cc
index 3103b7a..e2e1c7f 100644
--- a/cc/paint/paint_flags.cc
+++ b/cc/paint/paint_flags.cc
@@ -159,6 +159,8 @@
} else {
font.setEdging(SkFont::Edging::kAntiAlias);
}
+ } else {
+ font.setEdging(SkFont::Edging::kAlias);
}
return font;
}
diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc
index 192e9a3..38a7093 100644
--- a/ui/gfx/render_text_unittest.cc
+++ b/ui/gfx/render_text_unittest.cc
@@ -4511,6 +4511,47 @@
EXPECT_FALSE(GetRendererPaint().isLCDRenderText());
}
+// Ensure the SkFont Edging is computed accurately.
+TEST_F(RenderTextTest, SkFontEdging) {
+ const auto edging = [this]() {
+ return GetRendererPaint().ToSkFont().getEdging();
+ };
+
+ FontRenderParams params;
+ EXPECT_TRUE(params.antialiasing);
+ EXPECT_EQ(params.subpixel_rendering,
+ FontRenderParams::SUBPIXEL_RENDERING_NONE);
+
+ // aa: true, subpixel: false, subpixel_suppressed: false -> kAntiAlias
+ renderer()->SetFontRenderParams(params,
+ false /*subpixel_rendering_suppressed*/);
+ EXPECT_EQ(edging(), SkFont::Edging::kAntiAlias);
+
+ // aa: false, subpixel: false, subpixel_suppressed: false -> kAlias
+ params.antialiasing = false;
+ renderer()->SetFontRenderParams(params,
+ false /*subpixel_rendering_suppressed*/);
+ EXPECT_EQ(edging(), SkFont::Edging::kAlias);
+
+ // aa: true, subpixel: true, subpixel_suppressed: false -> kSubpixelAntiAlias
+ params.antialiasing = true;
+ params.subpixel_rendering = FontRenderParams::SUBPIXEL_RENDERING_RGB;
+ renderer()->SetFontRenderParams(params,
+ false /*subpixel_rendering_suppressed*/);
+ EXPECT_EQ(edging(), SkFont::Edging::kSubpixelAntiAlias);
+
+ // aa: true, subpixel: true, subpixel_suppressed: true -> kAntiAlias
+ renderer()->SetFontRenderParams(params,
+ true /*subpixel_rendering_suppressed*/);
+ EXPECT_EQ(edging(), SkFont::Edging::kAntiAlias);
+
+ // aa: false, subpixel: true, subpixel_suppressed: false -> kAlias
+ params.antialiasing = false;
+ renderer()->SetFontRenderParams(params,
+ false /*subpixel_rendering_suppressed*/);
+ EXPECT_EQ(edging(), SkFont::Edging::kAlias);
+}
+
// Verify GetWordLookupDataAtPoint returns the correct baseline point and
// decorated word for an LTR string.
TEST_F(RenderTextTest, GetWordLookupDataAtPoint_LTR) {