Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1486)

Side by Side Diff: ui/gfx/font_render_params_linux.cc

Issue 400193004: Unify desktop Linux and Chrome OS font rendering params. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: use initializer list Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/gfx/BUILD.gn ('k') | ui/gfx/font_render_params_linux_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/gfx/font_render_params.h" 5 #include "ui/gfx/font_render_params.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "ui/gfx/linux_font_delegate.h"
9 #include "ui/gfx/switches.h" 10 #include "ui/gfx/switches.h"
10 11
11 #include <fontconfig/fontconfig.h> 12 #include <fontconfig/fontconfig.h>
12 13
13 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
14 #include "ui/gfx/linux_font_delegate.h"
15 #endif
16
17 namespace gfx { 14 namespace gfx {
18 15
19 namespace { 16 namespace {
20 17
21 bool SubpixelPositioningRequested(bool for_web_contents) {
22 return CommandLine::ForCurrentProcess()->HasSwitch(
23 for_web_contents ? switches::kEnableWebkitTextSubpixelPositioning
24 : switches::kEnableBrowserTextSubpixelPositioning);
25 }
26
27 // Converts Fontconfig FC_HINT_STYLE to FontRenderParams::Hinting. 18 // Converts Fontconfig FC_HINT_STYLE to FontRenderParams::Hinting.
28 FontRenderParams::Hinting ConvertFontconfigHintStyle(int hint_style) { 19 FontRenderParams::Hinting ConvertFontconfigHintStyle(int hint_style) {
29 switch (hint_style) { 20 switch (hint_style) {
30 case FC_HINT_SLIGHT: return FontRenderParams::HINTING_SLIGHT; 21 case FC_HINT_SLIGHT: return FontRenderParams::HINTING_SLIGHT;
31 case FC_HINT_MEDIUM: return FontRenderParams::HINTING_MEDIUM; 22 case FC_HINT_MEDIUM: return FontRenderParams::HINTING_MEDIUM;
32 case FC_HINT_FULL: return FontRenderParams::HINTING_FULL; 23 case FC_HINT_FULL: return FontRenderParams::HINTING_FULL;
33 default: return FontRenderParams::HINTING_NONE; 24 default: return FontRenderParams::HINTING_NONE;
34 } 25 }
35 } 26 }
36 27
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 loaded_defaults = true; 123 loaded_defaults = true;
133 return default_params; 124 return default_params;
134 } 125 }
135 126
136 FontRenderParams GetCustomFontRenderParams( 127 FontRenderParams GetCustomFontRenderParams(
137 bool for_web_contents, 128 bool for_web_contents,
138 const std::vector<std::string>* family_list, 129 const std::vector<std::string>* family_list,
139 const int* pixel_size, 130 const int* pixel_size,
140 const int* point_size, 131 const int* point_size,
141 std::string* family_out) { 132 std::string* family_out) {
142 FontRenderParams params;
143 if (family_out) 133 if (family_out)
144 family_out->clear(); 134 family_out->clear();
145 135
146 #if defined(OS_CHROMEOS) 136 // Start with the delegate's settings, but let Fontconfig have the final say.
147 // Use reasonable defaults. 137 FontRenderParams params;
148 params.antialiasing = true; 138 const LinuxFontDelegate* delegate = LinuxFontDelegate::instance();
149 params.autohinter = true; 139 if (delegate)
150 params.use_bitmaps = true; 140 params = delegate->GetDefaultFontRenderParams();
151 params.hinting = FontRenderParams::HINTING_SLIGHT; 141 QueryFontconfig(family_list, pixel_size, point_size, &params, family_out);
152 142
153 // Query Fontconfig to get the family name and subpixel rendering setting. 143 // Fontconfig doesn't support configuring subpixel positioning; check a flag.
154 // In general, we try to limit Chrome OS's dependency on Fontconfig, but it's 144 params.subpixel_positioning = CommandLine::ForCurrentProcess()->HasSwitch(
155 // used to configure fonts for different scripts and to disable subpixel 145 for_web_contents ?
156 // rendering on systems that use external displays. 146 switches::kEnableWebkitTextSubpixelPositioning :
157 // TODO(derat): Decide if we should just use Fontconfig wholeheartedly on 147 switches::kEnableBrowserTextSubpixelPositioning);
158 // Chrome OS; Blink is using it, after all.
159 FontRenderParams fc_params;
160 QueryFontconfig(family_list, pixel_size, point_size, &fc_params, family_out);
161 params.subpixel_rendering = fc_params.subpixel_rendering;
162 #else
163 // Start with the delegate's settings, but let Fontconfig have the final say.
164 // TODO(derat): Figure out if we need to query the delegate at all. Does
165 // GtkSettings always get overridden by Fontconfig in GTK apps?
166 const LinuxFontDelegate* delegate = LinuxFontDelegate::instance();
167 if (delegate) {
168 params.antialiasing = delegate->UseAntialiasing();
169 params.hinting = delegate->GetHintingStyle();
170 params.subpixel_rendering = delegate->GetSubpixelRenderingStyle();
171 }
172 QueryFontconfig(family_list, pixel_size, point_size, &params, family_out);
173 #endif
174
175 params.subpixel_positioning = SubpixelPositioningRequested(for_web_contents);
176 148
177 // To enable subpixel positioning, we need to disable hinting. 149 // To enable subpixel positioning, we need to disable hinting.
178 if (params.subpixel_positioning) 150 if (params.subpixel_positioning)
179 params.hinting = FontRenderParams::HINTING_NONE; 151 params.hinting = FontRenderParams::HINTING_NONE;
180 152
181 // Use the first family from the list if Fontconfig didn't suggest a family. 153 // Use the first family from the list if Fontconfig didn't suggest a family.
182 if (family_out && family_out->empty() && 154 if (family_out && family_out->empty() &&
183 family_list && !family_list->empty()) 155 family_list && !family_list->empty())
184 *family_out = (*family_list)[0]; 156 *family_out = (*family_list)[0];
185 157
186 return params; 158 return params;
187 } 159 }
188 160
189 } // namespace gfx 161 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gfx/BUILD.gn ('k') | ui/gfx/font_render_params_linux_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698