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

Side by Side Diff: ui/views/controls/button/custom_button.cc

Issue 1390113006: Added material design mouse hover feedback support. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved MouseEntered/Exit() to hover handling in to the ButtonInkDropDelegate. Created 4 years, 11 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/views/controls/button/custom_button.h" 5 #include "ui/views/controls/button/custom_button.h"
6 6
7 #include "ui/accessibility/ax_view_state.h" 7 #include "ui/accessibility/ax_view_state.h"
8 #include "ui/events/event.h" 8 #include "ui/events/event.h"
9 #include "ui/events/event_utils.h" 9 #include "ui/events/event_utils.h"
10 #include "ui/events/keycodes/keyboard_codes.h" 10 #include "ui/events/keycodes/keyboard_codes.h"
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 //////////////////////////////////////////////////////////////////////////////// 116 ////////////////////////////////////////////////////////////////////////////////
117 // CustomButton, View overrides: 117 // CustomButton, View overrides:
118 118
119 void CustomButton::Layout() { 119 void CustomButton::Layout() {
120 Button::Layout(); 120 Button::Layout();
121 if (ink_drop_delegate_) 121 if (ink_drop_delegate_)
122 ink_drop_delegate_->OnLayout(); 122 ink_drop_delegate_->OnLayout();
123 } 123 }
124 124
125 void CustomButton::OnEnabledChanged() { 125 void CustomButton::OnEnabledChanged() {
126 // TODO(bruthig): Is there any reason we are not calling
127 // Button::OnEnabledChanged() here?
126 if (enabled() ? (state_ != STATE_DISABLED) : (state_ == STATE_DISABLED)) 128 if (enabled() ? (state_ != STATE_DISABLED) : (state_ == STATE_DISABLED))
127 return; 129 return;
128 130
129 if (enabled()) 131 if (enabled())
130 SetState(ShouldEnterHoveredState() ? STATE_HOVERED : STATE_NORMAL); 132 SetState(ShouldEnterHoveredState() ? STATE_HOVERED : STATE_NORMAL);
131 else 133 else
132 SetState(STATE_DISABLED); 134 SetState(STATE_DISABLED);
135 UpdateInkDropHoverState();
133 } 136 }
134 137
135 const char* CustomButton::GetClassName() const { 138 const char* CustomButton::GetClassName() const {
136 return kViewClassName; 139 return kViewClassName;
137 } 140 }
138 141
139 bool CustomButton::OnMousePressed(const ui::MouseEvent& event) { 142 bool CustomButton::OnMousePressed(const ui::MouseEvent& event) {
140 if (state_ == STATE_DISABLED) 143 if (state_ == STATE_DISABLED)
141 return true; 144 return true;
142 if (ShouldEnterPushedState(event) && HitTestPoint(event.location())) { 145 if (ShouldEnterPushedState(event) && HitTestPoint(event.location())) {
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 void CustomButton::RemoveInkDropLayer(ui::Layer* ink_drop_layer) { 348 void CustomButton::RemoveInkDropLayer(ui::Layer* ink_drop_layer) {
346 layer()->Remove(ink_drop_layer); 349 layer()->Remove(ink_drop_layer);
347 SetFillsBoundsOpaquely(true); 350 SetFillsBoundsOpaquely(true);
348 SetPaintToLayer(false); 351 SetPaintToLayer(false);
349 } 352 }
350 353
351 gfx::Point CustomButton::CalculateInkDropCenter() const { 354 gfx::Point CustomButton::CalculateInkDropCenter() const {
352 return GetLocalBounds().CenterPoint(); 355 return GetLocalBounds().CenterPoint();
353 } 356 }
354 357
358 bool CustomButton::ShouldShowInkDropHover() const {
359 return enabled() && IsMouseHovered() && !InDrag();
360 }
361
355 //////////////////////////////////////////////////////////////////////////////// 362 ////////////////////////////////////////////////////////////////////////////////
356 // CustomButton, protected: 363 // CustomButton, protected:
357 364
358 CustomButton::CustomButton(ButtonListener* listener) 365 CustomButton::CustomButton(ButtonListener* listener)
359 : Button(listener), 366 : Button(listener),
360 state_(STATE_NORMAL), 367 state_(STATE_NORMAL),
361 hover_animation_(this), 368 hover_animation_(this),
362 animate_on_state_change_(true), 369 animate_on_state_change_(true),
363 is_throbbing_(false), 370 is_throbbing_(false),
364 triggerable_event_flags_(ui::EF_LEFT_MOUSE_BUTTON), 371 triggerable_event_flags_(ui::EF_LEFT_MOUSE_BUTTON),
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 aura::client::GetCaptureClient(root_window); 408 aura::client::GetCaptureClient(root_window);
402 aura::Window* capture_window = 409 aura::Window* capture_window =
403 capture_client ? capture_client->GetGlobalCaptureWindow() : nullptr; 410 capture_client ? capture_client->GetGlobalCaptureWindow() : nullptr;
404 check_mouse_position = !capture_window || capture_window == root_window; 411 check_mouse_position = !capture_window || capture_window == root_window;
405 } 412 }
406 #endif 413 #endif
407 414
408 return check_mouse_position && IsMouseHovered(); 415 return check_mouse_position && IsMouseHovered();
409 } 416 }
410 417
418 void CustomButton::UpdateInkDropHoverState() {
419 if (ink_drop_delegate_)
420 ink_drop_delegate_->SetHovered(ShouldShowInkDropHover());
421 }
422
411 //////////////////////////////////////////////////////////////////////////////// 423 ////////////////////////////////////////////////////////////////////////////////
412 // CustomButton, View overrides (protected): 424 // CustomButton, View overrides (protected):
413 425
414 void CustomButton::OnBoundsChanged(const gfx::Rect& previous_bounds) { 426 void CustomButton::OnBoundsChanged(const gfx::Rect& previous_bounds) {
415 Button::OnBoundsChanged(previous_bounds); 427 Button::OnBoundsChanged(previous_bounds);
416 if (ink_drop_delegate_) 428 if (ink_drop_delegate_)
417 ink_drop_delegate_->OnLayout(); 429 ink_drop_delegate_->OnLayout();
418 } 430 }
419 431
420 void CustomButton::ViewHierarchyChanged( 432 void CustomButton::ViewHierarchyChanged(
(...skipping 23 matching lines...) Expand all
444 return GetWidget() && GetWidget()->GetTopLevelWidget() != GetWidget(); 456 return GetWidget() && GetWidget()->GetTopLevelWidget() != GetWidget();
445 } 457 }
446 458
447 bool CustomButton::FocusInChildWidget() const { 459 bool CustomButton::FocusInChildWidget() const {
448 return GetWidget() && 460 return GetWidget() &&
449 GetWidget()->GetRootView()->Contains( 461 GetWidget()->GetRootView()->Contains(
450 GetFocusManager()->GetFocusedView()); 462 GetFocusManager()->GetFocusedView());
451 } 463 }
452 464
453 } // namespace views 465 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698