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/base/events/event_target.h" 6 7 #include <algorithm> 8 9 #include "base/logging.h" 10 #include "ui/base/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 void EventTarget::OnEvent(Event* event) { 52 CHECK_EQ(this, event->target()); 53 if (target_handler_) 54 target_handler_->OnEvent(event); 55 else 56 EventHandler::OnEvent(event); 57 } 58 59 void EventTarget::OnKeyEvent(KeyEvent* event) { 60 CHECK_EQ(this, event->target()); 61 if (target_handler_) 62 target_handler_->OnKeyEvent(event); 63 } 64 65 void EventTarget::OnMouseEvent(MouseEvent* event) { 66 CHECK_EQ(this, event->target()); 67 if (target_handler_) 68 target_handler_->OnMouseEvent(event); 69 } 70 71 void EventTarget::OnScrollEvent(ScrollEvent* event) { 72 CHECK_EQ(this, event->target()); 73 if (target_handler_) 74 target_handler_->OnScrollEvent(event); 75 } 76 77 void EventTarget::OnTouchEvent(TouchEvent* event) { 78 CHECK_EQ(this, event->target()); 79 if (target_handler_) 80 target_handler_->OnTouchEvent(event); 81 } 82 83 void EventTarget::OnGestureEvent(GestureEvent* event) { 84 CHECK_EQ(this, event->target()); 85 if (target_handler_) 86 target_handler_->OnGestureEvent(event); 87 } 88 89 void EventTarget::GetPreTargetHandlers(EventHandlerList* list) { 90 EventTarget* target = this; 91 while (target) { 92 EventHandlerList::reverse_iterator it, rend; 93 for (it = target->pre_target_list_.rbegin(), 94 rend = target->pre_target_list_.rend(); 95 it != rend; 96 ++it) { 97 list->insert(list->begin(), *it); 98 } 99 target = target->GetParentTarget(); 100 } 101 } 102 103 void EventTarget::GetPostTargetHandlers(EventHandlerList* list) { 104 EventTarget* target = this; 105 while (target) { 106 for (EventHandlerList::iterator it = target->post_target_list_.begin(), 107 end = target->post_target_list_.end(); it != end; ++it) { 108 list->push_back(*it); 109 } 110 target = target->GetParentTarget(); 111 } 112 } 113 114 } // namespace ui 115