diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-06 21:10:11 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-06 21:10:11 +0000 |
commit | 526c56ab92ff4e855e0edf1f31e12b961b08becd (patch) | |
tree | 2b10d7b930858929805ff3897cc6f108aea34d5e /ui/views/controls | |
parent | 7c59a1597930f29af3ccd70ec3373b0caa1f94b4 (diff) | |
download | chromium_src-526c56ab92ff4e855e0edf1f31e12b961b08becd.zip chromium_src-526c56ab92ff4e855e0edf1f31e12b961b08becd.tar.gz chromium_src-526c56ab92ff4e855e0edf1f31e12b961b08becd.tar.bz2 |
Remaining bits of getting menus to look correct depending upon
environment. Theres a bit of cruft here, I'm hoping that'll be cleaned
up once we standardize on the one true menu.
BUG=none
TEST=none
R=ben@chromium.org
Review URL: https://chromiumcodereview.appspot.com/11363092
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@166266 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/views/controls')
-rw-r--r-- | ui/views/controls/menu/menu_config.cc | 4 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_config.h | 5 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_config_views.cc | 2 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_config_win.cc | 5 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_item_view.h | 7 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_item_view_views.cc | 6 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_item_view_win.cc | 25 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_scroll_view_container.cc | 14 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_separator.h | 9 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_separator_views.cc | 12 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_separator_win.cc | 32 |
11 files changed, 88 insertions, 33 deletions
diff --git a/ui/views/controls/menu/menu_config.cc b/ui/views/controls/menu/menu_config.cc index 942114f..fbbd465 100644 --- a/ui/views/controls/menu/menu_config.cc +++ b/ui/views/controls/menu/menu_config.cc @@ -12,6 +12,7 @@ namespace views { MenuConfig::MenuConfig(const ui::NativeTheme* theme) : text_color(SK_ColorBLACK), + arrow_color(SK_ColorBLACK), submenu_horizontal_margin_size(3), submenu_vertical_margin_size(3), submenu_horizontal_inset(3), @@ -43,7 +44,8 @@ MenuConfig::MenuConfig(const ui::NativeTheme* theme) show_accelerators(true), always_use_icon_to_label_padding(false), align_arrow_and_shortcut(false), - offset_context_menus(false) { + offset_context_menus(false), + native_theme(theme) { // Use 40px tall menu items when running in touch optimized mode. // For Windows use 40px tall menu items when running in touch optimized mode. if (ui::GetDisplayLayout() == ui::LAYOUT_TOUCH) { diff --git a/ui/views/controls/menu/menu_config.h b/ui/views/controls/menu/menu_config.h index 683a078..9be9921 100644 --- a/ui/views/controls/menu/menu_config.h +++ b/ui/views/controls/menu/menu_config.h @@ -29,6 +29,9 @@ struct VIEWS_EXPORT MenuConfig { // Normal text color. SkColor text_color; + // Color for the arrow to scroll bookmarks. + SkColor arrow_color; + // Submenu horizontal margin size. int submenu_horizontal_margin_size; @@ -121,6 +124,8 @@ struct VIEWS_EXPORT MenuConfig { // True if the context menu's should be offset from the cursor position. bool offset_context_menus; + const ui::NativeTheme* native_theme; + private: // Configures a MenuConfig as appropriate for the current platform. void Init(const ui::NativeTheme* theme); diff --git a/ui/views/controls/menu/menu_config_views.cc b/ui/views/controls/menu/menu_config_views.cc index 7a5c76d..4e53ed1 100644 --- a/ui/views/controls/menu/menu_config_views.cc +++ b/ui/views/controls/menu/menu_config_views.cc @@ -53,7 +53,7 @@ void MenuConfig::InitAura() { const MenuConfig& MenuConfig::instance(const ui::NativeTheme* theme) { static MenuConfig* views_instance = NULL; if (!views_instance) - views_instance = new MenuConfig(theme); + views_instance = new MenuConfig(ui::NativeTheme::instance()); return *views_instance; } #endif diff --git a/ui/views/controls/menu/menu_config_win.cc b/ui/views/controls/menu/menu_config_win.cc index 9b3b929..e0eb432 100644 --- a/ui/views/controls/menu/menu_config_win.cc +++ b/ui/views/controls/menu/menu_config_win.cc @@ -13,6 +13,7 @@ #include "base/win/win_util.h" #include "ui/base/l10n/l10n_util_win.h" #include "ui/base/native_theme/native_theme_win.h" +#include "ui/gfx/color_utils.h" #if defined(USE_AURA) #include "ui/base/native_theme/native_theme_aura.h" @@ -34,6 +35,8 @@ void MenuConfig::Init(const NativeTheme* theme) { NativeThemeWin::MENU, MENU_POPUPITEM, MPI_NORMAL, TMT_TEXTCOLOR, COLOR_MENUTEXT); + arrow_color = color_utils::GetSysSkColor(COLOR_MENUTEXT); + NONCLIENTMETRICS metrics; base::win::GetNonClientMetrics(&metrics); l10n_util::AdjustUIFont(&(metrics.lfMenuFont)); @@ -113,7 +116,7 @@ const MenuConfig& MenuConfig::instance(const ui::NativeTheme* theme) { if (!theme || theme == NativeThemeWin::instance()) { static MenuConfig* win_instance = NULL; if (!win_instance) - win_instance = new MenuConfig(theme); + win_instance = new MenuConfig(NativeThemeWin::instance()); return *win_instance; } static MenuConfig* views_instance = NULL; diff --git a/ui/views/controls/menu/menu_item_view.h b/ui/views/controls/menu/menu_item_view.h index c102c55..17cf889 100644 --- a/ui/views/controls/menu/menu_item_view.h +++ b/ui/views/controls/menu/menu_item_view.h @@ -345,6 +345,8 @@ class VIEWS_EXPORT MenuItemView : public View { private: friend class internal::MenuRunnerImpl; // For access to ~MenuItemView. + enum PaintButtonMode { PB_NORMAL, PB_FOR_DRAG }; + // Calculates all sizes that we can from the OS. // // This is invoked prior to Running a menu. @@ -382,7 +384,6 @@ class VIEWS_EXPORT MenuItemView : public View { // Actual paint implementation. If mode is PB_FOR_DRAG, portions of the menu // are not rendered. - enum PaintButtonMode { PB_NORMAL, PB_FOR_DRAG }; void PaintButton(gfx::Canvas* canvas, PaintButtonMode mode); #if defined(OS_WIN) @@ -395,6 +396,10 @@ class VIEWS_EXPORT MenuItemView : public View { const MenuConfig& config); #endif +#if defined(USE_AURA) + void PaintButtonAura(gfx::Canvas* canvas, PaintButtonMode mode); +#endif + // Paints the accelerator. void PaintAccelerator(gfx::Canvas* canvas); diff --git a/ui/views/controls/menu/menu_item_view_views.cc b/ui/views/controls/menu/menu_item_view_views.cc index 79fe29b..f26f646f 100644 --- a/ui/views/controls/menu/menu_item_view_views.cc +++ b/ui/views/controls/menu/menu_item_view_views.cc @@ -18,7 +18,13 @@ namespace views { +#if !defined(OS_WIN) void MenuItemView::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) { + PaintButtonAura(canvas, mode); +} +#endif + +void MenuItemView::PaintButtonAura(gfx::Canvas* canvas, PaintButtonMode mode) { const MenuConfig& config = GetMenuConfig(); bool render_selection = (mode == PB_NORMAL && IsSelected() && diff --git a/ui/views/controls/menu/menu_item_view_win.cc b/ui/views/controls/menu/menu_item_view_win.cc index a8b56e4..87a75ba 100644 --- a/ui/views/controls/menu/menu_item_view_win.cc +++ b/ui/views/controls/menu/menu_item_view_win.cc @@ -13,6 +13,10 @@ #include "ui/views/controls/menu/menu_config.h" #include "ui/views/controls/menu/submenu_view.h" +#if defined(USE_AURA) +#include "ui/base/native_theme/native_theme_aura.h" +#endif + using ui::NativeTheme; namespace views { @@ -20,6 +24,13 @@ namespace views { void MenuItemView::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) { const MenuConfig& config = GetMenuConfig(); +#if defined(USE_AURA) + if (config.native_theme == ui::NativeThemeAura::instance()) { + PaintButtonAura(canvas, mode); + return; + } +#endif + bool render_selection = (mode == PB_NORMAL && IsSelected() && parent_menu_item_->GetSubmenu()->GetShowSelection(this) && @@ -53,11 +64,11 @@ void MenuItemView::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) { height()); AdjustBoundsForRTLUI(&gutter_bounds); NativeTheme::ExtraParams extra; - native_theme->Paint(canvas->sk_canvas(), - NativeTheme::kMenuPopupGutter, - NativeTheme::kNormal, - gutter_bounds, - extra); + config.native_theme->Paint(canvas->sk_canvas(), + NativeTheme::kMenuPopupGutter, + NativeTheme::kNormal, + gutter_bounds, + extra); } // Render the background. @@ -66,7 +77,7 @@ void MenuItemView::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) { NativeTheme::ExtraParams extra; extra.menu_item.is_selected = render_selection; AdjustBoundsForRTLUI(&item_bounds); - native_theme->Paint(canvas->sk_canvas(), + config.native_theme->Paint(canvas->sk_canvas(), NativeTheme::kMenuItemBackground, control_state, item_bounds, extra); } @@ -121,7 +132,7 @@ void MenuItemView::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) { ui::NativeTheme::ExtraParams extra; extra.menu_arrow.pointing_right = !base::i18n::IsRTL(); extra.menu_arrow.is_selected = render_selection; - native_theme->Paint(canvas->sk_canvas(), + config.native_theme->Paint(canvas->sk_canvas(), ui::NativeTheme::kMenuPopupArrow, control_state, arrow_bounds, extra); } } diff --git a/ui/views/controls/menu/menu_scroll_view_container.cc b/ui/views/controls/menu/menu_scroll_view_container.cc index 79a16cd..ccdf93a7 100644 --- a/ui/views/controls/menu/menu_scroll_view_container.cc +++ b/ui/views/controls/menu/menu_scroll_view_container.cc @@ -15,7 +15,6 @@ #include "ui/base/accessibility/accessible_view_state.h" #include "ui/base/native_theme/native_theme.h" #include "ui/gfx/canvas.h" -#include "ui/gfx/color_utils.h" #include "ui/views/border.h" #include "ui/views/controls/menu/menu_config.h" #include "ui/views/controls/menu/menu_controller.h" @@ -87,11 +86,6 @@ class MenuScrollButton : public View { GetNativeTheme()->Paint(canvas->sk_canvas(), NativeTheme::kMenuItemBackground, NativeTheme::kNormal, item_bounds, extra); -#if defined(OS_WIN) - SkColor arrow_color = color_utils::GetSysSkColor(COLOR_MENUTEXT); -#else - SkColor arrow_color = SK_ColorBLACK; -#endif // Then the arrow. int x = width() / 2; @@ -116,7 +110,7 @@ class MenuScrollButton : public View { SkPaint paint; paint.setStyle(SkPaint::kFill_Style); paint.setAntiAlias(true); - paint.setColor(arrow_color); + paint.setColor(config.arrow_color); canvas->DrawPath(path, paint); } @@ -198,16 +192,10 @@ void MenuScrollViewContainer::OnPaintBackground(gfx::Canvas* canvas) { return; } -#if defined(OS_WIN) - HDC dc = canvas->BeginPlatformPaint(); -#endif gfx::Rect bounds(0, 0, width(), height()); NativeTheme::ExtraParams extra; GetNativeTheme()->Paint(canvas->sk_canvas(), NativeTheme::kMenuPopupBackground, NativeTheme::kNormal, bounds, extra); -#if defined(OS_WIN) - canvas->EndPlatformPaint(); -#endif } void MenuScrollViewContainer::Layout() { diff --git a/ui/views/controls/menu/menu_separator.h b/ui/views/controls/menu/menu_separator.h index 3833177..4098ae8 100644 --- a/ui/views/controls/menu/menu_separator.h +++ b/ui/views/controls/menu/menu_separator.h @@ -16,14 +16,19 @@ class MenuItemView; class MenuSeparator : public View { public: MenuSeparator(MenuItemView* parent, ui::MenuSeparatorType type) - : type_(type), - parent_menu_item_(parent) {} + : type_(type), + parent_menu_item_(parent) {} // View overrides. virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; virtual gfx::Size GetPreferredSize() OVERRIDE; private: +#if defined(USE_AURA) + void OnPaintAura(gfx::Canvas* canvas); + gfx::Size GetPreferredSizeAura(); +#endif + // The type of the separator. const ui::MenuSeparatorType type_; diff --git a/ui/views/controls/menu/menu_separator_views.cc b/ui/views/controls/menu/menu_separator_views.cc index e2082e6..43a7632 100644 --- a/ui/views/controls/menu/menu_separator_views.cc +++ b/ui/views/controls/menu/menu_separator_views.cc @@ -18,7 +18,17 @@ const int kSeparatorHeight = 1; namespace views { +#if !defined(OS_WIN) void MenuSeparator::OnPaint(gfx::Canvas* canvas) { + OnPaintAura(canvas); +} + +gfx::Size MenuSeparator::GetPreferredSize() { + return GetPreferredSizeAura(); +} +#endif + +void MenuSeparator::OnPaintAura(gfx::Canvas* canvas) { int pos = 0; switch (type_) { case ui::LOWER_SEPARATOR: @@ -37,7 +47,7 @@ void MenuSeparator::OnPaint(gfx::Canvas* canvas) { ui::NativeTheme::kColorId_MenuSeparatorColor)); } -gfx::Size MenuSeparator::GetPreferredSize() { +gfx::Size MenuSeparator::GetPreferredSizeAura() { const MenuConfig& menu_config = parent_menu_item_->GetMenuConfig(); int height = menu_config.separator_height; switch(type_) { diff --git a/ui/views/controls/menu/menu_separator_win.cc b/ui/views/controls/menu/menu_separator_win.cc index 51e5e93..7a3d8f9 100644 --- a/ui/views/controls/menu/menu_separator_win.cc +++ b/ui/views/controls/menu/menu_separator_win.cc @@ -14,13 +14,24 @@ #include "ui/views/controls/menu/menu_config.h" #include "ui/views/controls/menu/menu_item_view.h" +#if defined(USE_AURA) +#include "ui/base/native_theme/native_theme_aura.h" +#endif + namespace views { void MenuSeparator::OnPaint(gfx::Canvas* canvas) { const MenuConfig& config = parent_menu_item_->GetMenuConfig(); + +#if defined(USE_AURA) + if (config.native_theme == ui::NativeThemeAura::instance()) { + OnPaintAura(canvas); + return; + } +#endif + // The gutter is rendered before the background. int start_x = 0; - const ui::NativeTheme* theme = GetNativeTheme(); if (config.render_gutter) { // If render_gutter is true, we're on Vista and need to render the // gutter, then indent the separator from the gutter. @@ -28,21 +39,30 @@ void MenuSeparator::OnPaint(gfx::Canvas* canvas) { config.gutter_to_label - config.gutter_width, 0, config.gutter_width, height()); ui::NativeTheme::ExtraParams extra; - theme->Paint(canvas->sk_canvas(), ui::NativeTheme::kMenuPopupGutter, - ui::NativeTheme::kNormal, gutter_bounds, extra); + config.native_theme->Paint( + canvas->sk_canvas(), ui::NativeTheme::kMenuPopupGutter, + ui::NativeTheme::kNormal, gutter_bounds, extra); start_x = gutter_bounds.x() + config.gutter_width; } gfx::Rect separator_bounds(start_x, 0, width(), height()); ui::NativeTheme::ExtraParams extra; extra.menu_separator.has_gutter = config.render_gutter; - theme->Paint(canvas->sk_canvas(), ui::NativeTheme::kMenuPopupSeparator, - ui::NativeTheme::kNormal, separator_bounds, extra); + config.native_theme->Paint( + canvas->sk_canvas(), ui::NativeTheme::kMenuPopupSeparator, + ui::NativeTheme::kNormal, separator_bounds, extra); } gfx::Size MenuSeparator::GetPreferredSize() { + const MenuConfig& config = parent_menu_item_->GetMenuConfig(); + +#if defined(USE_AURA) + if (config.native_theme == ui::NativeThemeAura::instance()) + return GetPreferredSizeAura(); +#endif + return gfx::Size(10, // Just in case we're the only item in a menu. - parent_menu_item_->GetMenuConfig().separator_height); + config.separator_height); } } // namespace views |