Home | History | Annotate | Download | only in events
      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