blob: db532134db5b1e60783b9352f047783e270d4fc3 [file] [log] [blame]
// Copyright (c) 2012 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.
#include "ui/views/controls/menu/menu_config.h"
#include "base/macros.h"
#include "ui/views/controls/menu/menu_controller.h"
#include "ui/views/controls/menu/menu_image_util.h"
#include "ui/views/controls/menu/menu_item_view.h"
#include "ui/views/round_rect_painter.h"
namespace views {
MenuConfig::MenuConfig()
: arrow_color(SK_ColorBLACK),
menu_vertical_border_size(4),
menu_horizontal_border_size(views::RoundRectPainter::kBorderWidth),
submenu_horizontal_inset(3),
item_top_margin(4),
item_bottom_margin(3),
item_no_icon_top_margin(4),
item_no_icon_bottom_margin(4),
minimum_text_item_height(0),
minimum_container_item_height(0),
minimum_menu_width(0),
// TODO(ftirelo): Paddings should come from the layout provider, once
// Harmony is the default behavior.
item_horizontal_padding(8),
touchable_item_horizontal_padding(16),
label_to_arrow_padding(8),
arrow_to_edge_padding(5),
touchable_icon_size(20),
touchable_icon_color(SkColorSetRGB(0x5F, 0x63, 0x60)),
check_width(kMenuCheckSize),
check_height(kMenuCheckSize),
arrow_width(kSubmenuArrowSize),
separator_height(11),
double_separator_height(18),
separator_upper_height(3),
separator_lower_height(4),
separator_spacing_height(3),
separator_thickness(1),
double_separator_thickness(2),
show_mnemonics(false),
use_mnemonics(true),
scroll_arrow_height(3),
item_min_height(0),
actionable_submenu_arrow_to_edge_padding(14),
actionable_submenu_width(37),
actionable_submenu_vertical_separator_height(18),
actionable_submenu_vertical_separator_width(1),
show_accelerators(true),
always_use_icon_to_label_padding(false),
align_arrow_and_shortcut(false),
offset_context_menus(false),
use_outer_border(true),
icons_in_label(false),
check_selected_combobox_item(false),
show_delay(400),
corner_radius(0),
auxiliary_corner_radius(0),
touchable_corner_radius(8),
touchable_anchor_offset(8),
touchable_menu_height(36),
touchable_menu_width(256),
touchable_menu_shadow_elevation(12),
vertical_touchable_menu_item_padding(8),
padded_separator_left_margin(64),
arrow_key_selection_wraps(true),
show_context_menu_accelerators(true) {
Init();
}
MenuConfig::~MenuConfig() {}
int MenuConfig::CornerRadiusForMenu(const MenuController* controller) const {
if (controller && controller->use_touchable_layout())
return touchable_corner_radius;
if (controller && (controller->is_combobox() || controller->IsContextMenu()))
return auxiliary_corner_radius;
return corner_radius;
}
bool MenuConfig::ShouldShowAcceleratorText(const MenuItemView* item,
base::string16* text) const {
if (!show_accelerators || !item->GetDelegate() || !item->GetCommand())
return false;
ui::Accelerator accelerator;
if (!item->GetDelegate()->GetAccelerator(item->GetCommand(), &accelerator))
return false;
if (item->GetMenuController() && item->GetMenuController()->IsContextMenu() &&
!show_context_menu_accelerators) {
return false;
}
*text = accelerator.GetShortcutText();
return true;
}
// static
const MenuConfig& MenuConfig::instance() {
CR_DEFINE_STATIC_LOCAL(MenuConfig, instance, ());
return instance;
}
} // namespace views