]> git.lizzy.rs Git - irrlicht.git/blobdiff - source/Irrlicht/CIrrDeviceSDL.cpp
Use swap_control from MESA and EXT before SGI
[irrlicht.git] / source / Irrlicht / CIrrDeviceSDL.cpp
index 331c8e593d789e21561bf93738ba5fefbd7d4afd..84a6d6438ebe6e806a529523255da3ab2e95700c 100644 (file)
@@ -119,13 +119,13 @@ CIrrDeviceSDL::CIrrDeviceSDL(const SIrrlichtCreationParameters& param)
 \r
        if ( ++SDLDeviceInstances == 1 )\r
        {\r
-               // Initialize SDL... Timer for sleep, video for the obvious, and\r
-               // noparachute prevents SDL from catching fatal errors.\r
-               if (SDL_Init( SDL_INIT_TIMER|SDL_INIT_VIDEO|\r
+               u32 flags = SDL_INIT_TIMER | SDL_INIT_EVENTS;\r
+               if (CreationParams.DriverType != video::EDT_NULL)\r
+                       flags |= SDL_INIT_VIDEO;\r
 #if defined(_IRR_COMPILE_WITH_JOYSTICK_EVENTS_)\r
-                                       SDL_INIT_JOYSTICK|\r
+               flags |= SDL_INIT_JOYSTICK;\r
 #endif\r
-                                       SDL_INIT_NOPARACHUTE ) < 0)\r
+               if (SDL_Init(flags) < 0)\r
                {\r
                        os::Printer::log( "Unable to initialize SDL!", SDL_GetError());\r
                        Close = true;\r
@@ -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