event_source.h revision effb81e5f8246d0db0270817048dc992db66e9fb
1839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna// Copyright 2013 The Chromium Authors. All rights reserved.
2839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna// Use of this source code is governed by a BSD-style license that can be
3839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna// found in the LICENSE file.
4839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna
5839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna#ifndef UI_EVENTS_EVENT_SOURCE_H_
6839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna#define UI_EVENTS_EVENT_SOURCE_H_
7839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna
8839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna#include <vector>
9839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna
10839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna#include "ui/events/event_dispatcher.h"
11839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna#include "ui/events/events_export.h"
12839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna
13839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinnanamespace ui {
14839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna
15839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinnaclass Event;
16839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinnaclass EventProcessor;
17839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinnaclass EventRewriter;
18839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna
19839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna// EventSource receives events from the native platform (e.g. X11, win32 etc.)
20839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna// and sends the events to an EventProcessor.
21839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinnaclass EVENTS_EXPORT EventSource {
22839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna public:
23839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna  EventSource();
24839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna  virtual ~EventSource();
25839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna
26839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna  virtual EventProcessor* GetEventProcessor() = 0;
27839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna
28839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna  // Adds a rewriter to modify events before they are sent to the
29839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna  // EventProcessor. The rewriter must be explicitly removed from the
30839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna  // EventSource before the rewriter is destroyed. The EventSource
31839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna  // does not take ownership of the rewriter.
32839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna  void AddEventRewriter(EventRewriter* rewriter);
33839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna  void RemoveEventRewriter(EventRewriter* rewriter);
34839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna
35839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna protected:
36839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna  EventDispatchDetails SendEventToProcessor(Event* event);
37839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna
38839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna private:
39839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna  typedef std::vector<EventRewriter*> EventRewriterList;
40839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna  EventDispatchDetails DeliverEventToProcessor(Event* event);
41839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna  EventRewriterList rewriter_list_;
42839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna  DISALLOW_COPY_AND_ASSIGN(EventSource);
43839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna};
44839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna
45839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna}  // namespace ui
46839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna
47839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna#endif // UI_EVENTS_EVENT_SOURCE_H_
48839c8456fbe08fc2497857673805b84dffb45507Jussi Kivilinna