menu_config.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_VIEWS_CONTROLS_MENU_MENU_CONFIG_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_VIEWS_CONTROLS_MENU_MENU_CONFIG_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkColor.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/font.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/views_export.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NativeTheme;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Layout type information for menu items. Use the instance() method to obtain
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the MenuConfig for the current platform.
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct VIEWS_EXPORT MenuConfig {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit MenuConfig(const ui::NativeTheme* theme);
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~MenuConfig();
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const MenuConfig& instance(const ui::NativeTheme* theme);
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Font used by menus.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Font font;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Normal text color.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SkColor text_color;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Color for the arrow to scroll bookmarks.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SkColor arrow_color;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Menu border sizes.
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int menu_vertical_border_size;
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int menu_horizontal_border_size;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Submenu horizontal inset with parent menu. This is the horizontal overlap
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // between the submenu and its parent menu, not including the borders of
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // submenu and parent menu.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int submenu_horizontal_inset;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Margins between the top of the item and the label.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int item_top_margin;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Margins between the bottom of the item and the label.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int item_bottom_margin;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Margins used if the menu doesn't have icons.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int item_no_icon_top_margin;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int item_no_icon_bottom_margin;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Margins between the left of the item and the icon.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int item_left_margin;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Padding between the label and submenu arrow.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int label_to_arrow_padding;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Padding between the arrow and the edge.
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int arrow_to_edge_padding;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Padding between the icon and label.
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int icon_to_label_padding;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Padding between the gutter and label.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int gutter_to_label;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Size of the check.
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int check_width;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int check_height;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Size of the radio bullet.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int radio_width;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int radio_height;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Size of the submenu arrow.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int arrow_height;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int arrow_width;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Width of the gutter. Only used if render_gutter is true.
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int gutter_width;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Height of a normal separator (ui::NORMAL_SEPARATOR).
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int separator_height;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Height of a ui::UPPER_SEPARATOR.
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int separator_upper_height;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Height of a ui::LOWER_SEPARATOR.
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int separator_lower_height;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Height of a ui::SPACING_SEPARATOR.
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int separator_spacing_height;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether or not the gutter should be rendered. The gutter is specific to
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Vista.
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool render_gutter;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Are mnemonics shown?
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool show_mnemonics;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Height of the scroll arrow.
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int scroll_arrow_height;
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Padding between the label and accelerator. Only used if there is an
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // accelerator.
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int label_to_accelerator_padding;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Minimum height of menu item.
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int item_min_height;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether the keyboard accelerators are visible.
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool show_accelerators;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if icon to label padding is always added with or without icon.
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool always_use_icon_to_label_padding;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if submenu arrow and shortcut right edge should be aligned.
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool align_arrow_and_shortcut;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if the context menu's should be offset from the cursor position.
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool offset_context_menus;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const ui::NativeTheme* native_theme;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Delay, in ms, between when menus are selected or moused over and the menu
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // appears.
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int show_delay;
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Radius of the rounded corners of the menu border. Must be >= 0.
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int corner_radius;
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Configures a MenuConfig as appropriate for the current platform.
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Init(const ui::NativeTheme* theme);
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO: temporary until we standardize.
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void InitAura(const ui::NativeTheme* theme);
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Adjust some values for a new UI style.
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AdjustForCommonTheme();
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace views
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // UI_VIEWS_CONTROLS_MENU_MENU_CONFIG_H_
150