|  | // 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 |