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 11namespace ui { 12 13EventTargeter::~EventTargeter() { 14} 15 16EventTarget* 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 28EventTarget* EventTargeter::FindTargetForLocatedEvent(EventTarget* root, 29 LocatedEvent* event) { 30 scoped_ptr<EventTargetIterator> iter = root->GetChildIterator(); 31 if (iter) { 32 EventTarget* target = root; 33 for (EventTarget* child = iter->GetNextTarget(); child; 34 child = iter->GetNextTarget()) { 35 EventTargeter* targeter = child->GetEventTargeter(); 36 if (!targeter) 37 targeter = this; 38 if (!targeter->SubtreeShouldBeExploredForEvent(child, *event)) 39 continue; 40 target->ConvertEventToTarget(child, event); 41 target = child; 42 EventTarget* child_target = targeter ? 43 targeter->FindTargetForLocatedEvent(child, event) : 44 FindTargetForLocatedEvent(child, event); 45 if (child_target) 46 return child_target; 47 } 48 target->ConvertEventToTarget(root, event); 49 } 50 return root->CanAcceptEvent(*event) ? root : NULL; 51} 52 53bool EventTargeter::SubtreeShouldBeExploredForEvent(EventTarget* target, 54 const LocatedEvent& event) { 55 return SubtreeCanAcceptEvent(target, event) && 56 EventLocationInsideBounds(target, event); 57} 58 59EventTarget* EventTargeter::FindNextBestTarget(EventTarget* previous_target, 60 Event* event) { 61 return NULL; 62} 63 64bool EventTargeter::SubtreeCanAcceptEvent(EventTarget* target, 65 const LocatedEvent& event) const { 66 return true; 67} 68 69bool EventTargeter::EventLocationInsideBounds(EventTarget* target, 70 const LocatedEvent& event) const { 71 return true; 72} 73 74} // namespace ui 75