diff options
author | yefim@chromium.org <yefim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-20 00:52:29 +0000 |
---|---|---|
committer | yefim@chromium.org <yefim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-20 00:52:29 +0000 |
commit | a673f35eda3aa6859420688dae2e2b08fe126818 (patch) | |
tree | a55b37ba7dfd614d75855bd37f48a67f8d07d76b /ui/views | |
parent | 3d95e54652070dacfdb9188c3f6f48111bcc007e (diff) | |
download | chromium_src-a673f35eda3aa6859420688dae2e2b08fe126818.zip chromium_src-a673f35eda3aa6859420688dae2e2b08fe126818.tar.gz chromium_src-a673f35eda3aa6859420688dae2e2b08fe126818.tar.bz2 |
Added flag to enable new menu style.
Changed so far: menu background, no gutter, separator, border with round corners (corners are not transparent yet).
This is work in progress, just want to keep change size manageable.
BUG=157692
Review URL: https://chromiumcodereview.appspot.com/11348055
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@168671 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/views')
-rw-r--r-- | ui/views/border.cc | 13 | ||||
-rw-r--r-- | ui/views/border.h | 4 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_config.cc | 11 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_config.h | 10 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_config_views.cc | 3 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_config_win.cc | 3 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_controller.cc | 2 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_item_view_win.cc | 22 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_scroll_view_container.cc | 26 | ||||
-rw-r--r-- | ui/views/controls/menu/menu_separator_win.cc | 1 | ||||
-rw-r--r-- | ui/views/round_rect_painter.cc | 35 | ||||
-rw-r--r-- | ui/views/round_rect_painter.h | 36 | ||||
-rw-r--r-- | ui/views/views.gyp | 2 |
13 files changed, 129 insertions, 39 deletions
diff --git a/ui/views/border.cc b/ui/views/border.cc index 8964c691..9f86fc4 100644 --- a/ui/views/border.cc +++ b/ui/views/border.cc @@ -86,8 +86,9 @@ class EmptyBorder : public Border { class BorderPainter : public Border { public: - explicit BorderPainter(Painter* painter) - : painter_(painter) { + explicit BorderPainter(Painter* painter, const gfx::Insets& insets) + : painter_(painter), + insets_(insets) { DCHECK(painter); } @@ -99,11 +100,12 @@ class BorderPainter : public Border { } virtual gfx::Insets GetInsets() const OVERRIDE { - return gfx::Insets(); + return insets_; } private: scoped_ptr<Painter> painter_; + const gfx::Insets insets_; DISALLOW_COPY_AND_ASSIGN(BorderPainter); }; @@ -136,8 +138,9 @@ Border* Border::CreateSolidSidedBorder(int top, } // static -Border* Border::CreateBorderPainter(Painter* painter) { - return new BorderPainter(painter); +Border* Border::CreateBorderPainter(Painter* painter, + const gfx::Insets& insets) { + return new BorderPainter(painter, insets); } } // namespace views diff --git a/ui/views/border.h b/ui/views/border.h index 8a0a55e2..d1431fb 100644 --- a/ui/views/border.h +++ b/ui/views/border.h @@ -59,7 +59,9 @@ class VIEWS_EXPORT Border { // Creates a Border from the specified Painter. The border owns the painter, // thus the painter is deleted when the Border is deleted. - static Border* CreateBorderPainter(Painter* painter); + // |insets| define size of an area allocated for a Border. + static Border* CreateBorderPainter(Painter* painter, + const gfx::Insets& insets); // Renders the border for the specified view. virtual void Paint(const View& view, gfx::Canvas* canvas) = 0; diff --git a/ui/views/controls/menu/menu_config.cc b/ui/views/controls/menu/menu_config.cc index 5c951c8..84abe5d 100644 --- a/ui/views/controls/menu/menu_config.cc +++ b/ui/views/controls/menu/menu_config.cc @@ -13,8 +13,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), + menu_border_size(3), submenu_horizontal_inset(3), item_top_margin(3), item_bottom_margin(4), @@ -57,4 +56,12 @@ MenuConfig::MenuConfig(const ui::NativeTheme* theme) MenuConfig::~MenuConfig() {} +void MenuConfig::AdjustForCommonTheme() { + render_gutter = false; + item_top_margin = 6; + item_bottom_margin = 6; + separator_height = 15; + menu_border_size = 2; +} + } // namespace views diff --git a/ui/views/controls/menu/menu_config.h b/ui/views/controls/menu/menu_config.h index 9be9921..79a8659 100644 --- a/ui/views/controls/menu/menu_config.h +++ b/ui/views/controls/menu/menu_config.h @@ -32,11 +32,8 @@ struct VIEWS_EXPORT MenuConfig { // Color for the arrow to scroll bookmarks. SkColor arrow_color; - // Submenu horizontal margin size. - int submenu_horizontal_margin_size; - - // Submenu vertical margin size. - int submenu_vertical_margin_size; + // Menu border size. + int menu_border_size; // Submenu horizontal inset with parent menu. This is the horizontal overlap // between the submenu and its parent menu, not including the borders of @@ -134,6 +131,9 @@ struct VIEWS_EXPORT MenuConfig { #if defined(USE_AURA) void InitAura(); #endif + + // Adjust some values for a new UI style. + void AdjustForCommonTheme(); }; } // namespace views diff --git a/ui/views/controls/menu/menu_config_views.cc b/ui/views/controls/menu/menu_config_views.cc index 15e849a..a0285d6 100644 --- a/ui/views/controls/menu/menu_config_views.cc +++ b/ui/views/controls/menu/menu_config_views.cc @@ -23,8 +23,7 @@ void MenuConfig::InitAura() { ui::NativeTheme* theme = ui::NativeThemeAura::instance(); text_color = theme->GetSystemColor( ui::NativeTheme::kColorId_EnabledMenuItemForegroundColor); - submenu_horizontal_margin_size = 0; - submenu_vertical_margin_size = 0; + menu_border_size = 0; submenu_horizontal_inset = 1; ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); arrow_to_edge_padding = 20; diff --git a/ui/views/controls/menu/menu_config_win.cc b/ui/views/controls/menu/menu_config_win.cc index d7ae562..c35e976 100644 --- a/ui/views/controls/menu/menu_config_win.cc +++ b/ui/views/controls/menu/menu_config_win.cc @@ -99,6 +99,9 @@ void MenuConfig::Init(const NativeTheme* theme) { separator_height = GetSystemMetrics(SM_CYMENU) / 2 - 1; } + if (NativeTheme::IsNewMenuStyleEnabled()) + AdjustForCommonTheme(); + // On Windows, having some menus use wider spacing than others looks wrong. // See http://crbug.com/88875 item_no_icon_bottom_margin = item_bottom_margin; diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc index 9151c34..d7077e9 100644 --- a/ui/views/controls/menu/menu_controller.cc +++ b/ui/views/controls/menu/menu_controller.cc @@ -1695,7 +1695,7 @@ gfx::Rect MenuController::CalculateMenuBounds(MenuItemView* item, x = item_loc.x() + item->width() - submenu_horizontal_inset; } } - y = item_loc.y() - menu_config.submenu_vertical_margin_size; + y = item_loc.y() - menu_config.menu_border_size; if (state_.monitor_bounds.width() != 0) { pref.set_height(std::min(pref.height(), state_.monitor_bounds.height())); if (y + pref.height() > state_.monitor_bounds.bottom()) diff --git a/ui/views/controls/menu/menu_item_view_win.cc b/ui/views/controls/menu/menu_item_view_win.cc index 5d543ba..461b9fe9 100644 --- a/ui/views/controls/menu/menu_item_view_win.cc +++ b/ui/views/controls/menu/menu_item_view_win.cc @@ -57,7 +57,17 @@ void MenuItemView::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) { control_state = NativeTheme::kDisabled; } - // The gutter is rendered before the background. + // Render the background. + if (mode == PB_NORMAL) { + gfx::Rect item_bounds(0, 0, width(), height()); + AdjustBoundsForRTLUI(&item_bounds); + NativeTheme::ExtraParams extra; + extra.menu_item.is_selected = render_selection; + config.native_theme->Paint(canvas->sk_canvas(), + NativeTheme::kMenuItemBackground, control_state, item_bounds, extra); + } + + // Render the gutter. if (config.render_gutter && mode == PB_NORMAL) { gfx::Rect gutter_bounds(label_start_ - config.gutter_to_label - config.gutter_width, 0, config.gutter_width, @@ -71,16 +81,6 @@ void MenuItemView::PaintButton(gfx::Canvas* canvas, PaintButtonMode mode) { extra); } - // Render the background. - if (mode == PB_NORMAL) { - gfx::Rect item_bounds(0, 0, width(), height()); - NativeTheme::ExtraParams extra; - extra.menu_item.is_selected = render_selection; - AdjustBoundsForRTLUI(&item_bounds); - config.native_theme->Paint(canvas->sk_canvas(), - NativeTheme::kMenuItemBackground, control_state, item_bounds, extra); - } - int top_margin = GetTopMargin(); int bottom_margin = GetBottomMargin(); diff --git a/ui/views/controls/menu/menu_scroll_view_container.cc b/ui/views/controls/menu/menu_scroll_view_container.cc index 8a85d60..73dbaca 100644 --- a/ui/views/controls/menu/menu_scroll_view_container.cc +++ b/ui/views/controls/menu/menu_scroll_view_container.cc @@ -4,12 +4,6 @@ #include "ui/views/controls/menu/menu_scroll_view_container.h" -#if defined(OS_WIN) -#include <windows.h> -#include <uxtheme.h> -#include <Vssym32.h> -#endif - #include "third_party/skia/include/core/SkPaint.h" #include "third_party/skia/include/core/SkPath.h" #include "ui/base/accessibility/accessible_view_state.h" @@ -20,6 +14,7 @@ #include "ui/views/controls/menu/menu_controller.h" #include "ui/views/controls/menu/menu_item_view.h" #include "ui/views/controls/menu/submenu_view.h" +#include "ui/views/round_rect_painter.h" using ui::NativeTheme; @@ -179,11 +174,20 @@ MenuScrollViewContainer::MenuScrollViewContainer(SubmenuView* content_view) const MenuConfig& menu_config = content_view_->GetMenuItem()->GetMenuConfig(); - set_border(Border::CreateEmptyBorder( - menu_config.submenu_vertical_margin_size, - menu_config.submenu_horizontal_margin_size, - menu_config.submenu_vertical_margin_size, - menu_config.submenu_horizontal_margin_size)); + + if (NativeTheme::IsNewMenuStyleEnabled()) { + set_border(views::Border::CreateBorderPainter( + new views::RoundRectPainter( + ui::NativeTheme::instance()->GetSystemColor( + ui::NativeTheme::kColorId_MenuBorderColor)), + gfx::Insets(menu_config.menu_border_size, menu_config.menu_border_size, + menu_config.menu_border_size, menu_config.menu_border_size))); + } else { + set_border(Border::CreateEmptyBorder(menu_config.menu_border_size, + menu_config.menu_border_size, + menu_config.menu_border_size, + menu_config.menu_border_size)); + } } void MenuScrollViewContainer::OnPaintBackground(gfx::Canvas* canvas) { diff --git a/ui/views/controls/menu/menu_separator_win.cc b/ui/views/controls/menu/menu_separator_win.cc index 89db94a..6f95334 100644 --- a/ui/views/controls/menu/menu_separator_win.cc +++ b/ui/views/controls/menu/menu_separator_win.cc @@ -30,7 +30,6 @@ void MenuSeparator::OnPaint(gfx::Canvas* canvas) { } #endif - // The gutter is rendered before the background. int start_x = 0; if (config.render_gutter) { // If render_gutter is true, we're on Vista and need to render the diff --git a/ui/views/round_rect_painter.cc b/ui/views/round_rect_painter.cc new file mode 100644 index 0000000..ec8c179 --- /dev/null +++ b/ui/views/round_rect_painter.cc @@ -0,0 +1,35 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/views/round_rect_painter.h" + +#include "ui/gfx/canvas.h" +#include "ui/gfx/skia_util.h" + +namespace views { + +static const int kRadius = 2; + +RoundRectPainter::RoundRectPainter(SkColor border_color) + : border_color_(border_color) { +} + +RoundRectPainter::~RoundRectPainter() { +} + +void RoundRectPainter::Paint(gfx::Canvas* canvas, const gfx::Size& size) { + SkPaint paint; + paint.setColor(border_color_); + paint.setStyle(SkPaint::kStroke_Style); + paint.setStrokeWidth(1); + paint.setFlags(SkPaint::kAntiAlias_Flag); + gfx::Rect rect(size); + rect.Inset(0, 0, 1, 1); + SkRect skia_rect = gfx::RectToSkRect(rect); + skia_rect.offset(.5, .5); + canvas->sk_canvas()->drawRoundRect(skia_rect, SkIntToScalar(kRadius), + SkIntToScalar(kRadius), paint); +} + +} // namespace views diff --git a/ui/views/round_rect_painter.h b/ui/views/round_rect_painter.h new file mode 100644 index 0000000..3e4b5ca --- /dev/null +++ b/ui/views/round_rect_painter.h @@ -0,0 +1,36 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_VIEWS_ROUNDED_RECT_PAINTER_H_ +#define UI_VIEWS_ROUNDED_RECT_PAINTER_H_ + +#include "ui/gfx/rect.h" +#include "ui/views/painter.h" +#include "ui/views/views_export.h" + +namespace gfx { +class Canvas; +class Size; +} + +namespace views { + +// Painter to draw a border with rounded corners. +class VIEWS_EXPORT RoundRectPainter : public Painter { + public: + explicit RoundRectPainter(SkColor border_color); + virtual ~RoundRectPainter(); + + // Painter overrides: + virtual void Paint(gfx::Canvas* canvas, const gfx::Size& size) OVERRIDE; + + private: + const SkColor border_color_; + + DISALLOW_COPY_AND_ASSIGN(RoundRectPainter); +}; + +} // namespace views + +#endif // UI_VIEWS_ROUNDED_RECT_PAINTER_H_ diff --git a/ui/views/views.gyp b/ui/views/views.gyp index 57b1767..599e039 100644 --- a/ui/views/views.gyp +++ b/ui/views/views.gyp @@ -307,6 +307,8 @@ 'painter.h', 'repeat_controller.cc', 'repeat_controller.h', + 'round_rect_painter.cc', + 'round_rect_painter.h', 'touchui/touch_selection_controller.cc', 'touchui/touch_selection_controller.h', 'view.cc', |