summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/ui/views/action_box_menu.cc11
-rw-r--r--chrome/browser/ui/views/action_box_menu.h3
-rw-r--r--ui/views/controls/menu/menu_config.cc3
-rw-r--r--ui/views/controls/menu/menu_config.h5
-rw-r--r--ui/views/controls/menu/menu_config_views.cc48
-rw-r--r--ui/views/controls/menu/menu_config_win.cc56
-rw-r--r--ui/views/controls/menu/menu_controller.cc13
-rw-r--r--ui/views/controls/menu/menu_delegate.cc6
-rw-r--r--ui/views/controls/menu/menu_item_view.cc35
-rw-r--r--ui/views/controls/menu/menu_item_view.h15
-rw-r--r--ui/views/controls/menu/menu_item_view_views.cc2
-rw-r--r--ui/views/controls/menu/menu_item_view_win.cc4
-rw-r--r--ui/views/controls/menu/menu_scroll_view_container.cc20
-rw-r--r--ui/views/controls/menu/menu_separator.h9
-rw-r--r--ui/views/controls/menu/menu_separator_views.cc12
-rw-r--r--ui/views/controls/menu/menu_separator_win.cc4
-rw-r--r--ui/views/controls/menu/submenu_view.cc2
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(