Index: chrome/browser/ui/views/toolbar/wrench_menu.cc |
diff --git a/chrome/browser/ui/views/toolbar/wrench_menu.cc b/chrome/browser/ui/views/toolbar/wrench_menu.cc |
index 68a877c03f22a395f7a7d3f4c43d78bb3ddc7c08..76f6037cb262312e3572665ab79c779e680f1b5e 100644 |
--- a/chrome/browser/ui/views/toolbar/wrench_menu.cc |
+++ b/chrome/browser/ui/views/toolbar/wrench_menu.cc |
@@ -366,17 +366,25 @@ class WrenchMenuView : public views::View, |
View::SchedulePaintInRect(gfx::Rect(size())); |
} |
- LabelButton* CreateAndConfigureButton(const ui::NativeTheme* native_theme, |
- int string_id, |
+ virtual void OnNativeThemeChanged(const ui::NativeTheme* theme) OVERRIDE { |
+ views::View::OnNativeThemeChanged(theme); |
+ for (int i = 0; i < child_count(); ++i) { |
+ if (child_at(i)->GetClassName() == views::LabelButton::kViewClassName) { |
+ UpdateButtonWithNativeTheme( |
+ static_cast<views::LabelButton*>(child_at(i)), theme); |
+ } |
+ } |
+ } |
+ |
+ LabelButton* CreateAndConfigureButton(int string_id, |
MenuButtonBackground::ButtonType type, |
int index, |
MenuButtonBackground** background) { |
- return CreateButtonWithAccName( |
- native_theme, string_id, type, index, background, string_id); |
+ return |
+ CreateButtonWithAccName(string_id, type, index, background, string_id); |
} |
- LabelButton* CreateButtonWithAccName(const ui::NativeTheme* native_theme, |
- int string_id, |
+ LabelButton* CreateButtonWithAccName(int string_id, |
MenuButtonBackground::ButtonType type, |
int index, |
MenuButtonBackground** background, |
@@ -394,33 +402,14 @@ class WrenchMenuView : public views::View, |
MenuButtonBackground* bg = |
new MenuButtonBackground(type, menu_->use_new_menu()); |
button->set_background(bg); |
- const MenuConfig& menu_config = menu_->GetMenuConfig(); |
if (background) |
*background = bg; |
- button->SetBorder(scoped_ptr<views::Border>( |
- new MenuButtonBorder(menu_config, menu_->use_new_menu()))); |
button->SetHorizontalAlignment(gfx::ALIGN_CENTER); |
- button->SetFontList(menu_config.font_list); |
- button->SetTextColor( |
- views::Button::STATE_DISABLED, |
- native_theme->GetSystemColor( |
- ui::NativeTheme::kColorId_DisabledMenuItemForegroundColor)); |
- button->SetTextColor( |
- views::Button::STATE_HOVERED, |
- native_theme->GetSystemColor( |
- ui::NativeTheme::kColorId_SelectedMenuItemForegroundColor)); |
- button->SetTextColor( |
- views::Button::STATE_PRESSED, |
- native_theme->GetSystemColor( |
- ui::NativeTheme::kColorId_SelectedMenuItemForegroundColor)); |
- button->SetTextColor( |
- views::Button::STATE_NORMAL, |
- native_theme->GetSystemColor( |
- ui::NativeTheme::kColorId_EnabledMenuItemForegroundColor)); |
AddChildView(button); |
// all buttons on menu should must be a custom button in order for |
// the keyboard nativigation work. |
DCHECK(CustomButton::AsCustomButton(button)); |
+ UpdateButtonWithNativeTheme(button, NULL); |
return button; |
} |
@@ -436,6 +425,33 @@ class WrenchMenuView : public views::View, |
MenuModel* menu_model() { return menu_model_; } |
private: |
+ void UpdateButtonWithNativeTheme(views::LabelButton* button, |
+ const ui::NativeTheme* native_theme) { |
+ if (native_theme) { |
+ button->SetTextColor( |
+ views::Button::STATE_DISABLED, |
+ native_theme->GetSystemColor( |
+ ui::NativeTheme::kColorId_DisabledMenuItemForegroundColor)); |
+ button->SetTextColor( |
+ views::Button::STATE_HOVERED, |
+ native_theme->GetSystemColor( |
+ ui::NativeTheme::kColorId_SelectedMenuItemForegroundColor)); |
+ button->SetTextColor( |
+ views::Button::STATE_PRESSED, |
+ native_theme->GetSystemColor( |
+ ui::NativeTheme::kColorId_SelectedMenuItemForegroundColor)); |
+ button->SetTextColor( |
+ views::Button::STATE_NORMAL, |
+ native_theme->GetSystemColor( |
+ ui::NativeTheme::kColorId_EnabledMenuItemForegroundColor)); |
+ } |
+ |
+ MenuConfig menu_config(native_theme); |
+ button->SetBorder(scoped_ptr<views::Border>( |
+ new MenuButtonBorder(menu_config, menu_->use_new_menu()))); |
+ button->SetFontList(menu_config.font_list); |
+ } |
+ |
// Hosting WrenchMenu. |
// WARNING: this may be NULL during shutdown. |
WrenchMenu* menu_; |
@@ -520,20 +536,17 @@ class WrenchMenu::CutCopyPasteView : public WrenchMenuView { |
public: |
CutCopyPasteView(WrenchMenu* menu, |
MenuModel* menu_model, |
- const ui::NativeTheme* native_theme, |
int cut_index, |
int copy_index, |
int paste_index) |
: WrenchMenuView(menu, menu_model) { |
LabelButton* cut = CreateAndConfigureButton( |
- native_theme, IDS_CUT, MenuButtonBackground::LEFT_BUTTON, |
- cut_index, NULL); |
+ IDS_CUT, MenuButtonBackground::LEFT_BUTTON, cut_index, NULL); |
MenuButtonBackground* copy_background = NULL; |
CreateAndConfigureButton( |
- native_theme, IDS_COPY, MenuButtonBackground::CENTER_BUTTON, |
+ IDS_COPY, MenuButtonBackground::CENTER_BUTTON, |
copy_index, ©_background); |
LabelButton* paste = CreateAndConfigureButton( |
- native_theme, |
IDS_PASTE, |
menu->use_new_menu() && menu->supports_new_separators_ ? |
MenuButtonBackground::CENTER_BUTTON : |
@@ -588,7 +601,6 @@ class WrenchMenu::ZoomView : public WrenchMenuView { |
public: |
ZoomView(WrenchMenu* menu, |
MenuModel* menu_model, |
- const ui::NativeTheme* native_theme, |
int decrement_index, |
int increment_index, |
int fullscreen_index) |
@@ -605,7 +617,7 @@ class WrenchMenu::ZoomView : public WrenchMenuView { |
base::Unretained(this))); |
decrement_button_ = CreateButtonWithAccName( |
- native_theme, IDS_ZOOM_MINUS2, MenuButtonBackground::LEFT_BUTTON, |
+ IDS_ZOOM_MINUS2, MenuButtonBackground::LEFT_BUTTON, |
decrement_index, NULL, IDS_ACCNAME_ZOOM_MINUS2); |
zoom_label_ = new Label( |
@@ -619,16 +631,11 @@ class WrenchMenu::ZoomView : public WrenchMenuView { |
MenuButtonBackground::CENTER_BUTTON, |
menu->use_new_menu()); |
zoom_label_->set_background(center_bg); |
- const MenuConfig& menu_config(menu->GetMenuConfig()); |
- zoom_label_->SetBorder(scoped_ptr<views::Border>( |
- new MenuButtonBorder(menu_config, menu->use_new_menu()))); |
- zoom_label_->SetFontList(menu_config.font_list); |
AddChildView(zoom_label_); |
- zoom_label_width_ = MaxWidthForZoomLabel(); |
increment_button_ = CreateButtonWithAccName( |
- native_theme, IDS_ZOOM_PLUS2, MenuButtonBackground::RIGHT_BUTTON, |
+ IDS_ZOOM_PLUS2, MenuButtonBackground::RIGHT_BUTTON, |
increment_index, NULL, IDS_ACCNAME_ZOOM_PLUS2); |
center_bg->SetOtherButtons(decrement_button_, increment_button_); |
@@ -641,29 +648,6 @@ class WrenchMenu::ZoomView : public WrenchMenuView { |
ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
IDR_FULLSCREEN_MENU_BUTTON); |
fullscreen_button_->SetImage(ImageButton::STATE_NORMAL, full_screen_image); |
- SkColor fg_color = native_theme->GetSystemColor( |
- ui::NativeTheme::kColorId_SelectedMenuItemForegroundColor); |
- gfx::ImageSkia hovered_fullscreen_image( |
- new HoveredImageSource(*full_screen_image, fg_color), |
- full_screen_image->size()); |
- fullscreen_button_->SetImage( |
- ImageButton::STATE_HOVERED, &hovered_fullscreen_image); |
- fullscreen_button_->SetImage( |
- ImageButton::STATE_PRESSED, &hovered_fullscreen_image); |
- |
- SkColor enabled_text_color = native_theme->GetSystemColor( |
- ui::NativeTheme::kColorId_EnabledMenuItemForegroundColor); |
- zoom_label_->SetEnabledColor(enabled_text_color); |
- decrement_button_->SetTextColor(views::Button::STATE_NORMAL, |
- enabled_text_color); |
- increment_button_->SetTextColor(views::Button::STATE_NORMAL, |
- enabled_text_color); |
- SkColor disabled_text_color = native_theme->GetSystemColor( |
- ui::NativeTheme::kColorId_DisabledMenuItemForegroundColor); |
- decrement_button_->SetTextColor(views::Button::STATE_DISABLED, |
- disabled_text_color); |
- increment_button_->SetTextColor(views::Button::STATE_DISABLED, |
- disabled_text_color); |
fullscreen_button_->SetFocusable(true); |
fullscreen_button_->set_request_focus_on_press(false); |
fullscreen_button_->set_tag(fullscreen_index); |
@@ -681,6 +665,7 @@ class WrenchMenu::ZoomView : public WrenchMenuView { |
menu_model, fullscreen_index, IDS_ACCNAME_FULLSCREEN)); |
AddChildView(fullscreen_button_); |
+ OnNativeThemeChanged(NULL); |
UpdateZoomControls(); |
} |
@@ -727,6 +712,33 @@ class WrenchMenu::ZoomView : public WrenchMenuView { |
fullscreen_button_->SetBoundsRect(bounds); |
} |
+ virtual void OnNativeThemeChanged(const ui::NativeTheme* theme) OVERRIDE { |
+ WrenchMenuView::OnNativeThemeChanged(theme); |
+ |
+ MenuConfig menu_config(theme); |
+ zoom_label_->SetBorder(scoped_ptr<views::Border>( |
+ new MenuButtonBorder(menu_config, menu()->use_new_menu()))); |
+ zoom_label_->SetFontList(menu_config.font_list); |
+ zoom_label_width_ = MaxWidthForZoomLabel(); |
+ |
+ if (theme) { |
+ zoom_label_->SetEnabledColor(theme->GetSystemColor( |
+ ui::NativeTheme::kColorId_EnabledMenuItemForegroundColor)); |
+ gfx::ImageSkia* full_screen_image = |
+ ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
+ IDR_FULLSCREEN_MENU_BUTTON); |
+ SkColor fg_color = theme->GetSystemColor( |
+ ui::NativeTheme::kColorId_SelectedMenuItemForegroundColor); |
+ gfx::ImageSkia hovered_fullscreen_image( |
+ new HoveredImageSource(*full_screen_image, fg_color), |
+ full_screen_image->size()); |
+ fullscreen_button_->SetImage( |
+ ImageButton::STATE_HOVERED, &hovered_fullscreen_image); |
+ fullscreen_button_->SetImage( |
+ ImageButton::STATE_PRESSED, &hovered_fullscreen_image); |
+ } |
+ } |
+ |
// Overridden from ButtonListener. |
virtual void ButtonPressed(views::Button* sender, |
const ui::Event& event) OVERRIDE { |
@@ -971,17 +983,6 @@ bool WrenchMenu::IsShowing() { |
return menu_runner_.get() && menu_runner_->IsRunning(); |
} |
-const ui::NativeTheme* WrenchMenu::GetNativeTheme() const { |
- views::Widget* browser_widget = views::Widget::GetWidgetForNativeView( |
- browser_->window()->GetNativeWindow()); |
- DCHECK(browser_widget); |
- return browser_widget->GetNativeTheme(); |
-} |
- |
-const views::MenuConfig& WrenchMenu::GetMenuConfig() const { |
- return MenuConfig::instance(GetNativeTheme()); |
-} |
- |
void WrenchMenu::AddObserver(WrenchMenuObserver* observer) { |
observer_list_.AddObserver(observer); |
} |
@@ -1225,8 +1226,6 @@ void WrenchMenu::PopulateMenu(MenuItemView* parent, |
if (model->GetTypeAt(i) == MenuModel::TYPE_SUBMENU) |
PopulateMenu(item, model->GetSubmenuModelAt(i)); |
- const ui::NativeTheme* native_theme = GetNativeTheme(); |
- |
switch (model->GetCommandIdAt(i)) { |
case IDC_CUT: |
DCHECK_EQ(MenuModel::TYPE_COMMAND, model->GetTypeAt(i)); |
@@ -1234,7 +1233,7 @@ void WrenchMenu::PopulateMenu(MenuItemView* parent, |
DCHECK_EQ(IDC_COPY, model->GetCommandIdAt(i + 1)); |
DCHECK_EQ(IDC_PASTE, model->GetCommandIdAt(i + 2)); |
item->SetTitle(l10n_util::GetStringUTF16(IDS_EDIT2)); |
- item->AddChildView(new CutCopyPasteView(this, model, native_theme, |
+ item->AddChildView(new CutCopyPasteView(this, model, |
i, i + 1, i + 2)); |
i += 2; |
break; |
@@ -1244,8 +1243,7 @@ void WrenchMenu::PopulateMenu(MenuItemView* parent, |
DCHECK_EQ(IDC_ZOOM_PLUS, model->GetCommandIdAt(i + 1)); |
DCHECK_EQ(IDC_FULLSCREEN, model->GetCommandIdAt(i + 2)); |
item->SetTitle(l10n_util::GetStringUTF16(IDS_ZOOM_MENU2)); |
- item->AddChildView(new ZoomView(this, model, native_theme, |
- i, i + 1, i + 2)); |
+ item->AddChildView(new ZoomView(this, model, i, i + 1, i + 2)); |
i += 2; |
break; |