1 #ifndef OPENMW_COMPONENTS_SDLUTIL_SDLINPUTWRAPPER_H
2 #define OPENMW_COMPONENTS_SDLUTIL_SDLINPUTWRAPPER_H
3 
4 #include <map>
5 
6 #include <osg/ref_ptr>
7 
8 #include <SDL_events.h>
9 #include <SDL_version.h>
10 
11 #include "events.hpp"
12 
13 namespace osgViewer
14 {
15     class Viewer;
16 }
17 
18 namespace SDLUtil
19 {
20     /// \brief A wrapper around SDL's event queue, mostly used for handling input-related events.
21     class InputWrapper
22     {
23     public:
24         InputWrapper(SDL_Window *window, osg::ref_ptr<osgViewer::Viewer> viewer, bool grab);
25         ~InputWrapper();
26 
setMouseEventCallback(MouseListener * listen)27         void setMouseEventCallback(MouseListener* listen) { mMouseListener = listen; }
setSensorEventCallback(SensorListener * listen)28         void setSensorEventCallback(SensorListener* listen) { mSensorListener = listen; }
setKeyboardEventCallback(KeyListener * listen)29         void setKeyboardEventCallback(KeyListener* listen) { mKeyboardListener = listen; }
setWindowEventCallback(WindowListener * listen)30         void setWindowEventCallback(WindowListener* listen) { mWindowListener = listen; }
setControllerEventCallback(ControllerListener * listen)31         void setControllerEventCallback(ControllerListener* listen) { mConListener = listen; }
32 
33         void capture(bool windowEventsOnly);
34         bool isModifierHeld(int mod);
35         bool isKeyDown(SDL_Scancode key);
36 
37         void setMouseVisible (bool visible);
38         void setMouseRelative(bool relative);
getMouseRelative()39         bool getMouseRelative() { return mMouseRelative; }
40         void setGrabPointer(bool grab);
41 
42         void warpMouse(int x, int y);
43 
44         void updateMouseSettings();
45 
46     private:
47         void handleWindowEvent(const SDL_Event& evt);
48 
49         bool _handleWarpMotion(const SDL_MouseMotionEvent& evt);
50         void _wrapMousePointer(const SDL_MouseMotionEvent &evt);
51         MouseMotionEvent _packageMouseMotion(const SDL_Event& evt);
52 
53         SDL_Window* mSDLWindow;
54         osg::ref_ptr<osgViewer::Viewer> mViewer;
55 
56         MouseListener* mMouseListener;
57         SensorListener* mSensorListener;
58         KeyListener* mKeyboardListener;
59         WindowListener* mWindowListener;
60         ControllerListener* mConListener;
61 
62         Uint16 mWarpX;
63         Uint16 mWarpY;
64         bool mWarpCompensate;
65         bool mWrapPointer;
66 
67         bool mAllowGrab;
68         bool mWantMouseVisible;
69         bool mWantGrab;
70         bool mWantRelative;
71         bool mGrabPointer;
72         bool mMouseRelative;
73 
74         bool mFirstMouseMove;
75 
76         Sint32 mMouseZ;
77         Sint32 mMouseX;
78         Sint32 mMouseY;
79 
80         bool mWindowHasFocus;
81         bool mMouseInWindow;
82     };
83 
84 }
85 
86 #endif
87