diff options
-rw-r--r-- | chrome/browser/ui/views/action_box_menu.cc | 11 | ||||
-rw-r--r-- | chrome/browser/ui/views/action_box_menu.h | 3 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_config.cc | 3 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_config.h | 5 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_config_views.cc | 48 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_config_win.cc | 56 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_controller.cc | 13 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_delegate.cc | 6 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_item_view.cc | 35 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_item_view.h | 15 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_item_view_views.cc | 2 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_item_view_win.cc | 4 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_scroll_view_container.cc | 20 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_separator.h | 9 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_separator_views.cc | 12 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_separator_win.cc | 4 | ||||
-rw-r--r-- | ui/views/controls/menu/submenu_view.cc | 2 |
17 files changed, 146 insertions, 102 deletions
diff --git a/chrome/browser/ui/views/action_box_menu.cc b/chrome/browser/ui/views/action_box_menu.cc index 7dc1f6f..69b7d5f 100644 --- a/chrome/browser/ui/views/action_box_menu.cc +++ b/chrome/browser/ui/views/action_box_menu.cc @@ -12,6 +12,7 @@ #include "ui/base/resource/resource_bundle.h" #include "ui/views/bubble/bubble_border.h" #include "ui/views/controls/button/menu_button.h" +#include "ui/views/controls/menu/menu_config.h" #include "ui/views/controls/menu/menu_runner.h" #include "ui/views/view.h" @@ -52,6 +53,12 @@ ActionBoxMenu::ActionBoxMenu(Browser* browser, model_(model.Pass()) { views::MenuItemView* menu = new views::MenuItemView(this); menu->set_has_icons(true); + + views::MenuConfig* menu_config = new views::MenuConfig(); + CustomizeMenu(menu_config); + // |menu| will own MenuConfig + menu->set_menu_config(menu_config); + menu_runner_.reset(new views::MenuRunner(menu)); } @@ -143,3 +150,7 @@ void ActionBoxMenu::PopulateMenu() { } } } + +void ActionBoxMenu::CustomizeMenu(views::MenuConfig* menu_config) { + // TODO(yefim): add menu customization here. +} diff --git a/chrome/browser/ui/views/action_box_menu.h b/chrome/browser/ui/views/action_box_menu.h index 170aa22..a158ce2 100644 --- a/chrome/browser/ui/views/action_box_menu.h +++ b/chrome/browser/ui/views/action_box_menu.h @@ -18,6 +18,7 @@ class ActionBoxMenuModel; namespace views { class Background; class Border; +struct MenuConfig; class MenuItemView; class MenuRunner; class View; @@ -65,6 +66,8 @@ class ActionBoxMenu : public views::MenuDelegate, // Populates |root_| with all the child menu items from the |model_|. void PopulateMenu(); + void CustomizeMenu(views::MenuConfig* menu_config); + Browser* browser_; scoped_ptr<views::MenuRunner> menu_runner_; diff --git a/ui/views/controls/menu/menu_config.cc b/ui/views/controls/menu/menu_config.cc index 8cd3a8f..4b3cfbe47 100644 --- a/ui/views/controls/menu/menu_config.cc +++ b/ui/views/controls/menu/menu_config.cc @@ -51,6 +51,7 @@ MenuConfig::MenuConfig() item_top_margin = item_no_icon_top_margin = 12; item_bottom_margin = item_no_icon_bottom_margin = 13; } + Init(); } MenuConfig::~MenuConfig() {} @@ -63,7 +64,7 @@ void MenuConfig::Reset() { // static const MenuConfig& MenuConfig::instance() { if (!config_instance) - config_instance = Create(); + config_instance = new MenuConfig(); return *config_instance; } diff --git a/ui/views/controls/menu/menu_config.h b/ui/views/controls/menu/menu_config.h index 32d26e7..81a4f2a 100644 --- a/ui/views/controls/menu/menu_config.h +++ b/ui/views/controls/menu/menu_config.h @@ -123,9 +123,8 @@ struct VIEWS_EXPORT MenuConfig { bool offset_context_menus; private: - // Creates and configures a new MenuConfig as appropriate for the current - // platform. - static MenuConfig* Create(); + // Configures a MenuConfig as appropriate for the current platform. + void Init(); }; } // namespace views diff --git a/ui/views/controls/menu/menu_config_views.cc b/ui/views/controls/menu/menu_config_views.cc index cc44141..b4da164 100644 --- a/ui/views/controls/menu/menu_config_views.cc +++ b/ui/views/controls/menu/menu_config_views.cc @@ -13,36 +13,32 @@ namespace views { -// static -MenuConfig* MenuConfig::Create() { - MenuConfig* config = new MenuConfig(); - config->text_color = ui::NativeTheme::instance()->GetSystemColor( +void MenuConfig::Init() { + text_color = ui::NativeTheme::instance()->GetSystemColor( ui::NativeTheme::kColorId_EnabledMenuItemForegroundColor); - config->submenu_horizontal_margin_size = 0; - config->submenu_vertical_margin_size = 0; - config->submenu_horizontal_inset = 1; + submenu_horizontal_margin_size = 0; + submenu_vertical_margin_size = 0; + submenu_horizontal_inset = 1; ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); - config->arrow_to_edge_padding = 20; - config->icon_to_label_padding = 4; - config->arrow_width = rb.GetImageNamed(IDR_MENU_ARROW).ToImageSkia()->width(); + arrow_to_edge_padding = 20; + icon_to_label_padding = 4; + arrow_width = rb.GetImageNamed(IDR_MENU_ARROW).ToImageSkia()->width(); const gfx::ImageSkia* check = rb.GetImageNamed(IDR_MENU_CHECK).ToImageSkia(); // Add 4 to force some padding between check and label. - config->check_width = check->width() + 4; - config->check_height = check->height(); - config->item_left_margin = 4; - config->item_min_height = 29; - config->separator_height = 15; - config->separator_spacing_height = 7; - config->separator_lower_height = 8; - config->separator_upper_height = 8; - config->font = rb.GetFont(ResourceBundle::BaseFont); - config->label_to_arrow_padding = 20; - config->label_to_accelerator_padding = 20; - config->always_use_icon_to_label_padding = true; - config->align_arrow_and_shortcut = true; - config->offset_context_menus = true; - - return config; + check_width = check->width() + 4; + check_height = check->height(); + item_left_margin = 4; + item_min_height = 29; + separator_height = 15; + separator_spacing_height = 7; + separator_lower_height = 8; + separator_upper_height = 8; + font = rb.GetFont(ResourceBundle::BaseFont); + label_to_arrow_padding = 20; + label_to_accelerator_padding = 20; + always_use_icon_to_label_padding = true; + align_arrow_and_shortcut = true; + offset_context_menus = true; } } // namespace views diff --git a/ui/views/controls/menu/menu_config_win.cc b/ui/views/controls/menu/menu_config_win.cc index 86d4b64..6a4a1f2 100644 --- a/ui/views/controls/menu/menu_config_win.cc +++ b/ui/views/controls/menu/menu_config_win.cc @@ -19,11 +19,8 @@ using ui::NativeThemeWin; namespace views { -// static -MenuConfig* MenuConfig::Create() { - MenuConfig* config = new MenuConfig(); - - config->text_color = NativeThemeWin::instance()->GetThemeColorWithDefault( +void MenuConfig::Init() { + text_color = NativeThemeWin::instance()->GetThemeColorWithDefault( NativeThemeWin::MENU, MENU_POPUPITEM, MPI_NORMAL, TMT_TEXTCOLOR, COLOR_MENUTEXT); @@ -31,9 +28,9 @@ MenuConfig* MenuConfig::Create() { base::win::GetNonClientMetrics(&metrics); l10n_util::AdjustUIFont(&(metrics.lfMenuFont)); { - base::win::ScopedHFONT font(CreateFontIndirect(&metrics.lfMenuFont)); - DLOG_ASSERT(font.Get()); - config->font = gfx::Font(font); + base::win::ScopedHFONT new_font(CreateFontIndirect(&metrics.lfMenuFont)); + DLOG_ASSERT(new_font.Get()); + font = gfx::Font(new_font); } NativeTheme::ExtraParams extra; extra.menu_check.is_radio = false; @@ -41,64 +38,63 @@ MenuConfig* MenuConfig::Create() { gfx::Size check_size = NativeTheme::instance()->GetPartSize( NativeTheme::kMenuCheck, NativeTheme::kNormal, extra); if (!check_size.IsEmpty()) { - config->check_width = check_size.width(); - config->check_height = check_size.height(); + check_width = check_size.width(); + check_height = check_size.height(); } else { - config->check_width = GetSystemMetrics(SM_CXMENUCHECK); - config->check_height = GetSystemMetrics(SM_CYMENUCHECK); + check_width = GetSystemMetrics(SM_CXMENUCHECK); + check_height = GetSystemMetrics(SM_CYMENUCHECK); } extra.menu_check.is_radio = true; gfx::Size radio_size = NativeTheme::instance()->GetPartSize( NativeTheme::kMenuCheck, NativeTheme::kNormal, extra); if (!radio_size.IsEmpty()) { - config->radio_width = radio_size.width(); - config->radio_height = radio_size.height(); + radio_width = radio_size.width(); + radio_height = radio_size.height(); } else { - config->radio_width = GetSystemMetrics(SM_CXMENUCHECK); - config->radio_height = GetSystemMetrics(SM_CYMENUCHECK); + radio_width = GetSystemMetrics(SM_CXMENUCHECK); + radio_height = GetSystemMetrics(SM_CYMENUCHECK); } gfx::Size arrow_size = NativeTheme::instance()->GetPartSize( NativeTheme::kMenuPopupArrow, NativeTheme::kNormal, extra); if (!arrow_size.IsEmpty()) { - config->arrow_width = arrow_size.width(); - config->arrow_height = arrow_size.height(); + arrow_width = arrow_size.width(); + arrow_height = arrow_size.height(); } else { // Sadly I didn't see a specify metrics for this. - config->arrow_width = GetSystemMetrics(SM_CXMENUCHECK); - config->arrow_height = GetSystemMetrics(SM_CYMENUCHECK); + arrow_width = GetSystemMetrics(SM_CXMENUCHECK); + arrow_height = GetSystemMetrics(SM_CYMENUCHECK); } gfx::Size gutter_size = NativeTheme::instance()->GetPartSize( NativeTheme::kMenuPopupGutter, NativeTheme::kNormal, extra); if (!gutter_size.IsEmpty()) { - config->gutter_width = gutter_size.width(); - config->render_gutter = true; + gutter_width = gutter_size.width(); + render_gutter = true; } else { - config->gutter_width = 0; - config->render_gutter = false; + gutter_width = 0; + render_gutter = false; } gfx::Size separator_size = NativeTheme::instance()->GetPartSize( NativeTheme::kMenuPopupSeparator, NativeTheme::kNormal, extra); if (!separator_size.IsEmpty()) { - config->separator_height = separator_size.height(); + separator_height = separator_size.height(); } else { // -1 makes separator centered. - config->separator_height = GetSystemMetrics(SM_CYMENU) / 2 - 1; + separator_height = GetSystemMetrics(SM_CYMENU) / 2 - 1; } // On Windows, having some menus use wider spacing than others looks wrong. // See http://crbug.com/88875 - config->item_no_icon_bottom_margin = config->item_bottom_margin; - config->item_no_icon_top_margin = config->item_top_margin; + item_no_icon_bottom_margin = item_bottom_margin; + item_no_icon_top_margin = item_top_margin; BOOL show_cues; - config->show_mnemonics = + show_mnemonics = (SystemParametersInfo(SPI_GETKEYBOARDCUES, 0, &show_cues, 0) && show_cues == TRUE); - return config; } } // namespace views diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc index 7fbccfb..8d33ded 100644 --- a/ui/views/controls/menu/menu_controller.cc +++ b/ui/views/controls/menu/menu_controller.cc @@ -1556,19 +1556,21 @@ gfx::Rect MenuController::CalculateMenuBounds(MenuItemView* item, int x, y; + const MenuConfig& menu_config = item->GetMenuConfig(); + if (!item->GetParentMenuItem()) { // First item, position relative to initial location. x = state_.initial_bounds.x(); // Offsets for context menu prevent menu items being selected by // simply opening the menu (bug 142992). - if (MenuConfig::instance().offset_context_menus && state_.context_menu) + if (menu_config.offset_context_menus && state_.context_menu) x += 1; y = state_.initial_bounds.bottom(); if (state_.anchor == MenuItemView::TOPRIGHT) { x = x + state_.initial_bounds.width() - pref.width(); - if (MenuConfig::instance().offset_context_menus && state_.context_menu) + if (menu_config.offset_context_menus && state_.context_menu) x -= 1; } else if (state_.anchor == MenuItemView::BOTTOMCENTER) { x = x - (pref.width() - state_.initial_bounds.width()) / 2; @@ -1645,7 +1647,7 @@ gfx::Rect MenuController::CalculateMenuBounds(MenuItemView* item, item->set_actual_menu_position(MenuItemView::POSITION_BELOW_BOUNDS); } if (state_.monitor_bounds.width() != 0 && - MenuConfig::instance().offset_context_menus && state_.context_menu) { + menu_config.offset_context_menus && state_.context_menu) { if (x + pref.width() > state_.monitor_bounds.right()) x = state_.initial_bounds.x() - pref.width() - 1; if (x < state_.monitor_bounds.x()) @@ -1663,8 +1665,7 @@ gfx::Rect MenuController::CalculateMenuBounds(MenuItemView* item, bool layout_is_rtl = base::i18n::IsRTL(); bool create_on_the_right = (prefer_leading && !layout_is_rtl) || (!prefer_leading && layout_is_rtl); - int submenu_horizontal_inset = - MenuConfig::instance().submenu_horizontal_inset; + int submenu_horizontal_inset = menu_config.submenu_horizontal_inset; if (create_on_the_right) { x = item_loc.x() + item->width() - submenu_horizontal_inset; @@ -1686,7 +1687,7 @@ gfx::Rect MenuController::CalculateMenuBounds(MenuItemView* item, x = item_loc.x() + item->width() - submenu_horizontal_inset; } } - y = item_loc.y() - MenuConfig::instance().submenu_vertical_margin_size; + y = item_loc.y() - menu_config.submenu_vertical_margin_size; if (state_.monitor_bounds.width() != 0) { pref.set_height(std::min(pref.height(), state_.monitor_bounds.height())); if (y + pref.height() > state_.monitor_bounds.bottom()) diff --git a/ui/views/controls/menu/menu_delegate.cc b/ui/views/controls/menu/menu_delegate.cc index 392735b..c2cfcd2 100644 --- a/ui/views/controls/menu/menu_delegate.cc +++ b/ui/views/controls/menu/menu_delegate.cc @@ -128,11 +128,7 @@ void MenuDelegate::WillHideMenu(MenuItemView* menu) { } Border* MenuDelegate::CreateMenuBorder() { - return Border::CreateEmptyBorder( - MenuConfig::instance().submenu_vertical_margin_size, - MenuConfig::instance().submenu_horizontal_margin_size, - MenuConfig::instance().submenu_vertical_margin_size, - MenuConfig::instance().submenu_horizontal_margin_size); + return NULL; } Background* MenuDelegate::CreateMenuBackground() { diff --git a/ui/views/controls/menu/menu_item_view.cc b/ui/views/controls/menu/menu_item_view.cc index 574d04c..385e6c0 100644 --- a/ui/views/controls/menu/menu_item_view.cc +++ b/ui/views/controls/menu/menu_item_view.cc @@ -219,7 +219,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 +530,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 +550,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_.get()) + return *(root_menu_item->menu_config_); + + return MenuConfig::instance(); +} + MenuItemView::MenuItemView(MenuItemView* parent, int command, MenuItemView::Type type) @@ -586,7 +594,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,7 +614,7 @@ void MenuItemView::UpdateMenuPartSizes() { if (config.render_gutter) label_start_ += config.gutter_width + config.gutter_to_label; - MenuItemView menu_item(NULL); + MenuItemView menu_item(this, 0, NORMAL); menu_item.SetTitle(ASCIIToUTF16("blah")); // Text doesn't matter here. pref_menu_height_ = menu_item.GetPreferredSize().height(); } @@ -664,8 +672,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 +685,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 +733,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 +770,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 +780,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 +836,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 +852,7 @@ string16 MenuItemView::GetAcceleratorText() { return string16(); } - if(!MenuConfig::instance().show_accelerators) + if(!GetMenuConfig().show_accelerators) return string16(); ui::Accelerator accelerator; diff --git a/ui/views/controls/menu/menu_item_view.h b/ui/views/controls/menu/menu_item_view.h index 4f33f10..4512681 100644 --- a/ui/views/controls/menu/menu_item_view.h +++ b/ui/views/controls/menu/menu_item_view.h @@ -14,6 +14,7 @@ #include "build/build_config.h" #include "ui/base/models/menu_separator_types.h" #include "ui/gfx/image/image_skia.h" +#include "ui/views/controls/menu/menu_config.h" #include "ui/views/view.h" #if defined(OS_WIN) @@ -36,7 +37,6 @@ namespace internal { class MenuRunnerImpl; } -struct MenuConfig; class MenuController; class MenuDelegate; class SubmenuView; @@ -320,6 +320,15 @@ class VIEWS_EXPORT MenuItemView : public View { use_right_margin_ = use_right_margin; } + // Sets MenuConfig to be used instead of default one. + // Setting |menu_config_| to NULL will make menu to use a default MenuConfig. + void set_menu_config(const MenuConfig* menu_config) { + menu_config_.reset(menu_config); + } + + // Returns a reference to MenuConfig to be used with this menu. + const MenuConfig& GetMenuConfig() const; + protected: // Creates a MenuItemView. This is used by the various AddXXX methods. MenuItemView(MenuItemView* parent, int command, Type type); @@ -500,6 +509,10 @@ class VIEWS_EXPORT MenuItemView : public View { // containing other elements. bool use_right_margin_; + // |menu_config_| to replace default one, could be NULL, + // applies to root menu item only. + scoped_ptr<const MenuConfig> menu_config_; + DISALLOW_COPY_AND_ASSIGN(MenuItemView); }; diff --git a/ui/views/controls/menu/menu_item_view_views.cc b/ui/views/controls/menu/menu_item_view_views.cc index 4ee3e68..e3fe221 100644 --- a/ui/views/controls/menu/menu_item_view_views.cc +++ b/ui/views/controls/menu/menu_item_view_views.cc @@ -19,7 +19,7 @@ namespace views { void MenuItemView::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) { - const MenuConfig& config = MenuConfig::instance(); + const MenuConfig& config = GetMenuConfig(); bool render_selection = (mode == PB_NORMAL && IsSelected() && parent_menu_item_->GetSubmenu()->GetShowSelection(this) && diff --git a/ui/views/controls/menu/menu_item_view_win.cc b/ui/views/controls/menu/menu_item_view_win.cc index 8589f21..8abec06 100644 --- a/ui/views/controls/menu/menu_item_view_win.cc +++ b/ui/views/controls/menu/menu_item_view_win.cc @@ -18,7 +18,7 @@ using ui::NativeTheme; namespace views { void MenuItemView::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) { - const MenuConfig& config = MenuConfig::instance(); + const MenuConfig& config = GetMenuConfig(); bool render_selection = (mode == PB_NORMAL && IsSelected() && @@ -140,7 +140,7 @@ void MenuItemView::PaintCheck(gfx::Canvas* canvas, } int top_margin = GetTopMargin(); - int icon_x = MenuConfig::instance().item_left_margin; + int icon_x = GetMenuConfig().item_left_margin; int icon_y = top_margin + (height() - top_margin - GetBottomMargin() - icon_height) / 2; NativeTheme::ExtraParams extra; diff --git a/ui/views/controls/menu/menu_scroll_view_container.cc b/ui/views/controls/menu/menu_scroll_view_container.cc index 6301c4d..ec7937b 100644 --- a/ui/views/controls/menu/menu_scroll_view_container.cc +++ b/ui/views/controls/menu/menu_scroll_view_container.cc @@ -48,8 +48,9 @@ class MenuScrollButton : public View { } virtual gfx::Size GetPreferredSize() { - return gfx::Size(MenuConfig::instance().scroll_arrow_height * 2 - 1, - pref_height_); + return gfx::Size( + host_->GetMenuItem()->GetMenuConfig().scroll_arrow_height * 2 - 1, + pref_height_); } virtual bool CanDrop(const OSExchangeData& data) { @@ -77,7 +78,7 @@ class MenuScrollButton : public View { } virtual void OnPaint(gfx::Canvas* canvas) { - const MenuConfig& config = MenuConfig::instance(); + const MenuConfig& config = host_->GetMenuItem()->GetMenuConfig(); // The background. gfx::Rect item_bounds(0, 0, width(), height()); @@ -184,7 +185,18 @@ MenuScrollViewContainer::MenuScrollViewContainer(SubmenuView* content_view) MenuDelegate* delegate = content_view_->GetMenuItem()->GetDelegate(); if (delegate) { - set_border(delegate->CreateMenuBorder()); + Border* border = delegate->CreateMenuBorder(); + if (!border) { + const MenuConfig& menu_config = + content_view_->GetMenuItem()->GetMenuConfig(); + border = Border::CreateEmptyBorder( + menu_config.submenu_vertical_margin_size, + menu_config.submenu_horizontal_margin_size, + menu_config.submenu_vertical_margin_size, + menu_config.submenu_horizontal_margin_size); + } + set_border(border); + set_background(delegate->CreateMenuBackground()); } } diff --git a/ui/views/controls/menu/menu_separator.h b/ui/views/controls/menu/menu_separator.h index cb48e04..3833177 100644 --- a/ui/views/controls/menu/menu_separator.h +++ b/ui/views/controls/menu/menu_separator.h @@ -11,9 +11,13 @@ namespace views { +class MenuItemView; + class MenuSeparator : public View { public: - explicit MenuSeparator(ui::MenuSeparatorType type) : type_(type) {} + MenuSeparator(MenuItemView* parent, ui::MenuSeparatorType type) + : type_(type), + parent_menu_item_(parent) {} // View overrides. virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; @@ -23,6 +27,9 @@ class MenuSeparator : public View { // The type of the separator. const ui::MenuSeparatorType type_; + // Our parent. + MenuItemView* parent_menu_item_; + DISALLOW_COPY_AND_ASSIGN(MenuSeparator); }; diff --git a/ui/views/controls/menu/menu_separator_views.cc b/ui/views/controls/menu/menu_separator_views.cc index b3e69d6..11d9d50 100644 --- a/ui/views/controls/menu/menu_separator_views.cc +++ b/ui/views/controls/menu/menu_separator_views.cc @@ -8,6 +8,7 @@ #include "ui/base/native_theme/native_theme.h" #include "ui/gfx/canvas.h" #include "ui/views/controls/menu/menu_config.h" +#include "ui/views/controls/menu/menu_item_view.h" namespace { @@ -37,19 +38,20 @@ void MenuSeparator::OnPaint(gfx::Canvas* canvas) { } gfx::Size MenuSeparator::GetPreferredSize() { - int height = MenuConfig::instance().separator_height; + const MenuConfig& menu_config = parent_menu_item_->GetMenuConfig(); + int height = menu_config.separator_height; switch(type_) { case ui::SPACING_SEPARATOR: - height = MenuConfig::instance().separator_spacing_height; + height = menu_config.separator_spacing_height; break; case ui::LOWER_SEPARATOR: - height = MenuConfig::instance().separator_lower_height; + height = menu_config.separator_lower_height; break; case ui::UPPER_SEPARATOR: - height = MenuConfig::instance().separator_upper_height; + height = menu_config.separator_upper_height; break; default: - height = MenuConfig::instance().separator_height; + height = menu_config.separator_height; break; } return gfx::Size(10, // Just in case we're the only item in a menu. diff --git a/ui/views/controls/menu/menu_separator_win.cc b/ui/views/controls/menu/menu_separator_win.cc index edd06d5..d20549b 100644 --- a/ui/views/controls/menu/menu_separator_win.cc +++ b/ui/views/controls/menu/menu_separator_win.cc @@ -17,7 +17,7 @@ namespace views { void MenuSeparator::OnPaint(gfx::Canvas* canvas) { - const MenuConfig& config = MenuConfig::instance(); + const MenuConfig& config = parent_menu_item_->GetMenuConfig(); // The gutter is rendered before the background. int start_x = 0; const ui::NativeTheme* theme = ui::NativeTheme::instance(); @@ -42,7 +42,7 @@ void MenuSeparator::OnPaint(gfx::Canvas* canvas) { gfx::Size MenuSeparator::GetPreferredSize() { return gfx::Size(10, // Just in case we're the only item in a menu. - MenuConfig::instance().separator_height); + parent_menu_item_->GetMenuConfig().separator_height); } } // namespace views diff --git a/ui/views/controls/menu/submenu_view.cc b/ui/views/controls/menu/submenu_view.cc index a84b3ec..12d63ed 100644 --- a/ui/views/controls/menu/submenu_view.cc +++ b/ui/views/controls/menu/submenu_view.cc @@ -152,7 +152,7 @@ gfx::Size SubmenuView::GetPreferredSize() { } if (max_accelerator_width_ > 0) { max_accelerator_width_ += - MenuConfig::instance().label_to_accelerator_padding; + GetMenuItem()->GetMenuConfig().label_to_accelerator_padding; } gfx::Insets insets = GetInsets(); return gfx::Size( |