OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/browser/ui/views/toolbar/wrench_menu.h" | 5 #include "chrome/browser/ui/views/toolbar/wrench_menu.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <set> | 9 #include <set> |
10 | 10 |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 command_id <= WrenchMenuModel::kMaxRecentTabsCommandId; | 99 command_id <= WrenchMenuModel::kMaxRecentTabsCommandId; |
100 } | 100 } |
101 | 101 |
102 // Subclass of ImageButton whose preferred size includes the size of the border. | 102 // Subclass of ImageButton whose preferred size includes the size of the border. |
103 class FullscreenButton : public ImageButton { | 103 class FullscreenButton : public ImageButton { |
104 public: | 104 public: |
105 explicit FullscreenButton(views::ButtonListener* listener) | 105 explicit FullscreenButton(views::ButtonListener* listener) |
106 : ImageButton(listener) { } | 106 : ImageButton(listener) { } |
107 | 107 |
108 // Overridden from ImageButton. | 108 // Overridden from ImageButton. |
109 virtual gfx::Size GetPreferredSize() const override { | 109 gfx::Size GetPreferredSize() const override { |
110 gfx::Size pref = ImageButton::GetPreferredSize(); | 110 gfx::Size pref = ImageButton::GetPreferredSize(); |
111 if (border()) { | 111 if (border()) { |
112 gfx::Insets insets = border()->GetInsets(); | 112 gfx::Insets insets = border()->GetInsets(); |
113 pref.Enlarge(insets.width(), insets.height()); | 113 pref.Enlarge(insets.width(), insets.height()); |
114 } | 114 } |
115 return pref; | 115 return pref; |
116 } | 116 } |
117 | 117 |
118 private: | 118 private: |
119 DISALLOW_COPY_AND_ASSIGN(FullscreenButton); | 119 DISALLOW_COPY_AND_ASSIGN(FullscreenButton); |
(...skipping 21 matching lines...) Expand all Loading... |
141 if (base::i18n::IsRTL()) { | 141 if (base::i18n::IsRTL()) { |
142 left_button_ = right_button; | 142 left_button_ = right_button; |
143 right_button_ = left_button; | 143 right_button_ = left_button; |
144 } else { | 144 } else { |
145 left_button_ = left_button; | 145 left_button_ = left_button; |
146 right_button_ = right_button; | 146 right_button_ = right_button; |
147 } | 147 } |
148 } | 148 } |
149 | 149 |
150 // Overridden from views::Background. | 150 // Overridden from views::Background. |
151 virtual void Paint(gfx::Canvas* canvas, View* view) const override { | 151 void Paint(gfx::Canvas* canvas, View* view) const override { |
152 CustomButton* button = CustomButton::AsCustomButton(view); | 152 CustomButton* button = CustomButton::AsCustomButton(view); |
153 views::Button::ButtonState state = | 153 views::Button::ButtonState state = |
154 button ? button->state() : views::Button::STATE_NORMAL; | 154 button ? button->state() : views::Button::STATE_NORMAL; |
155 int h = view->height(); | 155 int h = view->height(); |
156 | 156 |
157 // Normal buttons get a border drawn on the right side and the rest gets | 157 // Normal buttons get a border drawn on the right side and the rest gets |
158 // filled in. The left button however does not get a line to combine | 158 // filled in. The left button however does not get a line to combine |
159 // buttons. | 159 // buttons. |
160 if (type_ != RIGHT_BUTTON) { | 160 if (type_ != RIGHT_BUTTON) { |
161 canvas->FillRect(gfx::Rect(0, 0, 1, h), | 161 canvas->FillRect(gfx::Rect(0, 0, 1, h), |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 | 251 |
252 return MenuItemView::GetAccessibleNameForMenuItem( | 252 return MenuItemView::GetAccessibleNameForMenuItem( |
253 accessible_name, accelerator_text); | 253 accessible_name, accelerator_text); |
254 } | 254 } |
255 | 255 |
256 // A button that lives inside a menu item. | 256 // A button that lives inside a menu item. |
257 class InMenuButton : public LabelButton { | 257 class InMenuButton : public LabelButton { |
258 public: | 258 public: |
259 InMenuButton(views::ButtonListener* listener, const base::string16& text) | 259 InMenuButton(views::ButtonListener* listener, const base::string16& text) |
260 : LabelButton(listener, text), in_menu_background_(NULL) {} | 260 : LabelButton(listener, text), in_menu_background_(NULL) {} |
261 virtual ~InMenuButton() {} | 261 ~InMenuButton() override {} |
262 | 262 |
263 void Init(InMenuButtonBackground::ButtonType type) { | 263 void Init(InMenuButtonBackground::ButtonType type) { |
264 SetFocusable(true); | 264 SetFocusable(true); |
265 set_request_focus_on_press(false); | 265 set_request_focus_on_press(false); |
266 SetHorizontalAlignment(gfx::ALIGN_CENTER); | 266 SetHorizontalAlignment(gfx::ALIGN_CENTER); |
267 | 267 |
268 in_menu_background_ = new InMenuButtonBackground(type); | 268 in_menu_background_ = new InMenuButtonBackground(type); |
269 set_background(in_menu_background_); | 269 set_background(in_menu_background_); |
270 | 270 |
271 OnNativeThemeChanged(NULL); | 271 OnNativeThemeChanged(NULL); |
272 } | 272 } |
273 | 273 |
274 void SetOtherButtons(const InMenuButton* left, const InMenuButton* right) { | 274 void SetOtherButtons(const InMenuButton* left, const InMenuButton* right) { |
275 in_menu_background_->SetOtherButtons(left, right); | 275 in_menu_background_->SetOtherButtons(left, right); |
276 } | 276 } |
277 | 277 |
278 // views::LabelButton | 278 // views::LabelButton |
279 virtual void OnNativeThemeChanged(const ui::NativeTheme* theme) override { | 279 void OnNativeThemeChanged(const ui::NativeTheme* theme) override { |
280 const MenuConfig& menu_config = MenuConfig::instance(theme); | 280 const MenuConfig& menu_config = MenuConfig::instance(theme); |
281 SetBorder(views::Border::CreateEmptyBorder( | 281 SetBorder(views::Border::CreateEmptyBorder( |
282 0, kHorizontalPadding, 0, kHorizontalPadding)); | 282 0, kHorizontalPadding, 0, kHorizontalPadding)); |
283 SetFontList(menu_config.font_list); | 283 SetFontList(menu_config.font_list); |
284 | 284 |
285 if (theme) { | 285 if (theme) { |
286 SetTextColor( | 286 SetTextColor( |
287 views::Button::STATE_DISABLED, | 287 views::Button::STATE_DISABLED, |
288 theme->GetSystemColor( | 288 theme->GetSystemColor( |
289 ui::NativeTheme::kColorId_DisabledMenuItemForegroundColor)); | 289 ui::NativeTheme::kColorId_DisabledMenuItemForegroundColor)); |
(...skipping 22 matching lines...) Expand all Loading... |
312 class WrenchMenuView : public views::View, | 312 class WrenchMenuView : public views::View, |
313 public views::ButtonListener, | 313 public views::ButtonListener, |
314 public WrenchMenuObserver { | 314 public WrenchMenuObserver { |
315 public: | 315 public: |
316 WrenchMenuView(WrenchMenu* menu, MenuModel* menu_model) | 316 WrenchMenuView(WrenchMenu* menu, MenuModel* menu_model) |
317 : menu_(menu), | 317 : menu_(menu), |
318 menu_model_(menu_model) { | 318 menu_model_(menu_model) { |
319 menu_->AddObserver(this); | 319 menu_->AddObserver(this); |
320 } | 320 } |
321 | 321 |
322 virtual ~WrenchMenuView() { | 322 ~WrenchMenuView() override { |
323 if (menu_) | 323 if (menu_) |
324 menu_->RemoveObserver(this); | 324 menu_->RemoveObserver(this); |
325 } | 325 } |
326 | 326 |
327 // Overridden from views::View. | 327 // Overridden from views::View. |
328 virtual void SchedulePaintInRect(const gfx::Rect& r) override { | 328 void SchedulePaintInRect(const gfx::Rect& r) override { |
329 // Normally when the mouse enters/exits a button the buttons invokes | 329 // Normally when the mouse enters/exits a button the buttons invokes |
330 // SchedulePaint. As part of the button border (InMenuButtonBackground) is | 330 // SchedulePaint. As part of the button border (InMenuButtonBackground) is |
331 // rendered by the button to the left/right of it SchedulePaint on the the | 331 // rendered by the button to the left/right of it SchedulePaint on the the |
332 // button may not be enough, so this forces a paint all. | 332 // button may not be enough, so this forces a paint all. |
333 View::SchedulePaintInRect(gfx::Rect(size())); | 333 View::SchedulePaintInRect(gfx::Rect(size())); |
334 } | 334 } |
335 | 335 |
336 InMenuButton* CreateAndConfigureButton( | 336 InMenuButton* CreateAndConfigureButton( |
337 int string_id, | 337 int string_id, |
338 InMenuButtonBackground::ButtonType type, | 338 InMenuButtonBackground::ButtonType type, |
(...skipping 18 matching lines...) Expand all Loading... |
357 button->SetEnabled(menu_model_->IsEnabledAt(index)); | 357 button->SetEnabled(menu_model_->IsEnabledAt(index)); |
358 | 358 |
359 AddChildView(button); | 359 AddChildView(button); |
360 // all buttons on menu should must be a custom button in order for | 360 // all buttons on menu should must be a custom button in order for |
361 // the keyboard nativigation work. | 361 // the keyboard nativigation work. |
362 DCHECK(CustomButton::AsCustomButton(button)); | 362 DCHECK(CustomButton::AsCustomButton(button)); |
363 return button; | 363 return button; |
364 } | 364 } |
365 | 365 |
366 // Overridden from WrenchMenuObserver: | 366 // Overridden from WrenchMenuObserver: |
367 virtual void WrenchMenuDestroyed() override { | 367 void WrenchMenuDestroyed() override { |
368 menu_->RemoveObserver(this); | 368 menu_->RemoveObserver(this); |
369 menu_ = NULL; | 369 menu_ = NULL; |
370 menu_model_ = NULL; | 370 menu_model_ = NULL; |
371 } | 371 } |
372 | 372 |
373 protected: | 373 protected: |
374 WrenchMenu* menu() { return menu_; } | 374 WrenchMenu* menu() { return menu_; } |
375 MenuModel* menu_model() { return menu_model_; } | 375 MenuModel* menu_model() { return menu_model_; } |
376 | 376 |
377 private: | 377 private: |
378 // Hosting WrenchMenu. | 378 // Hosting WrenchMenu. |
379 // WARNING: this may be NULL during shutdown. | 379 // WARNING: this may be NULL during shutdown. |
380 WrenchMenu* menu_; | 380 WrenchMenu* menu_; |
381 | 381 |
382 // The menu model containing the increment/decrement/reset items. | 382 // The menu model containing the increment/decrement/reset items. |
383 // WARNING: this may be NULL during shutdown. | 383 // WARNING: this may be NULL during shutdown. |
384 MenuModel* menu_model_; | 384 MenuModel* menu_model_; |
385 | 385 |
386 DISALLOW_COPY_AND_ASSIGN(WrenchMenuView); | 386 DISALLOW_COPY_AND_ASSIGN(WrenchMenuView); |
387 }; | 387 }; |
388 | 388 |
389 // Generate the button image for hover state. | 389 // Generate the button image for hover state. |
390 class HoveredImageSource : public gfx::ImageSkiaSource { | 390 class HoveredImageSource : public gfx::ImageSkiaSource { |
391 public: | 391 public: |
392 HoveredImageSource(const gfx::ImageSkia& image, SkColor color) | 392 HoveredImageSource(const gfx::ImageSkia& image, SkColor color) |
393 : image_(image), | 393 : image_(image), |
394 color_(color) { | 394 color_(color) { |
395 } | 395 } |
396 virtual ~HoveredImageSource() {} | 396 ~HoveredImageSource() override {} |
397 | 397 |
398 virtual gfx::ImageSkiaRep GetImageForScale(float scale) override { | 398 gfx::ImageSkiaRep GetImageForScale(float scale) override { |
399 const gfx::ImageSkiaRep& rep = image_.GetRepresentation(scale); | 399 const gfx::ImageSkiaRep& rep = image_.GetRepresentation(scale); |
400 SkBitmap bitmap = rep.sk_bitmap(); | 400 SkBitmap bitmap = rep.sk_bitmap(); |
401 SkBitmap white; | 401 SkBitmap white; |
402 white.allocN32Pixels(bitmap.width(), bitmap.height()); | 402 white.allocN32Pixels(bitmap.width(), bitmap.height()); |
403 white.eraseARGB(0, 0, 0, 0); | 403 white.eraseARGB(0, 0, 0, 0); |
404 bitmap.lockPixels(); | 404 bitmap.lockPixels(); |
405 for (int y = 0; y < bitmap.height(); ++y) { | 405 for (int y = 0; y < bitmap.height(); ++y) { |
406 uint32* image_row = bitmap.getAddr32(0, y); | 406 uint32* image_row = bitmap.getAddr32(0, y); |
407 uint32* dst_row = white.getAddr32(0, y); | 407 uint32* dst_row = white.getAddr32(0, y); |
408 for (int x = 0; x < bitmap.width(); ++x) { | 408 for (int x = 0; x < bitmap.width(); ++x) { |
(...skipping 28 matching lines...) Expand all Loading... |
437 InMenuButton* cut = CreateAndConfigureButton( | 437 InMenuButton* cut = CreateAndConfigureButton( |
438 IDS_CUT, InMenuButtonBackground::LEFT_BUTTON, cut_index); | 438 IDS_CUT, InMenuButtonBackground::LEFT_BUTTON, cut_index); |
439 InMenuButton* copy = CreateAndConfigureButton( | 439 InMenuButton* copy = CreateAndConfigureButton( |
440 IDS_COPY, InMenuButtonBackground::CENTER_BUTTON, copy_index); | 440 IDS_COPY, InMenuButtonBackground::CENTER_BUTTON, copy_index); |
441 InMenuButton* paste = CreateAndConfigureButton( | 441 InMenuButton* paste = CreateAndConfigureButton( |
442 IDS_PASTE, InMenuButtonBackground::CENTER_BUTTON, paste_index); | 442 IDS_PASTE, InMenuButtonBackground::CENTER_BUTTON, paste_index); |
443 copy->SetOtherButtons(cut, paste); | 443 copy->SetOtherButtons(cut, paste); |
444 } | 444 } |
445 | 445 |
446 // Overridden from View. | 446 // Overridden from View. |
447 virtual gfx::Size GetPreferredSize() const override { | 447 gfx::Size GetPreferredSize() const override { |
448 // Returned height doesn't matter as MenuItemView forces everything to the | 448 // Returned height doesn't matter as MenuItemView forces everything to the |
449 // height of the menuitemview. | 449 // height of the menuitemview. |
450 return gfx::Size(GetMaxChildViewPreferredWidth() * child_count(), 0); | 450 return gfx::Size(GetMaxChildViewPreferredWidth() * child_count(), 0); |
451 } | 451 } |
452 | 452 |
453 virtual void Layout() override { | 453 void Layout() override { |
454 // All buttons are given the same width. | 454 // All buttons are given the same width. |
455 int width = GetMaxChildViewPreferredWidth(); | 455 int width = GetMaxChildViewPreferredWidth(); |
456 for (int i = 0; i < child_count(); ++i) | 456 for (int i = 0; i < child_count(); ++i) |
457 child_at(i)->SetBounds(i * width, 0, width, height()); | 457 child_at(i)->SetBounds(i * width, 0, width, height()); |
458 } | 458 } |
459 | 459 |
460 // Overridden from ButtonListener. | 460 // Overridden from ButtonListener. |
461 virtual void ButtonPressed(views::Button* sender, | 461 void ButtonPressed(views::Button* sender, const ui::Event& event) override { |
462 const ui::Event& event) override { | |
463 menu()->CancelAndEvaluate(menu_model(), sender->tag()); | 462 menu()->CancelAndEvaluate(menu_model(), sender->tag()); |
464 } | 463 } |
465 | 464 |
466 private: | 465 private: |
467 // Returns the max preferred width of all the children. | 466 // Returns the max preferred width of all the children. |
468 int GetMaxChildViewPreferredWidth() const { | 467 int GetMaxChildViewPreferredWidth() const { |
469 int width = 0; | 468 int width = 0; |
470 for (int i = 0; i < child_count(); ++i) | 469 for (int i = 0; i < child_count(); ++i) |
471 width = std::max(width, child_at(i)->GetPreferredSize().width()); | 470 width = std::max(width, child_at(i)->GetPreferredSize().width()); |
472 return width; | 471 return width; |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
546 fullscreen_button_->SetAccessibleName( | 545 fullscreen_button_->SetAccessibleName( |
547 GetAccessibleNameForWrenchMenuItem( | 546 GetAccessibleNameForWrenchMenuItem( |
548 menu_model, fullscreen_index, IDS_ACCNAME_FULLSCREEN)); | 547 menu_model, fullscreen_index, IDS_ACCNAME_FULLSCREEN)); |
549 AddChildView(fullscreen_button_); | 548 AddChildView(fullscreen_button_); |
550 | 549 |
551 // Need to set a font list for the zoom label width calculations. | 550 // Need to set a font list for the zoom label width calculations. |
552 OnNativeThemeChanged(NULL); | 551 OnNativeThemeChanged(NULL); |
553 UpdateZoomControls(); | 552 UpdateZoomControls(); |
554 } | 553 } |
555 | 554 |
556 virtual ~ZoomView() {} | 555 ~ZoomView() override {} |
557 | 556 |
558 // Overridden from View. | 557 // Overridden from View. |
559 virtual gfx::Size GetPreferredSize() const override { | 558 gfx::Size GetPreferredSize() const override { |
560 // The increment/decrement button are forced to the same width. | 559 // The increment/decrement button are forced to the same width. |
561 int button_width = std::max(increment_button_->GetPreferredSize().width(), | 560 int button_width = std::max(increment_button_->GetPreferredSize().width(), |
562 decrement_button_->GetPreferredSize().width()); | 561 decrement_button_->GetPreferredSize().width()); |
563 int fullscreen_width = | 562 int fullscreen_width = |
564 fullscreen_button_->GetPreferredSize().width() + kFullscreenPadding; | 563 fullscreen_button_->GetPreferredSize().width() + kFullscreenPadding; |
565 // Returned height doesn't matter as MenuItemView forces everything to the | 564 // Returned height doesn't matter as MenuItemView forces everything to the |
566 // height of the menuitemview. Note that we have overridden the height when | 565 // height of the menuitemview. Note that we have overridden the height when |
567 // constructing the menu. | 566 // constructing the menu. |
568 return gfx::Size(button_width + zoom_label_width_ + button_width + | 567 return gfx::Size(button_width + zoom_label_width_ + button_width + |
569 fullscreen_width, 0); | 568 fullscreen_width, 0); |
570 } | 569 } |
571 | 570 |
572 virtual void Layout() override { | 571 void Layout() override { |
573 int x = 0; | 572 int x = 0; |
574 int button_width = std::max(increment_button_->GetPreferredSize().width(), | 573 int button_width = std::max(increment_button_->GetPreferredSize().width(), |
575 decrement_button_->GetPreferredSize().width()); | 574 decrement_button_->GetPreferredSize().width()); |
576 gfx::Rect bounds(0, 0, button_width, height()); | 575 gfx::Rect bounds(0, 0, button_width, height()); |
577 | 576 |
578 decrement_button_->SetBoundsRect(bounds); | 577 decrement_button_->SetBoundsRect(bounds); |
579 | 578 |
580 x += bounds.width(); | 579 x += bounds.width(); |
581 bounds.set_x(x); | 580 bounds.set_x(x); |
582 bounds.set_width(zoom_label_width_); | 581 bounds.set_width(zoom_label_width_); |
583 zoom_label_->SetBoundsRect(bounds); | 582 zoom_label_->SetBoundsRect(bounds); |
584 | 583 |
585 x += bounds.width(); | 584 x += bounds.width(); |
586 bounds.set_x(x); | 585 bounds.set_x(x); |
587 bounds.set_width(button_width); | 586 bounds.set_width(button_width); |
588 increment_button_->SetBoundsRect(bounds); | 587 increment_button_->SetBoundsRect(bounds); |
589 | 588 |
590 x += bounds.width(); | 589 x += bounds.width(); |
591 bounds.set_x(x); | 590 bounds.set_x(x); |
592 bounds.set_width(fullscreen_button_->GetPreferredSize().width() + | 591 bounds.set_width(fullscreen_button_->GetPreferredSize().width() + |
593 kFullscreenPadding); | 592 kFullscreenPadding); |
594 fullscreen_button_->SetBoundsRect(bounds); | 593 fullscreen_button_->SetBoundsRect(bounds); |
595 } | 594 } |
596 | 595 |
597 virtual void OnNativeThemeChanged(const ui::NativeTheme* theme) override { | 596 void OnNativeThemeChanged(const ui::NativeTheme* theme) override { |
598 WrenchMenuView::OnNativeThemeChanged(theme); | 597 WrenchMenuView::OnNativeThemeChanged(theme); |
599 | 598 |
600 const MenuConfig& menu_config = MenuConfig::instance(theme); | 599 const MenuConfig& menu_config = MenuConfig::instance(theme); |
601 zoom_label_->SetBorder(views::Border::CreateEmptyBorder( | 600 zoom_label_->SetBorder(views::Border::CreateEmptyBorder( |
602 0, kZoomLabelHorizontalPadding, 0, kZoomLabelHorizontalPadding)); | 601 0, kZoomLabelHorizontalPadding, 0, kZoomLabelHorizontalPadding)); |
603 zoom_label_->SetFontList(menu_config.font_list); | 602 zoom_label_->SetFontList(menu_config.font_list); |
604 zoom_label_width_ = MaxWidthForZoomLabel(); | 603 zoom_label_width_ = MaxWidthForZoomLabel(); |
605 | 604 |
606 if (theme) { | 605 if (theme) { |
607 zoom_label_->SetEnabledColor(theme->GetSystemColor( | 606 zoom_label_->SetEnabledColor(theme->GetSystemColor( |
608 ui::NativeTheme::kColorId_EnabledMenuItemForegroundColor)); | 607 ui::NativeTheme::kColorId_EnabledMenuItemForegroundColor)); |
609 gfx::ImageSkia* full_screen_image = | 608 gfx::ImageSkia* full_screen_image = |
610 ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( | 609 ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
611 IDR_FULLSCREEN_MENU_BUTTON); | 610 IDR_FULLSCREEN_MENU_BUTTON); |
612 SkColor fg_color = theme->GetSystemColor( | 611 SkColor fg_color = theme->GetSystemColor( |
613 ui::NativeTheme::kColorId_SelectedMenuItemForegroundColor); | 612 ui::NativeTheme::kColorId_SelectedMenuItemForegroundColor); |
614 gfx::ImageSkia hovered_fullscreen_image( | 613 gfx::ImageSkia hovered_fullscreen_image( |
615 new HoveredImageSource(*full_screen_image, fg_color), | 614 new HoveredImageSource(*full_screen_image, fg_color), |
616 full_screen_image->size()); | 615 full_screen_image->size()); |
617 fullscreen_button_->SetImage( | 616 fullscreen_button_->SetImage( |
618 ImageButton::STATE_HOVERED, &hovered_fullscreen_image); | 617 ImageButton::STATE_HOVERED, &hovered_fullscreen_image); |
619 fullscreen_button_->SetImage( | 618 fullscreen_button_->SetImage( |
620 ImageButton::STATE_PRESSED, &hovered_fullscreen_image); | 619 ImageButton::STATE_PRESSED, &hovered_fullscreen_image); |
621 } | 620 } |
622 } | 621 } |
623 | 622 |
624 // Overridden from ButtonListener. | 623 // Overridden from ButtonListener. |
625 virtual void ButtonPressed(views::Button* sender, | 624 void ButtonPressed(views::Button* sender, const ui::Event& event) override { |
626 const ui::Event& event) override { | |
627 if (sender->tag() == fullscreen_index_) { | 625 if (sender->tag() == fullscreen_index_) { |
628 menu()->CancelAndEvaluate(menu_model(), sender->tag()); | 626 menu()->CancelAndEvaluate(menu_model(), sender->tag()); |
629 } else { | 627 } else { |
630 // Zoom buttons don't close the menu. | 628 // Zoom buttons don't close the menu. |
631 menu_model()->ActivatedAt(sender->tag()); | 629 menu_model()->ActivatedAt(sender->tag()); |
632 } | 630 } |
633 } | 631 } |
634 | 632 |
635 // Overridden from WrenchMenuObserver. | 633 // Overridden from WrenchMenuObserver. |
636 virtual void WrenchMenuDestroyed() override { | 634 void WrenchMenuDestroyed() override { WrenchMenuView::WrenchMenuDestroyed(); } |
637 WrenchMenuView::WrenchMenuDestroyed(); | |
638 } | |
639 | 635 |
640 private: | 636 private: |
641 void OnZoomLevelChanged(const HostZoomMap::ZoomLevelChange& change) { | 637 void OnZoomLevelChanged(const HostZoomMap::ZoomLevelChange& change) { |
642 UpdateZoomControls(); | 638 UpdateZoomControls(); |
643 } | 639 } |
644 | 640 |
645 void UpdateZoomControls() { | 641 void UpdateZoomControls() { |
646 WebContents* selected_tab = | 642 WebContents* selected_tab = |
647 menu()->browser_->tab_strip_model()->GetActiveWebContents(); | 643 menu()->browser_->tab_strip_model()->GetActiveWebContents(); |
648 int zoom = 100; | 644 int zoom = 100; |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
716 public: | 712 public: |
717 RecentTabsMenuModelDelegate(WrenchMenu* wrench_menu, | 713 RecentTabsMenuModelDelegate(WrenchMenu* wrench_menu, |
718 ui::MenuModel* model, | 714 ui::MenuModel* model, |
719 views::MenuItemView* menu_item) | 715 views::MenuItemView* menu_item) |
720 : wrench_menu_(wrench_menu), | 716 : wrench_menu_(wrench_menu), |
721 model_(model), | 717 model_(model), |
722 menu_item_(menu_item) { | 718 menu_item_(menu_item) { |
723 model_->SetMenuModelDelegate(this); | 719 model_->SetMenuModelDelegate(this); |
724 } | 720 } |
725 | 721 |
726 virtual ~RecentTabsMenuModelDelegate() { | 722 ~RecentTabsMenuModelDelegate() override { |
727 model_->SetMenuModelDelegate(NULL); | 723 model_->SetMenuModelDelegate(NULL); |
728 } | 724 } |
729 | 725 |
730 const gfx::FontList* GetLabelFontListAt(int index) const { | 726 const gfx::FontList* GetLabelFontListAt(int index) const { |
731 return model_->GetLabelFontListAt(index); | 727 return model_->GetLabelFontListAt(index); |
732 } | 728 } |
733 | 729 |
734 bool GetShouldUseDisabledEmphasizedForegroundColor(int index) const { | 730 bool GetShouldUseDisabledEmphasizedForegroundColor(int index) const { |
735 // The items for which we get a font list, should be shown in the bolded | 731 // The items for which we get a font list, should be shown in the bolded |
736 // color. | 732 // color. |
737 return GetLabelFontListAt(index) ? true : false; | 733 return GetLabelFontListAt(index) ? true : false; |
738 } | 734 } |
739 | 735 |
740 // ui::MenuModelDelegate implementation: | 736 // ui::MenuModelDelegate implementation: |
741 | 737 |
742 virtual void OnIconChanged(int index) override { | 738 void OnIconChanged(int index) override { |
743 int command_id = model_->GetCommandIdAt(index); | 739 int command_id = model_->GetCommandIdAt(index); |
744 views::MenuItemView* item = menu_item_->GetMenuItemByID(command_id); | 740 views::MenuItemView* item = menu_item_->GetMenuItemByID(command_id); |
745 DCHECK(item); | 741 DCHECK(item); |
746 gfx::Image icon; | 742 gfx::Image icon; |
747 model_->GetIconAt(index, &icon); | 743 model_->GetIconAt(index, &icon); |
748 item->SetIcon(*icon.ToImageSkia()); | 744 item->SetIcon(*icon.ToImageSkia()); |
749 } | 745 } |
750 | 746 |
751 virtual void OnMenuStructureChanged() override { | 747 void OnMenuStructureChanged() override { |
752 if (menu_item_->HasSubmenu()) { | 748 if (menu_item_->HasSubmenu()) { |
753 // Remove all menu items from submenu. | 749 // Remove all menu items from submenu. |
754 views::SubmenuView* submenu = menu_item_->GetSubmenu(); | 750 views::SubmenuView* submenu = menu_item_->GetSubmenu(); |
755 while (submenu->child_count() > 0) | 751 while (submenu->child_count() > 0) |
756 menu_item_->RemoveMenuItemAt(submenu->child_count() - 1); | 752 menu_item_->RemoveMenuItemAt(submenu->child_count() - 1); |
757 | 753 |
758 // Remove all elements in |WrenchMenu::command_id_to_entry_| that map to | 754 // Remove all elements in |WrenchMenu::command_id_to_entry_| that map to |
759 // |model_|. | 755 // |model_|. |
760 WrenchMenu::CommandIDToEntry::iterator iter = | 756 WrenchMenu::CommandIDToEntry::iterator iter = |
761 wrench_menu_->command_id_to_entry_.begin(); | 757 wrench_menu_->command_id_to_entry_.begin(); |
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1243 0, | 1239 0, |
1244 BookmarkMenuDelegate::SHOW_PERMANENT_FOLDERS, | 1240 BookmarkMenuDelegate::SHOW_PERMANENT_FOLDERS, |
1245 BOOKMARK_LAUNCH_LOCATION_WRENCH_MENU); | 1241 BOOKMARK_LAUNCH_LOCATION_WRENCH_MENU); |
1246 } | 1242 } |
1247 | 1243 |
1248 int WrenchMenu::ModelIndexFromCommandId(int command_id) const { | 1244 int WrenchMenu::ModelIndexFromCommandId(int command_id) const { |
1249 CommandIDToEntry::const_iterator ix = command_id_to_entry_.find(command_id); | 1245 CommandIDToEntry::const_iterator ix = command_id_to_entry_.find(command_id); |
1250 DCHECK(ix != command_id_to_entry_.end()); | 1246 DCHECK(ix != command_id_to_entry_.end()); |
1251 return ix->second.second; | 1247 return ix->second.second; |
1252 } | 1248 } |
OLD | NEW |