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

Side by Side Diff: ui/views/view_targeter.cc

Issue 426443002: Do not call into EventTargeter methods from ViewTargeter (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/view_targeter.h" 5 #include "ui/views/view_targeter.h"
6 6
7 #include "ui/events/event_target.h" 7 #include "ui/events/event_target.h"
8 #include "ui/views/focus/focus_manager.h" 8 #include "ui/views/focus/focus_manager.h"
9 #include "ui/views/view.h" 9 #include "ui/views/view.h"
10 #include "ui/views/view_targeter_delegate.h" 10 #include "ui/views/view_targeter_delegate.h"
11 11
12 namespace views { 12 namespace views {
13 13
14 ViewTargeter::ViewTargeter(ViewTargeterDelegate* delegate) 14 ViewTargeter::ViewTargeter(ViewTargeterDelegate* delegate)
15 : delegate_(delegate) { 15 : delegate_(delegate) {
16 DCHECK(delegate_); 16 DCHECK(delegate_);
17 } 17 }
18 18
19 ViewTargeter::~ViewTargeter() {} 19 ViewTargeter::~ViewTargeter() {}
20 20
21 bool ViewTargeter::DoesIntersectRect(const View* target, 21 bool ViewTargeter::DoesIntersectRect(const View* target,
22 const gfx::Rect& rect) const { 22 const gfx::Rect& rect) const {
23 return delegate_->DoesIntersectRect(target, rect); 23 return delegate_->DoesIntersectRect(target, rect);
24 } 24 }
25 25
26 View* ViewTargeter::TargetForRect(View* root, const gfx::Rect& rect) const { 26 View* ViewTargeter::TargetForRect(View* root, const gfx::Rect& rect) const {
27 return delegate_->TargetForRect(root, rect); 27 return delegate_->TargetForRect(root, rect);
28 } 28 }
29 29
30 gfx::RectF ViewTargeter::BoundsForEvent(const ui::LocatedEvent& event) const {
31 gfx::RectF event_bounds(event.location_f(), gfx::SizeF(1, 1));
32 if (event.IsGestureEvent()) {
33 const ui::GestureEvent& gesture = *(event.AsGestureEvent());
34 event_bounds = gesture.details().bounding_box_f();
35 }
36
37 return event_bounds;
38 }
39
40 ui::EventTarget* ViewTargeter::FindTargetForEvent(ui::EventTarget* root, 30 ui::EventTarget* ViewTargeter::FindTargetForEvent(ui::EventTarget* root,
41 ui::Event* event) { 31 ui::Event* event) {
42 View* view = static_cast<View*>(root); 32 View* view = static_cast<View*>(root);
33
43 if (event->IsKeyEvent()) 34 if (event->IsKeyEvent())
44 return FindTargetForKeyEvent(view, *static_cast<ui::KeyEvent*>(event)); 35 return FindTargetForKeyEvent(view, *static_cast<ui::KeyEvent*>(event));
45 else if (event->IsScrollEvent()) 36
46 return EventTargeter::FindTargetForEvent(root, event); 37 if (event->IsScrollEvent()) {
38 return FindTargetForScrollEvent(view,
39 *static_cast<ui::ScrollEvent*>(event));
40 }
47 41
48 NOTREACHED() << "ViewTargeter does not yet support this event type."; 42 NOTREACHED() << "ViewTargeter does not yet support this event type.";
49 return NULL; 43 return NULL;
50 } 44 }
51 45
52 ui::EventTarget* ViewTargeter::FindNextBestTarget( 46 ui::EventTarget* ViewTargeter::FindNextBestTarget(
53 ui::EventTarget* previous_target, 47 ui::EventTarget* previous_target,
54 ui::Event* event) { 48 ui::Event* event) {
55 return previous_target->GetParentTarget(); 49 return previous_target->GetParentTarget();
56 } 50 }
57 51
58 bool ViewTargeter::SubtreeCanAcceptEvent( 52 View* ViewTargeter::FindTargetForKeyEvent(View* root, const ui::KeyEvent& key) {
59 ui::EventTarget* target, 53 if (root->GetFocusManager())
60 const ui::LocatedEvent& event) const { 54 return root->GetFocusManager()->GetFocusedView();
61 views::View* view = static_cast<views::View*>(target);
62 if (!view->visible())
63 return false;
64
65 if (!view->CanProcessEventsWithinSubtree())
66 return false;
67
68 return true;
69 }
70
71 bool ViewTargeter::EventLocationInsideBounds(
72 ui::EventTarget* target,
73 const ui::LocatedEvent& event) const {
74 views::View* view = static_cast<views::View*>(target);
75 gfx::Rect rect(event.location(), gfx::Size(1, 1));
76 gfx::RectF rect_in_view_coords_f(rect);
77 if (view->parent())
78 View::ConvertRectToTarget(view->parent(), view, &rect_in_view_coords_f);
79 gfx::Rect rect_in_view_coords = gfx::ToEnclosingRect(rect_in_view_coords_f);
80
81 // TODO(tdanderson): Don't call into HitTestRect() directly here.
82 // See crbug.com/370579.
83 return view->HitTestRect(rect_in_view_coords);
84 }
85
86 View* ViewTargeter::FindTargetForKeyEvent(View* view, const ui::KeyEvent& key) {
87 if (view->GetFocusManager())
88 return view->GetFocusManager()->GetFocusedView();
89 return NULL; 55 return NULL;
90 } 56 }
91 57
92 } // namespace aura 58 View* ViewTargeter::FindTargetForScrollEvent(View* root,
59 const ui::ScrollEvent& scroll) {
60 return root->GetEventHandlerForPoint(scroll.location());
sadrul 2014/07/29 18:06:50 This should directly call into the delegate, somet
tdanderson 2014/07/29 19:40:45 Is your suggestion about correctness or is it abou
tdanderson 2014/08/01 15:53:07 I forget the outcome of our in-person chat about t
61 }
62
63 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698