1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef UI_VIEWS_CONTROLS_MENU_MENU_CONFIG_H_ 6 #define UI_VIEWS_CONTROLS_MENU_MENU_CONFIG_H_ 7 8 #include "third_party/skia/include/core/SkColor.h" 9 #include "ui/gfx/font.h" 10 #include "ui/views/views_export.h" 11 12 namespace ui { 13 class NativeTheme; 14 } 15 16 namespace views { 17 18 // Layout type information for menu items. Use the instance() method to obtain 19 // the MenuConfig for the current platform. 20 struct VIEWS_EXPORT MenuConfig { 21 explicit MenuConfig(const ui::NativeTheme* theme); 22 ~MenuConfig(); 23 24 static const MenuConfig& instance(const ui::NativeTheme* theme); 25 26 // Font used by menus. 27 gfx::Font font; 28 29 // Normal text color. 30 SkColor text_color; 31 32 // Color for the arrow to scroll bookmarks. 33 SkColor arrow_color; 34 35 // Menu border sizes. 36 int menu_vertical_border_size; 37 int menu_horizontal_border_size; 38 39 // Submenu horizontal inset with parent menu. This is the horizontal overlap 40 // between the submenu and its parent menu, not including the borders of 41 // submenu and parent menu. 42 int submenu_horizontal_inset; 43 44 // Margins between the top of the item and the label. 45 int item_top_margin; 46 47 // Margins between the bottom of the item and the label. 48 int item_bottom_margin; 49 50 // Margins used if the menu doesn't have icons. 51 int item_no_icon_top_margin; 52 int item_no_icon_bottom_margin; 53 54 // Margins between the left of the item and the icon. 55 int item_left_margin; 56 57 // Padding between the label and submenu arrow. 58 int label_to_arrow_padding; 59 60 // Padding between the arrow and the edge. 61 int arrow_to_edge_padding; 62 63 // Padding between the icon and label. 64 int icon_to_label_padding; 65 66 // Padding between the gutter and label. 67 int gutter_to_label; 68 69 // Size of the check. 70 int check_width; 71 int check_height; 72 73 // Size of the radio bullet. 74 int radio_width; 75 int radio_height; 76 77 // Size of the submenu arrow. 78 int arrow_height; 79 int arrow_width; 80 81 // Width of the gutter. Only used if render_gutter is true. 82 int gutter_width; 83 84 // Height of a normal separator (ui::NORMAL_SEPARATOR). 85 int separator_height; 86 87 // Height of a ui::UPPER_SEPARATOR. 88 int separator_upper_height; 89 90 // Height of a ui::LOWER_SEPARATOR. 91 int separator_lower_height; 92 93 // Height of a ui::SPACING_SEPARATOR. 94 int separator_spacing_height; 95 96 // Whether or not the gutter should be rendered. The gutter is specific to 97 // Vista. 98 bool render_gutter; 99 100 // Are mnemonics shown? 101 bool show_mnemonics; 102 103 // Height of the scroll arrow. 104 int scroll_arrow_height; 105 106 // Padding between the label and minor text. Only used if there is an 107 // accelerator or sublabel. 108 int label_to_minor_text_padding; 109 110 // Minimum height of menu item. 111 int item_min_height; 112 113 // Whether the keyboard accelerators are visible. 114 bool show_accelerators; 115 116 // True if icon to label padding is always added with or without icon. 117 bool always_use_icon_to_label_padding; 118 119 // True if submenu arrow and shortcut right edge should be aligned. 120 bool align_arrow_and_shortcut; 121 122 // True if the context menu's should be offset from the cursor position. 123 bool offset_context_menus; 124 125 const ui::NativeTheme* native_theme; 126 127 // Delay, in ms, between when menus are selected or moused over and the menu 128 // appears. 129 int show_delay; 130 131 // Radius of the rounded corners of the menu border. Must be >= 0. 132 int corner_radius; 133 134 private: 135 // Configures a MenuConfig as appropriate for the current platform. 136 void Init(const ui::NativeTheme* theme); 137 138 // TODO: temporary until we standardize. 139 #if defined(USE_AURA) 140 void InitAura(const ui::NativeTheme* theme); 141 #endif 142 }; 143 144 } // namespace views 145 146 #endif // UI_VIEWS_CONTROLS_MENU_MENU_CONFIG_H_ 147