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