From 7d9be261069a7fa98616c88085a5adfb58097214 Mon Sep 17 00:00:00 2001 From: "derat@chromium.org" Date: Mon, 21 Jul 2014 19:46:34 +0000 Subject: [PATCH] linux: Use scalable fonts and Fontconfig's bitmap setting. Require that FC_SCALABLE is true in Fontconfig queries (matching Blink) and use Fontconfig's FC_EMBEDDED_BITMAP setting. BUG=395313 Review URL: https://codereview.chromium.org/401303002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@284484 0039d316-1c4b-4281-b951-d872f2087c98 --- ui/gfx/font_render_params_linux.cc | 6 ++++ ui/gfx/font_render_params_linux_unittest.cc | 44 +++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/ui/gfx/font_render_params_linux.cc b/ui/gfx/font_render_params_linux.cc index 29bf747f3091..7bdee19cc809 100644 --- a/ui/gfx/font_render_params_linux.cc +++ b/ui/gfx/font_render_params_linux.cc @@ -49,6 +49,8 @@ bool QueryFontconfig(const std::vector* family_list, FcPattern* pattern = FcPatternCreate(); CHECK(pattern); + FcPatternAddBool(pattern, FC_SCALABLE, FcTrue); + if (family_list) { for (std::vector::const_iterator it = family_list->begin(); it != family_list->end(); ++it) { @@ -91,6 +93,10 @@ bool QueryFontconfig(const std::vector* family_list, FcPatternGetBool(match, FC_AUTOHINT, 0, &fc_autohint); params_out->autohinter = fc_autohint; + FcBool fc_bitmap = 0; + FcPatternGetBool(match, FC_EMBEDDED_BITMAP, 0, &fc_bitmap); + params_out->use_bitmaps = fc_bitmap; + FcBool fc_hinting = 0; int fc_hint_style = FC_HINT_NONE; FcPatternGetBool(match, FC_HINTING, 0, &fc_hinting); diff --git a/ui/gfx/font_render_params_linux_unittest.cc b/ui/gfx/font_render_params_linux_unittest.cc index 1a9167f06966..6d28119206e4 100644 --- a/ui/gfx/font_render_params_linux_unittest.cc +++ b/ui/gfx/font_render_params_linux_unittest.cc @@ -166,4 +166,48 @@ TEST_F(FontRenderParamsTest, Style) { EXPECT_EQ(FontRenderParams::HINTING_NONE, params.hinting); } +TEST_F(FontRenderParamsTest, Scalable) { + ASSERT_TRUE(LoadSystemFont("arial.ttf")); + // Load a config that only enables antialiasing for scalable fonts. + ASSERT_TRUE(LoadConfigDataIntoFontconfig(temp_dir_.path(), + std::string(kFontconfigFileHeader) + + kFontconfigMatchHeader + + CreateFontconfigEditStanza("antialias", "bool", "false") + + kFontconfigMatchFooter + + kFontconfigMatchHeader + + CreateFontconfigTestStanza("scalable", "eq", "bool", "true") + + CreateFontconfigEditStanza("antialias", "bool", "true") + + kFontconfigMatchFooter + + kFontconfigFileFooter)); + + // Check that we specifically ask how scalable fonts should be rendered. + FontRenderParams params = GetCustomFontRenderParams( + false, NULL, NULL, NULL, NULL, NULL); + EXPECT_TRUE(params.antialiasing); +} + +TEST_F(FontRenderParamsTest, UseBitmaps) { + ASSERT_TRUE(LoadSystemFont("arial.ttf")); + // Load a config that enables embedded bitmaps for fonts <= 10 pixels. + ASSERT_TRUE(LoadConfigDataIntoFontconfig(temp_dir_.path(), + std::string(kFontconfigFileHeader) + + kFontconfigMatchHeader + + CreateFontconfigEditStanza("embeddedbitmap", "bool", "false") + + kFontconfigMatchFooter + + kFontconfigMatchHeader + + CreateFontconfigTestStanza("pixelsize", "less_eq", "double", "10") + + CreateFontconfigEditStanza("embeddedbitmap", "bool", "true") + + kFontconfigMatchFooter + + kFontconfigFileFooter)); + + FontRenderParams params = GetCustomFontRenderParams( + false, NULL, NULL, NULL, NULL, NULL); + EXPECT_FALSE(params.use_bitmaps); + + const int pixel_size = 5; + params = GetCustomFontRenderParams( + false, NULL, &pixel_size, NULL, NULL, NULL); + EXPECT_TRUE(params.use_bitmaps); +} + } // namespace gfx -- 2.11.4.GIT