Chromium Code Reviews| Index: ui/views/controls/menu/menu_item_view.cc |
| diff --git a/ui/views/controls/menu/menu_item_view.cc b/ui/views/controls/menu/menu_item_view.cc |
| index 574d04c3b8b9cef287e154eeb32837688f969fe5..8cd22c0cdbb1720171bcf5d857c842553af4aee8 100644 |
| --- a/ui/views/controls/menu/menu_item_view.cc |
| +++ b/ui/views/controls/menu/menu_item_view.cc |
| @@ -96,7 +96,8 @@ MenuItemView::MenuItemView(MenuDelegate* delegate) |
| bottom_margin_(-1), |
| requested_menu_position_(POSITION_BEST_FIT), |
| actual_menu_position_(requested_menu_position_), |
| - use_right_margin_(true) { |
| + use_right_margin_(true), |
| + menu_config_(NULL) { |
| // NOTE: don't check the delegate for NULL, UpdateMenuPartSizes supplies a |
| // NULL delegate. |
| Init(NULL, 0, SUBMENU, delegate); |
| @@ -219,7 +220,7 @@ MenuItemView* MenuItemView::AddMenuItemAt( |
| CreateSubmenu(); |
| DCHECK_GE(submenu_->child_count(), index); |
| if (type == SEPARATOR) { |
| - submenu_->AddChildViewAt(new MenuSeparator(separator_style), index); |
| + submenu_->AddChildViewAt(new MenuSeparator(this, separator_style), index); |
| return NULL; |
| } |
| MenuItemView* item = new MenuItemView(this, item_id, type); |
| @@ -530,7 +531,7 @@ void MenuItemView::Layout() { |
| x -= width - kChildXPadding; |
| } |
| // Position |icon_view|. |
| - const MenuConfig& config = MenuConfig::instance(); |
| + const MenuConfig& config = GetMenuConfig(); |
| if (icon_view_) { |
| icon_view_->SizeToPreferredSize(); |
| gfx::Size size = icon_view_->GetPreferredSize(); |
| @@ -550,6 +551,14 @@ void MenuItemView::SetMargins(int top_margin, int bottom_margin) { |
| pref_size_.SetSize(0,0); |
| } |
| +const MenuConfig& MenuItemView::GetMenuConfig() const { |
| + const MenuItemView* root_menu_item = GetRootMenuItem(); |
| + if (root_menu_item->menu_config_) |
| + return *(root_menu_item->menu_config_); |
| + |
| + return MenuConfig::instance(); |
| +} |
| + |
| MenuItemView::MenuItemView(MenuItemView* parent, |
| int command, |
| MenuItemView::Type type) |
| @@ -568,7 +577,8 @@ MenuItemView::MenuItemView(MenuItemView* parent, |
| top_margin_(-1), |
| bottom_margin_(-1), |
| requested_menu_position_(POSITION_BEST_FIT), |
| - actual_menu_position_(requested_menu_position_) { |
| + actual_menu_position_(requested_menu_position_), |
| + menu_config_(NULL) { |
| Init(parent, command, type, NULL); |
| } |
| @@ -586,7 +596,7 @@ std::string MenuItemView::GetClassName() const { |
| // This is invoked prior to Running a menu. |
| void MenuItemView::UpdateMenuPartSizes() { |
| MenuConfig::Reset(); |
| - const MenuConfig& config = MenuConfig::instance(); |
| + const MenuConfig& config = GetMenuConfig(); |
| item_right_margin_ = config.label_to_arrow_padding + config.arrow_width + |
| config.arrow_to_edge_padding; |
| @@ -606,9 +616,10 @@ void MenuItemView::UpdateMenuPartSizes() { |
| if (config.render_gutter) |
| label_start_ += config.gutter_width + config.gutter_to_label; |
| - MenuItemView menu_item(NULL); |
| - menu_item.SetTitle(ASCIIToUTF16("blah")); // Text doesn't matter here. |
| - pref_menu_height_ = menu_item.GetPreferredSize().height(); |
| + string16 original_title = title(); |
| + SetTitle(ASCIIToUTF16("blah")); // Text doesn't matter here. |
|
sky
2012/10/05 21:33:40
I don't like doing this, it may have side effects.
yefimt
2012/10/08 20:02:47
OK, I think this should be better
On 2012/10/05 2
|
| + pref_menu_height_ = GetPreferredSize().height(); |
| + SetTitle(original_title); |
| } |
| void MenuItemView::Init(MenuItemView* parent, |
| @@ -664,8 +675,7 @@ int MenuItemView::GetDrawStringFlags() { |
| flags |= gfx::Canvas::TEXT_ALIGN_LEFT; |
| if (has_mnemonics_) { |
| - if (MenuConfig::instance().show_mnemonics || |
| - GetRootMenuItem()->show_mnemonics_) { |
| + if (GetMenuConfig().show_mnemonics || GetRootMenuItem()->show_mnemonics_) { |
| flags |= gfx::Canvas::SHOW_PREFIX; |
| } else { |
| flags |= gfx::Canvas::HIDE_PREFIX; |
| @@ -678,7 +688,7 @@ const gfx::Font& MenuItemView::GetFont() { |
| // Check for item-specific font. |
| const MenuDelegate* delegate = GetDelegate(); |
| return delegate ? |
| - delegate->GetLabelFont(GetCommand()) : MenuConfig::instance().font; |
| + delegate->GetLabelFont(GetCommand()) : GetMenuConfig().font; |
| } |
| void MenuItemView::AddEmptyMenus() { |
| @@ -726,7 +736,7 @@ void MenuItemView::PaintAccelerator(gfx::Canvas* canvas) { |
| int available_height = height() - GetTopMargin() - GetBottomMargin(); |
| int max_accel_width = |
| parent_menu_item_->GetSubmenu()->max_accelerator_width(); |
| - const MenuConfig& config = MenuConfig::instance(); |
| + const MenuConfig& config = GetMenuConfig(); |
| int accel_right_margin = config.align_arrow_and_shortcut ? |
| config.arrow_to_edge_padding : item_right_margin_; |
| gfx::Rect accel_bounds(width() - accel_right_margin - max_accel_width, |
| @@ -763,8 +773,8 @@ int MenuItemView::GetTopMargin() { |
| MenuItemView* root = GetRootMenuItem(); |
| return root && root->has_icons_ |
| - ? MenuConfig::instance().item_top_margin : |
| - MenuConfig::instance().item_no_icon_top_margin; |
| + ? GetMenuConfig().item_top_margin : |
| + GetMenuConfig().item_no_icon_top_margin; |
| } |
| int MenuItemView::GetBottomMargin() { |
| @@ -773,8 +783,8 @@ int MenuItemView::GetBottomMargin() { |
| MenuItemView* root = GetRootMenuItem(); |
| return root && root->has_icons_ |
| - ? MenuConfig::instance().item_bottom_margin : |
| - MenuConfig::instance().item_no_icon_bottom_margin; |
| + ? GetMenuConfig().item_bottom_margin : |
| + GetMenuConfig().item_no_icon_bottom_margin; |
| } |
| gfx::Size MenuItemView::GetChildPreferredSize() { |
| @@ -829,7 +839,7 @@ MenuItemView::MenuItemDimensions MenuItemView::GetPreferredDimensions() { |
| dimensions.height = std::max(dimensions.height, |
| font.GetHeight() + GetBottomMargin() + GetTopMargin()); |
| dimensions.height = std::max(dimensions.height, |
| - MenuConfig::instance().item_min_height); |
| + GetMenuConfig().item_min_height); |
| return dimensions; |
| } |
| @@ -845,7 +855,7 @@ string16 MenuItemView::GetAcceleratorText() { |
| return string16(); |
| } |
| - if(!MenuConfig::instance().show_accelerators) |
| + if(!GetMenuConfig().show_accelerators) |
| return string16(); |
| ui::Accelerator accelerator; |