1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ui/events/event_targeter.h"
6
7 #include "ui/events/event.h"
8 #include "ui/events/event_target.h"
9 #include "ui/events/event_target_iterator.h"
10
11 namespace ui {
12
~EventTargeter()13 EventTargeter::~EventTargeter() {
14 }
15
FindTargetForEvent(EventTarget * root,Event * event)16 EventTarget* EventTargeter::FindTargetForEvent(EventTarget* root,
17 Event* event) {
18 if (event->IsMouseEvent() ||
19 event->IsScrollEvent() ||
20 event->IsTouchEvent() ||
21 event->IsGestureEvent()) {
22 return FindTargetForLocatedEvent(root,
23 static_cast<LocatedEvent*>(event));
24 }
25 return root;
26 }
27
FindTargetForLocatedEvent(EventTarget * root,LocatedEvent * event)28 EventTarget* EventTargeter::FindTargetForLocatedEvent(EventTarget* root,
29 LocatedEvent* event) {
30 scoped_ptr<EventTargetIterator> iter = root->GetChildIterator();
31 if (iter) {
32 EventTarget* target = root;
33 EventTarget* child = NULL;
34 while ((child = iter->GetNextTarget())) {
35 if (!SubtreeShouldBeExploredForEvent(child, *event))
36 continue;
37 target->ConvertEventToTarget(child, event);
38 EventTargeter* targeter = child->GetEventTargeter();
39 EventTarget* child_target = targeter ?
40 targeter->FindTargetForLocatedEvent(child, event) :
41 FindTargetForLocatedEvent(child, event);
42 if (child_target)
43 return child_target;
44 target = child;
45 }
46 target->ConvertEventToTarget(root, event);
47 }
48 return root->CanAcceptEvent(*event) ? root : NULL;
49 }
50
SubtreeShouldBeExploredForEvent(EventTarget * target,const LocatedEvent & event)51 bool EventTargeter::SubtreeShouldBeExploredForEvent(EventTarget* target,
52 const LocatedEvent& event) {
53 return true;
54 }
55
56 } // namespace ui
57