Home | History | Annotate | Download | only in menu
      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_list.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 list used by menus.
     27   gfx::FontList font_list;
     28 
     29   // Color for the arrow to scroll bookmarks.
     30   SkColor arrow_color;
     31 
     32   // Menu border sizes.
     33   int menu_vertical_border_size;
     34   int menu_horizontal_border_size;
     35 
     36   // Submenu horizontal inset with parent menu. This is the horizontal overlap
     37   // between the submenu and its parent menu, not including the borders of
     38   // submenu and parent menu.
     39   int submenu_horizontal_inset;
     40 
     41   // Margins between the top of the item and the label.
     42   int item_top_margin;
     43 
     44   // Margins between the bottom of the item and the label.
     45   int item_bottom_margin;
     46 
     47   // Margins used if the menu doesn't have icons.
     48   int item_no_icon_top_margin;
     49   int item_no_icon_bottom_margin;
     50 
     51   // Margins between the left of the item and the icon.
     52   int item_left_margin;
     53 
     54   // Padding between the label and submenu arrow.
     55   int label_to_arrow_padding;
     56 
     57   // Padding between the arrow and the edge.
     58   int arrow_to_edge_padding;
     59 
     60   // Padding between the icon and label.
     61   int icon_to_label_padding;
     62 
     63   // Padding between the gutter and label.
     64   int gutter_to_label;
     65 
     66   // Size of the check.
     67   int check_width;
     68   int check_height;
     69 
     70   // Width of the radio bullet.
     71   int radio_width;
     72 
     73   // Width of the submenu arrow.
     74   int arrow_width;
     75 
     76   // Width of the gutter. Only used if render_gutter is true.
     77   int gutter_width;
     78 
     79   // Height of a normal separator (ui::NORMAL_SEPARATOR).
     80   int separator_height;
     81 
     82   // Height of a ui::UPPER_SEPARATOR.
     83   int separator_upper_height;
     84 
     85   // Height of a ui::LOWER_SEPARATOR.
     86   int separator_lower_height;
     87 
     88   // Height of a ui::SPACING_SEPARATOR.
     89   int separator_spacing_height;
     90 
     91   // Whether or not the gutter should be rendered. The gutter is specific to
     92   // Vista.
     93   bool render_gutter;
     94 
     95   // Are mnemonics shown?
     96   bool show_mnemonics;
     97 
     98   // Height of the scroll arrow.
     99   int scroll_arrow_height;
    100 
    101   // Padding between the label and minor text. Only used if there is an
    102   // accelerator or sublabel.
    103   int label_to_minor_text_padding;
    104 
    105   // Minimum height of menu item.
    106   int item_min_height;
    107 
    108   // Whether the keyboard accelerators are visible.
    109   bool show_accelerators;
    110 
    111   // True if icon to label padding is always added with or without icon.
    112   bool always_use_icon_to_label_padding;
    113 
    114   // True if submenu arrow and shortcut right edge should be aligned.
    115   bool align_arrow_and_shortcut;
    116 
    117   // True if the context menu's should be offset from the cursor position.
    118   bool offset_context_menus;
    119 
    120   const ui::NativeTheme* native_theme;
    121 
    122   // Delay, in ms, between when menus are selected or moused over and the menu
    123   // appears.
    124   int show_delay;
    125 
    126   // Radius of the rounded corners of the menu border. Must be >= 0.
    127   int corner_radius;
    128 
    129  private:
    130   // Configures a MenuConfig as appropriate for the current platform.
    131   void Init(const ui::NativeTheme* theme);
    132 
    133   // TODO: temporary until we standardize.
    134   void InitAura(const ui::NativeTheme* theme);
    135 };
    136 
    137 }  // namespace views
    138 
    139 #endif  // UI_VIEWS_CONTROLS_MENU_MENU_CONFIG_H_
    140