summaryrefslogtreecommitdiffstats
path: root/webkit/glue
diff options
context:
space:
mode:
authorfalken@chromium.org <falken@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-24 11:36:25 +0000
committerfalken@chromium.org <falken@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-24 11:36:25 +0000
commite722eeebb0c2ffec5b42d83a874078df61bea329 (patch)
treed95a4fd62268ad5be50be4d2cd4cb6a124251bb0 /webkit/glue
parente8cc8b3a52b7d8f9ed720b59ed77827c82d73033 (diff)
downloadchromium_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.cc66
-rw-r--r--webkit/glue/webpreferences.h10
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;