OLD | NEW |
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/keycodes/keyboard_codes.h" | 9 #include "ui/events/keycodes/keyboard_codes.h" |
10 #include "ui/gfx/animation/throb_animation.h" | 10 #include "ui/gfx/animation/throb_animation.h" |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 } | 160 } |
161 } | 161 } |
162 | 162 |
163 void CustomButton::OnMouseCaptureLost() { | 163 void CustomButton::OnMouseCaptureLost() { |
164 // Starting a drag results in a MouseCaptureLost, we need to ignore it. | 164 // Starting a drag results in a MouseCaptureLost, we need to ignore it. |
165 if (state_ != STATE_DISABLED && !InDrag()) | 165 if (state_ != STATE_DISABLED && !InDrag()) |
166 SetState(STATE_NORMAL); | 166 SetState(STATE_NORMAL); |
167 } | 167 } |
168 | 168 |
169 void CustomButton::OnMouseEntered(const ui::MouseEvent& event) { | 169 void CustomButton::OnMouseEntered(const ui::MouseEvent& event) { |
170 if (state_ != STATE_DISABLED) | 170 if (state_ != STATE_DISABLED && ShouldRespondToMouseMovement()) |
171 SetState(STATE_HOVERED); | 171 SetState(STATE_HOVERED); |
172 } | 172 } |
173 | 173 |
174 void CustomButton::OnMouseExited(const ui::MouseEvent& event) { | 174 void CustomButton::OnMouseExited(const ui::MouseEvent& event) { |
175 // Starting a drag results in a MouseExited, we need to ignore it. | 175 // Starting a drag results in a MouseExited, we need to ignore it. |
176 if (state_ != STATE_DISABLED && !InDrag()) | 176 if (state_ != STATE_DISABLED && !InDrag() && ShouldRespondToMouseMovement()) |
177 SetState(STATE_NORMAL); | 177 SetState(STATE_NORMAL); |
178 } | 178 } |
179 | 179 |
180 void CustomButton::OnMouseMoved(const ui::MouseEvent& event) { | 180 void CustomButton::OnMouseMoved(const ui::MouseEvent& event) { |
181 if (state_ != STATE_DISABLED) | 181 if (state_ != STATE_DISABLED && ShouldRespondToMouseMovement()) |
182 SetState(HitTestPoint(event.location()) ? STATE_HOVERED : STATE_NORMAL); | 182 SetState(HitTestPoint(event.location()) ? STATE_HOVERED : STATE_NORMAL); |
183 } | 183 } |
184 | 184 |
185 bool CustomButton::OnKeyPressed(const ui::KeyEvent& event) { | 185 bool CustomButton::OnKeyPressed(const ui::KeyEvent& event) { |
186 if (state_ == STATE_DISABLED) | 186 if (state_ == STATE_DISABLED) |
187 return false; | 187 return false; |
188 | 188 |
189 // Space sets button state to pushed. Enter clicks the button. This matches | 189 // Space sets button state to pushed. Enter clicks the button. This matches |
190 // the Windows native behavior of buttons, where Space clicks the button on | 190 // the Windows native behavior of buttons, where Space clicks the button on |
191 // KeyRelease and Enter clicks the button on KeyPressed. | 191 // KeyRelease and Enter clicks the button on KeyPressed. |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
321 : Button(listener), | 321 : Button(listener), |
322 state_(STATE_NORMAL), | 322 state_(STATE_NORMAL), |
323 animate_on_state_change_(true), | 323 animate_on_state_change_(true), |
324 is_throbbing_(false), | 324 is_throbbing_(false), |
325 triggerable_event_flags_(ui::EF_LEFT_MOUSE_BUTTON), | 325 triggerable_event_flags_(ui::EF_LEFT_MOUSE_BUTTON), |
326 request_focus_on_press_(true) { | 326 request_focus_on_press_(true) { |
327 hover_animation_.reset(new gfx::ThrobAnimation(this)); | 327 hover_animation_.reset(new gfx::ThrobAnimation(this)); |
328 hover_animation_->SetSlideDuration(kHoverFadeDurationMs); | 328 hover_animation_->SetSlideDuration(kHoverFadeDurationMs); |
329 } | 329 } |
330 | 330 |
| 331 bool CustomButton::ShouldRespondToMouseMovement() { |
| 332 return true; |
| 333 } |
| 334 |
331 void CustomButton::StateChanged() { | 335 void CustomButton::StateChanged() { |
332 } | 336 } |
333 | 337 |
334 bool CustomButton::IsTriggerableEvent(const ui::Event& event) { | 338 bool CustomButton::IsTriggerableEvent(const ui::Event& event) { |
335 return event.type() == ui::ET_GESTURE_TAP_DOWN || | 339 return event.type() == ui::ET_GESTURE_TAP_DOWN || |
336 event.type() == ui::ET_GESTURE_TAP || | 340 event.type() == ui::ET_GESTURE_TAP || |
337 (event.IsMouseEvent() && | 341 (event.IsMouseEvent() && |
338 (triggerable_event_flags_ & event.flags()) != 0); | 342 (triggerable_event_flags_ & event.flags()) != 0); |
339 } | 343 } |
340 | 344 |
341 bool CustomButton::ShouldEnterPushedState(const ui::Event& event) { | 345 bool CustomButton::ShouldEnterPushedState(const ui::Event& event) { |
342 return IsTriggerableEvent(event); | 346 return IsTriggerableEvent(event); |
343 } | 347 } |
344 | 348 |
345 //////////////////////////////////////////////////////////////////////////////// | 349 //////////////////////////////////////////////////////////////////////////////// |
346 // CustomButton, View overrides (protected): | 350 // CustomButton, View overrides (protected): |
347 | 351 |
348 void CustomButton::ViewHierarchyChanged( | 352 void CustomButton::ViewHierarchyChanged( |
349 const ViewHierarchyChangedDetails& details) { | 353 const ViewHierarchyChangedDetails& details) { |
350 if (!details.is_add && state_ != STATE_DISABLED) | 354 if (!details.is_add && state_ != STATE_DISABLED) |
351 SetState(STATE_NORMAL); | 355 SetState(STATE_NORMAL); |
352 } | 356 } |
353 | 357 |
354 void CustomButton::OnBlur() { | 358 void CustomButton::OnBlur() { |
355 if (IsHotTracked()) | 359 if (IsHotTracked()) |
356 SetState(STATE_NORMAL); | 360 SetState(STATE_NORMAL); |
357 } | 361 } |
358 | 362 |
359 } // namespace views | 363 } // namespace views |
OLD | NEW |