summaryrefslogtreecommitdiffstats
path: root/ui/views/controls
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-06 21:10:11 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-06 21:10:11 +0000
commit526c56ab92ff4e855e0edf1f31e12b961b08becd (patch)
tree2b10d7b930858929805ff3897cc6f108aea34d5e /ui/views/controls
parent7c59a1597930f29af3ccd70ec3373b0caa1f94b4 (diff)
downloadchromium_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.cc4
-rw-r--r--ui/views/controls/menu/menu_config.h5
-rw-r--r--ui/views/controls/menu/menu_config_views.cc2
-rw-r--r--ui/views/controls/menu/menu_config_win.cc5
-rw-r--r--ui/views/controls/menu/menu_item_view.h7
-rw-r--r--ui/views/controls/menu/menu_item_view_views.cc6
-rw-r--r--ui/views/controls/menu/menu_item_view_win.cc25
-rw-r--r--ui/views/controls/menu/menu_scroll_view_container.cc14
-rw-r--r--ui/views/controls/menu/menu_separator.h9
-rw-r--r--ui/views/controls/menu/menu_separator_views.cc12
-rw-r--r--ui/views/controls/menu/menu_separator_win.cc32
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