]> git.lizzy.rs Git - irrlicht.git/commitdiff
SDL: Always set X, Y, Shift and Control in mouse input events
authorDS <vorunbekannt75@web.de>
Sun, 16 Oct 2022 15:42:15 +0000 (17:42 +0200)
committerGitHub <noreply@github.com>
Sun, 16 Oct 2022 15:42:15 +0000 (17:42 +0200)
source/Irrlicht/CIrrDeviceSDL.cpp

index ea309688892328e714311ddb5b483e5d9657b55b..84a6d6438ebe6e806a529523255da3ab2e95700c 100644 (file)
@@ -270,7 +270,7 @@ bool CIrrDeviceSDL::createWindow()
        {\r
                SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0);\r
                SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0);\r
-       }       \r
+       }\r
 \r
        SDL_CreateWindowAndRenderer(0, 0, SDL_Flags, &Window, &Renderer); // 0,0 will use the canvas size\r
 \r
@@ -463,7 +463,9 @@ bool CIrrDeviceSDL::run()
 \r
                switch ( SDL_event.type )\r
                {\r
-               case SDL_MOUSEMOTION:\r
+               case SDL_MOUSEMOTION: {\r
+                       SDL_Keymod keymod = SDL_GetModState();\r
+\r
                        irrevent.EventType = irr::EET_MOUSE_INPUT_EVENT;\r
                        irrevent.MouseInput.Event = irr::EMIE_MOUSE_MOVED;\r
                        MouseX = irrevent.MouseInput.X = SDL_event.motion.x;\r
@@ -471,20 +473,35 @@ bool CIrrDeviceSDL::run()
                        MouseXRel = SDL_event.motion.xrel;\r
                        MouseYRel = SDL_event.motion.yrel;\r
                        irrevent.MouseInput.ButtonStates = MouseButtonStates;\r
+                       irrevent.MouseInput.Shift = (keymod & KMOD_SHIFT) != 0;\r
+                       irrevent.MouseInput.Control = (keymod & KMOD_CTRL) != 0;\r
 \r
                        postEventFromUser(irrevent);\r
                        break;\r
-               case SDL_MOUSEWHEEL:\r
+               }\r
+               case SDL_MOUSEWHEEL: {\r
+                       SDL_Keymod keymod = SDL_GetModState();\r
+\r
                        irrevent.EventType = irr::EET_MOUSE_INPUT_EVENT;\r
                        irrevent.MouseInput.Event = irr::EMIE_MOUSE_WHEEL;\r
                        irrevent.MouseInput.Wheel = static_cast<float>(SDL_event.wheel.y);\r
+                       irrevent.MouseInput.Shift = (keymod & KMOD_SHIFT) != 0;\r
+                       irrevent.MouseInput.Control = (keymod & KMOD_CTRL) != 0;\r
+                       irrevent.MouseInput.X = MouseX;\r
+                       irrevent.MouseInput.Y = MouseY;\r
+\r
                        postEventFromUser(irrevent);\r
                        break;\r
+               }\r
                case SDL_MOUSEBUTTONDOWN:\r
-               case SDL_MOUSEBUTTONUP:\r
+               case SDL_MOUSEBUTTONUP: {\r
+                       SDL_Keymod keymod = SDL_GetModState();\r
+\r
                        irrevent.EventType = irr::EET_MOUSE_INPUT_EVENT;\r
                        irrevent.MouseInput.X = SDL_event.button.x;\r
                        irrevent.MouseInput.Y = SDL_event.button.y;\r
+                       irrevent.MouseInput.Shift = (keymod & KMOD_SHIFT) != 0;\r
+                       irrevent.MouseInput.Control = (keymod & KMOD_CTRL) != 0;\r
 \r
                        irrevent.MouseInput.Event = irr::EMIE_MOUSE_MOVED;\r
 \r
@@ -579,6 +596,7 @@ bool CIrrDeviceSDL::run()
                                }\r
                        }\r
                        break;\r
+               }\r
 \r
                case SDL_TEXTINPUT:\r
                        {\r
@@ -926,7 +944,7 @@ void CIrrDeviceSDL::setResizable(bool resize)
        os::Printer::log("Resizable not available on the web." , ELL_WARNING);\r
        return;\r
 #else // !_IRR_EMSCRIPTEN_PLATFORM_\r
-       if (resize != Resizable) { \r
+       if (resize != Resizable) {\r
                if (resize)\r
                        SDL_Flags |= SDL_WINDOW_RESIZABLE;\r
                else\r