1// Copyright 2014 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_REWRITER_H_
6#define UI_EVENTS_EVENT_REWRITER_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "ui/events/events_export.h"
10
11namespace ui {
12
13class Event;
14
15// Return status of EventRewriter operations; see that class below.
16enum EventRewriteStatus {
17  // Nothing was done; no rewritten event returned. Pass the original
18  // event to later rewriters, or send it to the EventProcessor if this
19  // was the final rewriter.
20  EVENT_REWRITE_CONTINUE,
21
22  // The event has been rewritten. Send the rewritten event to the
23  // EventProcessor instead of the original event (without sending
24  // either to any later rewriters).
25  EVENT_REWRITE_REWRITTEN,
26
27  // The event should be discarded, neither passing it to any later
28  // rewriters nor sending it to the EventProcessor.
29  EVENT_REWRITE_DISCARD,
30
31  // The event has been rewritten. As for EVENT_REWRITE_REWRITTEN,
32  // send the rewritten event to the EventProcessor instead of the
33  // original event (without sending either to any later rewriters).
34  // In addition the rewriter has one or more additional new events
35  // to be retrieved using |NextDispatchEvent()| and sent to the
36  // EventProcessor.
37  EVENT_REWRITE_DISPATCH_ANOTHER,
38};
39
40// EventRewriter provides a mechanism for Events to be rewritten
41// before being dispatched from EventSource to EventProcessor.
42class EVENTS_EXPORT EventRewriter {
43 public:
44  virtual ~EventRewriter() {}
45
46  // Potentially rewrites (replaces) an event, or requests it be discarded.
47  // or discards an event. If the rewriter wants to rewrite an event, and
48  // dispatch another event once the rewritten event is dispatched, it should
49  // return EVENT_REWRITE_DISPATCH_ANOTHER, and return the next event to
50  // dispatch from |NextDispatchEvent()|.
51  virtual EventRewriteStatus RewriteEvent(
52      const Event& event,
53      scoped_ptr<Event>* rewritten_event) = 0;
54
55  // Supplies an additional event to be dispatched. It is only valid to
56  // call this after the immediately previous call to |RewriteEvent()|
57  // or |NextDispatchEvent()| has returned EVENT_REWRITE_DISPATCH_ANOTHER.
58  // Should only return either EVENT_REWRITE_REWRITTEN or
59  // EVENT_REWRITE_DISPATCH_ANOTHER; otherwise the previous call should not
60  // have returned EVENT_REWRITE_DISPATCH_ANOTHER.
61  virtual EventRewriteStatus NextDispatchEvent(
62      const Event& last_event,
63      scoped_ptr<Event>* new_event) = 0;
64};
65
66}  // namespace ui
67
68#endif  // UI_EVENTS_EVENT_REWRITER_H_
69