| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ui/events/event_target.h" |
| |
| #include <algorithm> |
| |
| #include "base/logging.h" |
| #include "ui/events/event.h" |
| |
| namespace ui { |
| |
| EventTarget::EventTarget() |
| : target_handler_(NULL) { |
| } |
| |
| EventTarget::~EventTarget() { |
| } |
| |
| void EventTarget::ConvertEventToTarget(EventTarget* target, |
| LocatedEvent* event) { |
| } |
| |
| void EventTarget::AddPreTargetHandler(EventHandler* handler) { |
| pre_target_list_.push_back(handler); |
| } |
| |
| void EventTarget::PrependPreTargetHandler(EventHandler* handler) { |
| pre_target_list_.insert(pre_target_list_.begin(), handler); |
| } |
| |
| void EventTarget::RemovePreTargetHandler(EventHandler* handler) { |
| EventHandlerList::iterator find = |
| std::find(pre_target_list_.begin(), |
| pre_target_list_.end(), |
| handler); |
| if (find != pre_target_list_.end()) |
| pre_target_list_.erase(find); |
| } |
| |
| void EventTarget::AddPostTargetHandler(EventHandler* handler) { |
| post_target_list_.push_back(handler); |
| } |
| |
| void EventTarget::RemovePostTargetHandler(EventHandler* handler) { |
| EventHandlerList::iterator find = |
| std::find(post_target_list_.begin(), |
| post_target_list_.end(), |
| handler); |
| if (find != post_target_list_.end()) |
| post_target_list_.erase(find); |
| } |
| |
| bool EventTarget::IsPreTargetListEmpty() const { |
| return pre_target_list_.empty(); |
| } |
| |
| void EventTarget::OnEvent(Event* event) { |
| CHECK_EQ(this, event->target()); |
| if (target_handler_) |
| target_handler_->OnEvent(event); |
| else |
| EventHandler::OnEvent(event); |
| } |
| |
| void EventTarget::OnKeyEvent(KeyEvent* event) { |
| CHECK_EQ(this, event->target()); |
| if (target_handler_) |
| target_handler_->OnKeyEvent(event); |
| } |
| |
| void EventTarget::OnMouseEvent(MouseEvent* event) { |
| CHECK_EQ(this, event->target()); |
| if (target_handler_) |
| target_handler_->OnMouseEvent(event); |
| } |
| |
| void EventTarget::OnScrollEvent(ScrollEvent* event) { |
| CHECK_EQ(this, event->target()); |
| if (target_handler_) |
| target_handler_->OnScrollEvent(event); |
| } |
| |
| void EventTarget::OnTouchEvent(TouchEvent* event) { |
| CHECK_EQ(this, event->target()); |
| if (target_handler_) |
| target_handler_->OnTouchEvent(event); |
| } |
| |
| void EventTarget::OnGestureEvent(GestureEvent* event) { |
| CHECK_EQ(this, event->target()); |
| if (target_handler_) |
| target_handler_->OnGestureEvent(event); |
| } |
| |
| void EventTarget::GetPreTargetHandlers(EventHandlerList* list) { |
| EventTarget* target = this; |
| while (target) { |
| EventHandlerList::reverse_iterator it, rend; |
| for (it = target->pre_target_list_.rbegin(), |
| rend = target->pre_target_list_.rend(); |
| it != rend; |
| ++it) { |
| list->insert(list->begin(), *it); |
| } |
| target = target->GetParentTarget(); |
| } |
| } |
| |
| void EventTarget::GetPostTargetHandlers(EventHandlerList* list) { |
| EventTarget* target = this; |
| while (target) { |
| for (EventHandlerList::iterator it = target->post_target_list_.begin(), |
| end = target->post_target_list_.end(); it != end; ++it) { |
| list->push_back(*it); |
| } |
| target = target->GetParentTarget(); |
| } |
| } |
| |
| } // namespace ui |