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