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
3// found in the LICENSE file.
4
5#include "ui/events/event_target.h"
6
7#include <algorithm>
8
9#include "base/logging.h"
10#include "ui/events/event.h"
11
12namespace ui {
13
14EventTarget::EventTarget()
15    : target_handler_(NULL) {
16}
17
18EventTarget::~EventTarget() {
19}
20
21void EventTarget::ConvertEventToTarget(EventTarget* target,
22                                       LocatedEvent* event) {
23}
24
25void EventTarget::AddPreTargetHandler(EventHandler* handler) {
26  pre_target_list_.push_back(handler);
27}
28
29void EventTarget::PrependPreTargetHandler(EventHandler* handler) {
30  pre_target_list_.insert(pre_target_list_.begin(), handler);
31}
32
33void EventTarget::RemovePreTargetHandler(EventHandler* handler) {
34  EventHandlerList::iterator find =
35      std::find(pre_target_list_.begin(),
36                pre_target_list_.end(),
37                handler);
38  if (find != pre_target_list_.end())
39    pre_target_list_.erase(find);
40}
41
42void EventTarget::AddPostTargetHandler(EventHandler* handler) {
43  post_target_list_.push_back(handler);
44}
45
46void EventTarget::RemovePostTargetHandler(EventHandler* handler) {
47  EventHandlerList::iterator find =
48      std::find(post_target_list_.begin(),
49                post_target_list_.end(),
50                handler);
51  if (find != post_target_list_.end())
52    post_target_list_.erase(find);
53}
54
55bool EventTarget::IsPreTargetListEmpty() const {
56  return pre_target_list_.empty();
57}
58
59void EventTarget::OnEvent(Event* event) {
60  CHECK_EQ(this, event->target());
61  if (target_handler_)
62    target_handler_->OnEvent(event);
63  else
64    EventHandler::OnEvent(event);
65}
66
67void EventTarget::OnKeyEvent(KeyEvent* event) {
68  CHECK_EQ(this, event->target());
69  if (target_handler_)
70    target_handler_->OnKeyEvent(event);
71}
72
73void EventTarget::OnMouseEvent(MouseEvent* event) {
74  CHECK_EQ(this, event->target());
75  if (target_handler_)
76    target_handler_->OnMouseEvent(event);
77}
78
79void EventTarget::OnScrollEvent(ScrollEvent* event) {
80  CHECK_EQ(this, event->target());
81  if (target_handler_)
82    target_handler_->OnScrollEvent(event);
83}
84
85void EventTarget::OnTouchEvent(TouchEvent* event) {
86  CHECK_EQ(this, event->target());
87  if (target_handler_)
88    target_handler_->OnTouchEvent(event);
89}
90
91void EventTarget::OnGestureEvent(GestureEvent* event) {
92  CHECK_EQ(this, event->target());
93  if (target_handler_)
94    target_handler_->OnGestureEvent(event);
95}
96
97void EventTarget::GetPreTargetHandlers(EventHandlerList* list) {
98  EventTarget* target = this;
99  while (target) {
100    EventHandlerList::reverse_iterator it, rend;
101    for (it = target->pre_target_list_.rbegin(),
102            rend = target->pre_target_list_.rend();
103        it != rend;
104        ++it) {
105      list->insert(list->begin(), *it);
106    }
107    target = target->GetParentTarget();
108  }
109}
110
111void EventTarget::GetPostTargetHandlers(EventHandlerList* list) {
112  EventTarget* target = this;
113  while (target) {
114    for (EventHandlerList::iterator it = target->post_target_list_.begin(),
115        end = target->post_target_list_.end(); it != end; ++it) {
116      list->push_back(*it);
117    }
118    target = target->GetParentTarget();
119  }
120}
121
122}  // namespace ui
123