Chromium Code Reviews| 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/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" |
| 11 #include "ui/gfx/animation/throb_animation.h" | 11 #include "ui/gfx/animation/throb_animation.h" |
| 12 #include "ui/gfx/screen.h" | 12 #include "ui/gfx/screen.h" |
| 13 #include "ui/views/animation/ink_drop_delegate.h" | |
| 13 #include "ui/views/controls/button/blue_button.h" | 14 #include "ui/views/controls/button/blue_button.h" |
| 14 #include "ui/views/controls/button/checkbox.h" | 15 #include "ui/views/controls/button/checkbox.h" |
| 15 #include "ui/views/controls/button/image_button.h" | 16 #include "ui/views/controls/button/image_button.h" |
| 16 #include "ui/views/controls/button/label_button.h" | 17 #include "ui/views/controls/button/label_button.h" |
| 17 #include "ui/views/controls/button/menu_button.h" | 18 #include "ui/views/controls/button/menu_button.h" |
| 18 #include "ui/views/controls/button/radio_button.h" | 19 #include "ui/views/controls/button/radio_button.h" |
| 19 #include "ui/views/widget/widget.h" | 20 #include "ui/views/widget/widget.h" |
| 20 | 21 |
| 21 #if defined(USE_AURA) | 22 #if defined(USE_AURA) |
| 22 #include "ui/aura/client/capture_client.h" | 23 #include "ui/aura/client/capture_client.h" |
| 23 #include "ui/aura/window.h" | 24 #include "ui/aura/window.h" |
| 24 #endif | 25 #endif |
| 25 | 26 |
| 26 namespace views { | 27 namespace views { |
| 27 | 28 |
| 29 namespace { | |
| 30 | |
| 31 // A stub InkDropDelegate implementation that always exists and does nothing. | |
| 32 // A real InkDropDelegate descendant can be returned by a View's descendant via | |
| 33 // GetInkDropDelegate(). | |
| 34 class InkDropDelegateStub : public InkDropDelegate { | |
| 35 public: | |
| 36 InkDropDelegateStub() {} | |
| 37 ~InkDropDelegateStub() override {} | |
| 38 | |
| 39 // InkDropDelegate: | |
| 40 void SetInkDropSize(int large_size, | |
| 41 int large_corner_radius, | |
| 42 int small_size, | |
| 43 int small_corner_radius) override {} | |
| 44 void OnBoundsChanged() override {} | |
| 45 void OnAction(InkDropState state) override {} | |
| 46 | |
| 47 private: | |
| 48 DISALLOW_COPY_AND_ASSIGN(InkDropDelegateStub); | |
| 49 }; | |
|
sadrul
2015/11/25 22:38:58
Still not a fan of this stub. I think we should st
varkha
2015/11/26 00:05:46
Done.
| |
| 50 | |
| 28 // How long the hover animation takes if uninterrupted. | 51 // How long the hover animation takes if uninterrupted. |
| 29 static const int kHoverFadeDurationMs = 150; | 52 static const int kHoverFadeDurationMs = 150; |
| 30 | 53 |
| 54 } // namespace | |
| 55 | |
| 31 // static | 56 // static |
| 32 const char CustomButton::kViewClassName[] = "CustomButton"; | 57 const char CustomButton::kViewClassName[] = "CustomButton"; |
| 33 | 58 |
| 34 //////////////////////////////////////////////////////////////////////////////// | 59 //////////////////////////////////////////////////////////////////////////////// |
| 35 // CustomButton, public: | 60 // CustomButton, public: |
| 36 | 61 |
| 37 // static | 62 // static |
| 38 const CustomButton* CustomButton::AsCustomButton(const views::View* view) { | 63 const CustomButton* CustomButton::AsCustomButton(const views::View* view) { |
| 39 return AsCustomButton(const_cast<views::View*>(view)); | 64 return AsCustomButton(const_cast<views::View*>(view)); |
| 40 } | 65 } |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 277 if (state_ != STATE_DISABLED) | 302 if (state_ != STATE_DISABLED) |
| 278 SetState(STATE_NORMAL); | 303 SetState(STATE_NORMAL); |
| 279 View::ShowContextMenu(p, source_type); | 304 View::ShowContextMenu(p, source_type); |
| 280 } | 305 } |
| 281 | 306 |
| 282 void CustomButton::OnDragDone() { | 307 void CustomButton::OnDragDone() { |
| 283 // Only reset the state to normal if the button isn't currently disabled | 308 // Only reset the state to normal if the button isn't currently disabled |
| 284 // (since disabled buttons may still be able to be dragged). | 309 // (since disabled buttons may still be able to be dragged). |
| 285 if (state_ != STATE_DISABLED) | 310 if (state_ != STATE_DISABLED) |
| 286 SetState(STATE_NORMAL); | 311 SetState(STATE_NORMAL); |
| 312 Button::OnDragDone(); | |
|
sadrul
2015/11/25 22:38:58
Is this still needed?
varkha
2015/11/26 00:05:47
Done.
| |
| 313 ink_drop_delegate_->OnAction(InkDropState::HIDDEN); | |
| 287 } | 314 } |
| 288 | 315 |
| 289 void CustomButton::GetAccessibleState(ui::AXViewState* state) { | 316 void CustomButton::GetAccessibleState(ui::AXViewState* state) { |
| 290 Button::GetAccessibleState(state); | 317 Button::GetAccessibleState(state); |
| 291 switch (state_) { | 318 switch (state_) { |
| 292 case STATE_HOVERED: | 319 case STATE_HOVERED: |
| 293 state->AddStateFlag(ui::AX_STATE_HOVERED); | 320 state->AddStateFlag(ui::AX_STATE_HOVERED); |
| 294 break; | 321 break; |
| 295 case STATE_PRESSED: | 322 case STATE_PRESSED: |
| 296 state->AddStateFlag(ui::AX_STATE_PRESSED); | 323 state->AddStateFlag(ui::AX_STATE_PRESSED); |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 317 void CustomButton::AnimationProgressed(const gfx::Animation* animation) { | 344 void CustomButton::AnimationProgressed(const gfx::Animation* animation) { |
| 318 SchedulePaint(); | 345 SchedulePaint(); |
| 319 } | 346 } |
| 320 | 347 |
| 321 //////////////////////////////////////////////////////////////////////////////// | 348 //////////////////////////////////////////////////////////////////////////////// |
| 322 // CustomButton, protected: | 349 // CustomButton, protected: |
| 323 | 350 |
| 324 CustomButton::CustomButton(ButtonListener* listener) | 351 CustomButton::CustomButton(ButtonListener* listener) |
| 325 : Button(listener), | 352 : Button(listener), |
| 326 state_(STATE_NORMAL), | 353 state_(STATE_NORMAL), |
| 354 ink_drop_delegate_(new InkDropDelegateStub), | |
| 327 animate_on_state_change_(true), | 355 animate_on_state_change_(true), |
| 328 is_throbbing_(false), | 356 is_throbbing_(false), |
| 329 triggerable_event_flags_(ui::EF_LEFT_MOUSE_BUTTON), | 357 triggerable_event_flags_(ui::EF_LEFT_MOUSE_BUTTON), |
| 330 request_focus_on_press_(true), | 358 request_focus_on_press_(true), |
| 331 notify_action_(NOTIFY_ON_RELEASE) { | 359 notify_action_(NOTIFY_ON_RELEASE) { |
| 332 hover_animation_.reset(new gfx::ThrobAnimation(this)); | 360 hover_animation_.reset(new gfx::ThrobAnimation(this)); |
| 333 hover_animation_->SetSlideDuration(kHoverFadeDurationMs); | 361 hover_animation_->SetSlideDuration(kHoverFadeDurationMs); |
| 334 } | 362 } |
| 335 | 363 |
| 336 void CustomButton::StateChanged() { | 364 void CustomButton::StateChanged() { |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 367 check_mouse_position = !capture_window || capture_window == root_window; | 395 check_mouse_position = !capture_window || capture_window == root_window; |
| 368 } | 396 } |
| 369 #endif | 397 #endif |
| 370 | 398 |
| 371 return check_mouse_position && IsMouseHovered(); | 399 return check_mouse_position && IsMouseHovered(); |
| 372 } | 400 } |
| 373 | 401 |
| 374 //////////////////////////////////////////////////////////////////////////////// | 402 //////////////////////////////////////////////////////////////////////////////// |
| 375 // CustomButton, View overrides (protected): | 403 // CustomButton, View overrides (protected): |
| 376 | 404 |
| 405 void CustomButton::OnBoundsChanged(const gfx::Rect& previous_bounds) { | |
| 406 ink_drop_delegate_->OnBoundsChanged(); | |
| 407 } | |
| 408 | |
| 377 void CustomButton::ViewHierarchyChanged( | 409 void CustomButton::ViewHierarchyChanged( |
| 378 const ViewHierarchyChangedDetails& details) { | 410 const ViewHierarchyChangedDetails& details) { |
| 379 if (!details.is_add && state_ != STATE_DISABLED) | 411 if (!details.is_add && state_ != STATE_DISABLED) |
| 380 SetState(STATE_NORMAL); | 412 SetState(STATE_NORMAL); |
| 381 } | 413 } |
| 382 | 414 |
| 383 void CustomButton::OnBlur() { | 415 void CustomButton::OnBlur() { |
| 384 if (IsHotTracked()) | 416 if (IsHotTracked()) |
| 385 SetState(STATE_NORMAL); | 417 SetState(STATE_NORMAL); |
| 386 } | 418 } |
| 387 | 419 |
| 388 bool CustomButton::IsChildWidget() const { | 420 bool CustomButton::IsChildWidget() const { |
| 389 return GetWidget() && GetWidget()->GetTopLevelWidget() != GetWidget(); | 421 return GetWidget() && GetWidget()->GetTopLevelWidget() != GetWidget(); |
| 390 } | 422 } |
| 391 | 423 |
| 392 bool CustomButton::FocusInChildWidget() const { | 424 bool CustomButton::FocusInChildWidget() const { |
| 393 return GetWidget() && | 425 return GetWidget() && |
| 394 GetWidget()->GetRootView()->Contains( | 426 GetWidget()->GetRootView()->Contains( |
| 395 GetFocusManager()->GetFocusedView()); | 427 GetFocusManager()->GetFocusedView()); |
| 396 } | 428 } |
| 397 | 429 |
| 398 } // namespace views | 430 } // namespace views |
| OLD | NEW |