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"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/font_list.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)
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Font list used by menus.
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gfx::FontList font_list;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Color for the arrow to scroll bookmarks.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SkColor arrow_color;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Menu border sizes.
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int menu_vertical_border_size;
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int menu_horizontal_border_size;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Submenu horizontal inset with parent menu. This is the horizontal overlap
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // between the submenu and its parent menu, not including the borders of
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // submenu and parent menu.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int submenu_horizontal_inset;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Margins between the top of the item and the label.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int item_top_margin;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Margins between the bottom of the item and the label.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int item_bottom_margin;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Margins used if the menu doesn't have icons.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int item_no_icon_top_margin;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int item_no_icon_bottom_margin;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Margins between the left of the item and the icon.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int item_left_margin;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Padding between the label and submenu arrow.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int label_to_arrow_padding;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Padding between the arrow and the edge.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int arrow_to_edge_padding;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Padding between the icon and label.
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int icon_to_label_padding;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Padding between the gutter and label.
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int gutter_to_label;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Size of the check.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int check_width;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int check_height;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Width of the radio bullet.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int radio_width;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Width of the submenu arrow.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int arrow_width;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Width of the gutter. Only used if render_gutter is true.
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int gutter_width;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Height of a normal separator (ui::NORMAL_SEPARATOR).
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int separator_height;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Height of a ui::UPPER_SEPARATOR.
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int separator_upper_height;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Height of a ui::LOWER_SEPARATOR.
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int separator_lower_height;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Height of a ui::SPACING_SEPARATOR.
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int separator_spacing_height;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether or not the gutter should be rendered. The gutter is specific to
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Vista.
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool render_gutter;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Are mnemonics shown?
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool show_mnemonics;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Height of the scroll arrow.
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int scroll_arrow_height;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Padding between the label and minor text. Only used if there is an
1027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // accelerator or sublabel.
1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  int label_to_minor_text_padding;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Minimum height of menu item.
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int item_min_height;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether the keyboard accelerators are visible.
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool show_accelerators;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if icon to label padding is always added with or without icon.
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool always_use_icon_to_label_padding;
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if submenu arrow and shortcut right edge should be aligned.
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool align_arrow_and_shortcut;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if the context menu's should be offset from the cursor position.
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool offset_context_menus;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const ui::NativeTheme* native_theme;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Delay, in ms, between when menus are selected or moused over and the menu
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // appears.
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int show_delay;
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Radius of the rounded corners of the menu border. Must be >= 0.
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int corner_radius;
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Configures a MenuConfig as appropriate for the current platform.
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Init(const ui::NativeTheme* theme);
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO: temporary until we standardize.
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void InitAura(const ui::NativeTheme* theme);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace views
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // UI_VIEWS_CONTROLS_MENU_MENU_CONFIG_H_
140