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 #ifndef UI_EVENTS_EVENT_HANDLER_H_ 6 #define UI_EVENTS_EVENT_HANDLER_H_ 7 8 #include <stack> 9 #include <vector> 10 11 #include "base/basictypes.h" 12 #include "ui/events/event_constants.h" 13 #include "ui/events/events_export.h" 14 15 namespace ui { 16 17 class CancelModeEvent; 18 class Event; 19 class EventDispatcher; 20 class EventTarget; 21 class GestureEvent; 22 class KeyEvent; 23 class MouseEvent; 24 class ScrollEvent; 25 class TouchEvent; 26 27 // Dispatches events to appropriate targets. The default implementations of 28 // all of the specific handlers (e.g. OnKeyEvent, OnMouseEvent) do nothing. 29 class EVENTS_EXPORT EventHandler { 30 public: 31 EventHandler(); 32 virtual ~EventHandler(); 33 34 // This is called for all events. The default implementation routes the event 35 // to one of the event-specific callbacks (OnKeyEvent, OnMouseEvent etc.). If 36 // this is overridden, then normally, the override should chain into the 37 // default implementation for un-handled events. 38 virtual void OnEvent(Event* event); 39 40 virtual void OnKeyEvent(KeyEvent* event); 41 42 virtual void OnMouseEvent(MouseEvent* event); 43 44 virtual void OnScrollEvent(ScrollEvent* event); 45 46 virtual void OnTouchEvent(TouchEvent* event); 47 48 virtual void OnGestureEvent(GestureEvent* event); 49 50 virtual void OnCancelMode(CancelModeEvent* event); 51 52 private: 53 friend class EventDispatcher; 54 55 // EventDispatcher pushes itself on the top of this stack while dispatching 56 // events to this then pops itself off when done. 57 std::stack<EventDispatcher*> dispatchers_; 58 59 DISALLOW_COPY_AND_ASSIGN(EventHandler); 60 }; 61 62 typedef std::vector<EventHandler*> EventHandlerList; 63 64 } // namespace ui 65 66 #endif // UI_EVENTS_EVENT_HANDLER_H_ 67