| 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/toolbar_button.h" | 5 #include "chrome/browser/ui/views/toolbar/toolbar_button.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/location.h" | 8 #include "base/location.h" |
| 9 #include "base/single_thread_task_runner.h" | 9 #include "base/single_thread_task_runner.h" |
| 10 #include "base/thread_task_runner_handle.h" | 10 #include "base/thread_task_runner_handle.h" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 #include "ui/views/controls/menu/menu_runner.h" | 26 #include "ui/views/controls/menu/menu_runner.h" |
| 27 #include "ui/views/widget/widget.h" | 27 #include "ui/views/widget/widget.h" |
| 28 | 28 |
| 29 ToolbarButton::ToolbarButton(views::ButtonListener* listener, | 29 ToolbarButton::ToolbarButton(views::ButtonListener* listener, |
| 30 ui::MenuModel* model) | 30 ui::MenuModel* model) |
| 31 : views::LabelButton(listener, base::string16()), | 31 : views::LabelButton(listener, base::string16()), |
| 32 model_(model), | 32 model_(model), |
| 33 menu_showing_(false), | 33 menu_showing_(false), |
| 34 y_position_on_lbuttondown_(0), | 34 y_position_on_lbuttondown_(0), |
| 35 show_menu_factory_(this) { | 35 show_menu_factory_(this) { |
| 36 // Sizes for the the ink drop. |
| 37 const int kInkDropLargeSize = 32; |
| 38 const int kInkDropLargeCornerRadius = 5; |
| 39 const int kInkDropSmallSize = 24; |
| 40 const int kInkDropSmallCornerRadius = 2; |
| 41 |
| 36 ink_drop_animation_controller_ = views::InkDropAnimationControllerFactory:: | 42 ink_drop_animation_controller_ = views::InkDropAnimationControllerFactory:: |
| 37 CreateInkDropAnimationController(this); | 43 CreateInkDropAnimationController(this); |
| 44 ink_drop_animation_controller_->SetInkDropSize( |
| 45 gfx::Size(kInkDropLargeSize, kInkDropLargeSize), |
| 46 kInkDropLargeCornerRadius, |
| 47 gfx::Size(kInkDropSmallSize, kInkDropSmallSize), |
| 48 kInkDropSmallCornerRadius); |
| 38 set_context_menu_controller(this); | 49 set_context_menu_controller(this); |
| 39 } | 50 } |
| 40 | 51 |
| 41 ToolbarButton::~ToolbarButton() { | 52 ToolbarButton::~ToolbarButton() { |
| 42 } | 53 } |
| 43 | 54 |
| 44 void ToolbarButton::Init() { | 55 void ToolbarButton::Init() { |
| 45 SetFocusable(false); | 56 SetFocusable(false); |
| 46 SetAccessibilityFocusable(true); | 57 SetAccessibilityFocusable(true); |
| 47 image()->EnableCanvasFlippingForRTLUI(true); | 58 image()->EnableCanvasFlippingForRTLUI(true); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 71 if (provider) { | 82 if (provider) { |
| 72 gfx::Insets insets(GetLayoutInsets(TOOLBAR_BUTTON)); | 83 gfx::Insets insets(GetLayoutInsets(TOOLBAR_BUTTON)); |
| 73 size.Enlarge(insets.width(), insets.height()); | 84 size.Enlarge(insets.width(), insets.height()); |
| 74 } | 85 } |
| 75 } | 86 } |
| 76 return size; | 87 return size; |
| 77 } | 88 } |
| 78 | 89 |
| 79 void ToolbarButton::Layout() { | 90 void ToolbarButton::Layout() { |
| 80 LabelButton::Layout(); | 91 LabelButton::Layout(); |
| 81 | |
| 82 // Sizes for the the ink drop. | |
| 83 const int kInkDropLargeSize = 32; | |
| 84 const int kInkDropLargeCornerRadius = 5; | |
| 85 const int kInkDropSmallSize = 24; | |
| 86 const int kInkDropSmallCornerRadius = 2; | |
| 87 | |
| 88 ink_drop_animation_controller_->SetInkDropSize( | |
| 89 gfx::Size(kInkDropLargeSize, kInkDropLargeSize), | |
| 90 kInkDropLargeCornerRadius, | |
| 91 gfx::Size(kInkDropSmallSize, kInkDropSmallSize), | |
| 92 kInkDropSmallCornerRadius); | |
| 93 ink_drop_animation_controller_->SetInkDropCenter(CalculateInkDropCenter()); | 92 ink_drop_animation_controller_->SetInkDropCenter(CalculateInkDropCenter()); |
| 94 } | 93 } |
| 95 | 94 |
| 96 bool ToolbarButton::OnMousePressed(const ui::MouseEvent& event) { | 95 bool ToolbarButton::OnMousePressed(const ui::MouseEvent& event) { |
| 97 if (enabled() && ShouldShowMenu() && | 96 if (enabled() && ShouldShowMenu() && |
| 98 IsTriggerableEvent(event) && HitTestPoint(event.location())) { | 97 IsTriggerableEvent(event) && HitTestPoint(event.location())) { |
| 99 // Store the y pos of the mouse coordinates so we can use them later to | 98 // Store the y pos of the mouse coordinates so we can use them later to |
| 100 // determine if the user dragged the mouse down (which should pop up the | 99 // determine if the user dragged the mouse down (which should pop up the |
| 101 // drag down menu immediately, instead of waiting for the timer) | 100 // drag down menu immediately, instead of waiting for the timer) |
| 102 y_position_on_lbuttondown_ = event.y(); | 101 y_position_on_lbuttondown_ = event.y(); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 | 136 |
| 138 void ToolbarButton::OnMouseReleased(const ui::MouseEvent& event) { | 137 void ToolbarButton::OnMouseReleased(const ui::MouseEvent& event) { |
| 139 if (IsTriggerableEvent(event) || | 138 if (IsTriggerableEvent(event) || |
| 140 (event.IsRightMouseButton() && !HitTestPoint(event.location()))) { | 139 (event.IsRightMouseButton() && !HitTestPoint(event.location()))) { |
| 141 LabelButton::OnMouseReleased(event); | 140 LabelButton::OnMouseReleased(event); |
| 142 } | 141 } |
| 143 | 142 |
| 144 if (IsTriggerableEvent(event)) | 143 if (IsTriggerableEvent(event)) |
| 145 show_menu_factory_.InvalidateWeakPtrs(); | 144 show_menu_factory_.InvalidateWeakPtrs(); |
| 146 | 145 |
| 147 ink_drop_animation_controller_->AnimateToState(views::InkDropState::HIDDEN); | 146 if (!HitTestPoint(event.location())) |
| 147 ink_drop_animation_controller_->AnimateToState(views::InkDropState::HIDDEN); |
| 148 } | 148 } |
| 149 | 149 |
| 150 void ToolbarButton::OnMouseCaptureLost() { | 150 void ToolbarButton::OnMouseCaptureLost() { |
| 151 } | 151 } |
| 152 | 152 |
| 153 void ToolbarButton::OnMouseExited(const ui::MouseEvent& event) { | 153 void ToolbarButton::OnMouseExited(const ui::MouseEvent& event) { |
| 154 // Starting a drag results in a MouseExited, we need to ignore it. | 154 // Starting a drag results in a MouseExited, we need to ignore it. |
| 155 // A right click release triggers an exit event. We want to | 155 // A right click release triggers an exit event. We want to |
| 156 // remain in a PUSHED state until the drop down menu closes. | 156 // remain in a PUSHED state until the drop down menu closes. |
| 157 if (state_ != STATE_DISABLED && !InDrag() && state_ != STATE_PRESSED) | 157 if (state_ != STATE_DISABLED && !InDrag() && state_ != STATE_PRESSED) |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 341 SetState(STATE_NORMAL); | 341 SetState(STATE_NORMAL); |
| 342 } | 342 } |
| 343 | 343 |
| 344 gfx::Point ToolbarButton::CalculateInkDropCenter() const { | 344 gfx::Point ToolbarButton::CalculateInkDropCenter() const { |
| 345 return GetLocalBounds().CenterPoint(); | 345 return GetLocalBounds().CenterPoint(); |
| 346 } | 346 } |
| 347 | 347 |
| 348 const char* ToolbarButton::GetClassName() const { | 348 const char* ToolbarButton::GetClassName() const { |
| 349 return "ToolbarButton"; | 349 return "ToolbarButton"; |
| 350 } | 350 } |
| OLD | NEW |