Index: views/controls/menu/menu_item_view.cc |
diff --git a/views/controls/menu/menu_item_view.cc b/views/controls/menu/menu_item_view.cc |
index f2e269d5766ab3a6dfe9310a917fbcbe4092858f..ca224c296f95f92506191d30515316671fab3b6d 100644 |
--- a/views/controls/menu/menu_item_view.cc |
+++ b/views/controls/menu/menu_item_view.cc |
@@ -7,6 +7,7 @@ |
#include "app/l10n_util.h" |
#include "gfx/canvas.h" |
#include "grit/app_strings.h" |
+#include "views/controls/button/text_button.h" |
#include "views/controls/menu/menu_config.h" |
#include "views/controls/menu/menu_controller.h" |
#include "views/controls/menu/menu_separator.h" |
@@ -24,8 +25,8 @@ namespace { |
class EmptyMenuMenuItem : public MenuItemView { |
public: |
- explicit EmptyMenuMenuItem(MenuItemView* parent) : |
- MenuItemView(parent, 0, NORMAL) { |
+ explicit EmptyMenuMenuItem(MenuItemView* parent) |
+ : MenuItemView(parent, 0, NORMAL) { |
SetTitle(l10n_util::GetString(IDS_APP_MENU_EMPTY_SUBMENU)); |
// Set this so that we're not identified as a normal menu item. |
SetID(kEmptyMenuItemViewID); |
@@ -312,6 +313,11 @@ void MenuItemView::Layout() { |
} |
} |
+int MenuItemView::GetAcceleratorTextWidth() { |
+ std::wstring text = GetAcceleratorText(); |
+ return text.empty() ? 0 : MenuConfig::instance().font.GetStringWidth(text); |
+} |
+ |
MenuItemView::MenuItemView(MenuItemView* parent, |
int command, |
MenuItemView::Type type) { |
@@ -452,6 +458,31 @@ void MenuItemView::AdjustBoundsForRTLUI(gfx::Rect* rect) const { |
rect->set_x(MirroredLeftPointForRect(*rect)); |
} |
+void MenuItemView::PaintAccelerator(gfx::Canvas* canvas) { |
+ std::wstring accel_text = GetAcceleratorText(); |
+ if (accel_text.empty()) |
+ return; |
+ |
+ const gfx::Font& font = MenuConfig::instance().font; |
+ int available_height = height() - GetTopMargin() - GetBottomMargin(); |
+ int max_accel_width = |
+ parent_menu_item_->GetSubmenu()->max_accelerator_width(); |
+ gfx::Rect accel_bounds(width() - item_right_margin_ - max_accel_width, |
+ GetTopMargin(), max_accel_width, available_height); |
+ accel_bounds.set_x(MirroredLeftPointForRect(accel_bounds)); |
+ int flags = GetRootMenuItem()->GetDrawStringFlags() | |
+ gfx::Canvas::TEXT_VALIGN_MIDDLE; |
+ flags &= ~(gfx::Canvas::TEXT_ALIGN_RIGHT | gfx::Canvas::TEXT_ALIGN_LEFT); |
+ if (base::i18n::IsRTL()) |
+ flags |= gfx::Canvas::TEXT_ALIGN_LEFT; |
+ else |
+ flags |= gfx::Canvas::TEXT_ALIGN_RIGHT; |
+ canvas->DrawStringInt( |
+ accel_text, font, TextButton::kDisabledColor, accel_bounds.x(), |
+ accel_bounds.y(), accel_bounds.width(), accel_bounds.height(), |
+ flags); |
+} |
+ |
void MenuItemView::DestroyAllMenuHosts() { |
if (!HasSubmenu()) |
return; |
@@ -491,4 +522,11 @@ int MenuItemView::GetChildPreferredWidth() { |
return width; |
} |
+std::wstring MenuItemView::GetAcceleratorText() { |
+ Accelerator accelerator; |
+ return (GetDelegate() && |
+ GetDelegate()->GetAccelerator(GetCommand(), &accelerator)) ? |
+ accelerator.GetShortcutText() : std::wstring(); |
+} |
+ |
} // namespace views |