diff options
author | falken@chromium.org <falken@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-24 11:36:25 +0000 |
---|---|---|
committer | falken@chromium.org <falken@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-24 11:36:25 +0000 |
commit | e722eeebb0c2ffec5b42d83a874078df61bea329 (patch) | |
tree | d95a4fd62268ad5be50be4d2cd4cb6a124251bb0 /webkit/glue | |
parent | e8cc8b3a52b7d8f9ed720b59ed77827c82d73033 (diff) | |
download | chromium_src-e722eeebb0c2ffec5b42d83a874078df61bea329.zip chromium_src-e722eeebb0c2ffec5b42d83a874078df61bea329.tar.gz chromium_src-e722eeebb0c2ffec5b42d83a874078df61bea329.tar.bz2 |
Pass per-script fonts to WebKit settings.
WebKit now has per-script font settings (https://bugs.webkit.org/show_bug.cgi?id=20797).
This change adds per-script font preferences to Chromium and passes them to the WebKit settings. For this
first patch, default per-script fonts are defined only on Chrome OS, and only for Arabic and CJK scripts.
It specifies the default fonts in locale_settings_cros.grd. The preferences are passed to WebPreferences in render_view_host_delegate_helper.cc (in the same manner as current font preferences).
BUG=92302
TEST=manually
Review URL: http://codereview.chromium.org/7606028
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@98024 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue')
-rw-r--r-- | webkit/glue/webpreferences.cc | 66 | ||||
-rw-r--r-- | webkit/glue/webpreferences.h | 10 |
2 files changed, 76 insertions, 0 deletions
diff --git a/webkit/glue/webpreferences.cc b/webkit/glue/webpreferences.cc index 615b68c..cacfd4b 100644 --- a/webkit/glue/webpreferences.cc +++ b/webkit/glue/webpreferences.cc @@ -4,6 +4,8 @@ #include "webkit/glue/webpreferences.h" +#include <unicode/uchar.h> + #include "base/string_util.h" #include "base/utf_string_conversions.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebNetworkStateNotifier.h" @@ -92,6 +94,60 @@ WebPreferences::WebPreferences() WebPreferences::~WebPreferences() { } +namespace { + +void setStandardFontFamilyWrapper(WebSettings* settings, + const string16& font, + UScriptCode script) { + settings->setStandardFontFamily(font, script); +} + +void setFixedFontFamilyWrapper(WebSettings* settings, + const string16& font, + UScriptCode script) { + settings->setFixedFontFamily(font, script); +} + +void setSerifFontFamilyWrapper(WebSettings* settings, + const string16& font, + UScriptCode script) { + settings->setSerifFontFamily(font, script); +} + +void setSansSerifFontFamilyWrapper(WebSettings* settings, + const string16& font, + UScriptCode script) { + settings->setSansSerifFontFamily(font, script); +} + +void setCursiveFontFamilyWrapper(WebSettings* settings, + const string16& font, + UScriptCode script) { + settings->setCursiveFontFamily(font, script); +} + +void setFantasyFontFamilyWrapper(WebSettings* settings, + const string16& font, + UScriptCode script) { + settings->setFantasyFontFamily(font, script); +} + +typedef void (*SetFontFamilyWrapper)( + WebKit::WebSettings*, const string16&, UScriptCode); + +void ApplyFontsFromMap(const WebPreferences::ScriptFontFamilyMap& map, + SetFontFamilyWrapper setter, + WebSettings* settings) { + for (WebPreferences::ScriptFontFamilyMap::const_iterator it = map.begin(); + it != map.end(); ++it) { + int32 script = u_getPropertyValueEnum(UCHAR_SCRIPT, (it->first).c_str()); + if (script >= 0 && script < USCRIPT_CODE_LIMIT) + (*setter)(settings, it->second, (UScriptCode) script); + } +} + +} // namespace + void WebPreferences::Apply(WebView* web_view) const { WebSettings* settings = web_view->settings(); settings->setStandardFontFamily(standard_font_family); @@ -100,6 +156,16 @@ void WebPreferences::Apply(WebView* web_view) const { settings->setSansSerifFontFamily(sans_serif_font_family); settings->setCursiveFontFamily(cursive_font_family); settings->setFantasyFontFamily(fantasy_font_family); + ApplyFontsFromMap(standard_font_family_map, setStandardFontFamilyWrapper, + settings); + ApplyFontsFromMap(fixed_font_family_map, setFixedFontFamilyWrapper, settings); + ApplyFontsFromMap(serif_font_family_map, setSerifFontFamilyWrapper, settings); + ApplyFontsFromMap(sans_serif_font_family_map, setSansSerifFontFamilyWrapper, + settings); + ApplyFontsFromMap(cursive_font_family_map, setCursiveFontFamilyWrapper, + settings); + ApplyFontsFromMap(fantasy_font_family_map, setFantasyFontFamilyWrapper, + settings); settings->setDefaultFontSize(default_font_size); settings->setDefaultFixedFontSize(default_fixed_font_size); settings->setMinimumFontSize(minimum_font_size); diff --git a/webkit/glue/webpreferences.h b/webkit/glue/webpreferences.h index 985f7ec..927c18c 100644 --- a/webkit/glue/webpreferences.h +++ b/webkit/glue/webpreferences.h @@ -22,12 +22,22 @@ class WebView; } struct WebPreferences { + // Map of ISO 15924 four-letter script code to font family. For example, + // "Arab" to "My Arabic Font". + typedef std::vector<std::pair<std::string, string16> > ScriptFontFamilyMap; + string16 standard_font_family; string16 fixed_font_family; string16 serif_font_family; string16 sans_serif_font_family; string16 cursive_font_family; string16 fantasy_font_family; + ScriptFontFamilyMap standard_font_family_map; + ScriptFontFamilyMap fixed_font_family_map; + ScriptFontFamilyMap serif_font_family_map; + ScriptFontFamilyMap sans_serif_font_family_map; + ScriptFontFamilyMap cursive_font_family_map; + ScriptFontFamilyMap fantasy_font_family_map; int default_font_size; int default_fixed_font_size; int minimum_font_size; |