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

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

Issue 381323002: [rough WIP] Make View::GetEventHandlerForRect() non-virtual (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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
« no previous file with comments | « ui/views/view_targeter.h ('k') | ui/views/view_targeter_delegate.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 } 16 }
17 17
18 ViewTargeter::~ViewTargeter() {} 18 ViewTargeter::~ViewTargeter() {}
19 19
20 bool ViewTargeter::DoesIntersectRect(const View* target, 20 bool ViewTargeter::DoesIntersectRect(const View* target,
21 const gfx::Rect& rect) const { 21 const gfx::Rect& rect) const {
22 DCHECK(delegate_); 22 DCHECK(delegate_);
23 return delegate_->DoesIntersectRect(target, rect); 23 return delegate_->DoesIntersectRect(target, rect);
24 } 24 }
25 25
26 View* ViewTargeter::TargetForRect(View* root,
27 const gfx::Rect& rect) const {
28 DCHECK(delegate_);
29 return delegate_->TargetForRect(root, rect);
30 }
31
26 gfx::RectF ViewTargeter::BoundsForEvent(const ui::LocatedEvent& event) const { 32 gfx::RectF ViewTargeter::BoundsForEvent(const ui::LocatedEvent& event) const {
27 gfx::RectF event_bounds(event.location_f(), gfx::SizeF(1, 1)); 33 gfx::RectF event_bounds(event.location_f(), gfx::SizeF(1, 1));
28 if (event.IsGestureEvent()) { 34 if (event.IsGestureEvent()) {
29 const ui::GestureEvent& gesture = 35 const ui::GestureEvent& gesture =
30 static_cast<const ui::GestureEvent&>(event); 36 static_cast<const ui::GestureEvent&>(event);
31 event_bounds = gesture.details().bounding_box_f(); 37 event_bounds = gesture.details().bounding_box_f();
32 } 38 }
33 39
34 return event_bounds; 40 return event_bounds;
35 } 41 }
36 42
37 ui::EventTarget* ViewTargeter::FindTargetForEvent(ui::EventTarget* root, 43 ui::EventTarget* ViewTargeter::FindTargetForEvent(ui::EventTarget* root,
38 ui::Event* event) { 44 ui::Event* event) {
39 View* view = static_cast<View*>(root); 45 View* view = static_cast<View*>(root);
40 if (event->IsKeyEvent()) 46 if (event->IsKeyEvent())
41 return FindTargetForKeyEvent(view, *static_cast<ui::KeyEvent*>(event)); 47 return FindTargetForKeyEvent(view, *static_cast<ui::KeyEvent*>(event));
42 else if (event->IsScrollEvent()) 48 else if (event->IsScrollEvent())
43 return EventTargeter::FindTargetForEvent(root, event); 49 return EventTargeter::FindTargetForEvent(root, event);
tdanderson 2014/07/10 23:50:23 This is the call I believe to be wrong as-is since
44 50
45 NOTREACHED() << "ViewTargeter does not yet support this event type."; 51 NOTREACHED() << "ViewTargeter does not yet support this event type.";
46 return NULL; 52 return NULL;
47 } 53 }
48 54
49 ui::EventTarget* ViewTargeter::FindNextBestTarget( 55 ui::EventTarget* ViewTargeter::FindNextBestTarget(
50 ui::EventTarget* previous_target, 56 ui::EventTarget* previous_target,
51 ui::Event* event) { 57 ui::Event* event) {
52 return previous_target->GetParentTarget(); 58 return previous_target->GetParentTarget();
53 } 59 }
54 60
55 bool ViewTargeter::SubtreeCanAcceptEvent( 61 bool ViewTargeter::SubtreeCanAcceptEvent(
56 ui::EventTarget* target, 62 ui::EventTarget* target,
57 const ui::LocatedEvent& event) const { 63 const ui::LocatedEvent& event) const {
58 views::View* view = static_cast<views::View*>(target); 64 views::View* view = static_cast<views::View*>(target);
59 if (!view->visible()) 65 if (!view->visible())
60 return false; 66 return false;
61 67
62 if (!view->CanProcessEventsWithinSubtree()) 68 if (!view->CanProcessEventsWithinSubtree())
63 return false; 69 return false;
64 70
65 return true; 71 return true;
66 } 72 }
67 73
68 bool ViewTargeter::EventLocationInsideBounds( 74 bool ViewTargeter::EventLocationInsideBounds(
tdanderson 2014/07/10 23:50:23 Assuming that ViewTargeter::FindTargetForEvent() s
69 ui::EventTarget* target, 75 ui::EventTarget* target,
70 const ui::LocatedEvent& event) const { 76 const ui::LocatedEvent& event) const {
71 views::View* view = static_cast<views::View*>(target); 77 views::View* view = static_cast<views::View*>(target);
72 gfx::Rect rect(event.location(), gfx::Size(1, 1)); 78 gfx::Rect rect(event.location(), gfx::Size(1, 1));
73 gfx::RectF rect_in_view_coords_f(rect); 79 gfx::RectF rect_in_view_coords_f(rect);
74 if (view->parent()) 80 if (view->parent())
75 View::ConvertRectToTarget(view->parent(), view, &rect_in_view_coords_f); 81 View::ConvertRectToTarget(view->parent(), view, &rect_in_view_coords_f);
76 gfx::Rect rect_in_view_coords = gfx::ToEnclosingRect(rect_in_view_coords_f); 82 gfx::Rect rect_in_view_coords = gfx::ToEnclosingRect(rect_in_view_coords_f);
77 83
78 // TODO(tdanderson): Don't call into HitTestRect() directly here. 84 // TODO(tdanderson): Don't call into HitTestRect() directly here.
79 // See crbug.com/370579. 85 // See crbug.com/370579.
80 return view->HitTestRect(rect_in_view_coords); 86 return view->HitTestRect(rect_in_view_coords);
81 } 87 }
82 88
83 View* ViewTargeter::FindTargetForKeyEvent(View* view, const ui::KeyEvent& key) { 89 View* ViewTargeter::FindTargetForKeyEvent(View* view, const ui::KeyEvent& key) {
84 if (view->GetFocusManager()) 90 if (view->GetFocusManager())
85 return view->GetFocusManager()->GetFocusedView(); 91 return view->GetFocusManager()->GetFocusedView();
86 return NULL; 92 return NULL;
87 } 93 }
88 94
89 } // namespace aura 95 } // namespace aura
OLDNEW
« no previous file with comments | « ui/views/view_targeter.h ('k') | ui/views/view_targeter_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698