Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Side by Side Diff: views/controls/menu/submenu_view.cc

Issue 2742003: Adds support for showing accelerators in bookmark menus. (Closed)
Patch Set: Added GetAcceleratorText Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « views/controls/menu/submenu_view.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "views/controls/menu/submenu_view.h" 5 #include "views/controls/menu/submenu_view.h"
6 6
7 #include "gfx/canvas.h" 7 #include "gfx/canvas.h"
8 #include "views/controls/menu/menu_config.h"
8 #include "views/controls/menu/menu_controller.h" 9 #include "views/controls/menu/menu_controller.h"
9 #include "views/controls/menu/menu_host.h" 10 #include "views/controls/menu/menu_host.h"
10 #include "views/controls/menu/menu_scroll_view_container.h" 11 #include "views/controls/menu/menu_scroll_view_container.h"
11 #include "views/widget/root_view.h" 12 #include "views/widget/root_view.h"
12 13
13 // Height of the drop indicator. This should be an even number. 14 // Height of the drop indicator. This should be an even number.
14 static const int kDropIndicatorHeight = 2; 15 static const int kDropIndicatorHeight = 2;
15 16
16 // Color of the drop indicator. 17 // Color of the drop indicator.
17 static const SkColor kDropIndicatorColor = SK_ColorBLACK; 18 static const SkColor kDropIndicatorColor = SK_ColorBLACK;
18 19
19 namespace views { 20 namespace views {
20 21
21 // static 22 // static
22 const int SubmenuView::kSubmenuBorderSize = 3; 23 const int SubmenuView::kSubmenuBorderSize = 3;
23 24
24 SubmenuView::SubmenuView(MenuItemView* parent) 25 SubmenuView::SubmenuView(MenuItemView* parent)
25 : parent_menu_item_(parent), 26 : parent_menu_item_(parent),
26 host_(NULL), 27 host_(NULL),
27 drop_item_(NULL), 28 drop_item_(NULL),
28 drop_position_(MenuDelegate::DROP_NONE), 29 drop_position_(MenuDelegate::DROP_NONE),
29 scroll_view_container_(NULL) { 30 scroll_view_container_(NULL),
31 max_accelerator_width_(0) {
30 DCHECK(parent); 32 DCHECK(parent);
31 // We'll delete ourselves, otherwise the ScrollView would delete us on close. 33 // We'll delete ourselves, otherwise the ScrollView would delete us on close.
32 set_parent_owned(false); 34 set_parent_owned(false);
33 } 35 }
34 36
35 SubmenuView::~SubmenuView() { 37 SubmenuView::~SubmenuView() {
36 // The menu may not have been closed yet (it will be hidden, but not 38 // The menu may not have been closed yet (it will be hidden, but not
37 // necessarily closed). 39 // necessarily closed).
38 Close(); 40 Close();
39 41
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 gfx::Size child_pref_size = child->GetPreferredSize(); 86 gfx::Size child_pref_size = child->GetPreferredSize();
85 child->SetBounds(x, y, menu_item_width, child_pref_size.height()); 87 child->SetBounds(x, y, menu_item_width, child_pref_size.height());
86 y += child_pref_size.height(); 88 y += child_pref_size.height();
87 } 89 }
88 } 90 }
89 91
90 gfx::Size SubmenuView::GetPreferredSize() { 92 gfx::Size SubmenuView::GetPreferredSize() {
91 if (GetChildViewCount() == 0) 93 if (GetChildViewCount() == 0)
92 return gfx::Size(); 94 return gfx::Size();
93 95
96 max_accelerator_width_ = 0;
94 int max_width = 0; 97 int max_width = 0;
95 int height = 0; 98 int height = 0;
96 for (int i = 0; i < GetChildViewCount(); ++i) { 99 for (int i = 0; i < GetChildViewCount(); ++i) {
97 View* child = GetChildViewAt(i); 100 View* child = GetChildViewAt(i);
98 gfx::Size child_pref_size = child->GetPreferredSize(); 101 gfx::Size child_pref_size = child->GetPreferredSize();
99 max_width = std::max(max_width, child_pref_size.width()); 102 max_width = std::max(max_width, child_pref_size.width());
100 height += child_pref_size.height(); 103 height += child_pref_size.height();
104 if (child->GetID() == MenuItemView::kMenuItemViewID) {
105 MenuItemView* menu = static_cast<MenuItemView*>(child);
106 max_accelerator_width_ =
107 std::max(max_accelerator_width_, menu->GetAcceleratorTextWidth());
108 }
109 }
110 if (max_accelerator_width_ > 0) {
111 max_accelerator_width_ +=
112 MenuConfig::instance().label_to_accelerator_padding;
101 } 113 }
102 gfx::Insets insets = GetInsets(); 114 gfx::Insets insets = GetInsets();
103 return gfx::Size(max_width + insets.width(), height + insets.height()); 115 return gfx::Size(max_width + max_accelerator_width_ + insets.width(),
116 height + insets.height());
104 } 117 }
105 118
106 void SubmenuView::DidChangeBounds(const gfx::Rect& previous, 119 void SubmenuView::DidChangeBounds(const gfx::Rect& previous,
107 const gfx::Rect& current) { 120 const gfx::Rect& current) {
108 SchedulePaint(); 121 SchedulePaint();
109 } 122 }
110 123
111 void SubmenuView::PaintChildren(gfx::Canvas* canvas) { 124 void SubmenuView::PaintChildren(gfx::Canvas* canvas) {
112 View::PaintChildren(canvas); 125 View::PaintChildren(canvas);
113 126
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 item_bounds.set_height(kDropIndicatorHeight); 338 item_bounds.set_height(kDropIndicatorHeight);
326 return item_bounds; 339 return item_bounds;
327 340
328 default: 341 default:
329 // Don't render anything for on. 342 // Don't render anything for on.
330 return gfx::Rect(); 343 return gfx::Rect();
331 } 344 }
332 } 345 }
333 346
334 } // namespace views 347 } // namespace views
OLDNEW
« no previous file with comments | « views/controls/menu/submenu_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698