summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorfalken@chromium.org <falken@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-06 05:01:20 +0000
committerfalken@chromium.org <falken@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-06 05:01:20 +0000
commit28e466cf8282a13c22ff64eb762b7adef8f68f11 (patch)
treee6816e0ab6e5a4c6439fc6fb15c914fd118336b5 /chrome/browser
parentf24fd5c6ebb17b4b74e006c74bb2236218e88b1f (diff)
downloadchromium_src-28e466cf8282a13c22ff64eb762b7adef8f68f11.zip
chromium_src-28e466cf8282a13c22ff64eb762b7adef8f68f11.tar.gz
chromium_src-28e466cf8282a13c22ff64eb762b7adef8f68f11.tar.bz2
Switch fonts when Chrome OS locale changes.
This patch is just a start. When locale changes through the login screen UI, the fonts in ResourceBundle and PlatformFontGtk are updated, and the password fields and username labels are redrawn with the correct font. In the future, all widgets in the login screen would be redrawn with the correct font. When the locale changes upon login, the fonts are updated, though not all widgets are redrawn correctly yet. BUG=chromium-os:13450 TEST=manually Review URL: http://codereview.chromium.org/6788004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80579 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/chromeos/login/existing_user_view.cc3
-rw-r--r--chrome/browser/chromeos/login/language_switch_menu.cc24
-rw-r--r--chrome/browser/chromeos/login/language_switch_menu.h2
-rw-r--r--chrome/browser/chromeos/login/user_controller.cc23
-rw-r--r--chrome/browser/chromeos/login/user_controller.h4
-rw-r--r--chrome/browser/chromeos/login/username_view.cc8
6 files changed, 54 insertions, 10 deletions
diff --git a/chrome/browser/chromeos/login/existing_user_view.cc b/chrome/browser/chromeos/login/existing_user_view.cc
index b91d639..ab5d3a4 100644
--- a/chrome/browser/chromeos/login/existing_user_view.cc
+++ b/chrome/browser/chromeos/login/existing_user_view.cc
@@ -10,6 +10,7 @@
#include "chrome/browser/chromeos/login/wizard_accessibility_helper.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/resource/resource_bundle.h"
#include "views/background.h"
#include "views/controls/textfield/textfield.h"
#include "views/focus/focus_manager.h"
@@ -85,6 +86,8 @@ void ExistingUserView::RecreateFields() {
password_field_->SetController(this);
AddChildView(password_field_);
}
+ password_field_->SetFont(ResourceBundle::GetSharedInstance().GetFont(
+ ResourceBundle::BaseFont));
password_field_->set_text_to_display_when_empty(
l10n_util::GetStringUTF16(IDS_LOGIN_POD_EMPTY_PASSWORD_TEXT));
Layout();
diff --git a/chrome/browser/chromeos/login/language_switch_menu.cc b/chrome/browser/chromeos/login/language_switch_menu.cc
index 591d3f2..0e2f5d8 100644
--- a/chrome/browser/chromeos/login/language_switch_menu.cc
+++ b/chrome/browser/chromeos/login/language_switch_menu.cc
@@ -16,7 +16,10 @@
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/common/pref_names.h"
#include "grit/generated_resources.h"
+#include "grit/platform_locale_settings.h"
+#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
+#include "ui/gfx/platform_font_gtk.h"
#include "views/controls/button/menu_button.h"
#include "views/widget/widget_gtk.h"
@@ -97,6 +100,7 @@ bool LanguageSwitchMenu::SwitchLanguage(const std::string& locale) {
}
CHECK(!loaded_locale.empty()) << "Locale could not be found for " << locale;
+ LoadFontsForCurrentLocale();
// The following line does not seem to affect locale anyhow. Maybe in
// future..
g_browser_process->SetApplicationLocale(locale);
@@ -106,6 +110,26 @@ bool LanguageSwitchMenu::SwitchLanguage(const std::string& locale) {
}
// static
+void LanguageSwitchMenu::LoadFontsForCurrentLocale() {
+ std::string gtkrc = l10n_util::GetStringUTF8(IDS_LOCALE_GTKRC);
+
+ // Read locale-specific gtkrc. Ideally we'd discard all the previously read
+ // gtkrc information, but GTK doesn't support that. Reading the new locale's
+ // gtkrc overrides the styles from previous ones when there is a conflict, but
+ // styles that are added and not conflicted will not be overridden. So far
+ // there are no locales with such a thing; if there are then this solution
+ // will not work.
+ if (!gtkrc.empty())
+ gtk_rc_parse_string(gtkrc.c_str());
+ else
+ gtk_rc_parse("/etc/gtk-2.0/gtkrc");
+
+ // Switch the font.
+ gfx::PlatformFontGtk::ReloadDefaultFont();
+ ResourceBundle::GetSharedInstance().ReloadFonts();
+}
+
+// static
void LanguageSwitchMenu::SwitchLanguageAndEnableKeyboardLayouts(
const std::string& locale) {
if (SwitchLanguage(locale)) {
diff --git a/chrome/browser/chromeos/login/language_switch_menu.h b/chrome/browser/chromeos/login/language_switch_menu.h
index 14328bc3..aaa7f0c 100644
--- a/chrome/browser/chromeos/login/language_switch_menu.h
+++ b/chrome/browser/chromeos/login/language_switch_menu.h
@@ -51,6 +51,8 @@ class LanguageSwitchMenu : public views::ViewMenuDelegate,
const std::string& locale);
private:
+ static void LoadFontsForCurrentLocale();
+
// views::ViewMenuDelegate implementation.
virtual void RunMenu(views::View* source, const gfx::Point& pt);
diff --git a/chrome/browser/chromeos/login/user_controller.cc b/chrome/browser/chromeos/login/user_controller.cc
index 6189d6f..3af69ef9 100644
--- a/chrome/browser/chromeos/login/user_controller.cc
+++ b/chrome/browser/chromeos/login/user_controller.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -328,6 +328,8 @@ void UserController::OnLocaleChanged() {
if (name_tooltip_enabled_)
EnableNameTooltip(name_tooltip_enabled_);
}
+ label_view_->SetFont(GetLabelFont());
+ unselected_label_view_->SetFont(GetUnselectedLabelFont());
}
void UserController::OnRemoveUser() {
@@ -488,12 +490,8 @@ WidgetGtk* UserController::CreateLabelWindow(int index,
label = UsernameView::CreateShapedUsernameView(text, true);
}
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
const gfx::Font& font = (type == WM_IPC_WINDOW_LOGIN_LABEL) ?
- rb.GetFont(ResourceBundle::MediumBoldFont).DeriveFont(
- kSelectedUsernameFontDelta) :
- rb.GetFont(ResourceBundle::BaseFont).DeriveFont(
- kUnselectedUsernameFontDelta, gfx::Font::BOLD);
+ GetLabelFont() : GetUnselectedLabelFont();
label->SetFont(font);
label->SetColor(login::kTextColor);
@@ -519,6 +517,19 @@ WidgetGtk* UserController::CreateLabelWindow(int index,
return window;
}
+gfx::Font UserController::GetLabelFont() {
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ return rb.GetFont(ResourceBundle::MediumBoldFont).DeriveFont(
+ kSelectedUsernameFontDelta);
+}
+
+gfx::Font UserController::GetUnselectedLabelFont() {
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ return rb.GetFont(ResourceBundle::BaseFont).DeriveFont(
+ kUnselectedUsernameFontDelta, gfx::Font::BOLD);
+}
+
+
std::wstring UserController::GetNameTooltip() const {
if (is_new_user_)
return UTF16ToWide(l10n_util::GetStringUTF16(IDS_ADD_USER));
diff --git a/chrome/browser/chromeos/login/user_controller.h b/chrome/browser/chromeos/login/user_controller.h
index 738b214..57ff851 100644
--- a/chrome/browser/chromeos/login/user_controller.h
+++ b/chrome/browser/chromeos/login/user_controller.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -141,6 +141,8 @@ class UserController : public views::WidgetDelegate,
bool need_guest_link);
views::WidgetGtk* CreateImageWindow(int index);
views::WidgetGtk* CreateLabelWindow(int index, WmIpcWindowType type);
+ gfx::Font GetLabelFont();
+ gfx::Font GetUnselectedLabelFont();
void CreateBorderWindow(int index,
int total_user_count,
int controls_width, int controls_height);
diff --git a/chrome/browser/chromeos/login/username_view.cc b/chrome/browser/chromeos/login/username_view.cc
index e52c6f0..58b06a5 100644
--- a/chrome/browser/chromeos/login/username_view.cc
+++ b/chrome/browser/chromeos/login/username_view.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -12,6 +12,7 @@
#include "third_party/skia/include/core/SkComposeShader.h"
#include "third_party/skia/include/effects/SkGradientShader.h"
#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/canvas_skia.h"
#include "ui/gfx/gtk_util.h"
@@ -188,9 +189,10 @@ void UsernameView::PaintUsername(const gfx::Rect& bounds) {
void UsernameView::OnLocaleChanged() {
if (is_guest_) {
SetText(UTF16ToWide(l10n_util::GetStringUTF16(IDS_GUEST)));
- text_image_.reset();
- SchedulePaint();
}
+ // Repaint because the font may have changed.
+ text_image_.reset();
+ SchedulePaint();
}
} // namespace chromeos