1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef UI_EVENTS_TEST_EVENTS_TEST_UTILS_X11_H_
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define UI_EVENTS_TEST_EVENTS_TEST_UTILS_X11_H_
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/events/event_constants.h"
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/events/x/device_data_manager_x11.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/gfx/point.h"
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/gfx/x/x11_types.h"
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)typedef union _XEvent XEvent;
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace ui {
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct Valuator {
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  Valuator(DeviceDataManagerX11::DataType type, double v)
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      : data_type(type), value(v) {}
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DeviceDataManagerX11::DataType data_type;
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  double value;
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct XEventDeleter {
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void operator()(XEvent* event);
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ScopedXI2Event {
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ScopedXI2Event();
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ~ScopedXI2Event();
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  operator XEvent*() { return event_.get(); }
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Initializes a XEvent with for the appropriate type with the specified data.
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Note that ui::EF_ flags should be passed as |flags|, not the native ones in
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // <X11/X.h>.
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void InitKeyEvent(EventType type,
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                    KeyboardCode key_code,
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                    int flags);
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Initializes an Xinput2 key event.
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // |deviceid| is the master, and |sourceid| is the slave device.
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void InitGenericKeyEvent(int deviceid,
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                           int sourceid,
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                           EventType type,
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                           KeyboardCode key_code,
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                           int flags);
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void InitGenericButtonEvent(int deviceid,
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                              EventType type,
5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                              const gfx::Point& location,
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                              int flags);
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  void InitGenericMouseWheelEvent(int deviceid,
5923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                                  int wheel_delta,
6023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                                  int flags);
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void InitScrollEvent(int deviceid,
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       int x_offset,
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       int y_offset,
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       int x_offset_ordinal,
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       int y_offset_ordinal,
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       int finger_count);
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void InitFlingScrollEvent(int deviceid,
70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                            int x_velocity,
71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                            int y_velocity,
72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                            int x_velocity_ordinal,
73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                            int y_velocity_ordinal,
74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                            bool is_cancel);
75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void InitTouchEvent(int deviceid,
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      int evtype,
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      int tracking_id,
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      const gfx::Point& location,
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      const std::vector<Valuator>& valuators);
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void Cleanup();
84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void SetUpValuators(const std::vector<Valuator>& valuators);
86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<XEvent, XEventDeleter> event_;
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ScopedXI2Event);
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Initializes a test touchpad device for scroll events.
9323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void SetUpTouchPadForTest(unsigned int deviceid);
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Initializes a list of touchscreen devices for touch events.
96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void SetUpTouchDevicesForTest(const std::vector<unsigned int>& devices);
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace ui
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif  // UI_EVENTS_TEST_EVENTS_TEST_UTILS_X11_H_
101