| 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/widget/root_view.h" | 5 #include "ui/views/widget/root_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 // that event type has been refactored, and then | 255 // that event type has been refactored, and then |
| 256 // eventually remove this function altogether. See | 256 // eventually remove this function altogether. See |
| 257 // crbug.com/348083. | 257 // crbug.com/348083. |
| 258 if (event->IsKeyEvent()) | 258 if (event->IsKeyEvent()) |
| 259 return EventProcessor::OnEventFromSource(event); | 259 return EventProcessor::OnEventFromSource(event); |
| 260 else if (event->IsScrollEvent()) | 260 else if (event->IsScrollEvent()) |
| 261 return EventProcessor::OnEventFromSource(event); | 261 return EventProcessor::OnEventFromSource(event); |
| 262 else if (event->IsTouchEvent()) | 262 else if (event->IsTouchEvent()) |
| 263 NOTREACHED() << "Touch events should not be sent to RootView."; | 263 NOTREACHED() << "Touch events should not be sent to RootView."; |
| 264 else if (event->IsGestureEvent()) | 264 else if (event->IsGestureEvent()) |
| 265 DispatchGestureEvent(static_cast<ui::GestureEvent*>(event)); | 265 DispatchGestureEvent(event->AsGestureEvent()); |
| 266 else if (event->IsMouseEvent()) | 266 else if (event->IsMouseEvent()) |
| 267 NOTREACHED() << "Should not be called with a MouseEvent."; | 267 NOTREACHED() << "Should not be called with a MouseEvent."; |
| 268 else | 268 else |
| 269 NOTREACHED() << "Invalid event type."; | 269 NOTREACHED() << "Invalid event type."; |
| 270 | 270 |
| 271 return DispatchDetails(); | 271 return DispatchDetails(); |
| 272 } | 272 } |
| 273 | 273 |
| 274 //////////////////////////////////////////////////////////////////////////////// | 274 //////////////////////////////////////////////////////////////////////////////// |
| 275 // RootView, View overrides: | 275 // RootView, View overrides: |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 549 } | 549 } |
| 550 | 550 |
| 551 void RootView::UpdateParentLayer() { | 551 void RootView::UpdateParentLayer() { |
| 552 if (layer()) | 552 if (layer()) |
| 553 ReparentLayer(gfx::Vector2d(GetMirroredX(), y()), widget_->GetLayer()); | 553 ReparentLayer(gfx::Vector2d(GetMirroredX(), y()), widget_->GetLayer()); |
| 554 } | 554 } |
| 555 | 555 |
| 556 //////////////////////////////////////////////////////////////////////////////// | 556 //////////////////////////////////////////////////////////////////////////////// |
| 557 // RootView, protected: | 557 // RootView, protected: |
| 558 | 558 |
| 559 void RootView::ViewHierarchyChanged( |
| 560 const ViewHierarchyChangedDetails& details) { |
| 561 widget_->ViewHierarchyChanged(details); |
| 562 |
| 563 if (!details.is_add) { |
| 564 if (!explicit_mouse_handler_ && mouse_pressed_handler_ == details.child) |
| 565 mouse_pressed_handler_ = NULL; |
| 566 if (mouse_move_handler_ == details.child) |
| 567 mouse_move_handler_ = NULL; |
| 568 if (gesture_handler_ == details.child) |
| 569 gesture_handler_ = NULL; |
| 570 if (scroll_gesture_handler_ == details.child) |
| 571 scroll_gesture_handler_ = NULL; |
| 572 if (event_dispatch_target_ == details.child) |
| 573 event_dispatch_target_ = NULL; |
| 574 if (old_dispatch_target_ == details.child) |
| 575 old_dispatch_target_ = NULL; |
| 576 } |
| 577 } |
| 578 |
| 579 void RootView::VisibilityChanged(View* /*starting_from*/, bool is_visible) { |
| 580 if (!is_visible) { |
| 581 // When the root view is being hidden (e.g. when widget is minimized) |
| 582 // handlers are reset, so that after it is reshown, events are not captured |
| 583 // by old handlers. |
| 584 explicit_mouse_handler_ = false; |
| 585 mouse_pressed_handler_ = NULL; |
| 586 mouse_move_handler_ = NULL; |
| 587 gesture_handler_ = NULL; |
| 588 scroll_gesture_handler_ = NULL; |
| 589 event_dispatch_target_ = NULL; |
| 590 old_dispatch_target_ = NULL; |
| 591 } |
| 592 } |
| 593 |
| 594 void RootView::OnPaint(gfx::Canvas* canvas) { |
| 595 if (!layer() || !layer()->fills_bounds_opaquely()) |
| 596 canvas->DrawColor(SK_ColorBLACK, SkXfermode::kClear_Mode); |
| 597 |
| 598 View::OnPaint(canvas); |
| 599 } |
| 600 |
| 601 gfx::Vector2d RootView::CalculateOffsetToAncestorWithLayer( |
| 602 ui::Layer** layer_parent) { |
| 603 gfx::Vector2d offset(View::CalculateOffsetToAncestorWithLayer(layer_parent)); |
| 604 if (!layer() && layer_parent) |
| 605 *layer_parent = widget_->GetLayer(); |
| 606 return offset; |
| 607 } |
| 608 |
| 609 View::DragInfo* RootView::GetDragInfo() { |
| 610 return &drag_info_; |
| 611 } |
| 612 |
| 613 //////////////////////////////////////////////////////////////////////////////// |
| 614 // RootView, private: |
| 615 |
| 616 // Input ----------------------------------------------------------------------- |
| 617 |
| 559 void RootView::DispatchGestureEvent(ui::GestureEvent* event) { | 618 void RootView::DispatchGestureEvent(ui::GestureEvent* event) { |
| 560 if (gesture_handler_) { | 619 if (gesture_handler_) { |
| 561 // |gesture_handler_| (or |scroll_gesture_handler_|) can be deleted during | 620 // |gesture_handler_| (or |scroll_gesture_handler_|) can be deleted during |
| 562 // processing. | 621 // processing. |
| 563 View* handler = scroll_gesture_handler_ && | 622 View* handler = scroll_gesture_handler_ && |
| 564 (event->IsScrollGestureEvent() || event->IsFlingScrollEvent()) ? | 623 (event->IsScrollGestureEvent() || event->IsFlingScrollEvent()) ? |
| 565 scroll_gesture_handler_ : gesture_handler_; | 624 scroll_gesture_handler_ : gesture_handler_; |
| 566 ui::GestureEvent handler_event(*event, static_cast<View*>(this), handler); | 625 ui::GestureEvent handler_event(*event, static_cast<View*>(this), handler); |
| 567 ui::EventDispatchDetails dispatch_details = | 626 ui::EventDispatchDetails dispatch_details = |
| 568 DispatchEvent(handler, &handler_event); | 627 DispatchEvent(handler, &handler_event); |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 685 return; | 744 return; |
| 686 } | 745 } |
| 687 | 746 |
| 688 // The gesture event wasn't processed. Go up the view hierarchy and | 747 // The gesture event wasn't processed. Go up the view hierarchy and |
| 689 // dispatch the gesture event. | 748 // dispatch the gesture event. |
| 690 } | 749 } |
| 691 | 750 |
| 692 gesture_handler_ = NULL; | 751 gesture_handler_ = NULL; |
| 693 } | 752 } |
| 694 | 753 |
| 695 void RootView::ViewHierarchyChanged( | |
| 696 const ViewHierarchyChangedDetails& details) { | |
| 697 widget_->ViewHierarchyChanged(details); | |
| 698 | |
| 699 if (!details.is_add) { | |
| 700 if (!explicit_mouse_handler_ && mouse_pressed_handler_ == details.child) | |
| 701 mouse_pressed_handler_ = NULL; | |
| 702 if (mouse_move_handler_ == details.child) | |
| 703 mouse_move_handler_ = NULL; | |
| 704 if (gesture_handler_ == details.child) | |
| 705 gesture_handler_ = NULL; | |
| 706 if (scroll_gesture_handler_ == details.child) | |
| 707 scroll_gesture_handler_ = NULL; | |
| 708 if (event_dispatch_target_ == details.child) | |
| 709 event_dispatch_target_ = NULL; | |
| 710 if (old_dispatch_target_ == details.child) | |
| 711 old_dispatch_target_ = NULL; | |
| 712 } | |
| 713 } | |
| 714 | |
| 715 void RootView::VisibilityChanged(View* /*starting_from*/, bool is_visible) { | |
| 716 if (!is_visible) { | |
| 717 // When the root view is being hidden (e.g. when widget is minimized) | |
| 718 // handlers are reset, so that after it is reshown, events are not captured | |
| 719 // by old handlers. | |
| 720 explicit_mouse_handler_ = false; | |
| 721 mouse_pressed_handler_ = NULL; | |
| 722 mouse_move_handler_ = NULL; | |
| 723 gesture_handler_ = NULL; | |
| 724 scroll_gesture_handler_ = NULL; | |
| 725 event_dispatch_target_ = NULL; | |
| 726 old_dispatch_target_ = NULL; | |
| 727 } | |
| 728 } | |
| 729 | |
| 730 void RootView::OnPaint(gfx::Canvas* canvas) { | |
| 731 if (!layer() || !layer()->fills_bounds_opaquely()) | |
| 732 canvas->DrawColor(SK_ColorBLACK, SkXfermode::kClear_Mode); | |
| 733 | |
| 734 View::OnPaint(canvas); | |
| 735 } | |
| 736 | |
| 737 gfx::Vector2d RootView::CalculateOffsetToAncestorWithLayer( | |
| 738 ui::Layer** layer_parent) { | |
| 739 gfx::Vector2d offset(View::CalculateOffsetToAncestorWithLayer(layer_parent)); | |
| 740 if (!layer() && layer_parent) | |
| 741 *layer_parent = widget_->GetLayer(); | |
| 742 return offset; | |
| 743 } | |
| 744 | |
| 745 View::DragInfo* RootView::GetDragInfo() { | |
| 746 return &drag_info_; | |
| 747 } | |
| 748 | |
| 749 //////////////////////////////////////////////////////////////////////////////// | |
| 750 // RootView, private: | |
| 751 | |
| 752 // Input ----------------------------------------------------------------------- | |
| 753 | |
| 754 void RootView::UpdateCursor(const ui::MouseEvent& event) { | 754 void RootView::UpdateCursor(const ui::MouseEvent& event) { |
| 755 if (!(event.flags() & ui::EF_IS_NON_CLIENT)) { | 755 if (!(event.flags() & ui::EF_IS_NON_CLIENT)) { |
| 756 View* v = GetEventHandlerForPoint(event.location()); | 756 View* v = GetEventHandlerForPoint(event.location()); |
| 757 ui::MouseEvent me(event, static_cast<View*>(this), v); | 757 ui::MouseEvent me(event, static_cast<View*>(this), v); |
| 758 widget_->SetCursor(v->GetCursor(me)); | 758 widget_->SetCursor(v->GetCursor(me)); |
| 759 } | 759 } |
| 760 } | 760 } |
| 761 | 761 |
| 762 void RootView::SetMouseLocationAndFlags(const ui::MouseEvent& event) { | 762 void RootView::SetMouseLocationAndFlags(const ui::MouseEvent& event) { |
| 763 last_mouse_event_flags_ = event.flags(); | 763 last_mouse_event_flags_ = event.flags(); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 808 | 808 |
| 809 #ifndef NDEBUG | 809 #ifndef NDEBUG |
| 810 DCHECK(!event_dispatch_target_ || Contains(event_dispatch_target_)); | 810 DCHECK(!event_dispatch_target_ || Contains(event_dispatch_target_)); |
| 811 #endif | 811 #endif |
| 812 | 812 |
| 813 return details; | 813 return details; |
| 814 } | 814 } |
| 815 | 815 |
| 816 } // namespace internal | 816 } // namespace internal |
| 817 } // namespace views | 817 } // namespace views |
| OLD | NEW |