From 337d8fa048e744b515cce651dfdfaf157d54344c Mon Sep 17 00:00:00 2001 From: Sasha Szpakowski Date: Fri, 18 Oct 2024 20:22:26 -0300 Subject: [PATCH] remove source code support for SDL2 --- CMakeLists.txt | 4 +- src/common/android.cpp | 12 - src/common/config.h | 4 - src/common/delay.cpp | 6 - src/love.cpp | 6 - src/modules/event/sdl/Event.cpp | 199 +----- src/modules/event/sdl/Event.h | 4 - src/modules/filesystem/physfs/Filesystem.cpp | 11 - src/modules/filesystem/wrap_Filesystem.cpp | 17 +- src/modules/graphics/opengl/Graphics.cpp | 24 - src/modules/graphics/opengl/OpenGL.cpp | 17 - src/modules/graphics/vulkan/Graphics.cpp | 32 +- src/modules/joystick/sdl/Joystick.cpp | 494 ++++---------- src/modules/joystick/sdl/Joystick.h | 49 +- src/modules/joystick/sdl/JoystickModule.cpp | 103 --- src/modules/joystick/sdl/JoystickModule.h | 4 +- src/modules/joystick/sdl/JoystickSDL3.cpp | 658 ------------------- src/modules/joystick/sdl/JoystickSDL3.h | 145 ---- src/modules/keyboard/Keyboard.cpp | 23 - src/modules/keyboard/Keyboard.h | 23 - src/modules/keyboard/sdl/Keyboard.cpp | 121 ---- src/modules/keyboard/sdl/Keyboard.h | 11 - src/modules/love/boot.lua | 8 +- src/modules/love/love.cpp | 34 - src/modules/mouse/sdl/Cursor.cpp | 50 +- src/modules/mouse/sdl/Cursor.h | 4 - src/modules/mouse/sdl/Mouse.cpp | 54 -- src/modules/sensor/sdl/Sensor.cpp | 48 -- src/modules/sensor/sdl/Sensor.h | 4 - src/modules/system/sdl/System.cpp | 32 - src/modules/system/sdl/System.h | 4 - src/modules/thread/sdl/Thread.h | 4 - src/modules/thread/sdl/threads.cpp | 23 - src/modules/thread/sdl/threads.h | 15 - src/modules/touch/sdl/Touch.cpp | 18 - src/modules/touch/sdl/Touch.h | 4 - src/modules/window/sdl/Window.cpp | 311 +-------- src/modules/window/sdl/Window.h | 4 - 38 files changed, 163 insertions(+), 2421 deletions(-) delete mode 100644 src/modules/joystick/sdl/JoystickSDL3.cpp delete mode 100644 src/modules/joystick/sdl/JoystickSDL3.h diff --git a/CMakeLists.txt b/CMakeLists.txt index d3ec6ff8a..4f8001f06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -802,8 +802,6 @@ target_link_libraries(love_joystick_root PUBLIC add_library(love_joystick_sdl STATIC src/modules/joystick/sdl/Joystick.cpp src/modules/joystick/sdl/Joystick.h - src/modules/joystick/sdl/JoystickSDL3.cpp - src/modules/joystick/sdl/JoystickSDL3.h src/modules/joystick/sdl/JoystickModule.cpp src/modules/joystick/sdl/JoystickModule.h ) @@ -1982,7 +1980,7 @@ love_group_projects(NAME "liblove" NESTED TARGETS ${LIBLOVE_DEPENDENCIES}) love_group_projects(NAME "liblove/libraries" NESTED TARGETS ${LIBLOVE_LIBRARIES}) love_group_projects(NAME "liblove" TARGETS liblove ${LOVE_EXTRA_DEPENDECIES}) -love_group_projects(NAME "lovedep" TARGETS lovedep::SDL2 lovedep::Freetype lovedep::Harfbuzz lovedep::OpenAL lovedep::Modplug lovedep::Theora lovedep::Vorbis lovedep::Ogg lovedep::Zlib lovedep::Lua) +love_group_projects(NAME "lovedep" TARGETS lovedep::SDL lovedep::Freetype lovedep::Harfbuzz lovedep::OpenAL lovedep::Modplug lovedep::Theora lovedep::Vorbis lovedep::Ogg lovedep::Zlib lovedep::Lua) love_group_projects(NAME "lovedep" TARGETS lua51 alcommon al-excommon harfbuzz-subset zlib) diff --git a/src/common/android.cpp b/src/common/android.cpp index 6be664093..6fcf98309 100644 --- a/src/common/android.cpp +++ b/src/common/android.cpp @@ -27,11 +27,7 @@ #include #include -#if __has_include() #include -#else -#include -#endif #include #include @@ -44,14 +40,6 @@ #include "libraries/physfs/physfs.h" #include "filesystem/physfs/PhysfsIo.h" -// Backward compatibility -#if !SDL_VERSION_ATLEAST(3, 0, 0) -#define SDL_GetAndroidJNIEnv SDL_AndroidGetJNIEnv -#define SDL_GetAndroidActivity SDL_AndroidGetActivity -#define SDL_GetAndroidInternalStoragePath SDL_AndroidGetInternalStoragePath -#define SDL_GetAndroidExternalStoragePath SDL_AndroidGetExternalStoragePath -#endif - namespace love { namespace android diff --git a/src/common/config.h b/src/common/config.h index 11ede38c9..63f507d92 100644 --- a/src/common/config.h +++ b/src/common/config.h @@ -123,10 +123,6 @@ # define LOVE_LEGENDARY_APP_ARGV_HACK #endif -#if defined(LOVE_ANDROID) || defined(LOVE_IOS) -# define LOVE_LEGENDARY_ACCELEROMETER_AS_JOYSTICK_HACK -#endif - #if defined(LOVE_WINDOWS) || defined(LOVE_LINUX) || defined(LOVE_ANDROID) # define LOVE_GRAPHICS_VULKAN #endif diff --git a/src/common/delay.cpp b/src/common/delay.cpp index c853743f9..8d1b0abb4 100644 --- a/src/common/delay.cpp +++ b/src/common/delay.cpp @@ -20,13 +20,7 @@ #include "delay.h" -#if __has_include() #include -#include -#else -#include -#include -#endif namespace love { diff --git a/src/love.cpp b/src/love.cpp index 8c92bca30..b26796957 100644 --- a/src/love.cpp +++ b/src/love.cpp @@ -23,17 +23,11 @@ #include "common/Variant.h" #include "modules/love/love.h" -#if __has_include() #include -#else -#include -#endif #ifdef LOVE_BUILD_EXE -#if SDL_VERSION_ATLEAST(3, 0, 0) #include -#endif // Lua extern "C" { diff --git a/src/modules/event/sdl/Event.cpp b/src/modules/event/sdl/Event.cpp index bee8090af..ceedaa9f8 100644 --- a/src/modules/event/sdl/Event.cpp +++ b/src/modules/event/sdl/Event.cpp @@ -35,63 +35,7 @@ #include -#if __has_include() -#include -#else -#include -#endif - -#if SDL_VERSION_ATLEAST(3, 0, 0) -#include "joystick/sdl/JoystickSDL3.h" -#else #include "joystick/sdl/Joystick.h" -#endif - -#if !SDL_VERSION_ATLEAST(3, 0, 0) -#define SDL_EVENT_DID_ENTER_BACKGROUND SDL_APP_DIDENTERBACKGROUND -#define SDL_EVENT_WILL_ENTER_FOREGROUND SDL_APP_WILLENTERFOREGROUND -#define SDL_EVENT_KEY_DOWN SDL_KEYDOWN -#define SDL_EVENT_KEY_UP SDL_KEYUP -#define SDL_EVENT_TEXT_INPUT SDL_TEXTINPUT -#define SDL_EVENT_TEXT_EDITING SDL_TEXTEDITING -#define SDL_EVENT_MOUSE_MOTION SDL_MOUSEMOTION -#define SDL_EVENT_MOUSE_BUTTON_DOWN SDL_MOUSEBUTTONDOWN -#define SDL_EVENT_MOUSE_BUTTON_UP SDL_MOUSEBUTTONUP -#define SDL_EVENT_MOUSE_WHEEL SDL_MOUSEWHEEL -#define SDL_EVENT_FINGER_DOWN SDL_FINGERDOWN -#define SDL_EVENT_FINGER_UP SDL_FINGERUP -#define SDL_EVENT_FINGER_MOTION SDL_FINGERMOTION - -#define SDL_EVENT_DROP_FILE SDL_DROPFILE -#define SDL_EVENT_QUIT SDL_QUIT -#define SDL_EVENT_TERMINATING SDL_APP_TERMINATING -#define SDL_EVENT_LOW_MEMORY SDL_APP_LOWMEMORY -#define SDL_EVENT_LOCALE_CHANGED SDL_LOCALECHANGED -#define SDL_EVENT_SENSOR_UPDATE SDL_SENSORUPDATE - -#define SDL_EVENT_JOYSTICK_BUTTON_DOWN SDL_JOYBUTTONDOWN -#define SDL_EVENT_JOYSTICK_BUTTON_UP SDL_JOYBUTTONUP -#define SDL_EVENT_JOYSTICK_AXIS_MOTION SDL_JOYAXISMOTION -#define SDL_EVENT_JOYSTICK_HAT_MOTION SDL_JOYHATMOTION -#define SDL_EVENT_JOYSTICK_ADDED SDL_JOYDEVICEADDED -#define SDL_EVENT_JOYSTICK_REMOVED SDL_JOYDEVICEREMOVED -#define SDL_EVENT_GAMEPAD_BUTTON_DOWN SDL_CONTROLLERBUTTONDOWN -#define SDL_EVENT_GAMEPAD_BUTTON_UP SDL_CONTROLLERBUTTONUP -#define SDL_EVENT_GAMEPAD_AXIS_MOTION SDL_CONTROLLERAXISMOTION -#define SDL_EVENT_GAMEPAD_SENSOR_UPDATE SDL_CONTROLLERSENSORUPDATE - -#define SDL_EVENT_WINDOW_FOCUS_GAINED SDL_WINDOWEVENT_FOCUS_GAINED -#define SDL_EVENT_WINDOW_FOCUS_LOST SDL_WINDOWEVENT_FOCUS_LOST -#define SDL_EVENT_WINDOW_MOUSE_ENTER SDL_WINDOWEVENT_ENTER -#define SDL_EVENT_WINDOW_MOUSE_LEAVE SDL_WINDOWEVENT_LEAVE -#define SDL_EVENT_WINDOW_SHOWN SDL_WINDOWEVENT_SHOWN -#define SDL_EVENT_WINDOW_HIDDEN SDL_WINDOWEVENT_HIDDEN -#define SDL_EVENT_WINDOW_RESIZED SDL_WINDOWEVENT_RESIZED -#define SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED SDL_WINDOWEVENT_SIZE_CHANGED -#define SDL_EVENT_WINDOW_MINIMIZED SDL_WINDOWEVENT_MINIMIZED -#define SDL_EVENT_WINDOW_RESTORED SDL_WINDOWEVENT_RESTORED - -#endif namespace love { @@ -139,12 +83,7 @@ static void normalizedToDPICoords(double *x, double *y) // SDL's event watch callbacks trigger when the event is actually posted inside // SDL, unlike with SDL_PollEvents. This is useful for some events which require // handling inside the function which triggered them on some backends. -#if SDL_VERSION_ATLEAST(3, 0, 0) -static bool -#else -static int -#endif -SDLCALL watchAppEvents(void * /*udata*/, SDL_Event *event) +static bool SDLCALL watchAppEvents(void * /*udata*/, SDL_Event *event) { auto gfx = Module::getInstance(Module::M_GRAPHICS); @@ -168,11 +107,7 @@ SDLCALL watchAppEvents(void * /*udata*/, SDL_Event *event) Event::Event() : love::event::Event("love.event.sdl") { -#if SDL_VERSION_ATLEAST(3, 0, 0) if (!SDL_InitSubSystem(SDL_INIT_EVENTS)) -#else - if (SDL_InitSubSystem(SDL_INIT_EVENTS) < 0) -#endif throw love::Exception("Could not initialize SDL events subsystem (%s)", SDL_GetError()); SDL_AddEventWatch(watchAppEvents, this); @@ -180,11 +115,7 @@ Event::Event() Event::~Event() { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_RemoveEventWatch(watchAppEvents, this); -#else - SDL_DelEventWatch(watchAppEvents, this); -#endif SDL_QuitSubSystem(SDL_INIT_EVENTS); } @@ -211,11 +142,7 @@ Message *Event::wait() SDL_Event e; -#if SDL_VERSION_ATLEAST(3, 0, 0) if (!SDL_WaitEvent(&e)) -#else - if (SDL_WaitEvent(&e) != 1) -#endif return nullptr; return convert(e); @@ -277,19 +204,11 @@ Message *Event::convert(const SDL_Event &e) break; } -#if SDL_VERSION_ATLEAST(3, 0, 0) love::keyboard::sdl::Keyboard::getConstant(e.key.key, key); -#else - love::keyboard::sdl::Keyboard::getConstant(e.key.keysym.sym, key); -#endif if (!love::keyboard::Keyboard::getConstant(key, txt)) txt = "unknown"; -#if SDL_VERSION_ATLEAST(3, 0, 0) love::keyboard::sdl::Keyboard::getConstant(e.key.scancode, scancode); -#else - love::keyboard::sdl::Keyboard::getConstant(e.key.keysym.scancode, scancode); -#endif if (!love::keyboard::Keyboard::getConstant(scancode, txt2)) txt2 = "unknown"; @@ -299,19 +218,11 @@ Message *Event::convert(const SDL_Event &e) msg = new Message("keypressed", vargs); break; case SDL_EVENT_KEY_UP: -#if SDL_VERSION_ATLEAST(3, 0, 0) love::keyboard::sdl::Keyboard::getConstant(e.key.key, key); -#else - love::keyboard::sdl::Keyboard::getConstant(e.key.keysym.sym, key); -#endif if (!love::keyboard::Keyboard::getConstant(key, txt)) txt = "unknown"; -#if SDL_VERSION_ATLEAST(3, 0, 0) love::keyboard::sdl::Keyboard::getConstant(e.key.scancode, scancode); -#else - love::keyboard::sdl::Keyboard::getConstant(e.key.keysym.scancode, scancode); -#endif if (!love::keyboard::Keyboard::getConstant(scancode, txt2)) txt2 = "unknown"; @@ -389,16 +300,6 @@ Message *Event::convert(const SDL_Event &e) case SDL_EVENT_MOUSE_WHEEL: vargs.emplace_back((double) e.wheel.x); vargs.emplace_back((double) e.wheel.y); -#if SDL_VERSION_ATLEAST(2, 0, 18) && !SDL_VERSION_ATLEAST(3, 0, 0) - // These values will be garbage if 2.0.18+ headers are used but a lower - // version of SDL is used at runtime, but other bits of code already - // prevent running in that situation. - vargs.emplace_back((double) e.wheel.preciseX); - vargs.emplace_back((double) e.wheel.preciseY); -#else - vargs.emplace_back((double) e.wheel.x); - vargs.emplace_back((double) e.wheel.y); -#endif txt = e.wheel.direction == SDL_MOUSEWHEEL_FLIPPED ? "flipped" : "standard"; vargs.emplace_back(txt, strlen(txt)); @@ -413,11 +314,7 @@ Message *Event::convert(const SDL_Event &e) // (and SDL doesn't differentiate.) Non-screen touch devices like Mac // trackpads won't give touch coords in the window's coordinate-space. #ifndef LOVE_MACOS -#if SDL_VERSION_ATLEAST(3, 0, 0) touchinfo.id = (int64) e.tfinger.fingerID; -#else - touchinfo.id = (int64)e.tfinger.fingerId; -#endif touchinfo.x = e.tfinger.x; touchinfo.y = e.tfinger.y; touchinfo.dx = e.tfinger.dx; @@ -463,12 +360,11 @@ Message *Event::convert(const SDL_Event &e) case SDL_EVENT_GAMEPAD_BUTTON_DOWN: case SDL_EVENT_GAMEPAD_BUTTON_UP: case SDL_EVENT_GAMEPAD_AXIS_MOTION: -#if SDL_VERSION_ATLEAST(2, 0, 14) && defined(LOVE_ENABLE_SENSOR) +#if defined(LOVE_ENABLE_SENSOR) case SDL_EVENT_GAMEPAD_SENSOR_UPDATE: #endif msg = convertJoystickEvent(e); break; -#if SDL_VERSION_ATLEAST(3, 0, 0) case SDL_EVENT_WINDOW_FOCUS_GAINED: case SDL_EVENT_WINDOW_FOCUS_LOST: case SDL_EVENT_WINDOW_MOUSE_ENTER: @@ -479,17 +375,9 @@ Message *Event::convert(const SDL_Event &e) case SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED: case SDL_EVENT_WINDOW_MINIMIZED: case SDL_EVENT_WINDOW_RESTORED: -#else - case SDL_WINDOWEVENT: -#endif msg = convertWindowEvent(e); break; -#if SDL_VERSION_ATLEAST(3, 0, 0) case SDL_EVENT_DISPLAY_ORIENTATION: -#else - case SDL_DISPLAYEVENT: - if (e.display.event == SDL_DISPLAYEVENT_ORIENTATION) -#endif { auto orientation = window::Window::ORIENTATION_UNKNOWN; switch ((SDL_DisplayOrientation) e.display.data1) @@ -515,7 +403,6 @@ Message *Event::convert(const SDL_Event &e) if (!window::Window::getConstant(orientation, txt)) txt = "unknown"; -#if SDL_VERSION_ATLEAST(3, 0, 0) int count = 0; int displayindex = 0; SDL_DisplayID *displays = SDL_GetDisplays(&count); @@ -529,9 +416,6 @@ Message *Event::convert(const SDL_Event &e) } SDL_free(displays); vargs.emplace_back((double)(displayindex + 1)); -#else - vargs.emplace_back((double)(e.display.display + 1)); -#endif vargs.emplace_back(txt, strlen(txt)); msg = new Message("displayrotated", vargs); @@ -541,11 +425,7 @@ Message *Event::convert(const SDL_Event &e) filesystem = Module::getInstance(Module::M_FILESYSTEM); if (filesystem != nullptr) { -#if SDL_VERSION_ATLEAST(3, 0, 0) const char *filepath = e.drop.data; -#else - const char *filepath = e.drop.file; -#endif // Allow mounting any dropped path, so zips or dirs can be mounted. filesystem->allowMountingForPath(filepath); @@ -562,9 +442,6 @@ Message *Event::convert(const SDL_Event &e) file->release(); } } -#if !SDL_VERSION_ATLEAST(3, 0, 0) - SDL_free(e.drop.file); -#endif break; case SDL_EVENT_QUIT: case SDL_EVENT_TERMINATING: @@ -573,11 +450,9 @@ Message *Event::convert(const SDL_Event &e) case SDL_EVENT_LOW_MEMORY: msg = new Message("lowmemory"); break; -#if SDL_VERSION_ATLEAST(2, 0, 14) case SDL_EVENT_LOCALE_CHANGED: msg = new Message("localechanged"); break; -#endif case SDL_EVENT_SENSOR_UPDATE: sensorInstance = Module::getInstance(M_SENSOR); if (sensorInstance) @@ -587,21 +462,13 @@ Message *Event::convert(const SDL_Event &e) for (void *s: sensors) { SDL_Sensor *sensor = (SDL_Sensor *) s; -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_SensorID id = SDL_GetSensorID(sensor); -#else - SDL_SensorID id = SDL_SensorGetInstanceID(sensor); -#endif if (e.sensor.which == id) { // Found sensor const char *sensorType; -#if SDL_VERSION_ATLEAST(3, 0, 0) auto sdltype = SDL_GetSensorType(sensor); -#else - auto sdltype = SDL_SensorGetType(sensor); -#endif if (!sensor::Sensor::getConstant(sensor::sdl::Sensor::convert(sdltype), sensorType)) sensorType = "unknown"; @@ -686,13 +553,8 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const case SDL_EVENT_GAMEPAD_BUTTON_DOWN: case SDL_EVENT_GAMEPAD_BUTTON_UP: { -#if SDL_VERSION_ATLEAST(3, 0, 0) const auto &b = e.gbutton; if (!joystick::sdl::Joystick::getConstant((SDL_GamepadButton) b.button, padbutton)) -#else - const auto &b = e.cbutton; - if (!joystick::sdl::Joystick::getConstant((SDL_GameControllerButton) b.button, padbutton)) -#endif break; if (!joystick::Joystick::getConstant(padbutton, txt)) @@ -709,21 +571,12 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const } break; case SDL_EVENT_GAMEPAD_AXIS_MOTION: -#if SDL_VERSION_ATLEAST(3, 0, 0) if (joystick::sdl::Joystick::getConstant((SDL_GamepadAxis) e.gaxis.axis, padaxis)) -#else - if (joystick::sdl::Joystick::getConstant((SDL_GameControllerAxis) e.caxis.axis, padaxis)) -#endif { if (!joystick::Joystick::getConstant(padaxis, txt)) break; -#if SDL_VERSION_ATLEAST(3, 0, 0) const auto &a = e.gaxis; -#else - const auto &a = e.caxis; -#endif - stick = joymodule->getJoystickFromID(a.which); if (!stick) break; @@ -754,14 +607,10 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const msg = new Message("joystickremoved", vargs); } break; -#if SDL_VERSION_ATLEAST(2, 0, 14) && defined(LOVE_ENABLE_SENSOR) +#if defined(LOVE_ENABLE_SENSOR) case SDL_EVENT_GAMEPAD_SENSOR_UPDATE: { -#if SDL_VERSION_ATLEAST(3, 0, 0) const auto &sens = e.gsensor; -#else - const auto &sens = e.csensor; -#endif stick = joymodule->getJoystickFromID(sens.which); if (stick) { @@ -781,7 +630,7 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const } } break; -#endif // SDL_VERSION_ATLEAST(2, 0, 14) && defined(LOVE_ENABLE_SENSOR) +#endif // defined(LOVE_ENABLE_SENSOR) default: break; } @@ -799,11 +648,7 @@ Message *Event::convertWindowEvent(const SDL_Event &e) window::Window *win = nullptr; graphics::Graphics *gfx = nullptr; -#if SDL_VERSION_ATLEAST(3, 0, 0) auto event = e.type; -#else - auto event = e.window.event; -#endif switch (event) { @@ -822,7 +667,6 @@ Message *Event::convertWindowEvent(const SDL_Event &e) vargs.emplace_back(event == SDL_EVENT_WINDOW_SHOWN); msg = new Message("visible", vargs); break; -#if SDL_VERSION_ATLEAST(3, 0, 0) case SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED: { double width = e.window.data1; @@ -852,41 +696,6 @@ Message *Event::convertWindowEvent(const SDL_Event &e) msg = new Message("resize", vargs); } break; -#else - case SDL_EVENT_WINDOW_RESIZED: - { - double width = e.window.data1; - double height = e.window.data2; - - gfx = Module::getInstance(Module::M_GRAPHICS); - win = Module::getInstance(Module::M_WINDOW); - - // WINDOWEVENT_SIZE_CHANGED will always occur before RESIZED. - // The size values in the Window aren't necessarily the same as the - // graphics size, which is what we want to output. - if (gfx) - { - width = gfx->getWidth(); - height = gfx->getHeight(); - } - else if (win) - { - width = win->getWidth(); - height = win->getHeight(); - windowToDPICoords(&width, &height); - } - - vargs.emplace_back(width); - vargs.emplace_back(height); - msg = new Message("resize", vargs); - } - break; - case SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED: - win = Module::getInstance(Module::M_WINDOW); - if (win) - win->onSizeChanged(e.window.data1, e.window.data2); - break; -#endif case SDL_EVENT_WINDOW_MINIMIZED: case SDL_EVENT_WINDOW_RESTORED: #ifdef LOVE_ANDROID diff --git a/src/modules/event/sdl/Event.h b/src/modules/event/sdl/Event.h index b06ad71db..78e166480 100644 --- a/src/modules/event/sdl/Event.h +++ b/src/modules/event/sdl/Event.h @@ -26,11 +26,7 @@ #include "audio/Source.h" // SDL -#if __has_include() #include -#else -#include -#endif namespace love { diff --git a/src/modules/filesystem/physfs/Filesystem.cpp b/src/modules/filesystem/physfs/Filesystem.cpp index b174a2646..b4155ff0b 100644 --- a/src/modules/filesystem/physfs/Filesystem.cpp +++ b/src/modules/filesystem/physfs/Filesystem.cpp @@ -62,11 +62,7 @@ #include #ifdef LOVE_ANDROID -#if __has_include() #include -#else -#include -#endif #include "common/android.h" #endif @@ -634,17 +630,10 @@ std::string Filesystem::getFullCommonPath(CommonPath path) #elif defined(LOVE_ANDROID) std::string storagepath; -#if SDL_VERSION_ATLEAST(3, 0, 0) if (isAndroidSaveExternal()) storagepath = SDL_GetAndroidExternalStoragePath(); else storagepath = SDL_GetAndroidInternalStoragePath(); -#else - if (isAndroidSaveExternal()) - storagepath = SDL_AndroidGetExternalStoragePath(); - else - storagepath = SDL_AndroidGetInternalStoragePath(); -#endif switch (path) { diff --git a/src/modules/filesystem/wrap_Filesystem.cpp b/src/modules/filesystem/wrap_Filesystem.cpp index 88cbe15e4..20e571144 100644 --- a/src/modules/filesystem/wrap_Filesystem.cpp +++ b/src/modules/filesystem/wrap_Filesystem.cpp @@ -34,13 +34,7 @@ #endif // SDL -#if __has_include() #include -#include -#else -#include -#include -#endif // STL #include @@ -939,11 +933,7 @@ int extloader(lua_State *L) } } -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_SharedObject *handle = nullptr; -#else - void *handle = nullptr; -#endif auto *inst = instance(); #ifdef LOVE_ANDROID @@ -1004,12 +994,7 @@ int extloader(lua_State *L) // We look for both loveopen_ and luaopen_, so libraries with specific love support // can tell when they've been loaded by love. -#if SDL_VERSION_ATLEAST(3, 0, 0) - SDL_FunctionPointer func = nullptr; -#else - void *func = nullptr; -#endif - func = SDL_LoadFunction(handle, ("loveopen_" + tokenized_function).c_str()); + SDL_FunctionPointer func = SDL_LoadFunction(handle, ("loveopen_" + tokenized_function).c_str()); if (!func) func = SDL_LoadFunction(handle, ("luaopen_" + tokenized_function).c_str()); diff --git a/src/modules/graphics/opengl/Graphics.cpp b/src/modules/graphics/opengl/Graphics.cpp index e6215ba8a..88bc855d5 100644 --- a/src/modules/graphics/opengl/Graphics.cpp +++ b/src/modules/graphics/opengl/Graphics.cpp @@ -45,13 +45,7 @@ #include #ifdef LOVE_IOS -#if __has_include() #include -#include -#else -#include -#include -#endif #endif namespace love @@ -288,23 +282,12 @@ GLuint Graphics::getSystemBackbufferFBO() const { #ifdef LOVE_IOS // Hack: iOS uses a custom FBO. -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_PropertiesID props = SDL_GetWindowProperties(SDL_GL_GetCurrentWindow()); GLuint resolveframebuffer = (GLuint)SDL_GetNumberProperty(props, SDL_PROP_WINDOW_UIKIT_OPENGL_RESOLVE_FRAMEBUFFER_NUMBER, 0); if (resolveframebuffer != 0) return resolveframebuffer; else return (GLuint)SDL_GetNumberProperty(props, SDL_PROP_WINDOW_UIKIT_OPENGL_FRAMEBUFFER_NUMBER, 0); -#else - SDL_SysWMinfo info = {}; - SDL_VERSION(&info.version); - SDL_GetWindowWMInfo(SDL_GL_GetCurrentWindow(), &info); - - if (info.info.uikit.resolveFramebuffer != 0) - return info.info.uikit.resolveFramebuffer; - else - return info.info.uikit.framebuffer; -#endif #else return 0; #endif @@ -1306,16 +1289,9 @@ void Graphics::present(void *screenshotCallbackData) #ifdef LOVE_IOS // Hack: SDL's color renderbuffer must be bound when swapBuffers is called. -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_PropertiesID props = SDL_GetWindowProperties(SDL_GL_GetCurrentWindow()); GLuint colorbuffer = (GLuint)SDL_GetNumberProperty(props, SDL_PROP_WINDOW_UIKIT_OPENGL_RENDERBUFFER_NUMBER, 0); glBindRenderbuffer(GL_RENDERBUFFER, colorbuffer); -#else - SDL_SysWMinfo info = {}; - SDL_VERSION(&info.version); - SDL_GetWindowWMInfo(SDL_GL_GetCurrentWindow(), &info); - glBindRenderbuffer(GL_RENDERBUFFER, info.info.uikit.colorbuffer); -#endif #endif for (StreamBuffer *buffer : batchedDrawState.vb) diff --git a/src/modules/graphics/opengl/OpenGL.cpp b/src/modules/graphics/opengl/OpenGL.cpp index c7a4a4d6d..22c24c970 100644 --- a/src/modules/graphics/opengl/OpenGL.cpp +++ b/src/modules/graphics/opengl/OpenGL.cpp @@ -37,20 +37,10 @@ #include // For SDL_GL_GetProcAddress. -#if __has_include() #include -#else -#include -#endif #ifdef LOVE_IOS -#if __has_include() #include -#include -#else -#include -#include -#endif #endif #ifdef LOVE_ANDROID @@ -972,15 +962,8 @@ GLuint OpenGL::getDefaultFBO() const { #ifdef LOVE_IOS // Hack: iOS uses a custom FBO. -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_PropertiesID props = SDL_GetWindowProperties(SDL_GL_GetCurrentWindow()); return (GLuint)SDL_GetNumberProperty(props, SDL_PROP_WINDOW_UIKIT_OPENGL_FRAMEBUFFER_NUMBER, 0); -#else - SDL_SysWMinfo info = {}; - SDL_VERSION(&info.version); - SDL_GetWindowWMInfo(SDL_GL_GetCurrentWindow(), &info); - return info.info.uikit.framebuffer; -#endif #else return 0; #endif diff --git a/src/modules/graphics/vulkan/Graphics.cpp b/src/modules/graphics/vulkan/Graphics.cpp index f0965ad89..4613bec1d 100644 --- a/src/modules/graphics/vulkan/Graphics.cpp +++ b/src/modules/graphics/vulkan/Graphics.cpp @@ -29,13 +29,7 @@ #include "Shader.h" #include "Vulkan.h" -#if __has_include() -#include #include -#else -#include -#include -#endif #include #include @@ -102,11 +96,7 @@ static void checkOptionalInstanceExtensions(OptionalInstanceExtensions& ext) Graphics::Graphics() : love::graphics::Graphics("love.graphics.vulkan") { -#if SDL_VERSION_ATLEAST(3, 0, 0) if (!SDL_Vulkan_LoadLibrary(nullptr)) -#else - if (SDL_Vulkan_LoadLibrary(nullptr)) -#endif throw love::Exception("could not find vulkan"); volkInitializeCustom((PFN_vkGetInstanceProcAddr)SDL_Vulkan_GetVkGetInstanceProcAddr()); @@ -129,19 +119,12 @@ Graphics::Graphics() // GetInstanceExtensions works with a null window parameter as long as // SDL_Vulkan_LoadLibrary has been called (which we do earlier). - unsigned int count; -#if SDL_VERSION_ATLEAST(3, 0, 0) + unsigned int count = 0; char const* const* extensions_string = SDL_Vulkan_GetInstanceExtensions(&count); if (extensions_string == nullptr) throw love::Exception("couldn't retrieve sdl vulkan extensions"); std::vector extensions(extensions_string, extensions_string + count); -#else - if (SDL_Vulkan_GetInstanceExtensions(nullptr, &count, nullptr) != SDL_TRUE) - throw love::Exception("couldn't retrieve sdl vulkan extensions"); - - std::vector extensions = {}; -#endif checkOptionalInstanceExtensions(optionalInstanceExtensions); @@ -150,14 +133,6 @@ Graphics::Graphics() if (optionalInstanceExtensions.debugInfo) extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); -#if !SDL_VERSION_ATLEAST(3, 0, 0) - size_t additional_extension_count = extensions.size(); - extensions.resize(additional_extension_count + count); - - if (SDL_Vulkan_GetInstanceExtensions(nullptr, &count, extensions.data() + additional_extension_count) != SDL_TRUE) - throw love::Exception("couldn't retrieve sdl vulkan extensions"); -#endif - createInfo.enabledExtensionCount = static_cast(extensions.size()); createInfo.ppEnabledExtensionNames = extensions.data(); @@ -1878,13 +1853,8 @@ void Graphics::createSurface() { auto window = Module::getInstance(M_WINDOW); const void *handle = window->getHandle(); -#if SDL_VERSION_ATLEAST(3, 0, 0) if (!SDL_Vulkan_CreateSurface((SDL_Window*)handle, instance, nullptr, &surface)) throw love::Exception("failed to create window surface"); -#else - if (SDL_Vulkan_CreateSurface((SDL_Window*)handle, instance, &surface) != SDL_TRUE) - throw love::Exception("failed to create window surface"); -#endif } SwapChainSupportDetails Graphics::querySwapChainSupport(VkPhysicalDevice device) diff --git a/src/modules/joystick/sdl/Joystick.cpp b/src/modules/joystick/sdl/Joystick.cpp index 21c3f8679..d6fe91f37 100644 --- a/src/modules/joystick/sdl/Joystick.cpp +++ b/src/modules/joystick/sdl/Joystick.cpp @@ -25,22 +25,12 @@ #include "sensor/sdl/Sensor.h" // SDL -#if __has_include() -#include -#else -#include -#endif +#include // C++ #include #include -#if !SDL_VERSION_ATLEAST(3, 0, 0) - -#ifndef SDL_TICKS_PASSED -#define SDL_TICKS_PASSED(A, B) ((Sint32)((B) - (A)) <= 0) -#endif - namespace love { namespace joystick @@ -51,23 +41,10 @@ namespace sdl Joystick::Joystick(int id) : joyhandle(nullptr) , controller(nullptr) - , haptic(nullptr) , joystickType(JOYSTICK_TYPE_UNKNOWN) , instanceid(-1) , id(id) - , vibration() -{ -} - -Joystick::Joystick(int id, int joyindex) - : joyhandle(nullptr) - , controller(nullptr) - , haptic(nullptr) - , instanceid(-1) - , id(id) - , vibration() { - open(joyindex); } Joystick::~Joystick() @@ -77,38 +54,36 @@ Joystick::~Joystick() bool Joystick::open(int64 deviceid) { - int deviceindex = (int) deviceid; - close(); - joyhandle = SDL_JoystickOpen(deviceindex); + joyhandle = SDL_OpenJoystick((SDL_JoystickID) deviceid); if (joyhandle) { - instanceid = SDL_JoystickInstanceID(joyhandle); + instanceid = SDL_GetJoystickID(joyhandle); // SDL_JoystickGetGUIDString uses 32 bytes plus the null terminator. char cstr[33]; - SDL_JoystickGUID sdlguid = SDL_JoystickGetGUID(joyhandle); - SDL_JoystickGetGUIDString(sdlguid, cstr, (int) sizeof(cstr)); + SDL_GUID sdlguid = SDL_GetJoystickGUID(joyhandle); + SDL_GUIDToString(sdlguid, cstr, (int) sizeof(cstr)); pguid = std::string(cstr); // See if SDL thinks this is a Game Controller. - openGamepad(deviceindex); + openGamepad(deviceid); // Prefer the Joystick name for consistency. - const char *joyname = SDL_JoystickName(joyhandle); + const char *joyname = SDL_GetJoystickName(joyhandle); if (!joyname && controller) - joyname = SDL_GameControllerName(controller); + joyname = SDL_GetGamepadName(controller); if (joyname) name = joyname; - switch (SDL_JoystickGetType(joyhandle)) + switch (SDL_GetJoystickType(joyhandle)) { - case SDL_JOYSTICK_TYPE_GAMECONTROLLER: + case SDL_JOYSTICK_TYPE_GAMEPAD: joystickType = JOYSTICK_TYPE_GAMEPAD; break; case SDL_JOYSTICK_TYPE_WHEEL: @@ -146,25 +121,20 @@ bool Joystick::open(int64 deviceid) void Joystick::close() { - if (haptic) - SDL_HapticClose(haptic); - if (controller) - SDL_GameControllerClose(controller); + SDL_CloseGamepad(controller); if (joyhandle) - SDL_JoystickClose(joyhandle); + SDL_CloseJoystick(joyhandle); joyhandle = nullptr; controller = nullptr; - haptic = nullptr; instanceid = -1; - vibration = Vibration(); } bool Joystick::isConnected() const { - return joyhandle != nullptr && SDL_JoystickGetAttached(joyhandle); + return joyhandle != nullptr && SDL_JoystickConnected(joyhandle); } const char *Joystick::getName() const @@ -179,17 +149,17 @@ Joystick::JoystickType Joystick::getJoystickType() const int Joystick::getAxisCount() const { - return isConnected() ? SDL_JoystickNumAxes(joyhandle) : 0; + return isConnected() ? SDL_GetNumJoystickAxes(joyhandle) : 0; } int Joystick::getButtonCount() const { - return isConnected() ? SDL_JoystickNumButtons(joyhandle) : 0; + return isConnected() ? SDL_GetNumJoystickButtons(joyhandle) : 0; } int Joystick::getHatCount() const { - return isConnected() ? SDL_JoystickNumHats(joyhandle) : 0; + return isConnected() ? SDL_GetNumJoystickHats(joyhandle) : 0; } float Joystick::getAxis(int axisindex) const @@ -197,7 +167,7 @@ float Joystick::getAxis(int axisindex) const if (!isConnected() || axisindex < 0 || axisindex >= getAxisCount()) return 0; - return clampval(((float) SDL_JoystickGetAxis(joyhandle, axisindex))/32768.0f); + return clampval(((float) SDL_GetJoystickAxis(joyhandle, axisindex))/32768.0f); } std::vector Joystick::getAxes() const @@ -211,7 +181,7 @@ std::vector Joystick::getAxes() const axes.reserve(count); for (int i = 0; i < count; i++) - axes.push_back(clampval(((float) SDL_JoystickGetAxis(joyhandle, i))/32768.0f)); + axes.push_back(clampval(((float) SDL_GetJoystickAxis(joyhandle, i))/32768.0f)); return axes; } @@ -223,7 +193,7 @@ Joystick::Hat Joystick::getHat(int hatindex) const if (!isConnected() || hatindex < 0 || hatindex >= getHatCount()) return h; - getConstant(SDL_JoystickGetHat(joyhandle, hatindex), h); + getConstant(SDL_GetJoystickHat(joyhandle, hatindex), h); return h; } @@ -240,7 +210,7 @@ bool Joystick::isDown(const std::vector &buttonlist) const if (button < 0 || button >= numbuttons) continue; - if (SDL_JoystickGetButton(joyhandle, button) == 1) + if (SDL_GetJoystickButton(joyhandle, button)) return true; } @@ -252,11 +222,7 @@ void Joystick::setPlayerIndex(int index) if (!isConnected()) return; -#if SDL_VERSION_ATLEAST(2, 0, 12) - SDL_JoystickSetPlayerIndex(joyhandle, index); -#else - LOVE_UNUSED(index); -#endif + SDL_SetJoystickPlayerIndex(joyhandle, index); } int Joystick::getPlayerIndex() const @@ -264,27 +230,21 @@ int Joystick::getPlayerIndex() const if (!isConnected()) return -1; -#if SDL_VERSION_ATLEAST(2, 0, 12) - return SDL_JoystickGetPlayerIndex(joyhandle); -#else - return -1; -#endif + return SDL_GetJoystickPlayerIndex(joyhandle); } bool Joystick::openGamepad(int64 deviceid) { - int deviceindex = (int) deviceid; - - if (!SDL_IsGameController(deviceindex)) + if (!SDL_IsGamepad((SDL_JoystickID)deviceid)) return false; if (isGamepad()) { - SDL_GameControllerClose(controller); + SDL_CloseGamepad(controller); controller = nullptr; } - controller = SDL_GameControllerOpen(deviceindex); + controller = SDL_OpenGamepad((SDL_JoystickID)deviceid); return isGamepad(); } @@ -298,31 +258,20 @@ Joystick::GamepadType Joystick::getGamepadType() const if (controller == nullptr) return GAMEPAD_TYPE_UNKNOWN; -#if SDL_VERSION_ATLEAST(2, 0, 12) - switch (SDL_GameControllerGetType(controller)) + switch (SDL_GetGamepadType(controller)) { - case SDL_CONTROLLER_TYPE_UNKNOWN: return GAMEPAD_TYPE_UNKNOWN; - case SDL_CONTROLLER_TYPE_XBOX360: return GAMEPAD_TYPE_XBOX360; - case SDL_CONTROLLER_TYPE_XBOXONE: return GAMEPAD_TYPE_XBOXONE; - case SDL_CONTROLLER_TYPE_PS3: return GAMEPAD_TYPE_PS3; - case SDL_CONTROLLER_TYPE_PS4: return GAMEPAD_TYPE_PS4; - case SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO: return GAMEPAD_TYPE_NINTENDO_SWITCH_PRO; -#if SDL_VERSION_ATLEAST(2, 0, 14) - case SDL_CONTROLLER_TYPE_VIRTUAL: return GAMEPAD_TYPE_VIRTUAL; - case SDL_CONTROLLER_TYPE_PS5: return GAMEPAD_TYPE_PS5; -#endif -#if SDL_VERSION_ATLEAST(2, 0, 16) - case SDL_CONTROLLER_TYPE_AMAZON_LUNA: return GAMEPAD_TYPE_AMAZON_LUNA; - case SDL_CONTROLLER_TYPE_GOOGLE_STADIA: return GAMEPAD_TYPE_STADIA; -#endif -#if SDL_VERSION_ATLEAST(2, 24, 0) - case SDL_CONTROLLER_TYPE_NVIDIA_SHIELD: return GAMEPAD_TYPE_NVIDIA_SHIELD; - case SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_LEFT: return GAMEPAD_TYPE_JOYCON_LEFT; - case SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT: return GAMEPAD_TYPE_JOYCON_RIGHT; - case SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_PAIR: return GAMEPAD_TYPE_JOYCON_PAIR; -#endif + case SDL_GAMEPAD_TYPE_UNKNOWN: return GAMEPAD_TYPE_UNKNOWN; + case SDL_GAMEPAD_TYPE_XBOX360: return GAMEPAD_TYPE_XBOX360; + case SDL_GAMEPAD_TYPE_XBOXONE: return GAMEPAD_TYPE_XBOXONE; + case SDL_GAMEPAD_TYPE_PS3: return GAMEPAD_TYPE_PS3; + case SDL_GAMEPAD_TYPE_PS4: return GAMEPAD_TYPE_PS4; + case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_PRO: return GAMEPAD_TYPE_NINTENDO_SWITCH_PRO; + case SDL_GAMEPAD_TYPE_PS5: return GAMEPAD_TYPE_PS5; + case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_LEFT: return GAMEPAD_TYPE_JOYCON_LEFT; + case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT: return GAMEPAD_TYPE_JOYCON_RIGHT; + case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_PAIR: return GAMEPAD_TYPE_JOYCON_PAIR; + default: return GAMEPAD_TYPE_UNKNOWN; } -#endif return GAMEPAD_TYPE_UNKNOWN; } @@ -332,11 +281,11 @@ float Joystick::getGamepadAxis(love::joystick::Joystick::GamepadAxis axis) const if (!isConnected() || !isGamepad()) return 0.f; - SDL_GameControllerAxis sdlaxis; + SDL_GamepadAxis sdlaxis; if (!getConstant(axis, sdlaxis)) return 0.f; - Sint16 value = SDL_GameControllerGetAxis(controller, sdlaxis); + Sint16 value = SDL_GetGamepadAxis(controller, sdlaxis); return clampval((float) value / 32768.0f); } @@ -346,14 +295,14 @@ bool Joystick::isGamepadDown(const std::vector &blist) const if (!isConnected() || !isGamepad()) return false; - SDL_GameControllerButton sdlbutton; + SDL_GamepadButton sdlbutton; for (GamepadButton button : blist) { if (!getConstant(button, sdlbutton)) continue; - if (SDL_GameControllerGetButton(controller, sdlbutton) == 1) + if (SDL_GetGamepadButton(controller, sdlbutton)) return true; } @@ -368,48 +317,57 @@ Joystick::JoystickInput Joystick::getGamepadMapping(const GamepadInput &input) c if (!isGamepad()) return jinput; - SDL_GameControllerButtonBind sdlbind = {}; - sdlbind.bindType = SDL_CONTROLLER_BINDTYPE_NONE; - - SDL_GameControllerButton sdlbutton; - SDL_GameControllerAxis sdlaxis; + SDL_GamepadButton sdlbutton = SDL_GAMEPAD_BUTTON_INVALID; + SDL_GamepadAxis sdlaxis = SDL_GAMEPAD_AXIS_INVALID; switch (input.type) { case INPUT_TYPE_BUTTON: - if (getConstant(input.button, sdlbutton)) - sdlbind = SDL_GameControllerGetBindForButton(controller, sdlbutton); + getConstant(input.button, sdlbutton); break; case INPUT_TYPE_AXIS: - if (getConstant(input.axis, sdlaxis)) - sdlbind = SDL_GameControllerGetBindForAxis(controller, sdlaxis); + getConstant(input.axis, sdlaxis); break; default: break; } - switch (sdlbind.bindType) + int bindcount = 0; + SDL_GamepadBinding **sdlbindings = SDL_GetGamepadBindings(controller, &bindcount); + for (int i = 0; i < bindcount; i++) { - case SDL_CONTROLLER_BINDTYPE_BUTTON: - jinput.type = INPUT_TYPE_BUTTON; - jinput.button = sdlbind.value.button; - break; - case SDL_CONTROLLER_BINDTYPE_AXIS: - jinput.type = INPUT_TYPE_AXIS; - jinput.axis = sdlbind.value.axis; - break; - case SDL_CONTROLLER_BINDTYPE_HAT: - if (getConstant(sdlbind.value.hat.hat_mask, jinput.hat.value)) + const SDL_GamepadBinding *b = sdlbindings[i]; + if ((input.type == INPUT_TYPE_BUTTON && b->output_type == SDL_GAMEPAD_BINDTYPE_BUTTON && b->output.button == sdlbutton) + || (input.type == INPUT_TYPE_AXIS && b->output_type == SDL_GAMEPAD_BINDTYPE_AXIS && b->output.axis.axis == sdlaxis)) { - jinput.type = INPUT_TYPE_HAT; - jinput.hat.index = sdlbind.value.hat.hat; + switch (b->input_type) + { + case SDL_GAMEPAD_BINDTYPE_BUTTON: + jinput.type = INPUT_TYPE_BUTTON; + jinput.button = b->input.button; + break; + case SDL_GAMEPAD_BINDTYPE_AXIS: + jinput.type = INPUT_TYPE_AXIS; + jinput.axis = b->input.axis.axis; + break; + case SDL_GAMEPAD_BINDTYPE_HAT: + if (getConstant(b->input.hat.hat_mask, jinput.hat.value)) + { + jinput.type = INPUT_TYPE_HAT; + jinput.hat.index = b->input.hat.hat; + } + break; + case SDL_GAMEPAD_BINDTYPE_NONE: + default: + break; + } + + break; } - break; - case SDL_CONTROLLER_BINDTYPE_NONE: - default: - break; } + SDL_free(sdlbindings); + return jinput; } @@ -418,12 +376,12 @@ std::string Joystick::getGamepadMappingString() const char *sdlmapping = nullptr; if (controller != nullptr) - sdlmapping = SDL_GameControllerMapping(controller); + sdlmapping = SDL_GetGamepadMapping(controller); if (sdlmapping == nullptr) { - SDL_JoystickGUID sdlguid = SDL_JoystickGetGUIDFromString(pguid.c_str()); - sdlmapping = SDL_GameControllerMappingForGUID(sdlguid); + SDL_GUID sdlguid = SDL_StringToGUID(pguid.c_str()); + sdlmapping = SDL_GetGamepadMappingForGUID(sdlguid); } if (sdlmapping == nullptr) @@ -467,9 +425,9 @@ void Joystick::getDeviceInfo(int &vendorID, int &productID, int &productVersion) { if (joyhandle != nullptr) { - vendorID = SDL_JoystickGetVendor(joyhandle); - productID = SDL_JoystickGetProduct(joyhandle); - productVersion = SDL_JoystickGetProductVersion(joyhandle); + vendorID = SDL_GetJoystickVendor(joyhandle); + productID = SDL_GetJoystickProduct(joyhandle); + productVersion = SDL_GetJoystickProductVersion(joyhandle); } else { @@ -479,76 +437,13 @@ void Joystick::getDeviceInfo(int &vendorID, int &productID, int &productVersion) } } -bool Joystick::checkCreateHaptic() -{ - if (!isConnected()) - return false; - - if (!SDL_WasInit(SDL_INIT_HAPTIC) && SDL_InitSubSystem(SDL_INIT_HAPTIC) < 0) - return false; - - if (haptic && SDL_HapticIndex(haptic) != -1) - return true; - - if (haptic) - { - SDL_HapticClose(haptic); - haptic = nullptr; - } - - haptic = SDL_HapticOpenFromJoystick(joyhandle); - vibration = Vibration(); - - return haptic != nullptr; -} - bool Joystick::isVibrationSupported() { -#if SDL_VERSION_ATLEAST(2, 0, 18) - if (isConnected() && SDL_JoystickHasRumble(joyhandle) == SDL_TRUE) - return true; -#endif - - if (!checkCreateHaptic()) + if (!isConnected()) return false; - unsigned int features = SDL_HapticQuery(haptic); - - if ((features & SDL_HAPTIC_LEFTRIGHT) != 0) - return true; - - // Some gamepad drivers only support left/right motors via a custom effect. - if (isGamepad() && (features & SDL_HAPTIC_CUSTOM) != 0) - return true; - - // Test for simple sine wave support as a last resort. - if ((features & SDL_HAPTIC_SINE) != 0) - return true; - - return false; -} - -bool Joystick::runVibrationEffect() -{ - if (vibration.id != -1) - { - if (SDL_HapticUpdateEffect(haptic, vibration.id, &vibration.effect) == 0) - { - if (SDL_HapticRunEffect(haptic, vibration.id, 1) == 0) - return true; - } - - // If the effect fails to update, we should destroy and re-create it. - SDL_HapticDestroyEffect(haptic, vibration.id); - vibration.id = -1; - } - - vibration.id = SDL_HapticNewEffect(haptic, &vibration.effect); - - if (vibration.id != -1 && SDL_HapticRunEffect(haptic, vibration.id, 1) == 0) - return true; - - return false; + SDL_PropertiesID props = SDL_GetJoystickProperties(joyhandle); + return SDL_GetBooleanProperty(props, SDL_PROP_JOYSTICK_CAP_RUMBLE_BOOLEAN, false); } bool Joystick::setVibration(float left, float right, float duration) @@ -560,148 +455,39 @@ bool Joystick::setVibration(float left, float right, float duration) return setVibration(); if (!isConnected()) - { - vibration.left = vibration.right = 0.0f; - vibration.endtime = SDL_HAPTIC_INFINITY; return false; - } - Uint32 length = SDL_HAPTIC_INFINITY; + Uint32 length = LOVE_UINT32_MAX; if (duration >= 0.0f) { float maxduration = (float) (std::numeric_limits::max() / 1000.0); length = Uint32(std::min(duration, maxduration) * 1000); } - bool success = false; - - if (SDL_JoystickRumble(joyhandle, (Uint16)(left * LOVE_UINT16_MAX), (Uint16)(right * LOVE_UINT16_MAX), length) == 0) - success = true; - - if (!success && !checkCreateHaptic()) - return false; - - unsigned int features = SDL_HapticQuery(haptic); - int axes = SDL_HapticNumAxes(haptic); - - if (!success && (features & SDL_HAPTIC_LEFTRIGHT) != 0) - { - memset(&vibration.effect, 0, sizeof(SDL_HapticEffect)); - vibration.effect.type = SDL_HAPTIC_LEFTRIGHT; - - vibration.effect.leftright.length = length; - vibration.effect.leftright.large_magnitude = Uint16(left * LOVE_UINT16_MAX); - vibration.effect.leftright.small_magnitude = Uint16(right * LOVE_UINT16_MAX); - - success = runVibrationEffect(); - } - - // Some gamepad drivers only give support for controlling individual motors - // through a custom FF effect. - if (!success && isGamepad() && (features & SDL_HAPTIC_CUSTOM) && axes == 2) - { - // NOTE: this may cause issues with drivers which support custom effects - // but aren't similar to https://github.com/d235j/360Controller . - - // Custom effect data is clamped to 0x7FFF in SDL. - vibration.data[0] = vibration.data[2] = Uint16(left * 0x7FFF); - vibration.data[1] = vibration.data[3] = Uint16(right * 0x7FFF); - - memset(&vibration.effect, 0, sizeof(SDL_HapticEffect)); - vibration.effect.type = SDL_HAPTIC_CUSTOM; - - vibration.effect.custom.length = length; - vibration.effect.custom.channels = 2; - vibration.effect.custom.period = 10; - vibration.effect.custom.samples = 2; - vibration.effect.custom.data = vibration.data; - - success = runVibrationEffect(); - } - - // Fall back to a simple sine wave if all else fails. This only supports a - // single strength value. - if (!success && (features & SDL_HAPTIC_SINE) != 0) - { - memset(&vibration.effect, 0, sizeof(SDL_HapticEffect)); - vibration.effect.type = SDL_HAPTIC_SINE; - - vibration.effect.periodic.length = length; - vibration.effect.periodic.period = 10; - - float strength = std::max(left, right); - vibration.effect.periodic.magnitude = Sint16(strength * 0x7FFF); - - success = runVibrationEffect(); - } - - if (success) - { - vibration.left = left; - vibration.right = right; - - if (length == SDL_HAPTIC_INFINITY) - vibration.endtime = SDL_HAPTIC_INFINITY; - else - vibration.endtime = SDL_GetTicks() + length; - } - else - { - vibration.left = vibration.right = 0.0f; - vibration.endtime = SDL_HAPTIC_INFINITY; - } - - return success; + return SDL_RumbleJoystick(joyhandle, (Uint16)(left * LOVE_UINT16_MAX), (Uint16)(right * LOVE_UINT16_MAX), length) == 0; } bool Joystick::setVibration() { - bool success = false; - - if (!success) - success = isConnected() && SDL_JoystickRumble(joyhandle, 0, 0, 0) == 0; - - if (!success && SDL_WasInit(SDL_INIT_HAPTIC) && haptic && SDL_HapticIndex(haptic) != -1) - success = (SDL_HapticStopEffect(haptic, vibration.id) == 0); - - if (success) - vibration.left = vibration.right = 0.0f; - - return success; + return isConnected() && SDL_RumbleJoystick(joyhandle, 0, 0, 0) == 0; } void Joystick::getVibration(float &left, float &right) { - if (vibration.endtime != SDL_HAPTIC_INFINITY) - { - // With some drivers, the effect physically stops at the right time, but - // SDL_HapticGetEffectStatus still thinks it's playing. So we explicitly - // stop it once it's done, just to be sure. - if (SDL_TICKS_PASSED(SDL_GetTicks(), vibration.endtime)) - { - setVibration(); - vibration.endtime = SDL_HAPTIC_INFINITY; - } - } - - // Check if the haptic effect has stopped playing. - int id = vibration.id; - if (!haptic || id == -1 || SDL_HapticGetEffectStatus(haptic, id) != 1) - vibration.left = vibration.right = 0.0f; - - left = vibration.left; - right = vibration.right; + // Deprecated. + left = 0.0f; + right = 0.0f; } bool Joystick::hasSensor(Sensor::SensorType type) const { -#if SDL_VERSION_ATLEAST(2, 0, 14) && defined(LOVE_ENABLE_SENSOR) +#if defined(LOVE_ENABLE_SENSOR) using SDLSensor = love::sensor::sdl::Sensor; if (!isGamepad()) return false; - return SDL_GameControllerHasSensor(controller, SDLSensor::convert(type)) == SDL_TRUE; + return SDL_GamepadHasSensor(controller, SDLSensor::convert(type)); #else return false; #endif @@ -709,13 +495,13 @@ bool Joystick::hasSensor(Sensor::SensorType type) const bool Joystick::isSensorEnabled(Sensor::SensorType type) const { -#if SDL_VERSION_ATLEAST(2, 0, 14) && defined(LOVE_ENABLE_SENSOR) +#if defined(LOVE_ENABLE_SENSOR) using SDLSensor = love::sensor::sdl::Sensor; if (!isGamepad()) return false; - return SDL_GameControllerIsSensorEnabled(controller, SDLSensor::convert(type)) == SDL_TRUE; + return SDL_GamepadSensorEnabled(controller, SDLSensor::convert(type)); #else return false; #endif @@ -723,13 +509,13 @@ bool Joystick::isSensorEnabled(Sensor::SensorType type) const void Joystick::setSensorEnabled(Sensor::SensorType type, bool enabled) { -#if SDL_VERSION_ATLEAST(2, 0, 14) && defined(LOVE_ENABLE_SENSOR) +#if defined(LOVE_ENABLE_SENSOR) using SDLSensor = love::sensor::sdl::Sensor; if (!isGamepad()) throw love::Exception("Sensor is only supported on gamepad"); - if (SDL_GameControllerSetSensorEnabled(controller, SDLSensor::convert(type), enabled ? SDL_TRUE : SDL_FALSE) != 0) + if (!SDL_SetGamepadSensorEnabled(controller, SDLSensor::convert(type), enabled)) { const char *name = nullptr; SDLSensor::getConstant(type, name); @@ -737,13 +523,13 @@ void Joystick::setSensorEnabled(Sensor::SensorType type, bool enabled) throw love::Exception("Could not open \"%s\" SDL gamepad sensor (%s)", name, SDL_GetError()); } #else - throw love::Exception("Compiled version of SDL or LOVE does not support gamepad sensor"); + throw love::Exception("Compiled version of LOVE does not support gamepad sensor"); #endif } std::vector Joystick::getSensorData(Sensor::SensorType type) const { -#if SDL_VERSION_ATLEAST(2, 0, 14) && defined(LOVE_ENABLE_SENSOR) +#if defined(LOVE_ENABLE_SENSOR) using SDLSensor = love::sensor::sdl::Sensor; if (!isGamepad()) @@ -759,7 +545,7 @@ std::vector Joystick::getSensorData(Sensor::SensorType type) const throw love::Exception("\"%s\" gamepad sensor is not enabled", name); } - if (SDL_GameControllerGetSensorData(controller, SDLSensor::convert(type), data.data(), (int) data.size()) != 0) + if (!SDL_GetGamepadSensorData(controller, SDLSensor::convert(type), data.data(), (int) data.size())) { const char *name = nullptr; SDLSensor::getConstant(type, name); @@ -769,7 +555,7 @@ std::vector Joystick::getSensorData(Sensor::SensorType type) const return data; #else - throw love::Exception("Compiled version of SDL or LOVE does not support gamepad sensor"); + throw love::Exception("Compiled version of LOVE does not support gamepad sensor"); #endif } @@ -783,22 +569,22 @@ bool Joystick::getConstant(Joystick::Hat in, Uint8 &out) return hats.find(in, out); } -bool Joystick::getConstant(SDL_GameControllerAxis in, Joystick::GamepadAxis &out) +bool Joystick::getConstant(SDL_GamepadAxis in, Joystick::GamepadAxis &out) { return gpAxes.find(in, out); } -bool Joystick::getConstant(Joystick::GamepadAxis in, SDL_GameControllerAxis &out) +bool Joystick::getConstant(Joystick::GamepadAxis in, SDL_GamepadAxis &out) { return gpAxes.find(in, out); } -bool Joystick::getConstant(SDL_GameControllerButton in, Joystick::GamepadButton &out) +bool Joystick::getConstant(SDL_GamepadButton in, Joystick::GamepadButton &out) { return gpButtons.find(in, out); } -bool Joystick::getConstant(Joystick::GamepadButton in, SDL_GameControllerButton &out) +bool Joystick::getConstant(Joystick::GamepadButton in, SDL_GamepadButton &out) { return gpButtons.find(in, out); } @@ -818,49 +604,45 @@ EnumMap::Entry Joystick::hatEntrie EnumMap Joystick::hats(Joystick::hatEntries, sizeof(Joystick::hatEntries)); -EnumMap::Entry Joystick::gpAxisEntries[] = +EnumMap::Entry Joystick::gpAxisEntries[] = { - {Joystick::GAMEPAD_AXIS_LEFTX, SDL_CONTROLLER_AXIS_LEFTX}, - {Joystick::GAMEPAD_AXIS_LEFTY, SDL_CONTROLLER_AXIS_LEFTY}, - {Joystick::GAMEPAD_AXIS_RIGHTX, SDL_CONTROLLER_AXIS_RIGHTX}, - {Joystick::GAMEPAD_AXIS_RIGHTY, SDL_CONTROLLER_AXIS_RIGHTY}, - {Joystick::GAMEPAD_AXIS_TRIGGERLEFT, SDL_CONTROLLER_AXIS_TRIGGERLEFT}, - {Joystick::GAMEPAD_AXIS_TRIGGERRIGHT, SDL_CONTROLLER_AXIS_TRIGGERRIGHT}, + {Joystick::GAMEPAD_AXIS_LEFTX, SDL_GAMEPAD_AXIS_LEFTX}, + {Joystick::GAMEPAD_AXIS_LEFTY, SDL_GAMEPAD_AXIS_LEFTY}, + {Joystick::GAMEPAD_AXIS_RIGHTX, SDL_GAMEPAD_AXIS_RIGHTX}, + {Joystick::GAMEPAD_AXIS_RIGHTY, SDL_GAMEPAD_AXIS_RIGHTY}, + {Joystick::GAMEPAD_AXIS_TRIGGERLEFT, SDL_GAMEPAD_AXIS_LEFT_TRIGGER}, + {Joystick::GAMEPAD_AXIS_TRIGGERRIGHT, SDL_GAMEPAD_AXIS_RIGHT_TRIGGER}, }; -EnumMap Joystick::gpAxes(Joystick::gpAxisEntries, sizeof(Joystick::gpAxisEntries)); - -EnumMap::Entry Joystick::gpButtonEntries[] = -{ - {Joystick::GAMEPAD_BUTTON_A, SDL_CONTROLLER_BUTTON_A}, - {Joystick::GAMEPAD_BUTTON_B, SDL_CONTROLLER_BUTTON_B}, - {Joystick::GAMEPAD_BUTTON_X, SDL_CONTROLLER_BUTTON_X}, - {Joystick::GAMEPAD_BUTTON_Y, SDL_CONTROLLER_BUTTON_Y}, - {Joystick::GAMEPAD_BUTTON_BACK, SDL_CONTROLLER_BUTTON_BACK}, - {Joystick::GAMEPAD_BUTTON_GUIDE, SDL_CONTROLLER_BUTTON_GUIDE}, - {Joystick::GAMEPAD_BUTTON_START, SDL_CONTROLLER_BUTTON_START}, - {Joystick::GAMEPAD_BUTTON_LEFTSTICK, SDL_CONTROLLER_BUTTON_LEFTSTICK}, - {Joystick::GAMEPAD_BUTTON_RIGHTSTICK, SDL_CONTROLLER_BUTTON_RIGHTSTICK}, - {Joystick::GAMEPAD_BUTTON_LEFTSHOULDER, SDL_CONTROLLER_BUTTON_LEFTSHOULDER}, - {Joystick::GAMEPAD_BUTTON_RIGHTSHOULDER, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER}, - {Joystick::GAMEPAD_BUTTON_DPAD_UP, SDL_CONTROLLER_BUTTON_DPAD_UP}, - {Joystick::GAMEPAD_BUTTON_DPAD_DOWN, SDL_CONTROLLER_BUTTON_DPAD_DOWN}, - {Joystick::GAMEPAD_BUTTON_DPAD_LEFT, SDL_CONTROLLER_BUTTON_DPAD_LEFT}, - {Joystick::GAMEPAD_BUTTON_DPAD_RIGHT, SDL_CONTROLLER_BUTTON_DPAD_RIGHT}, -#if SDL_VERSION_ATLEAST(2, 0, 14) - {Joystick::GAMEPAD_BUTTON_MISC1, SDL_CONTROLLER_BUTTON_MISC1}, - {Joystick::GAMEPAD_BUTTON_PADDLE1, SDL_CONTROLLER_BUTTON_PADDLE1}, - {Joystick::GAMEPAD_BUTTON_PADDLE2, SDL_CONTROLLER_BUTTON_PADDLE2}, - {Joystick::GAMEPAD_BUTTON_PADDLE3, SDL_CONTROLLER_BUTTON_PADDLE3}, - {Joystick::GAMEPAD_BUTTON_PADDLE4, SDL_CONTROLLER_BUTTON_PADDLE4}, - {Joystick::GAMEPAD_BUTTON_TOUCHPAD, SDL_CONTROLLER_BUTTON_TOUCHPAD}, -#endif +EnumMap Joystick::gpAxes(Joystick::gpAxisEntries, sizeof(Joystick::gpAxisEntries)); + +EnumMap::Entry Joystick::gpButtonEntries[] = +{ + {Joystick::GAMEPAD_BUTTON_A, SDL_GAMEPAD_BUTTON_SOUTH}, + {Joystick::GAMEPAD_BUTTON_B, SDL_GAMEPAD_BUTTON_EAST}, + {Joystick::GAMEPAD_BUTTON_X, SDL_GAMEPAD_BUTTON_WEST}, + {Joystick::GAMEPAD_BUTTON_Y, SDL_GAMEPAD_BUTTON_NORTH}, + {Joystick::GAMEPAD_BUTTON_BACK, SDL_GAMEPAD_BUTTON_BACK}, + {Joystick::GAMEPAD_BUTTON_GUIDE, SDL_GAMEPAD_BUTTON_GUIDE}, + {Joystick::GAMEPAD_BUTTON_START, SDL_GAMEPAD_BUTTON_START}, + {Joystick::GAMEPAD_BUTTON_LEFTSTICK, SDL_GAMEPAD_BUTTON_LEFT_STICK}, + {Joystick::GAMEPAD_BUTTON_RIGHTSTICK, SDL_GAMEPAD_BUTTON_RIGHT_STICK}, + {Joystick::GAMEPAD_BUTTON_LEFTSHOULDER, SDL_GAMEPAD_BUTTON_LEFT_SHOULDER}, + {Joystick::GAMEPAD_BUTTON_RIGHTSHOULDER, SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER}, + {Joystick::GAMEPAD_BUTTON_DPAD_UP, SDL_GAMEPAD_BUTTON_DPAD_UP}, + {Joystick::GAMEPAD_BUTTON_DPAD_DOWN, SDL_GAMEPAD_BUTTON_DPAD_DOWN}, + {Joystick::GAMEPAD_BUTTON_DPAD_LEFT, SDL_GAMEPAD_BUTTON_DPAD_LEFT}, + {Joystick::GAMEPAD_BUTTON_DPAD_RIGHT, SDL_GAMEPAD_BUTTON_DPAD_RIGHT}, + {Joystick::GAMEPAD_BUTTON_MISC1, SDL_GAMEPAD_BUTTON_MISC1}, + {Joystick::GAMEPAD_BUTTON_PADDLE1, SDL_GAMEPAD_BUTTON_LEFT_PADDLE1}, + {Joystick::GAMEPAD_BUTTON_PADDLE2, SDL_GAMEPAD_BUTTON_LEFT_PADDLE2}, + {Joystick::GAMEPAD_BUTTON_PADDLE3, SDL_GAMEPAD_BUTTON_RIGHT_PADDLE1}, + {Joystick::GAMEPAD_BUTTON_PADDLE4, SDL_GAMEPAD_BUTTON_RIGHT_PADDLE2}, + {Joystick::GAMEPAD_BUTTON_TOUCHPAD, SDL_GAMEPAD_BUTTON_TOUCHPAD}, }; -EnumMap Joystick::gpButtons(Joystick::gpButtonEntries, sizeof(Joystick::gpButtonEntries)); +EnumMap Joystick::gpButtons(Joystick::gpButtonEntries, sizeof(Joystick::gpButtonEntries)); } // sdl } // joystick } // love - -#endif // !SDL_VERSION_ATLEAST(3, 0, 0) diff --git a/src/modules/joystick/sdl/Joystick.h b/src/modules/joystick/sdl/Joystick.h index e0353958a..75b19d33f 100644 --- a/src/modules/joystick/sdl/Joystick.h +++ b/src/modules/joystick/sdl/Joystick.h @@ -24,15 +24,10 @@ // LOVE #include "joystick/Joystick.h" #include "common/EnumMap.h" +#include "common/int.h" // SDL -#if __has_include() #include -#else -#include -#endif - -#if !SDL_VERSION_ATLEAST(3, 0, 0) namespace love { @@ -46,7 +41,6 @@ class Joystick : public love::joystick::Joystick public: Joystick(int id); - Joystick(int id, int joyindex); virtual ~Joystick(); @@ -104,22 +98,18 @@ class Joystick : public love::joystick::Joystick static bool getConstant(Hat in, Uint8 &out); static bool getConstant(Uint8 in, Hat &out); - static bool getConstant(SDL_GameControllerAxis in, GamepadAxis &out); - static bool getConstant(GamepadAxis in, SDL_GameControllerAxis &out); + static bool getConstant(SDL_GamepadAxis in, GamepadAxis &out); + static bool getConstant(GamepadAxis in, SDL_GamepadAxis &out); - static bool getConstant(SDL_GameControllerButton in, GamepadButton &out); - static bool getConstant(GamepadButton in, SDL_GameControllerButton &out); + static bool getConstant(SDL_GamepadButton in, GamepadButton &out); + static bool getConstant(GamepadButton in, SDL_GamepadButton &out); private: Joystick() {} - bool checkCreateHaptic(); - bool runVibrationEffect(); - SDL_Joystick *joyhandle; - SDL_GameController *controller; - SDL_Haptic *haptic; + SDL_Gamepad *controller; JoystickType joystickType; @@ -129,31 +119,14 @@ class Joystick : public love::joystick::Joystick std::string name; - struct Vibration - { - float left = 0.0f; - float right = 0.0f; - SDL_HapticEffect effect; - Uint16 data[4]; - int id = -1; - Uint32 endtime = SDL_HAPTIC_INFINITY; - - // Old versions of VS2013 have trouble with initializing these in-line. - Vibration() - : effect() - , data() - {} - - } vibration; - static EnumMap::Entry hatEntries[]; static EnumMap hats; - static EnumMap::Entry gpAxisEntries[]; - static EnumMap gpAxes; + static EnumMap::Entry gpAxisEntries[]; + static EnumMap gpAxes; - static EnumMap::Entry gpButtonEntries[]; - static EnumMap gpButtons; + static EnumMap::Entry gpButtonEntries[]; + static EnumMap gpButtons; }; @@ -161,6 +134,4 @@ class Joystick : public love::joystick::Joystick } // joystick } // love -#endif // !SDL_VERSION_ATLEAST(3, 0, 0) - #endif // LOVE_JOYSTICK_SDL_JOYSTICK_H diff --git a/src/modules/joystick/sdl/JoystickModule.cpp b/src/modules/joystick/sdl/JoystickModule.cpp index b027dafe0..6ed30983a 100644 --- a/src/modules/joystick/sdl/JoystickModule.cpp +++ b/src/modules/joystick/sdl/JoystickModule.cpp @@ -21,14 +21,9 @@ #include "common/config.h" #include "JoystickModule.h" #include "Joystick.h" -#include "JoystickSDL3.h" // SDL -#if __has_include() #include -#else -#include -#endif // C++ #include @@ -47,15 +42,10 @@ namespace sdl JoystickModule::JoystickModule() : love::joystick::JoystickModule("love.joystick.sdl") { -#if SDL_VERSION_ATLEAST(3, 0, 0) if (!SDL_InitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_GAMEPAD)) -#else - if (SDL_InitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER) < 0) -#endif throw love::Exception("Could not initialize SDL joystick subsystem (%s)", SDL_GetError()); // Initialize any joysticks which are already connected. -#if SDL_VERSION_ATLEAST(3, 0, 0) int count = 0; SDL_JoystickID *sticks = SDL_GetJoysticks(&count); for (int i = 0; i < count; i++) @@ -66,15 +56,6 @@ JoystickModule::JoystickModule() // removed via love.event. SDL_SetJoystickEventsEnabled(true); SDL_SetGamepadEventsEnabled(true); -#else - for (int i = 0; i < SDL_NumJoysticks(); i++) - addJoystick(i); - - // Start joystick event watching. Joysticks are automatically added and - // removed via love.event. - SDL_JoystickEventState(SDL_ENABLE); - SDL_GameControllerEventState(SDL_ENABLE); -#endif } JoystickModule::~JoystickModule() @@ -86,14 +67,7 @@ JoystickModule::~JoystickModule() stick->release(); } - if (SDL_WasInit(SDL_INIT_HAPTIC) != 0) - SDL_QuitSubSystem(SDL_INIT_HAPTIC); - -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_QuitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_GAMEPAD); -#else - SDL_QuitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER); -#endif } love::joystick::Joystick *JoystickModule::getJoystick(int joyindex) @@ -134,11 +108,7 @@ love::joystick::Joystick *JoystickModule::getJoystickFromID(int instanceid) love::joystick::Joystick *JoystickModule::addJoystick(int64 deviceid) { -#if SDL_VERSION_ATLEAST(3, 0, 0) if (deviceid == 0) -#else - if (deviceid < 0 || (int) deviceid >= SDL_NumJoysticks()) -#endif return nullptr; std::string guidstr = getDeviceGUID(deviceid); @@ -158,11 +128,7 @@ love::joystick::Joystick *JoystickModule::addJoystick(int64 deviceid) if (!joystick) { -#if SDL_VERSION_ATLEAST(3, 0, 0) - joystick = new Joystick((int) joysticks.size()); -#else joystick = new Joystick((int) joysticks.size()); -#endif joysticks.push_back(joystick); } @@ -218,17 +184,10 @@ bool JoystickModule::setGamepadMapping(const std::string &guid, Joystick::Gamepa if (guid.length() != 32) throw love::Exception("Invalid joystick GUID: %s", guid.c_str()); -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_GUID sdlguid = SDL_StringToGUID(guid.c_str()); std::string mapstr; char *sdlmapstr = SDL_GetGamepadMappingForGUID(sdlguid); -#else - SDL_JoystickGUID sdlguid = SDL_JoystickGetGUIDFromString(guid.c_str()); - std::string mapstr; - - char *sdlmapstr = SDL_GameControllerMappingForGUID(sdlguid); -#endif if (sdlmapstr) { mapstr = sdlmapstr; @@ -310,11 +269,7 @@ bool JoystickModule::setGamepadMapping(const std::string &guid, Joystick::Gamepa } // 1 == added, 0 == updated, -1 == error. -#if SDL_VERSION_ATLEAST(3, 0, 0) int status = SDL_AddGamepadMapping(mapstr.c_str()); -#else - int status = SDL_GameControllerAddMapping(mapstr.c_str()); -#endif if (status != -1) recentGamepadGUIDs[guid] = true; @@ -329,13 +284,8 @@ bool JoystickModule::setGamepadMapping(const std::string &guid, Joystick::Gamepa std::string JoystickModule::stringFromGamepadInput(Joystick::GamepadInput gpinput) const { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_GamepadAxis sdlaxis; SDL_GamepadButton sdlbutton; -#else - SDL_GameControllerAxis sdlaxis; - SDL_GameControllerButton sdlbutton; -#endif const char *gpinputname = nullptr; @@ -343,19 +293,11 @@ std::string JoystickModule::stringFromGamepadInput(Joystick::GamepadInput gpinpu { case Joystick::INPUT_TYPE_AXIS: if (Joystick::getConstant(gpinput.axis, sdlaxis)) -#if SDL_VERSION_ATLEAST(3, 0, 0) gpinputname = SDL_GetGamepadStringForAxis(sdlaxis); -#else - gpinputname = SDL_GameControllerGetStringForAxis(sdlaxis); -#endif break; case Joystick::INPUT_TYPE_BUTTON: if (Joystick::getConstant(gpinput.button, sdlbutton)) -#if SDL_VERSION_ATLEAST(3, 0, 0) gpinputname = SDL_GetGamepadStringForButton(sdlbutton); -#else - gpinputname = SDL_GameControllerGetStringForButton(sdlbutton); -#endif break; default: break; @@ -405,7 +347,6 @@ void JoystickModule::checkGamepads(const std::string &guid) const // Make sure all connected joysticks of a certain guid that are // gamepad-capable are opened as such. -#if SDL_VERSION_ATLEAST(3, 0, 0) int count = 0; SDL_JoystickID *sdlsticks = SDL_GetJoysticks(&count); for (int d_index = 0; d_index < count; d_index++) @@ -414,14 +355,6 @@ void JoystickModule::checkGamepads(const std::string &guid) const continue; auto sdlid = sdlsticks[d_index]; -#else - for (int d_index = 0; d_index < SDL_NumJoysticks(); d_index++) - { - if (!SDL_IsGameController(d_index)) - continue; - - auto sdlid = d_index; -#endif if (guid.compare(getDeviceGUID(sdlid)) != 0) continue; @@ -433,7 +366,6 @@ void JoystickModule::checkGamepads(const std::string &guid) const // Big hack time: open the index as a game controller and compare // the underlying joystick handle to the active stick's. -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_Gamepad *controller = SDL_OpenGamepad(sdlid); if (controller == nullptr) continue; @@ -443,17 +375,6 @@ void JoystickModule::checkGamepads(const std::string &guid) const SDL_Joystick *sdlstick = SDL_GetGamepadJoystick(controller); bool open_gamepad = (sdlstick == (SDL_Joystick *) stick->getHandle()); SDL_CloseGamepad(controller); -#else - SDL_GameController *controller = SDL_GameControllerOpen(d_index); - if (controller == nullptr) - continue; - - // GameController objects are reference-counted in SDL, so we don't want to - // have a joystick open when trying to re-initialize it - SDL_Joystick *sdlstick = SDL_GameControllerGetJoystick(controller); - bool open_gamepad = (sdlstick == (SDL_Joystick *) stick->getHandle()); - SDL_GameControllerClose(controller); -#endif // open as gamepad if necessary if (open_gamepad) @@ -467,22 +388,12 @@ std::string JoystickModule::getDeviceGUID(int64 deviceid) const // SDL_JoystickGetGUIDString uses 32 bytes plus the null terminator. char guidstr[33] = {'\0'}; -#if SDL_VERSION_ATLEAST(3, 0, 0) if (deviceid <= 0) return std::string(""); // SDL's GUIDs identify *classes* of devices, instead of unique devices. SDL_GUID guid = SDL_GetJoystickGUIDForID((SDL_JoystickID)deviceid); SDL_GUIDToString(guid, guidstr, sizeof(guidstr)); -#else - int deviceindex = (int) deviceid; - if (deviceindex < 0 || deviceindex >= SDL_NumJoysticks()) - return std::string(""); - - // SDL2's GUIDs identify *classes* of devices, instead of unique devices. - SDL_JoystickGUID guid = SDL_JoystickGetDeviceGUID(deviceindex); - SDL_JoystickGetGUIDString(guid, guidstr, sizeof(guidstr)); -#endif return std::string(guidstr); } @@ -527,11 +438,7 @@ void JoystickModule::loadGamepadMappings(const std::string &mappings) mapping.erase(pstartpos, pendpos - pstartpos + 1); } -#if SDL_VERSION_ATLEAST(3, 0, 0) if (SDL_AddGamepadMapping(mapping.c_str()) != -1) -#else - if (SDL_GameControllerAddMapping(mapping.c_str()) != -1) -#endif { success = true; std::string guid = mapping.substr(0, mapping.find_first_of(',')); @@ -551,13 +458,8 @@ void JoystickModule::loadGamepadMappings(const std::string &mappings) std::string JoystickModule::getGamepadMappingString(const std::string &guid) const { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_GUID sdlguid = SDL_StringToGUID(guid.c_str()); char *sdlmapping = SDL_GetGamepadMappingForGUID(sdlguid); -#else - SDL_JoystickGUID sdlguid = SDL_JoystickGetGUIDFromString(guid.c_str()); - char *sdlmapping = SDL_GameControllerMappingForGUID(sdlguid); -#endif if (sdlmapping == nullptr) return ""; @@ -580,13 +482,8 @@ std::string JoystickModule::saveGamepadMappings() for (const auto &g : recentGamepadGUIDs) { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_GUID sdlguid = SDL_StringToGUID(g.first.c_str()); char *sdlmapping = SDL_GetGamepadMappingForGUID(sdlguid); -#else - SDL_JoystickGUID sdlguid = SDL_JoystickGetGUIDFromString(g.first.c_str()); - char *sdlmapping = SDL_GameControllerMappingForGUID(sdlguid); -#endif if (sdlmapping == nullptr) continue; diff --git a/src/modules/joystick/sdl/JoystickModule.h b/src/modules/joystick/sdl/JoystickModule.h index 5afdc133a..c18fe8ac3 100644 --- a/src/modules/joystick/sdl/JoystickModule.h +++ b/src/modules/joystick/sdl/JoystickModule.h @@ -69,10 +69,10 @@ class JoystickModule : public love::joystick::JoystickModule std::string getDeviceGUID(int64 deviceid) const; // Lists of currently connected Joysticks. - std::vector activeSticks; + std::vector activeSticks; // Persistent list of all Joysticks which have been connected at some point. - std::list joysticks; + std::list joysticks; // Persistent map indicating GUIDs for Gamepads which have been connected or // modified at some point. diff --git a/src/modules/joystick/sdl/JoystickSDL3.cpp b/src/modules/joystick/sdl/JoystickSDL3.cpp deleted file mode 100644 index b523e5d41..000000000 --- a/src/modules/joystick/sdl/JoystickSDL3.cpp +++ /dev/null @@ -1,658 +0,0 @@ -/** - * Copyright (c) 2006-2023 LOVE Development Team - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - **/ - -// LOVE -#include "common/config.h" -#include "JoystickSDL3.h" -#include "common/int.h" -#include "sensor/sdl/Sensor.h" - -// SDL -#if __has_include() -#include -#else -#include -#endif - -#if SDL_VERSION_ATLEAST(3, 0, 0) - -#include - -// C++ -#include -#include - -namespace love -{ -namespace joystick -{ -namespace sdl -{ - -Joystick::Joystick(int id) - : joyhandle(nullptr) - , controller(nullptr) - , joystickType(JOYSTICK_TYPE_UNKNOWN) - , instanceid(-1) - , id(id) -{ -} - -Joystick::~Joystick() -{ - close(); -} - -bool Joystick::open(int64 deviceid) -{ - close(); - - joyhandle = SDL_OpenJoystick((SDL_JoystickID) deviceid); - - if (joyhandle) - { - instanceid = SDL_GetJoystickID(joyhandle); - - // SDL_JoystickGetGUIDString uses 32 bytes plus the null terminator. - char cstr[33]; - - SDL_GUID sdlguid = SDL_GetJoystickGUID(joyhandle); - SDL_GUIDToString(sdlguid, cstr, (int) sizeof(cstr)); - - pguid = std::string(cstr); - - // See if SDL thinks this is a Game Controller. - openGamepad(deviceid); - - // Prefer the Joystick name for consistency. - const char *joyname = SDL_GetJoystickName(joyhandle); - if (!joyname && controller) - joyname = SDL_GetGamepadName(controller); - - if (joyname) - name = joyname; - - switch (SDL_GetJoystickType(joyhandle)) - { - case SDL_JOYSTICK_TYPE_GAMEPAD: - joystickType = JOYSTICK_TYPE_GAMEPAD; - break; - case SDL_JOYSTICK_TYPE_WHEEL: - joystickType = JOYSTICK_TYPE_WHEEL; - break; - case SDL_JOYSTICK_TYPE_ARCADE_STICK: - joystickType = JOYSTICK_TYPE_ARCADE_STICK; - break; - case SDL_JOYSTICK_TYPE_FLIGHT_STICK: - joystickType = JOYSTICK_TYPE_FLIGHT_STICK; - break; - case SDL_JOYSTICK_TYPE_DANCE_PAD: - joystickType = JOYSTICK_TYPE_DANCE_PAD; - break; - case SDL_JOYSTICK_TYPE_GUITAR: - joystickType = JOYSTICK_TYPE_GUITAR; - break; - case SDL_JOYSTICK_TYPE_DRUM_KIT: - joystickType = JOYSTICK_TYPE_DRUM_KIT; - break; - case SDL_JOYSTICK_TYPE_ARCADE_PAD: - joystickType = JOYSTICK_TYPE_ARCADE_PAD; - break; - case SDL_JOYSTICK_TYPE_THROTTLE: - joystickType = JOYSTICK_TYPE_THROTTLE; - break; - default: - joystickType = JOYSTICK_TYPE_UNKNOWN; - break; - } - } - - return isConnected(); -} - -void Joystick::close() -{ - if (controller) - SDL_CloseGamepad(controller); - - if (joyhandle) - SDL_CloseJoystick(joyhandle); - - joyhandle = nullptr; - controller = nullptr; - instanceid = -1; -} - -bool Joystick::isConnected() const -{ - return joyhandle != nullptr && SDL_JoystickConnected(joyhandle); -} - -const char *Joystick::getName() const -{ - return name.c_str(); -} - -Joystick::JoystickType Joystick::getJoystickType() const -{ - return joystickType; -} - -int Joystick::getAxisCount() const -{ - return isConnected() ? SDL_GetNumJoystickAxes(joyhandle) : 0; -} - -int Joystick::getButtonCount() const -{ - return isConnected() ? SDL_GetNumJoystickButtons(joyhandle) : 0; -} - -int Joystick::getHatCount() const -{ - return isConnected() ? SDL_GetNumJoystickHats(joyhandle) : 0; -} - -float Joystick::getAxis(int axisindex) const -{ - if (!isConnected() || axisindex < 0 || axisindex >= getAxisCount()) - return 0; - - return clampval(((float) SDL_GetJoystickAxis(joyhandle, axisindex))/32768.0f); -} - -std::vector Joystick::getAxes() const -{ - std::vector axes; - int count = getAxisCount(); - - if (!isConnected() || count <= 0) - return axes; - - axes.reserve(count); - - for (int i = 0; i < count; i++) - axes.push_back(clampval(((float) SDL_GetJoystickAxis(joyhandle, i))/32768.0f)); - - return axes; -} - -Joystick::Hat Joystick::getHat(int hatindex) const -{ - Hat h = HAT_INVALID; - - if (!isConnected() || hatindex < 0 || hatindex >= getHatCount()) - return h; - - getConstant(SDL_GetJoystickHat(joyhandle, hatindex), h); - - return h; -} - -bool Joystick::isDown(const std::vector &buttonlist) const -{ - if (!isConnected()) - return false; - - int numbuttons = getButtonCount(); - - for (int button : buttonlist) - { - if (button < 0 || button >= numbuttons) - continue; - - if (SDL_GetJoystickButton(joyhandle, button)) - return true; - } - - return false; -} - -void Joystick::setPlayerIndex(int index) -{ - if (!isConnected()) - return; - - SDL_SetJoystickPlayerIndex(joyhandle, index); -} - -int Joystick::getPlayerIndex() const -{ - if (!isConnected()) - return -1; - - return SDL_GetJoystickPlayerIndex(joyhandle); -} - -bool Joystick::openGamepad(int64 deviceid) -{ - if (!SDL_IsGamepad((SDL_JoystickID)deviceid)) - return false; - - if (isGamepad()) - { - SDL_CloseGamepad(controller); - controller = nullptr; - } - - controller = SDL_OpenGamepad((SDL_JoystickID)deviceid); - return isGamepad(); -} - -bool Joystick::isGamepad() const -{ - return controller != nullptr; -} - -Joystick::GamepadType Joystick::getGamepadType() const -{ - if (controller == nullptr) - return GAMEPAD_TYPE_UNKNOWN; - - switch (SDL_GetGamepadType(controller)) - { - case SDL_GAMEPAD_TYPE_UNKNOWN: return GAMEPAD_TYPE_UNKNOWN; - case SDL_GAMEPAD_TYPE_XBOX360: return GAMEPAD_TYPE_XBOX360; - case SDL_GAMEPAD_TYPE_XBOXONE: return GAMEPAD_TYPE_XBOXONE; - case SDL_GAMEPAD_TYPE_PS3: return GAMEPAD_TYPE_PS3; - case SDL_GAMEPAD_TYPE_PS4: return GAMEPAD_TYPE_PS4; - case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_PRO: return GAMEPAD_TYPE_NINTENDO_SWITCH_PRO; - case SDL_GAMEPAD_TYPE_PS5: return GAMEPAD_TYPE_PS5; - case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_LEFT: return GAMEPAD_TYPE_JOYCON_LEFT; - case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT: return GAMEPAD_TYPE_JOYCON_RIGHT; - case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_PAIR: return GAMEPAD_TYPE_JOYCON_PAIR; - default: return GAMEPAD_TYPE_UNKNOWN; - } - - return GAMEPAD_TYPE_UNKNOWN; -} - -float Joystick::getGamepadAxis(love::joystick::Joystick::GamepadAxis axis) const -{ - if (!isConnected() || !isGamepad()) - return 0.f; - - SDL_GamepadAxis sdlaxis; - if (!getConstant(axis, sdlaxis)) - return 0.f; - - Sint16 value = SDL_GetGamepadAxis(controller, sdlaxis); - - return clampval((float) value / 32768.0f); -} - -bool Joystick::isGamepadDown(const std::vector &blist) const -{ - if (!isConnected() || !isGamepad()) - return false; - - SDL_GamepadButton sdlbutton; - - for (GamepadButton button : blist) - { - if (!getConstant(button, sdlbutton)) - continue; - - if (SDL_GetGamepadButton(controller, sdlbutton)) - return true; - } - - return false; -} - -Joystick::JoystickInput Joystick::getGamepadMapping(const GamepadInput &input) const -{ - Joystick::JoystickInput jinput; - jinput.type = INPUT_TYPE_MAX_ENUM; - - if (!isGamepad()) - return jinput; - - SDL_GamepadButton sdlbutton = SDL_GAMEPAD_BUTTON_INVALID; - SDL_GamepadAxis sdlaxis = SDL_GAMEPAD_AXIS_INVALID; - - switch (input.type) - { - case INPUT_TYPE_BUTTON: - getConstant(input.button, sdlbutton); - break; - case INPUT_TYPE_AXIS: - getConstant(input.axis, sdlaxis); - break; - default: - break; - } - - int bindcount = 0; - SDL_GamepadBinding **sdlbindings = SDL_GetGamepadBindings(controller, &bindcount); - for (int i = 0; i < bindcount; i++) - { - const SDL_GamepadBinding *b = sdlbindings[i]; - if ((input.type == INPUT_TYPE_BUTTON && b->output_type == SDL_GAMEPAD_BINDTYPE_BUTTON && b->output.button == sdlbutton) - || (input.type == INPUT_TYPE_AXIS && b->output_type == SDL_GAMEPAD_BINDTYPE_AXIS && b->output.axis.axis == sdlaxis)) - { - switch (b->input_type) - { - case SDL_GAMEPAD_BINDTYPE_BUTTON: - jinput.type = INPUT_TYPE_BUTTON; - jinput.button = b->input.button; - break; - case SDL_GAMEPAD_BINDTYPE_AXIS: - jinput.type = INPUT_TYPE_AXIS; - jinput.axis = b->input.axis.axis; - break; - case SDL_GAMEPAD_BINDTYPE_HAT: - if (getConstant(b->input.hat.hat_mask, jinput.hat.value)) - { - jinput.type = INPUT_TYPE_HAT; - jinput.hat.index = b->input.hat.hat; - } - break; - case SDL_GAMEPAD_BINDTYPE_NONE: - default: - break; - } - - break; - } - } - - SDL_free(sdlbindings); - - return jinput; -} - -std::string Joystick::getGamepadMappingString() const -{ - char *sdlmapping = nullptr; - - if (controller != nullptr) - sdlmapping = SDL_GetGamepadMapping(controller); - - if (sdlmapping == nullptr) - { - SDL_GUID sdlguid = SDL_StringToGUID(pguid.c_str()); - sdlmapping = SDL_GetGamepadMappingForGUID(sdlguid); - } - - if (sdlmapping == nullptr) - return ""; - - std::string mappingstr(sdlmapping); - SDL_free(sdlmapping); - - // Matches SDL_GameControllerAddMappingsFromRW. - if (mappingstr.find_last_of(',') != mappingstr.length() - 1) - mappingstr += ","; - - if (mappingstr.find("platform:") == std::string::npos) - mappingstr += "platform:" + std::string(SDL_GetPlatform()); - - return mappingstr; -} - -void *Joystick::getHandle() const -{ - return joyhandle; -} - -std::string Joystick::getGUID() const -{ - // SDL2's GUIDs identify *classes* of devices, instead of unique devices. - return pguid; -} - -int Joystick::getInstanceID() const -{ - return instanceid; -} - -int Joystick::getID() const -{ - return id; -} - -void Joystick::getDeviceInfo(int &vendorID, int &productID, int &productVersion) const -{ - if (joyhandle != nullptr) - { - vendorID = SDL_GetJoystickVendor(joyhandle); - productID = SDL_GetJoystickProduct(joyhandle); - productVersion = SDL_GetJoystickProductVersion(joyhandle); - } - else - { - vendorID = 0; - productID = 0; - productVersion = 0; - } -} - -bool Joystick::isVibrationSupported() -{ - if (!isConnected()) - return false; - - SDL_PropertiesID props = SDL_GetJoystickProperties(joyhandle); - return SDL_GetBooleanProperty(props, SDL_PROP_JOYSTICK_CAP_RUMBLE_BOOLEAN, false); -} - -bool Joystick::setVibration(float left, float right, float duration) -{ - left = std::min(std::max(left, 0.0f), 1.0f); - right = std::min(std::max(right, 0.0f), 1.0f); - - if (left == 0.0f && right == 0.0f) - return setVibration(); - - if (!isConnected()) - return false; - - Uint32 length = LOVE_UINT32_MAX; - if (duration >= 0.0f) - { - float maxduration = (float) (std::numeric_limits::max() / 1000.0); - length = Uint32(std::min(duration, maxduration) * 1000); - } - - return SDL_RumbleJoystick(joyhandle, (Uint16)(left * LOVE_UINT16_MAX), (Uint16)(right * LOVE_UINT16_MAX), length) == 0; -} - -bool Joystick::setVibration() -{ - return isConnected() && SDL_RumbleJoystick(joyhandle, 0, 0, 0) == 0; -} - -void Joystick::getVibration(float &left, float &right) -{ - // Deprecated. - left = 0.0f; - right = 0.0f; -} - -bool Joystick::hasSensor(Sensor::SensorType type) const -{ -#if defined(LOVE_ENABLE_SENSOR) - using SDLSensor = love::sensor::sdl::Sensor; - - if (!isGamepad()) - return false; - - return SDL_GamepadHasSensor(controller, SDLSensor::convert(type)); -#else - return false; -#endif -} - -bool Joystick::isSensorEnabled(Sensor::SensorType type) const -{ -#if defined(LOVE_ENABLE_SENSOR) - using SDLSensor = love::sensor::sdl::Sensor; - - if (!isGamepad()) - return false; - - return SDL_GamepadSensorEnabled(controller, SDLSensor::convert(type)); -#else - return false; -#endif -} - -void Joystick::setSensorEnabled(Sensor::SensorType type, bool enabled) -{ -#if defined(LOVE_ENABLE_SENSOR) - using SDLSensor = love::sensor::sdl::Sensor; - - if (!isGamepad()) - throw love::Exception("Sensor is only supported on gamepad"); - - if (!SDL_SetGamepadSensorEnabled(controller, SDLSensor::convert(type), enabled)) - { - const char *name = nullptr; - SDLSensor::getConstant(type, name); - - throw love::Exception("Could not open \"%s\" SDL gamepad sensor (%s)", name, SDL_GetError()); - } -#else - throw love::Exception("Compiled version of LOVE does not support gamepad sensor"); -#endif -} - -std::vector Joystick::getSensorData(Sensor::SensorType type) const -{ -#if defined(LOVE_ENABLE_SENSOR) - using SDLSensor = love::sensor::sdl::Sensor; - - if (!isGamepad()) - throw love::Exception("Sensor is only supported on gamepad"); - - std::vector data(3); - - if (!isSensorEnabled(type)) - { - const char *name = nullptr; - SDLSensor::getConstant(type, name); - - throw love::Exception("\"%s\" gamepad sensor is not enabled", name); - } - - if (!SDL_GetGamepadSensorData(controller, SDLSensor::convert(type), data.data(), (int) data.size())) - { - const char *name = nullptr; - SDLSensor::getConstant(type, name); - - throw love::Exception("Could not get \"%s\" SDL gamepad sensor data (%s)", name, SDL_GetError()); - } - - return data; -#else - throw love::Exception("Compiled version of LOVE does not support gamepad sensor"); -#endif -} - -bool Joystick::getConstant(Uint8 in, Joystick::Hat &out) -{ - return hats.find(in, out); -} - -bool Joystick::getConstant(Joystick::Hat in, Uint8 &out) -{ - return hats.find(in, out); -} - -bool Joystick::getConstant(SDL_GamepadAxis in, Joystick::GamepadAxis &out) -{ - return gpAxes.find(in, out); -} - -bool Joystick::getConstant(Joystick::GamepadAxis in, SDL_GamepadAxis &out) -{ - return gpAxes.find(in, out); -} - -bool Joystick::getConstant(SDL_GamepadButton in, Joystick::GamepadButton &out) -{ - return gpButtons.find(in, out); -} - -bool Joystick::getConstant(Joystick::GamepadButton in, SDL_GamepadButton &out) -{ - return gpButtons.find(in, out); -} - -EnumMap::Entry Joystick::hatEntries[] = -{ - {Joystick::HAT_CENTERED, SDL_HAT_CENTERED}, - {Joystick::HAT_UP, SDL_HAT_UP}, - {Joystick::HAT_RIGHT, SDL_HAT_RIGHT}, - {Joystick::HAT_DOWN, SDL_HAT_DOWN}, - {Joystick::HAT_LEFT, SDL_HAT_LEFT}, - {Joystick::HAT_RIGHTUP, SDL_HAT_RIGHTUP}, - {Joystick::HAT_RIGHTDOWN, SDL_HAT_RIGHTDOWN}, - {Joystick::HAT_LEFTUP, SDL_HAT_LEFTUP}, - {Joystick::HAT_LEFTDOWN, SDL_HAT_LEFTDOWN}, -}; - -EnumMap Joystick::hats(Joystick::hatEntries, sizeof(Joystick::hatEntries)); - -EnumMap::Entry Joystick::gpAxisEntries[] = -{ - {Joystick::GAMEPAD_AXIS_LEFTX, SDL_GAMEPAD_AXIS_LEFTX}, - {Joystick::GAMEPAD_AXIS_LEFTY, SDL_GAMEPAD_AXIS_LEFTY}, - {Joystick::GAMEPAD_AXIS_RIGHTX, SDL_GAMEPAD_AXIS_RIGHTX}, - {Joystick::GAMEPAD_AXIS_RIGHTY, SDL_GAMEPAD_AXIS_RIGHTY}, - {Joystick::GAMEPAD_AXIS_TRIGGERLEFT, SDL_GAMEPAD_AXIS_LEFT_TRIGGER}, - {Joystick::GAMEPAD_AXIS_TRIGGERRIGHT, SDL_GAMEPAD_AXIS_RIGHT_TRIGGER}, -}; - -EnumMap Joystick::gpAxes(Joystick::gpAxisEntries, sizeof(Joystick::gpAxisEntries)); - -EnumMap::Entry Joystick::gpButtonEntries[] = -{ - {Joystick::GAMEPAD_BUTTON_A, SDL_GAMEPAD_BUTTON_SOUTH}, - {Joystick::GAMEPAD_BUTTON_B, SDL_GAMEPAD_BUTTON_EAST}, - {Joystick::GAMEPAD_BUTTON_X, SDL_GAMEPAD_BUTTON_WEST}, - {Joystick::GAMEPAD_BUTTON_Y, SDL_GAMEPAD_BUTTON_NORTH}, - {Joystick::GAMEPAD_BUTTON_BACK, SDL_GAMEPAD_BUTTON_BACK}, - {Joystick::GAMEPAD_BUTTON_GUIDE, SDL_GAMEPAD_BUTTON_GUIDE}, - {Joystick::GAMEPAD_BUTTON_START, SDL_GAMEPAD_BUTTON_START}, - {Joystick::GAMEPAD_BUTTON_LEFTSTICK, SDL_GAMEPAD_BUTTON_LEFT_STICK}, - {Joystick::GAMEPAD_BUTTON_RIGHTSTICK, SDL_GAMEPAD_BUTTON_RIGHT_STICK}, - {Joystick::GAMEPAD_BUTTON_LEFTSHOULDER, SDL_GAMEPAD_BUTTON_LEFT_SHOULDER}, - {Joystick::GAMEPAD_BUTTON_RIGHTSHOULDER, SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER}, - {Joystick::GAMEPAD_BUTTON_DPAD_UP, SDL_GAMEPAD_BUTTON_DPAD_UP}, - {Joystick::GAMEPAD_BUTTON_DPAD_DOWN, SDL_GAMEPAD_BUTTON_DPAD_DOWN}, - {Joystick::GAMEPAD_BUTTON_DPAD_LEFT, SDL_GAMEPAD_BUTTON_DPAD_LEFT}, - {Joystick::GAMEPAD_BUTTON_DPAD_RIGHT, SDL_GAMEPAD_BUTTON_DPAD_RIGHT}, - {Joystick::GAMEPAD_BUTTON_MISC1, SDL_GAMEPAD_BUTTON_MISC1}, - {Joystick::GAMEPAD_BUTTON_PADDLE1, SDL_GAMEPAD_BUTTON_LEFT_PADDLE1}, - {Joystick::GAMEPAD_BUTTON_PADDLE2, SDL_GAMEPAD_BUTTON_LEFT_PADDLE2}, - {Joystick::GAMEPAD_BUTTON_PADDLE3, SDL_GAMEPAD_BUTTON_RIGHT_PADDLE1}, - {Joystick::GAMEPAD_BUTTON_PADDLE4, SDL_GAMEPAD_BUTTON_RIGHT_PADDLE2}, - {Joystick::GAMEPAD_BUTTON_TOUCHPAD, SDL_GAMEPAD_BUTTON_TOUCHPAD}, -}; - -EnumMap Joystick::gpButtons(Joystick::gpButtonEntries, sizeof(Joystick::gpButtonEntries)); - -} // sdl -} // joystick -} // love - -#endif // SDL_VERSION_ATLEAST(3, 0, 0) diff --git a/src/modules/joystick/sdl/JoystickSDL3.h b/src/modules/joystick/sdl/JoystickSDL3.h deleted file mode 100644 index 0265620ca..000000000 --- a/src/modules/joystick/sdl/JoystickSDL3.h +++ /dev/null @@ -1,145 +0,0 @@ -/** - * Copyright (c) 2006-2023 LOVE Development Team - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - **/ - -#ifndef LOVE_JOYSTICK_SDL_JOYSTICK_SDL3_H -#define LOVE_JOYSTICK_SDL_JOYSTICK_SDL3_H - -// LOVE -#include "joystick/Joystick.h" -#include "common/EnumMap.h" -#include "common/int.h" - -// SDL -#if __has_include() -#include -#else -#include -#endif - -#if SDL_VERSION_ATLEAST(3, 0, 0) - -namespace love -{ -namespace joystick -{ -namespace sdl -{ - -class Joystick : public love::joystick::Joystick -{ -public: - - Joystick(int id); - - virtual ~Joystick(); - - bool open(int64 deviceid) override; - void close() override; - - bool isConnected() const override; - - const char *getName() const override; - - JoystickType getJoystickType() const override; - - int getAxisCount() const override; - int getButtonCount() const override; - int getHatCount() const override; - - float getAxis(int axisindex) const override; - std::vector getAxes() const override; - Hat getHat(int hatindex) const override; - - bool isDown(const std::vector &buttonlist) const override; - - void setPlayerIndex(int index) override; - int getPlayerIndex() const override; - - bool openGamepad(int64 deviceid) override; - bool isGamepad() const override; - - GamepadType getGamepadType() const override; - - float getGamepadAxis(GamepadAxis axis) const override; - bool isGamepadDown(const std::vector &blist) const override; - - JoystickInput getGamepadMapping(const GamepadInput &input) const override; - std::string getGamepadMappingString() const override; - - void *getHandle() const override; - - std::string getGUID() const override; - int getInstanceID() const override; - int getID() const override; - - void getDeviceInfo(int &vendorID, int &productID, int &productVersion) const override; - - bool isVibrationSupported() override; - bool setVibration(float left, float right, float duration = -1.0f) override; - bool setVibration() override; - void getVibration(float &left, float &right) override; - - bool hasSensor(Sensor::SensorType type) const override; - bool isSensorEnabled(Sensor::SensorType type) const override; - void setSensorEnabled(Sensor::SensorType type, bool enabled) override; - std::vector getSensorData(Sensor::SensorType type) const override; - - static bool getConstant(Hat in, Uint8 &out); - static bool getConstant(Uint8 in, Hat &out); - - static bool getConstant(SDL_GamepadAxis in, GamepadAxis &out); - static bool getConstant(GamepadAxis in, SDL_GamepadAxis &out); - - static bool getConstant(SDL_GamepadButton in, GamepadButton &out); - static bool getConstant(GamepadButton in, SDL_GamepadButton &out); - -private: - - Joystick() {} - - SDL_Joystick *joyhandle; - SDL_Gamepad *controller; - - JoystickType joystickType; - - SDL_JoystickID instanceid; - std::string pguid; - int id; - - std::string name; - - static EnumMap::Entry hatEntries[]; - static EnumMap hats; - - static EnumMap::Entry gpAxisEntries[]; - static EnumMap gpAxes; - - static EnumMap::Entry gpButtonEntries[]; - static EnumMap gpButtons; - -}; - -} // sdl -} // joystick -} // love - -#endif // SDL_VERSION_ATLEAST(3, 0, 0) - -#endif // LOVE_JOYSTICK_SDL_JOYSTICK_SDL3_H diff --git a/src/modules/keyboard/Keyboard.cpp b/src/modules/keyboard/Keyboard.cpp index 00ad69ad1..fce8ed18e 100644 --- a/src/modules/keyboard/Keyboard.cpp +++ b/src/modules/keyboard/Keyboard.cpp @@ -307,10 +307,6 @@ std::map Keyboard::stringToKey = {"audioplay", Keyboard::KEY_AUDIOPLAY}, {"audiomute", Keyboard::KEY_AUDIOMUTE}, {"mediaselect", Keyboard::KEY_MEDIASELECT}, - {"www", Keyboard::KEY_WWW}, - {"mail", Keyboard::KEY_MAIL}, - {"calculator", Keyboard::KEY_CALCULATOR}, - {"computer", Keyboard::KEY_COMPUTER}, {"appsearch", Keyboard::KEY_APP_SEARCH}, {"apphome", Keyboard::KEY_APP_HOME}, {"appback", Keyboard::KEY_APP_BACK}, @@ -319,12 +315,6 @@ std::map Keyboard::stringToKey = {"apprefresh", Keyboard::KEY_APP_REFRESH}, {"appbookmarks", Keyboard::KEY_APP_BOOKMARKS}, - {"brightnessdown", Keyboard::KEY_BRIGHTNESSDOWN}, - {"brightnessup", Keyboard::KEY_BRIGHTNESSUP}, - {"displayswitch", Keyboard::KEY_DISPLAYSWITCH}, - {"kbdillumtoggle", Keyboard::KEY_KBDILLUMTOGGLE}, - {"kbdillumdown", Keyboard::KEY_KBDILLUMDOWN}, - {"kbdillumup", Keyboard::KEY_KBDILLUMUP}, {"eject", Keyboard::KEY_EJECT}, {"sleep", Keyboard::KEY_SLEEP}, }; @@ -568,10 +558,6 @@ StringMap::Entry Keyboard::scan {"audioplay", SCANCODE_AUDIOPLAY}, {"audiomute", SCANCODE_AUDIOMUTE}, {"mediaselect", SCANCODE_MEDIASELECT}, - {"www", SCANCODE_WWW}, - {"mail", SCANCODE_MAIL}, - {"calculator", SCANCODE_CALCULATOR}, - {"computer", SCANCODE_COMPUTER}, {"acsearch", SCANCODE_AC_SEARCH}, {"achome", SCANCODE_AC_HOME}, {"acback", SCANCODE_AC_BACK}, @@ -580,17 +566,8 @@ StringMap::Entry Keyboard::scan {"acrefresh", SCANCODE_AC_REFRESH}, {"acbookmarks", SCANCODE_AC_BOOKMARKS}, - {"brightnessdown", SCANCODE_BRIGHTNESSDOWN}, - {"brightnessup", SCANCODE_BRIGHTNESSUP}, - {"displayswitch", SCANCODE_DISPLAYSWITCH}, - {"kbdillumtoggle", SCANCODE_KBDILLUMTOGGLE}, - {"kbdillumdown", SCANCODE_KBDILLUMDOWN}, - {"kbdillumup", SCANCODE_KBDILLUMUP}, {"eject", SCANCODE_EJECT}, {"sleep", SCANCODE_SLEEP}, - - {"app1", SCANCODE_APP1}, - {"app2", SCANCODE_APP2}, }; StringMap Keyboard::scancodes(Keyboard::scancodeEntries, sizeof(Keyboard::scancodeEntries)); diff --git a/src/modules/keyboard/Keyboard.h b/src/modules/keyboard/Keyboard.h index fc59b3d54..5b8a9fc9e 100644 --- a/src/modules/keyboard/Keyboard.h +++ b/src/modules/keyboard/Keyboard.h @@ -280,10 +280,6 @@ class Keyboard : public Module SCANCODE_AUDIOPLAY, SCANCODE_AUDIOMUTE, SCANCODE_MEDIASELECT, - SCANCODE_WWW, - SCANCODE_MAIL, - SCANCODE_CALCULATOR, - SCANCODE_COMPUTER, SCANCODE_AC_SEARCH, SCANCODE_AC_HOME, SCANCODE_AC_BACK, @@ -292,18 +288,9 @@ class Keyboard : public Module SCANCODE_AC_REFRESH, SCANCODE_AC_BOOKMARKS, - SCANCODE_BRIGHTNESSDOWN, - SCANCODE_BRIGHTNESSUP, - SCANCODE_DISPLAYSWITCH, - SCANCODE_KBDILLUMTOGGLE, - SCANCODE_KBDILLUMDOWN, - SCANCODE_KBDILLUMUP, SCANCODE_EJECT, SCANCODE_SLEEP, - SCANCODE_APP1, - SCANCODE_APP2, - SCANCODE_MAX_ENUM }; @@ -515,10 +502,6 @@ class Keyboard : public Module KEY_AUDIOPLAY = LOVE_KEY(SCANCODE_AUDIOPLAY), KEY_AUDIOMUTE = LOVE_KEY(SCANCODE_AUDIOMUTE), KEY_MEDIASELECT = LOVE_KEY(SCANCODE_MEDIASELECT), - KEY_WWW = LOVE_KEY(SCANCODE_WWW), - KEY_MAIL = LOVE_KEY(SCANCODE_MAIL), - KEY_CALCULATOR = LOVE_KEY(SCANCODE_CALCULATOR), - KEY_COMPUTER = LOVE_KEY(SCANCODE_COMPUTER), KEY_APP_SEARCH = LOVE_KEY(SCANCODE_AC_SEARCH), KEY_APP_HOME = LOVE_KEY(SCANCODE_AC_HOME), KEY_APP_BACK = LOVE_KEY(SCANCODE_AC_BACK), @@ -527,12 +510,6 @@ class Keyboard : public Module KEY_APP_REFRESH = LOVE_KEY(SCANCODE_AC_REFRESH), KEY_APP_BOOKMARKS = LOVE_KEY(SCANCODE_AC_BOOKMARKS), - KEY_BRIGHTNESSDOWN = LOVE_KEY(SCANCODE_BRIGHTNESSDOWN), - KEY_BRIGHTNESSUP = LOVE_KEY(SCANCODE_BRIGHTNESSUP), - KEY_DISPLAYSWITCH = LOVE_KEY(SCANCODE_DISPLAYSWITCH), - KEY_KBDILLUMTOGGLE = LOVE_KEY(SCANCODE_KBDILLUMTOGGLE), - KEY_KBDILLUMDOWN = LOVE_KEY(SCANCODE_KBDILLUMDOWN), - KEY_KBDILLUMUP = LOVE_KEY(SCANCODE_KBDILLUMUP), KEY_EJECT = LOVE_KEY(SCANCODE_EJECT), KEY_SLEEP = LOVE_KEY(SCANCODE_SLEEP), }; diff --git a/src/modules/keyboard/sdl/Keyboard.cpp b/src/modules/keyboard/sdl/Keyboard.cpp index 4a7892cee..4263a5bf5 100644 --- a/src/modules/keyboard/sdl/Keyboard.cpp +++ b/src/modules/keyboard/sdl/Keyboard.cpp @@ -18,21 +18,10 @@ * 3. This notice may not be removed or altered from any source distribution. **/ -#if __has_include() -#include -#else -#include -#endif - #include "Keyboard.h" #include "window/Window.h" #include "common/config.h" -// SDL before 2.0.18 lack KMOD_SCROLL. Use KMOD_RESERVED instead. -#if !SDL_VERSION_ATLEAST(2, 0, 18) -#define KMOD_SCROLL KMOD_RESERVED -#endif // !SDL_VERSION_ATLEAST(2, 0, 18) - namespace love { namespace keyboard @@ -40,7 +29,6 @@ namespace keyboard namespace sdl { -#if SDL_VERSION_ATLEAST(3, 0, 0) static SDL_Window *getSDLWindow() { auto window = Module::getInstance(Module::M_WINDOW); @@ -48,7 +36,6 @@ static SDL_Window *getSDLWindow() return (SDL_Window *) window->getHandle(); return nullptr; } -#endif Keyboard::Keyboard() : love::keyboard::Keyboard("love.keyboard.sdl") @@ -68,22 +55,14 @@ bool Keyboard::hasKeyRepeat() const bool Keyboard::isDown(const std::vector &keylist) const { -#if SDL_VERSION_ATLEAST(3, 0, 0) const bool *state = SDL_GetKeyboardState(nullptr); -#else - const Uint8 *state = SDL_GetKeyboardState(nullptr); -#endif for (Key key : keylist) { SDL_Keycode sdlkey = SDLK_UNKNOWN; if (getConstant(key, sdlkey)) { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_Scancode scancode = SDL_GetScancodeFromKey(sdlkey, nullptr); -#else - SDL_Scancode scancode = SDL_GetScancodeFromKey(sdlkey); -#endif if (state[scancode]) return true; } @@ -94,11 +73,7 @@ bool Keyboard::isDown(const std::vector &keylist) const bool Keyboard::isScancodeDown(const std::vector &scancodelist) const { -#if SDL_VERSION_ATLEAST(3, 0, 0) const bool *state = SDL_GetKeyboardState(nullptr); -#else - const Uint8 *state = SDL_GetKeyboardState(nullptr); -#endif for (Scancode scancode : scancodelist) { @@ -117,7 +92,6 @@ bool Keyboard::isModifierActive(ModifierKey key) const switch (key) { -#if SDL_VERSION_ATLEAST(3, 0, 0) case MODKEY_NUMLOCK: return (modstate & SDL_KMOD_NUM) != 0; case MODKEY_CAPSLOCK: @@ -126,16 +100,6 @@ bool Keyboard::isModifierActive(ModifierKey key) const return (modstate & SDL_KMOD_SCROLL) != 0; case MODKEY_MODE: return (modstate & SDL_KMOD_MODE) != 0; -#else - case MODKEY_NUMLOCK: - return (modstate & KMOD_NUM) != 0; - case MODKEY_CAPSLOCK: - return (modstate & KMOD_CAPS) != 0; - case MODKEY_SCROLLLOCK: - return (modstate & KMOD_SCROLL) != 0; - case MODKEY_MODE: - return (modstate & KMOD_MODE) != 0; -#endif default: break; } @@ -148,11 +112,7 @@ Keyboard::Key Keyboard::getKeyFromScancode(Scancode scancode) const SDL_Scancode sdlscancode = SDL_SCANCODE_UNKNOWN; scancodes.find(scancode, sdlscancode); -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_Keycode sdlkey = SDL_GetKeyFromScancode(sdlscancode, SDL_KMOD_NONE, false); -#else - SDL_Keycode sdlkey = SDL_GetKeyFromScancode(sdlscancode); -#endif Key key = KEY_UNKNOWN; getConstant(sdlkey, key); @@ -166,11 +126,7 @@ Keyboard::Scancode Keyboard::getScancodeFromKey(Key key) const SDL_Keycode sdlkey = SDLK_UNKNOWN; if (getConstant(key, sdlkey)) { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_Scancode sdlscancode = SDL_GetScancodeFromKey(sdlkey, nullptr); -#else - SDL_Scancode sdlscancode = SDL_GetScancodeFromKey(sdlkey); -#endif scancodes.find(sdlscancode, scancode); } @@ -179,7 +135,6 @@ Keyboard::Scancode Keyboard::getScancodeFromKey(Key key) const void Keyboard::setTextInput(bool enable) { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_Window *window = getSDLWindow(); if (window == nullptr) return; @@ -187,12 +142,6 @@ void Keyboard::setTextInput(bool enable) SDL_StartTextInput(window); else SDL_StopTextInput(window); -#else - if (enable) - SDL_StartTextInput(); - else - SDL_StopTextInput(); -#endif } void Keyboard::setTextInput(bool enable, double x, double y, double w, double h) @@ -208,36 +157,24 @@ void Keyboard::setTextInput(bool enable, double x, double y, double w, double h) SDL_Rect rect = {(int) x, (int) y, (int) w, (int) h}; -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_Window *sdlwindow = getSDLWindow(); if (sdlwindow != nullptr) SDL_SetTextInputArea(sdlwindow, &rect, 0); -#else - SDL_SetTextInputRect(&rect); -#endif setTextInput(enable); } bool Keyboard::hasTextInput() const { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_Window *window = getSDLWindow(); if (window == nullptr) return false; return SDL_TextInputActive(window); -#else - return SDL_IsTextInputActive() != SDL_FALSE; -#endif } bool Keyboard::hasScreenKeyboard() const { -#if SDL_VERSION_ATLEAST(3, 0, 0) return SDL_HasScreenKeyboardSupport(); -#else - return SDL_HasScreenKeyboardSupport() != SDL_FALSE; -#endif } bool Keyboard::getConstant(Key in, SDL_Keycode &out) @@ -421,25 +358,12 @@ std::map Keyboard::keyToSDLKey = { KEY_MODE, SDLK_MODE }, -#if SDL_VERSION_ATLEAST(3, 0, 0) { KEY_AUDIONEXT, SDLK_MEDIA_NEXT_TRACK }, { KEY_AUDIOPREV, SDLK_MEDIA_PREVIOUS_TRACK }, { KEY_AUDIOSTOP, SDLK_MEDIA_STOP }, { KEY_AUDIOPLAY, SDLK_MEDIA_PLAY }, { KEY_AUDIOMUTE, SDLK_MUTE }, { KEY_MEDIASELECT, SDLK_MEDIA_SELECT }, -#else - { KEY_AUDIONEXT, SDLK_AUDIONEXT }, - { KEY_AUDIOPREV, SDLK_AUDIOPREV }, - { KEY_AUDIOSTOP, SDLK_AUDIOSTOP }, - { KEY_AUDIOPLAY, SDLK_AUDIOPLAY }, - { KEY_AUDIOMUTE, SDLK_AUDIOMUTE }, - { KEY_MEDIASELECT, SDLK_MEDIASELECT }, - { KEY_WWW, SDLK_WWW }, - { KEY_MAIL, SDLK_MAIL }, - { KEY_CALCULATOR, SDLK_CALCULATOR }, - { KEY_COMPUTER, SDLK_COMPUTER }, -#endif { KEY_APP_SEARCH, SDLK_AC_SEARCH }, { KEY_APP_HOME, SDLK_AC_HOME }, { KEY_APP_BACK, SDLK_AC_BACK }, @@ -448,27 +372,13 @@ std::map Keyboard::keyToSDLKey = { KEY_APP_REFRESH, SDLK_AC_REFRESH }, { KEY_APP_BOOKMARKS, SDLK_AC_BOOKMARKS }, -#if SDL_VERSION_ATLEAST(3, 0, 0) { KEY_EJECT, SDLK_MEDIA_EJECT }, -#else - { KEY_BRIGHTNESSDOWN, SDLK_BRIGHTNESSDOWN }, - { KEY_BRIGHTNESSUP, SDLK_BRIGHTNESSUP }, - { KEY_DISPLAYSWITCH, SDLK_DISPLAYSWITCH }, - { KEY_KBDILLUMTOGGLE, SDLK_KBDILLUMTOGGLE }, - { KEY_KBDILLUMDOWN, SDLK_KBDILLUMDOWN }, - { KEY_KBDILLUMUP, SDLK_KBDILLUMUP }, - { KEY_EJECT, SDLK_EJECT }, -#endif { KEY_SLEEP, SDLK_SLEEP }, }; std::map Keyboard::sdlKeyToKey; -#if SDL_VERSION_ATLEAST(3, 0, 0) EnumMap::Entry Keyboard::scancodeEntries[] = -#else -EnumMap::Entry Keyboard::scancodeEntries[] = -#endif { {SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN}, @@ -699,25 +609,12 @@ EnumMap::Entry Keyboard::sc {SCANCODE_MODE, SDL_SCANCODE_MODE}, -#if SDL_VERSION_ATLEAST(3, 0, 0) {SCANCODE_AUDIONEXT, SDL_SCANCODE_MEDIA_NEXT_TRACK}, {SCANCODE_AUDIOPREV, SDL_SCANCODE_MEDIA_PREVIOUS_TRACK}, {SCANCODE_AUDIOSTOP, SDL_SCANCODE_MEDIA_STOP}, {SCANCODE_AUDIOPLAY, SDL_SCANCODE_MEDIA_PLAY}, {SCANCODE_AUDIOMUTE, SDL_SCANCODE_MUTE}, {SCANCODE_MEDIASELECT, SDL_SCANCODE_MEDIA_SELECT}, -#else - {SCANCODE_AUDIONEXT, SDL_SCANCODE_AUDIONEXT}, - {SCANCODE_AUDIOPREV, SDL_SCANCODE_AUDIOPREV}, - {SCANCODE_AUDIOSTOP, SDL_SCANCODE_AUDIOSTOP}, - {SCANCODE_AUDIOPLAY, SDL_SCANCODE_AUDIOPLAY}, - {SCANCODE_AUDIOMUTE, SDL_SCANCODE_AUDIOMUTE}, - {SCANCODE_MEDIASELECT, SDL_SCANCODE_MEDIASELECT}, - {SCANCODE_WWW, SDL_SCANCODE_WWW}, - {SCANCODE_MAIL, SDL_SCANCODE_MAIL}, - {SCANCODE_CALCULATOR, SDL_SCANCODE_CALCULATOR}, - {SCANCODE_COMPUTER, SDL_SCANCODE_COMPUTER}, -#endif {SCANCODE_AC_SEARCH, SDL_SCANCODE_AC_SEARCH}, {SCANCODE_AC_HOME, SDL_SCANCODE_AC_HOME}, {SCANCODE_AC_BACK, SDL_SCANCODE_AC_BACK}, @@ -726,29 +623,11 @@ EnumMap::Entry Keyboard::sc {SCANCODE_AC_REFRESH, SDL_SCANCODE_AC_REFRESH}, {SCANCODE_AC_BOOKMARKS, SDL_SCANCODE_AC_BOOKMARKS}, -#if SDL_VERSION_ATLEAST(3, 0, 0) {SCANCODE_EJECT, SDL_SCANCODE_MEDIA_EJECT}, {SCANCODE_SLEEP, SDL_SCANCODE_SLEEP}, -#else - {SCANCODE_BRIGHTNESSDOWN, SDL_SCANCODE_BRIGHTNESSDOWN}, - {SCANCODE_BRIGHTNESSUP, SDL_SCANCODE_BRIGHTNESSUP}, - {SCANCODE_DISPLAYSWITCH, SDL_SCANCODE_DISPLAYSWITCH}, - {SCANCODE_KBDILLUMTOGGLE, SDL_SCANCODE_KBDILLUMTOGGLE}, - {SCANCODE_KBDILLUMDOWN, SDL_SCANCODE_KBDILLUMDOWN}, - {SCANCODE_KBDILLUMUP, SDL_SCANCODE_KBDILLUMUP}, - {SCANCODE_EJECT, SDL_SCANCODE_EJECT}, - {SCANCODE_SLEEP, SDL_SCANCODE_SLEEP}, - - {SCANCODE_APP1, SDL_SCANCODE_APP1}, - {SCANCODE_APP2, SDL_SCANCODE_APP2}, -#endif }; -#if SDL_VERSION_ATLEAST(3, 0, 0) EnumMap Keyboard::scancodes(Keyboard::scancodeEntries, sizeof(Keyboard::scancodeEntries)); -#else -EnumMap Keyboard::scancodes(Keyboard::scancodeEntries, sizeof(Keyboard::scancodeEntries)); -#endif } // sdl } // keyboard diff --git a/src/modules/keyboard/sdl/Keyboard.h b/src/modules/keyboard/sdl/Keyboard.h index a0f35ce9d..65222575c 100644 --- a/src/modules/keyboard/sdl/Keyboard.h +++ b/src/modules/keyboard/sdl/Keyboard.h @@ -26,13 +26,7 @@ #include "common/EnumMap.h" // SDL -#if __has_include() #include -#include -#else -#include -#include -#endif #include @@ -78,13 +72,8 @@ class Keyboard : public love::keyboard::Keyboard static std::map keyToSDLKey; static std::map sdlKeyToKey; -#if SDL_VERSION_ATLEAST(3, 0, 0) static EnumMap::Entry scancodeEntries[]; static EnumMap scancodes; -#else - static EnumMap::Entry scancodeEntries[]; - static EnumMap scancodes; -#endif }; // Keyboard diff --git a/src/modules/love/boot.lua b/src/modules/love/boot.lua index 2dedd0cd4..6fb7a5eac 100644 --- a/src/modules/love/boot.lua +++ b/src/modules/love/boot.lua @@ -210,7 +210,6 @@ function love.init() identity = false, appendidentity = false, externalstorage = false, -- Only relevant for Android. - accelerometerjoystick = nil, -- Only relevant for Android / iOS, deprecated. gammacorrect = false, highdpi = false, renderers = nil, @@ -243,11 +242,6 @@ function love.init() love._openConsole() end - -- Hack for disabling accelerometer-as-joystick on Android / iOS. - if love._setAccelerometerAsJoystick then - love._setAccelerometerAsJoystick(c.accelerometerjoystick) - end - if love._setGammaCorrect then love._setGammaCorrect(c.gammacorrect) end @@ -380,7 +374,7 @@ function love.init() y = c.window.y, }), "Could not set window mode") if c.window.icon then - assert(love.image, "If an icon is set in love.conf, love.image must be loaded!") + assert(love.image, "If an icon is set in love.conf, love.image must be loaded.") love.window.setIcon(love.image.newImageData(c.window.icon)) end end diff --git a/src/modules/love/love.cpp b/src/modules/love/love.cpp index ccc55fd39..72cac9348 100644 --- a/src/modules/love/love.cpp +++ b/src/modules/love/love.cpp @@ -37,11 +37,7 @@ #endif // LOVE_WINDOWS #ifdef LOVE_ANDROID -#if __has_include() #include -#else -#include -#endif #endif // LOVE_ANDROID #ifdef LOVE_LEGENDARY_CONSOLE_IO_HACK @@ -51,14 +47,6 @@ #include #endif // LOVE_LEGENDARY_CONSOLE_IO_HACK -#ifdef LOVE_LEGENDARY_ACCELEROMETER_AS_JOYSTICK_HACK -#if __has_include() -#undef LOVE_LEGENDARY_ACCELEROMETER_AS_JOYSTICK_HACK -#else -#include -#endif -#endif // LOVE_LEGENDARY_ACCELEROMETER_AS_JOYSTICK_HACK - // Libraries. #ifdef LOVE_ENABLE_LUASOCKET # include "libraries/luasocket/luasocket.h" @@ -259,10 +247,6 @@ static const luaL_Reg modules[] = { int w__openConsole(lua_State *L); #endif // LOVE_LEGENDARY_CONSOLE_IO_HACK -#ifdef LOVE_LEGENDARY_ACCELEROMETER_AS_JOYSTICK_HACK -int w__setAccelerometerAsJoystick(lua_State *L); -#endif - #ifdef LOVE_ANDROID static int w_print_sdl_log(lua_State *L) { @@ -560,11 +544,6 @@ int luaopen_love(lua_State *L) lua_setfield(L, -2, "_openConsole"); #endif // LOVE_LEGENDARY_CONSOLE_IO_HACK -#ifdef LOVE_LEGENDARY_ACCELEROMETER_AS_JOYSTICK_HACK - lua_pushcfunction(L, w__setAccelerometerAsJoystick); - lua_setfield(L, -2, "_setAccelerometerAsJoystick"); -#endif - lua_pushcfunction(L, w__setGammaCorrect); lua_setfield(L, -2, "_setGammaCorrect"); @@ -772,19 +751,6 @@ int w__openConsole(lua_State *L) #endif // LOVE_LEGENDARY_CONSOLE_IO_HACK -#ifdef LOVE_LEGENDARY_ACCELEROMETER_AS_JOYSTICK_HACK -int w__setAccelerometerAsJoystick(lua_State *L) -{ - bool enable = (bool) lua_toboolean(L, 1); - SDL_SetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, enable ? "1" : "0"); - - if (enable) - love::luax_markdeprecated(L, 1, "accelerometerjoystick", love::API_FIELD, love::DEPRECATED_REPLACED, "love.sensor module"); - - return 0; -} -#endif // LOVE_LEGENDARY_ACCELEROMETER_AS_JOYSTICK_HACK - int luaopen_love_nogame(lua_State *L) { if (luaL_loadbuffer(L, (const char *)love::nogame_lua, sizeof(love::nogame_lua), "=[love \"nogame.lua\"]") == 0) diff --git a/src/modules/mouse/sdl/Cursor.cpp b/src/modules/mouse/sdl/Cursor.cpp index 2928a4128..3043f8daf 100644 --- a/src/modules/mouse/sdl/Cursor.cpp +++ b/src/modules/mouse/sdl/Cursor.cpp @@ -22,12 +22,6 @@ #include "Cursor.h" #include "common/config.h" -#if __has_include() -#include -#else -#include -#endif - namespace love { namespace mouse @@ -44,34 +38,12 @@ Cursor::Cursor(image::ImageData *data, int hotx, int hoty) int h = data->getHeight(); int pitch = w * 4; -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_Surface *surface = SDL_CreateSurfaceFrom(w, h, SDL_PIXELFORMAT_RGBA8888, data->getData(), pitch); -#else - Uint32 rmask, gmask, bmask, amask; -#ifdef LOVE_BIG_ENDIAN - rmask = 0xFF000000; - gmask = 0x00FF0000; - bmask = 0x0000FF00; - amask = 0x000000FF; -#else - rmask = 0x000000FF; - gmask = 0x0000FF00; - bmask = 0x00FF0000; - amask = 0xFF000000; -#endif - - SDL_Surface *surface = SDL_CreateRGBSurfaceFrom(data->getData(), w, h, 32, pitch, rmask, gmask, bmask, amask); -#endif if (!surface) - throw love::Exception("Cannot create cursor: out of memory!"); + throw love::Exception("Cannot create cursor: out of memory."); cursor = SDL_CreateColorCursor(surface, hotx, hoty); -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_DestroySurface(surface); -#else - SDL_FreeSurface(surface); - -#endif if (!cursor) throw love::Exception("Cannot create cursor: %s", SDL_GetError()); @@ -95,13 +67,8 @@ Cursor::Cursor(mouse::Cursor::SystemCursor cursortype) Cursor::~Cursor() { -#if SDL_VERSION_ATLEAST(3, 0, 0) if (cursor) SDL_DestroyCursor(cursor); -#else - if (cursor) - SDL_FreeCursor(cursor); -#endif } void *Cursor::getHandle() const @@ -121,7 +88,6 @@ Cursor::SystemCursor Cursor::getSystemType() const EnumMap::Entry Cursor::systemCursorEntries[] = { -#if SDL_VERSION_ATLEAST(3, 0, 0) {Cursor::CURSOR_ARROW, SDL_SYSTEM_CURSOR_DEFAULT}, {Cursor::CURSOR_IBEAM, SDL_SYSTEM_CURSOR_TEXT}, {Cursor::CURSOR_WAIT, SDL_SYSTEM_CURSOR_WAIT}, @@ -134,20 +100,6 @@ EnumMap::Entry {Cursor::CURSOR_SIZEALL, SDL_SYSTEM_CURSOR_MOVE}, {Cursor::CURSOR_NO, SDL_SYSTEM_CURSOR_NOT_ALLOWED}, {Cursor::CURSOR_HAND, SDL_SYSTEM_CURSOR_POINTER}, -#else - {Cursor::CURSOR_ARROW, SDL_SYSTEM_CURSOR_ARROW}, - {Cursor::CURSOR_IBEAM, SDL_SYSTEM_CURSOR_IBEAM}, - {Cursor::CURSOR_WAIT, SDL_SYSTEM_CURSOR_WAIT}, - {Cursor::CURSOR_CROSSHAIR, SDL_SYSTEM_CURSOR_CROSSHAIR}, - {Cursor::CURSOR_WAITARROW, SDL_SYSTEM_CURSOR_WAITARROW}, - {Cursor::CURSOR_SIZENWSE, SDL_SYSTEM_CURSOR_SIZENWSE}, - {Cursor::CURSOR_SIZENESW, SDL_SYSTEM_CURSOR_SIZENESW}, - {Cursor::CURSOR_SIZEWE, SDL_SYSTEM_CURSOR_SIZEWE}, - {Cursor::CURSOR_SIZENS, SDL_SYSTEM_CURSOR_SIZENS}, - {Cursor::CURSOR_SIZEALL, SDL_SYSTEM_CURSOR_SIZEALL}, - {Cursor::CURSOR_NO, SDL_SYSTEM_CURSOR_NO}, - {Cursor::CURSOR_HAND, SDL_SYSTEM_CURSOR_HAND}, -#endif }; EnumMap Cursor::systemCursors(Cursor::systemCursorEntries, sizeof(Cursor::systemCursorEntries)); diff --git a/src/modules/mouse/sdl/Cursor.h b/src/modules/mouse/sdl/Cursor.h index de4807ba9..ee0defc27 100644 --- a/src/modules/mouse/sdl/Cursor.h +++ b/src/modules/mouse/sdl/Cursor.h @@ -26,11 +26,7 @@ #include "common/EnumMap.h" // SDL -#if __has_include() #include -#else -#include -#endif namespace love { diff --git a/src/modules/mouse/sdl/Mouse.cpp b/src/modules/mouse/sdl/Mouse.cpp index 022da0673..4f51a23d6 100644 --- a/src/modules/mouse/sdl/Mouse.cpp +++ b/src/modules/mouse/sdl/Mouse.cpp @@ -23,13 +23,7 @@ #include "window/sdl/Window.h" // SDL -#if __has_include() #include -#include -#else -#include -#include -#endif namespace love { @@ -38,7 +32,6 @@ namespace mouse namespace sdl { -#if SDL_VERSION_ATLEAST(3, 0, 0) static SDL_Window *getSDLWindow() { auto window = Module::getInstance(Module::M_WINDOW); @@ -46,7 +39,6 @@ static SDL_Window *getSDLWindow() return (SDL_Window *) window->getHandle(); return nullptr; } -#endif // SDL reports mouse coordinates in the window coordinate system in OS X, but // we want them in pixel coordinates (may be different with high-DPI enabled.) @@ -138,13 +130,8 @@ bool Mouse::isCursorSupported() const void Mouse::getPosition(double &x, double &y) const { -#if SDL_VERSION_ATLEAST(3, 0, 0) float mx, my; SDL_GetMouseState(&mx, &my); -#else - int mx, my; - SDL_GetMouseState(&mx, &my); -#endif x = (double) mx; y = (double) my; @@ -178,17 +165,12 @@ void Mouse::setPosition(double x, double y) void Mouse::getGlobalPosition(double &x, double &y, int &displayindex) const { -#if SDL_VERSION_ATLEAST(3, 0, 0) float globalx, globaly; -#else - int globalx, globaly; -#endif SDL_GetGlobalMouseState(&globalx, &globaly); auto mx = globalx; auto my = globaly; -#if SDL_VERSION_ATLEAST(3, 0, 0) int displaycount = 0; SDL_DisplayID *displays = SDL_GetDisplays(&displaycount); @@ -206,22 +188,6 @@ void Mouse::getGlobalPosition(double &x, double &y, int &displayindex) const if (SDL_PointInRectFloat(&p, &frect)) break; } -#else - int displaycount = SDL_GetNumVideoDisplays(); - - for (displayindex = 0; displayindex < displaycount; displayindex++) - { - SDL_Rect rect = {}; - SDL_GetDisplayBounds(displayindex, &rect); - - mx -= rect.x; - my -= rect.y; - - SDL_Point p = { globalx, globaly }; - if (SDL_PointInRect(&p, &rect)) - break; - } -#endif if (displayindex >= displaycount) displayindex = 0; @@ -232,14 +198,10 @@ void Mouse::getGlobalPosition(double &x, double &y, int &displayindex) const void Mouse::setVisible(bool visible) { -#if SDL_VERSION_ATLEAST(3, 0, 0) if (visible) SDL_ShowCursor(); else SDL_HideCursor(); -#else - SDL_ShowCursor(visible ? SDL_ENABLE : SDL_DISABLE); -#endif } bool Mouse::isDown(const std::vector &buttons) const @@ -263,11 +225,7 @@ bool Mouse::isDown(const std::vector &buttons) const break; } -#if SDL_VERSION_ATLEAST(3, 0, 0) if (buttonstate & SDL_BUTTON_MASK(button)) -#else - if (buttonstate & SDL_BUTTON(button)) -#endif return true; } @@ -276,11 +234,7 @@ bool Mouse::isDown(const std::vector &buttons) const bool Mouse::isVisible() const { -#if SDL_VERSION_ATLEAST(3, 0, 0) return SDL_CursorVisible(); -#else - return SDL_ShowCursor(SDL_QUERY) == SDL_ENABLE; -#endif } void Mouse::setGrabbed(bool grab) @@ -301,26 +255,18 @@ bool Mouse::isGrabbed() const bool Mouse::setRelativeMode(bool relative) { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_Window *sdlwindow = getSDLWindow(); if (sdlwindow == nullptr) return false; return SDL_SetWindowRelativeMouseMode(sdlwindow, relative); -#else - return SDL_SetRelativeMouseMode(relative ? SDL_TRUE : SDL_FALSE) == 0; -#endif } bool Mouse::getRelativeMode() const { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_Window *sdlwindow = getSDLWindow(); if (sdlwindow == nullptr) return false; return SDL_GetWindowRelativeMouseMode(sdlwindow); -#else - return SDL_GetRelativeMouseMode() != SDL_FALSE; -#endif } } // sdl diff --git a/src/modules/sensor/sdl/Sensor.cpp b/src/modules/sensor/sdl/Sensor.cpp index b5917c87a..58522aa0e 100644 --- a/src/modules/sensor/sdl/Sensor.cpp +++ b/src/modules/sensor/sdl/Sensor.cpp @@ -22,13 +22,8 @@ #include "Sensor.h" // SDL -#if __has_include() #include #include -#else -#include -#include -#endif namespace love { @@ -41,11 +36,7 @@ Sensor::Sensor() : love::sensor::Sensor("love.sensor.sdl") , sensors() { -#if SDL_VERSION_ATLEAST(3, 0, 0) if (!SDL_InitSubSystem(SDL_INIT_SENSOR)) -#else - if (SDL_InitSubSystem(SDL_INIT_SENSOR) < 0) -#endif throw love::Exception("Could not initialize SDL sensor subsystem (%s)", SDL_GetError()); } @@ -56,7 +47,6 @@ Sensor::~Sensor() bool Sensor::hasSensor(SensorType type) { -#if SDL_VERSION_ATLEAST(3, 0, 0) int count = 0; SDL_SensorID *sensorIDs = SDL_GetSensors(&count); for (int i = 0; i < count; i++) @@ -68,13 +58,6 @@ bool Sensor::hasSensor(SensorType type) } } SDL_free(sensorIDs); -#else - for (int i = 0; i < SDL_NumSensors(); i++) - { - if (convert(SDL_SensorGetDeviceType(i)) == type) - return true; - } -#endif return false; } @@ -88,16 +71,11 @@ void Sensor::setEnabled(SensorType type, bool enable) { if (sensors[type] && !enable) { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_CloseSensor(sensors[type]); -#else - SDL_SensorClose(sensors[type]); -#endif sensors[type] = nullptr; } else if (sensors[type] == nullptr && enable) { -#if SDL_VERSION_ATLEAST(3, 0, 0) int count = 0; SDL_SensorID *sensorIDs = SDL_GetSensors(&count); for (int i = 0; i < count; i++) @@ -119,24 +97,6 @@ void Sensor::setEnabled(SensorType type, bool enable) } } SDL_free(sensorIDs); -#else - for (int i = 0; i < SDL_NumSensors(); i++) - { - if (convert(SDL_SensorGetDeviceType(i)) == type) - { - SDL_Sensor *sensorHandle = SDL_SensorOpen(i); - - if (sensorHandle == nullptr) - { - const char *name = nullptr; - getConstant(type, name); - throw love::Exception("Could not open \"%s\" SDL sensor (%s)", name, SDL_GetError()); - } - - sensors[type] = sensorHandle; - } - } -#endif } } @@ -152,11 +112,7 @@ std::vector Sensor::getData(SensorType type) std::vector values(3); -#if SDL_VERSION_ATLEAST(3, 0, 0) if (!SDL_GetSensorData(sensors[type], values.data(), (int) values.size())) -#else - if (SDL_SensorGetData(sensors[type], values.data(), (int) values.size()) != 0) -#endif { const char *name = nullptr; getConstant(type, name); @@ -190,11 +146,7 @@ const char *Sensor::getSensorName(SensorType type) throw love::Exception("\"%s\" sensor is not enabled", name); } -#if SDL_VERSION_ATLEAST(3, 0, 0) return SDL_GetSensorName(sensors[type]); -#else - return SDL_SensorGetName(sensors[type]); -#endif } Sensor::SensorType Sensor::convert(SDL_SensorType type) diff --git a/src/modules/sensor/sdl/Sensor.h b/src/modules/sensor/sdl/Sensor.h index 3cbc56581..96e8d56b5 100644 --- a/src/modules/sensor/sdl/Sensor.h +++ b/src/modules/sensor/sdl/Sensor.h @@ -25,11 +25,7 @@ #include "sensor/Sensor.h" // SDL -#if __has_include() #include -#else -#include -#endif // std #include diff --git a/src/modules/system/sdl/System.cpp b/src/modules/system/sdl/System.cpp index c3f32aa08..e23a5d364 100644 --- a/src/modules/system/sdl/System.cpp +++ b/src/modules/system/sdl/System.cpp @@ -23,20 +23,9 @@ #include "window/Window.h" // SDL -#if __has_include() #include #include -#include #include -#else -#include -#include -#include - -#if SDL_VERSION_ATLEAST(2, 0, 14) -#include -#endif -#endif namespace love { @@ -52,11 +41,7 @@ System::System() int System::getProcessorCount() const { -#if SDL_VERSION_ATLEAST(3, 0, 0) return SDL_GetNumLogicalCPUCores(); -#else - return SDL_GetCPUCount(); -#endif } bool System::isWindowOpen() const @@ -106,7 +91,6 @@ std::vector System::getPreferredLocales() const { std::vector result; -#if SDL_VERSION_ATLEAST(3, 0, 0) int count = 0; SDL_Locale **locales = SDL_GetPreferredLocales(&count); for (int i = 0; i < count; i++) @@ -118,22 +102,6 @@ std::vector System::getPreferredLocales() const result.push_back(locale->language); } SDL_free(locales); -#elif SDL_VERSION_ATLEAST(2, 0, 14) - SDL_Locale *locales = SDL_GetPreferredLocales(); - - if (locales) - { - for (SDL_Locale* locale = locales; locale->language != nullptr; locale++) - { - if (locale->country) - result.push_back(std::string(locale->language) + "_" + std::string(locale->country)); - else - result.push_back(locale->language); - } - - SDL_free(locales); - } -#endif return result; } diff --git a/src/modules/system/sdl/System.h b/src/modules/system/sdl/System.h index 98776ac55..883016dbb 100644 --- a/src/modules/system/sdl/System.h +++ b/src/modules/system/sdl/System.h @@ -26,11 +26,7 @@ #include "common/EnumMap.h" // SDL -#if __has_include() #include -#else -#include -#endif namespace love { diff --git a/src/modules/thread/sdl/Thread.h b/src/modules/thread/sdl/Thread.h index 8f43a52fd..b707e4d86 100644 --- a/src/modules/thread/sdl/Thread.h +++ b/src/modules/thread/sdl/Thread.h @@ -26,11 +26,7 @@ #include "threads.h" // SDL -#if __has_include() #include -#else -#include -#endif namespace love { diff --git a/src/modules/thread/sdl/threads.cpp b/src/modules/thread/sdl/threads.cpp index 5ac4bc380..582f6b177 100644 --- a/src/modules/thread/sdl/threads.cpp +++ b/src/modules/thread/sdl/threads.cpp @@ -50,38 +50,22 @@ void Mutex::unlock() Conditional::Conditional() { -#if SDL_VERSION_ATLEAST(3, 0, 0) cond = SDL_CreateCondition(); -#else - cond = SDL_CreateCond(); -#endif } Conditional::~Conditional() { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_DestroyCondition(cond); -#else - SDL_DestroyCond(cond); -#endif } void Conditional::signal() { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_SignalCondition(cond); -#else - SDL_CondSignal(cond); -#endif } void Conditional::broadcast() { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_BroadcastCondition(cond); -#else - SDL_CondBroadcast(cond); -#endif } bool Conditional::wait(thread::Mutex *_mutex, int timeout) @@ -90,7 +74,6 @@ bool Conditional::wait(thread::Mutex *_mutex, int timeout) // however, you're asking for it if you're // mixing thread implementations. Mutex *mutex = (Mutex *) _mutex; -#if SDL_VERSION_ATLEAST(3, 0, 0) if (timeout < 0) { SDL_WaitCondition(cond, mutex->mutex); @@ -98,12 +81,6 @@ bool Conditional::wait(thread::Mutex *_mutex, int timeout) } else return SDL_WaitConditionTimeout(cond, mutex->mutex, timeout); -#else - if (timeout < 0) - return !SDL_CondWait(cond, mutex->mutex); - else - return (SDL_CondWaitTimeout(cond, mutex->mutex, timeout) == 0); -#endif } } // sdl diff --git a/src/modules/thread/sdl/threads.h b/src/modules/thread/sdl/threads.h index 8064921ad..66e1d6c6f 100644 --- a/src/modules/thread/sdl/threads.h +++ b/src/modules/thread/sdl/threads.h @@ -24,15 +24,8 @@ #include "common/config.h" #include "thread/threads.h" -#if __has_include() -#include #include #include -#else -#include -#include -#include -#endif namespace love { @@ -55,11 +48,7 @@ class Mutex : public thread::Mutex private: -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_Mutex *mutex; -#else - SDL_mutex *mutex; -#endif Mutex(const Mutex&/* mutex*/) {} friend class Conditional; @@ -79,11 +68,7 @@ class Conditional : public thread::Conditional private: -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_Condition *cond; -#else - SDL_cond *cond; -#endif }; // Conditional diff --git a/src/modules/touch/sdl/Touch.cpp b/src/modules/touch/sdl/Touch.cpp index 0bfab4e67..78aa63bc8 100644 --- a/src/modules/touch/sdl/Touch.cpp +++ b/src/modules/touch/sdl/Touch.cpp @@ -23,12 +23,6 @@ #include "common/Exception.h" #include "Touch.h" -#if __has_include() -#include -#else -#include -#endif - // C++ #include @@ -69,19 +63,11 @@ void Touch::onEvent(Uint32 eventtype, const TouchInfo &info) switch (eventtype) { -#if SDL_VERSION_ATLEAST(3, 0, 0) case SDL_EVENT_FINGER_DOWN: -#else - case SDL_FINGERDOWN: -#endif touches.erase(std::remove_if(touches.begin(), touches.end(), compare), touches.end()); touches.push_back(info); break; -#if SDL_VERSION_ATLEAST(3, 0, 0) case SDL_EVENT_FINGER_MOTION: -#else - case SDL_FINGERMOTION: -#endif { for (TouchInfo &touch : touches) { @@ -90,11 +76,7 @@ void Touch::onEvent(Uint32 eventtype, const TouchInfo &info) } break; } -#if SDL_VERSION_ATLEAST(3, 0, 0) case SDL_EVENT_FINGER_UP: -#else - case SDL_FINGERUP: -#endif touches.erase(std::remove_if(touches.begin(), touches.end(), compare), touches.end()); break; default: diff --git a/src/modules/touch/sdl/Touch.h b/src/modules/touch/sdl/Touch.h index 91514c5b4..c19c25dad 100644 --- a/src/modules/touch/sdl/Touch.h +++ b/src/modules/touch/sdl/Touch.h @@ -25,11 +25,7 @@ #include "touch/Touch.h" // SDL -#if __has_include() #include -#else -#include -#endif namespace love { diff --git a/src/modules/window/sdl/Window.cpp b/src/modules/window/sdl/Window.cpp index f0da854f8..f9d79fdbf 100644 --- a/src/modules/window/sdl/Window.cpp +++ b/src/modules/window/sdl/Window.cpp @@ -43,17 +43,8 @@ // C #include -// SDL -#if !SDL_VERSION_ATLEAST(3, 0, 0) -#include -#endif - #ifdef LOVE_GRAPHICS_VULKAN -#if __has_include() #include -#else -#include -#endif #endif #if defined(LOVE_WINDOWS) @@ -84,6 +75,7 @@ void setHighDPIAllowedImplementation(bool enable) #if defined(LOVE_WINDOWS) // Windows uses a different API than SDL_WINDOW_ALLOW_HIGHDPI. // This must be set before the video subsystem is initialized. + // FIXME: How does this work in SDL3? SDL_SetHint(SDL_HINT_WINDOWS_DPI_SCALING, enable ? "1" : "0"); #else LOVE_UNUSED(enable); @@ -105,11 +97,7 @@ Window::Window() , displayedWindowError(false) , contextAttribs() { -#if SDL_VERSION_ATLEAST(3, 0, 0) if (!SDL_InitSubSystem(SDL_INIT_VIDEO)) -#else - if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) -#endif throw love::Exception("Could not initialize SDL video subsystem (%s)", SDL_GetError()); // Make sure the screensaver doesn't activate by default. @@ -118,11 +106,7 @@ Window::Window() #ifdef LOVE_WINDOWS // Turned off by default, because it (ironically) causes stuttering issues // on some setups. More investigation is needed before enabling it. -#if SDL_VERSION_ATLEAST(3, 0, 0) canUseDwmFlush = SDL_GetHintBoolean("LOVE_GRAPHICS_VSYNC_DWM", false); -#else - canUseDwmFlush = SDL_GetHintBoolean("LOVE_GRAPHICS_VSYNC_DWM", SDL_FALSE) != SDL_FALSE; -#endif #endif } @@ -329,11 +313,7 @@ bool Window::createWindowAndContext(int x, int y, int w, int h, Uint32 windowfla { if (glcontext) { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_GL_DestroyContext(glcontext); -#else - SDL_GL_DeleteContext(glcontext); -#endif glcontext = nullptr; } @@ -348,19 +328,11 @@ bool Window::createWindowAndContext(int x, int y, int w, int h, Uint32 windowfla if (window) { SDL_DestroyWindow(window); -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_FlushEvents(SDL_EVENT_WINDOW_FIRST, SDL_EVENT_WINDOW_LAST); -#else - SDL_FlushEvent(SDL_WINDOWEVENT); -#endif window = nullptr; } -#if SDL_VERSION_ATLEAST(3, 0, 0) window = SDL_CreateWindow(title.c_str(), w, h, windowflags); -#else - window = SDL_CreateWindow(title.c_str(), x, y, w, h, windowflags); -#endif if (!window) { @@ -368,9 +340,7 @@ bool Window::createWindowAndContext(int x, int y, int w, int h, Uint32 windowfla return false; } -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_SetWindowPosition(window, x, y); -#endif if (attribs != nullptr && renderer == love::graphics::Renderer::RENDERER_OPENGL) { @@ -386,11 +356,7 @@ bool Window::createWindowAndContext(int x, int y, int w, int h, Uint32 windowfla // Make sure the context's version is at least what we requested. if (glcontext && !checkGLVersion(*attribs, glversion)) { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_GL_DestroyContext(glcontext); -#else - SDL_GL_DeleteContext(glcontext); -#endif glcontext = nullptr; } @@ -494,7 +460,6 @@ bool Window::createWindowAndContext(int x, int y, int w, int h, Uint32 windowfla return true; } -#if SDL_VERSION_ATLEAST(3, 0, 0) struct SDLDisplayIDs { SDLDisplayIDs() @@ -519,7 +484,6 @@ static SDL_DisplayID GetSDLDisplayIDForIndex(int displayindex) return (SDL_DisplayID) 0; return displayids.ids[displayindex]; } -#endif bool Window::setWindow(int width, int height, WindowSettings *settings) { @@ -542,28 +506,17 @@ bool Window::setWindow(int width, int height, WindowSettings *settings) f.minwidth = std::max(f.minwidth, 1); f.minheight = std::max(f.minheight, 1); -#if SDL_VERSION_ATLEAST(3, 0, 0) SDLDisplayIDs displays; int displaycount = displays.count; -#else - int displaycount = getDisplayCount(); -#endif f.displayindex = std::min(std::max(f.displayindex, 0), displaycount - 1); // Use the desktop resolution if a width or height of 0 is specified. if (width == 0 || height == 0) { -#if SDL_VERSION_ATLEAST(3, 0, 0) const SDL_DisplayMode *mode = SDL_GetDesktopDisplayMode(displays.ids[f.displayindex]); width = mode->w; height = mode->h; -#else - SDL_DisplayMode mode = {}; - SDL_GetDesktopDisplayMode(f.displayindex, &mode); - width = mode.w; - height = mode.h; -#endif } // On Android, disable fullscreen first on window creation so it's @@ -599,15 +552,10 @@ bool Window::setWindow(int width, int height, WindowSettings *settings) } Uint32 sdlflags = 0; -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_DisplayMode fsmode = {}; -#else - SDL_DisplayMode fsmode = {0, width, height, 0, nullptr}; -#endif if (f.fullscreen) { -#if SDL_VERSION_ATLEAST(3, 0, 0) sdlflags |= SDL_WINDOW_FULLSCREEN; if (f.fstype == FULLSCREEN_EXCLUSIVE) @@ -627,28 +575,6 @@ bool Window::setWindow(int width, int height, WindowSettings *settings) return false; } } -#else - if (f.fstype == FULLSCREEN_EXCLUSIVE) - { - // Fullscreen window creation will bug out if no mode can be used. - if (SDL_GetClosestDisplayMode(f.displayindex, &fsmode, &fsmode) == nullptr) - { - // GetClosestDisplayMode will fail if we request a size larger - // than the largest available display mode, so we'll try to use - // the largest (first) mode in that case. - if (SDL_GetDisplayMode(f.displayindex, 0, &fsmode) < 0) - return false; - } - - sdlflags |= SDL_WINDOW_FULLSCREEN; - width = fsmode.w; - height = fsmode.h; - } - else - { - sdlflags |= SDL_WINDOW_FULLSCREEN_DESKTOP; - } -#endif } bool needsetmode = false; @@ -658,34 +584,22 @@ bool Window::setWindow(int width, int height, WindowSettings *settings) if (isOpen()) { -#if SDL_VERSION_ATLEAST(3, 0, 0) if (fsmode.w > 0 && fsmode.h > 0) SDL_SetWindowFullscreenMode(window, &fsmode); else SDL_SetWindowFullscreenMode(window, nullptr); + if (SDL_SetWindowFullscreen(window, (sdlflags & SDL_WINDOW_FULLSCREEN) != 0) && renderer == graphics::RENDERER_OPENGL) -#else - if (f.fullscreen && f.fstype == FULLSCREEN_EXCLUSIVE) - SDL_SetWindowDisplayMode(window, &fsmode); - if (SDL_SetWindowFullscreen(window, sdlflags) == 0 && renderer == graphics::RENDERER_OPENGL) -#endif SDL_GL_MakeCurrent(window, glcontext); + // TODO: should we make this conditional, to avoid love.resize events when the size doesn't change? SDL_SetWindowSize(window, width, height); if (this->settings.resizable != f.resizable) -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_SetWindowResizable(window, f.resizable); -#else - SDL_SetWindowResizable(window, f.resizable ? SDL_TRUE : SDL_FALSE); -#endif if (this->settings.borderless != f.borderless) -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_SetWindowBordered(window, !f.borderless); -#else - SDL_SetWindowBordered(window, f.borderless ? SDL_FALSE : SDL_TRUE); -#endif } else { @@ -706,15 +620,9 @@ bool Window::setWindow(int width, int height, WindowSettings *settings) sdlflags |= SDL_WINDOW_BORDERLESS; // Note: this flag is ignored on Windows. -#if SDL_VERSION_ATLEAST(3, 0, 0) if (isHighDPIAllowed()) sdlflags |= SDL_WINDOW_HIGH_PIXEL_DENSITY; -#else - if (isHighDPIAllowed()) - sdlflags |= SDL_WINDOW_ALLOW_HIGHDPI; -#endif -#if SDL_VERSION_ATLEAST(3, 0, 0) Uint32 createflags = sdlflags & (~SDL_WINDOW_FULLSCREEN); if (!createWindowAndContext(x, y, width, height, createflags, renderer)) @@ -728,10 +636,6 @@ bool Window::setWindow(int width, int height, WindowSettings *settings) SDL_SetWindowFullscreenMode(window, nullptr); SDL_SetWindowFullscreen(window, true); } -#else - if (!createWindowAndContext(x, y, width, height, sdlflags, renderer)) - return false; -#endif needsetmode = true; } @@ -771,6 +675,7 @@ bool Window::setWindow(int width, int height, WindowSettings *settings) context = (void *) SDL_Metal_GetLayer(metalView); #endif + // TODO: try/catch graphics->setMode(context, (int) scaledw, (int) scaledh, pixelWidth, pixelHeight, f.stencil, f.depth, f.msaa); } else @@ -788,9 +693,7 @@ bool Window::setWindow(int width, int height, WindowSettings *settings) love::android::setImmersive(fullscreen); #endif -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_SyncWindow(window); -#endif return true; } @@ -800,29 +703,9 @@ bool Window::onSizeChanged(int width, int height) if (!window) return false; -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_GetWindowSize(window, &windowWidth, &windowHeight); -#else - windowWidth = width; - windowHeight = height; -#endif -#if SDL_VERSION_ATLEAST(3, 0, 0) if (!SDL_GetWindowSizeInPixels(window, &pixelWidth, &pixelHeight)) -#else - // TODO: Use SDL_GetWindowSizeInPixels here when supported. - if (glcontext != nullptr) - SDL_GL_GetDrawableSize(window, &pixelWidth, &pixelHeight); -#ifdef LOVE_GRAPHICS_METAL - else if (metalView != nullptr) - SDL_Metal_GetDrawableSize(window, &pixelWidth, &pixelHeight); -#endif -#ifdef LOVE_GRAPHICS_VULKAN - else if (windowRenderer == graphics::RENDERER_VULKAN) - SDL_Vulkan_GetDrawableSize(window, &pixelWidth, &pixelHeight); -#endif - else -#endif { pixelWidth = width; pixelHeight = height; @@ -840,9 +723,7 @@ bool Window::onSizeChanged(int width, int height) void Window::updateSettings(const WindowSettings &newsettings, bool updateGraphicsViewport) { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_SyncWindow(window); -#endif Uint32 wflags = SDL_GetWindowFlags(window); @@ -852,27 +733,9 @@ void Window::updateSettings(const WindowSettings &newsettings, bool updateGraphi pixelWidth = windowWidth; pixelHeight = windowHeight; -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_GetWindowSizeInPixels(window, &pixelWidth, &pixelHeight); -#else - // TODO: Use SDL_GetWindowSizeInPixels here when supported. - if ((wflags & SDL_WINDOW_OPENGL) != 0) - SDL_GL_GetDrawableSize(window, &pixelWidth, &pixelHeight); -#ifdef LOVE_GRAPHICS_METAL - else if ((wflags & SDL_WINDOW_METAL) != 0) - SDL_Metal_GetDrawableSize(window, &pixelWidth, &pixelHeight); -#endif -#ifdef LOVE_GRAPHICS_VULKAN - else if ((wflags & SDL_WINDOW_VULKAN) != 0) - SDL_Vulkan_GetDrawableSize(window, &pixelWidth, &pixelHeight); -#endif -#endif -#if SDL_VERSION_ATLEAST(3, 0, 0) if (((wflags & SDL_WINDOW_FULLSCREEN) == SDL_WINDOW_FULLSCREEN) && SDL_GetWindowFullscreenMode(window) == nullptr) -#else - if ((wflags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) -#endif { settings.fullscreen = true; settings.fstype = FULLSCREEN_DESKTOP; @@ -902,11 +765,7 @@ void Window::updateSettings(const WindowSettings &newsettings, bool updateGraphi getPosition(settings.x, settings.y, settings.displayindex); -#if SDL_VERSION_ATLEAST(3, 0, 0) setHighDPIAllowed((wflags & SDL_WINDOW_HIGH_PIXEL_DENSITY) != 0); -#else - setHighDPIAllowed((wflags & SDL_WINDOW_ALLOW_HIGHDPI) != 0); -#endif settings.usedpiscale = newsettings.usedpiscale; @@ -921,19 +780,11 @@ void Window::updateSettings(const WindowSettings &newsettings, bool updateGraphi settings.stencil = newsettings.stencil; settings.depth = newsettings.depth; -#if SDL_VERSION_ATLEAST(3, 0, 0) SDLDisplayIDs displayids; const SDL_DisplayMode *dmode = SDL_GetCurrentDisplayMode(displayids.ids[settings.displayindex]); // May be 0 if the refresh rate can't be determined. settings.refreshrate = dmode->refresh_rate; -#else - SDL_DisplayMode dmode = {}; - SDL_GetCurrentDisplayMode(settings.displayindex, &dmode); - - // May be 0 if the refresh rate can't be determined. - settings.refreshrate = (double) dmode.refresh_rate; -#endif // Update the viewport size now instead of waiting for event polling. if (updateGraphicsViewport && graphics.get()) @@ -972,11 +823,7 @@ void Window::close(bool allowExceptions) if (glcontext) { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_GL_DestroyContext(glcontext); -#else - SDL_GL_DeleteContext(glcontext); -#endif glcontext = nullptr; } @@ -995,11 +842,7 @@ void Window::close(bool allowExceptions) // The old window may have generated pending events which are no longer // relevant. Destroy them all! -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_FlushEvents(SDL_EVENT_WINDOW_FIRST, SDL_EVENT_WINDOW_LAST); -#else - SDL_FlushEvent(SDL_WINDOWEVENT); -#endif } open = false; @@ -1017,7 +860,6 @@ bool Window::setFullscreen(bool fullscreen, FullscreenType fstype) newsettings.fullscreen = fullscreen; newsettings.fstype = fstype; -#if SDL_VERSION_ATLEAST(3, 0, 0) bool sdlflags = fullscreen; if (fullscreen) { @@ -1031,36 +873,12 @@ bool Window::setFullscreen(bool fullscreen, FullscreenType fstype) SDL_SetWindowFullscreenMode(window, &mode); } } -#else - Uint32 sdlflags = 0; - - if (fullscreen) - { - if (fstype == FULLSCREEN_DESKTOP) - sdlflags = SDL_WINDOW_FULLSCREEN_DESKTOP; - else - { - sdlflags = SDL_WINDOW_FULLSCREEN; - - SDL_DisplayMode mode = {}; - mode.w = windowWidth; - mode.h = windowHeight; - - SDL_GetClosestDisplayMode(SDL_GetWindowDisplayIndex(window), &mode, &mode); - SDL_SetWindowDisplayMode(window, &mode); - } - } -#endif #ifdef LOVE_ANDROID love::android::setImmersive(fullscreen); #endif -#if SDL_VERSION_ATLEAST(3, 0, 0) if (SDL_SetWindowFullscreen(window, sdlflags)) -#else - if (SDL_SetWindowFullscreen(window, sdlflags) == 0) -#endif { if (glcontext) SDL_GL_MakeCurrent(window, glcontext); @@ -1079,21 +897,13 @@ bool Window::setFullscreen(bool fullscreen) int Window::getDisplayCount() const { -#if SDL_VERSION_ATLEAST(3, 0, 0) SDLDisplayIDs displayids; return displayids.count; -#else - return SDL_GetNumVideoDisplays(); -#endif } const char *Window::getDisplayName(int displayindex) const { -#if SDL_VERSION_ATLEAST(3, 0, 0) const char *name = SDL_GetDisplayName(GetSDLDisplayIDForIndex(displayindex)); -#else - const char *name = SDL_GetDisplayName(displayindex); -#endif if (name == nullptr) throw love::Exception("Invalid display index: %d", displayindex + 1); @@ -1103,11 +913,7 @@ const char *Window::getDisplayName(int displayindex) const Window::DisplayOrientation Window::getDisplayOrientation(int displayindex) const { -#if SDL_VERSION_ATLEAST(3, 0, 0) switch (SDL_GetCurrentDisplayOrientation(GetSDLDisplayIDForIndex(displayindex))) -#else - switch (SDL_GetDisplayOrientation(displayindex)) -#endif { case SDL_ORIENTATION_UNKNOWN: return ORIENTATION_UNKNOWN; case SDL_ORIENTATION_LANDSCAPE: return ORIENTATION_LANDSCAPE; @@ -1123,7 +929,6 @@ std::vector Window::getFullscreenSizes(int displayindex) con { std::vector sizes; -#if SDL_VERSION_ATLEAST(3, 0, 0) int count = 0; SDL_DisplayMode **modes = SDL_GetFullscreenDisplayModes(GetSDLDisplayIDForIndex(displayindex), &count); @@ -1131,14 +936,6 @@ std::vector Window::getFullscreenSizes(int displayindex) con { // TODO: other mode properties? WindowSize w = {modes[i]->w, modes[i]->h}; -#else - for (int i = 0; i < SDL_GetNumDisplayModes(displayindex); i++) - { - SDL_DisplayMode mode = {}; - SDL_GetDisplayMode(displayindex, i, &mode); - - WindowSize w = {mode.w, mode.h}; -#endif // SDL2's display mode list has multiple entries for modes of the same // size with different bits per pixel, so we need to filter those out. @@ -1146,16 +943,13 @@ std::vector Window::getFullscreenSizes(int displayindex) con sizes.push_back(w); } -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_free(modes); -#endif return sizes; } void Window::getDesktopDimensions(int displayindex, int &width, int &height) const { -#if SDL_VERSION_ATLEAST(3, 0, 0) const SDL_DisplayMode *mode = SDL_GetDesktopDisplayMode(GetSDLDisplayIDForIndex(displayindex)); if (mode != nullptr) { @@ -1163,15 +957,6 @@ void Window::getDesktopDimensions(int displayindex, int &width, int &height) con width = mode->w; height = mode->h; } -#else - if (displayindex >= 0 && displayindex < getDisplayCount()) - { - SDL_DisplayMode mode = {}; - SDL_GetDesktopDisplayMode(displayindex, &mode); - width = mode.w; - height = mode.h; - } -#endif else { width = 0; @@ -1194,10 +979,7 @@ void Window::setPosition(int x, int y, int displayindex) y += displaybounds.y; SDL_SetWindowPosition(window, x, y); - -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_SyncWindow(window); -#endif settings.useposition = true; } @@ -1211,7 +993,6 @@ void Window::getPosition(int &x, int &y, int &displayindex) return; } -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_DisplayID displayid = SDL_GetDisplayForWindow(window); SDLDisplayIDs displayids; displayindex = 0; @@ -1223,9 +1004,6 @@ void Window::getPosition(int &x, int &y, int &displayindex) break; } } -#else - displayindex = std::max(SDL_GetWindowDisplayIndex(window), 0); -#endif SDL_GetWindowPosition(window, &x, &y); @@ -1235,11 +1013,7 @@ void Window::getPosition(int &x, int &y, int &displayindex) if (x != 0 || y != 0) { SDL_Rect displaybounds = {}; -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_GetDisplayBounds(displayid, &displaybounds); -#else - SDL_GetDisplayBounds(displayindex, &displaybounds); -#endif x -= displaybounds.x; y -= displaybounds.y; @@ -1304,41 +1078,18 @@ bool Window::setIcon(love::image::ImageData *imgd) if (!window) return false; -#if !SDL_VERSION_ATLEAST(3, 0, 0) - Uint32 rmask, gmask, bmask, amask; -#ifdef LOVE_BIG_ENDIAN - rmask = 0xFF000000; - gmask = 0x00FF0000; - bmask = 0x0000FF00; - amask = 0x000000FF; -#else - rmask = 0x000000FF; - gmask = 0x0000FF00; - bmask = 0x00FF0000; - amask = 0xFF000000; -#endif -#endif - int w = imgd->getWidth(); int h = imgd->getHeight(); int bytesperpixel = (int) getPixelFormatBlockSize(imgd->getFormat()); int pitch = w * bytesperpixel; -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_Surface *sdlicon = SDL_CreateSurfaceFrom(w, h, SDL_PIXELFORMAT_RGBA8888, imgd->getData(), pitch); -#else - SDL_Surface *sdlicon = SDL_CreateRGBSurfaceFrom(imgd->getData(), w, h, bytesperpixel * 8, pitch, rmask, gmask, bmask, amask); -#endif if (!sdlicon) return false; SDL_SetWindowIcon(window, sdlicon); -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_DestroySurface(sdlicon); -#else - SDL_FreeSurface(sdlicon); -#endif return true; } @@ -1356,7 +1107,6 @@ void Window::setVSync(int vsync) // Check if adaptive vsync was requested but not supported, and fall // back to regular vsync if so. -#if SDL_VERSION_ATLEAST(3, 0, 0) if (vsync == -1) { int actualvsync = 0; @@ -1364,10 +1114,6 @@ void Window::setVSync(int vsync) if (actualvsync != -1) SDL_GL_SetSwapInterval(1); } -#else - if (vsync == -1 && SDL_GL_GetSwapInterval() != -1) - SDL_GL_SetSwapInterval(1); -#endif } #ifdef LOVE_GRAPHICS_VULKAN @@ -1391,13 +1137,9 @@ int Window::getVSync() const { if (glcontext != nullptr) { -#if SDL_VERSION_ATLEAST(3, 0, 0) int interval = 0; SDL_GL_GetSwapInterval(&interval); return interval; -#else - return SDL_GL_GetSwapInterval(); -#endif } #if defined(LOVE_GRAPHICS_METAL) @@ -1433,11 +1175,7 @@ void Window::setDisplaySleepEnabled(bool enable) bool Window::isDisplaySleepEnabled() const { -#if SDL_VERSION_ATLEAST(3, 0, 0) return SDL_ScreenSaverEnabled(); -#else - return SDL_IsScreenSaverEnabled() != SDL_FALSE; -#endif } void Window::minimize() @@ -1515,27 +1253,16 @@ void Window::swapBuffers() dwmRefreshRate = (double)info.rateRefresh.uiNumerator / (double)info.rateRefresh.uiDenominator; SDL_DisplayMode dmode = {}; -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_DisplayID display = SDL_GetDisplayForWindow(window); const SDL_DisplayMode* modePtr = SDL_GetCurrentDisplayMode(display); if (modePtr) dmode = *modePtr; -#else - int displayindex = SDL_GetWindowDisplayIndex(window); - - if (displayindex >= 0) - SDL_GetCurrentDisplayMode(displayindex, &dmode); -#endif if (dmode.refresh_rate > 0 && dwmRefreshRate > 0 && (fabs(dmode.refresh_rate - dwmRefreshRate) < 2)) { SDL_GL_SetSwapInterval(0); -#if SDL_VERSION_ATLEAST(3, 0, 0) int interval = 0; if (SDL_GL_GetSwapInterval(&interval) == 0 && interval == 0) -#else - if (SDL_GL_GetSwapInterval() == 0) -#endif useDwmFlush = true; else SDL_GL_SetSwapInterval(swapInterval); @@ -1568,32 +1295,20 @@ bool Window::hasMouseFocus() const bool Window::isVisible() const { -#if SDL_VERSION_ATLEAST(3, 0, 0) return window && (SDL_GetWindowFlags(window) & SDL_WINDOW_HIDDEN) == 0; -#else - return window && (SDL_GetWindowFlags(window) & SDL_WINDOW_SHOWN) != 0; -#endif } void Window::setMouseGrab(bool grab) { mouseGrabbed = grab; if (window) -#if SDL_VERSION_ATLEAST(3, 0, 0) SDL_SetWindowMouseGrab(window, grab); -#else - SDL_SetWindowGrab(window, (SDL_bool) grab); -#endif } bool Window::isMouseGrabbed() const { if (window) -#if SDL_VERSION_ATLEAST(3, 0, 0) return SDL_GetWindowMouseGrab(window); -#else - return SDL_GetWindowGrab(window) != SDL_FALSE; -#endif else return mouseGrabbed; } @@ -1739,11 +1454,7 @@ bool Window::showMessageBox(const std::string &title, const std::string &message SDL_MessageBoxFlags flags = convertMessageBoxType(type); SDL_Window *sdlwindow = attachtowindow ? window : nullptr; -#if SDL_VERSION_ATLEAST(3, 0, 0) return SDL_ShowSimpleMessageBox(flags, title.c_str(), message.c_str(), sdlwindow); -#else - return SDL_ShowSimpleMessageBox(flags, title.c_str(), message.c_str(), sdlwindow) >= 0; -#endif } int Window::showMessageBox(const MessageBoxData &data) @@ -1763,11 +1474,7 @@ int Window::showMessageBox(const MessageBoxData &data) { SDL_MessageBoxButtonData sdlbutton = {}; -#if SDL_VERSION_ATLEAST(3, 0, 0) sdlbutton.buttonID = i; -#else - sdlbutton.buttonid = i; -#endif sdlbutton.text = data.buttons[i].c_str(); if (i == data.enterButtonIndex) @@ -1796,17 +1503,7 @@ void Window::requestAttention(bool continuous) FLASHWINFO flashinfo = { sizeof(FLASHWINFO) }; -#if SDL_VERSION_ATLEAST(3, 0, 0) flashinfo.hwnd = (HWND)SDL_GetPointerProperty(SDL_GetWindowProperties(window), SDL_PROP_WINDOW_WIN32_HWND_POINTER, nullptr); -#else - SDL_SysWMinfo wminfo = {}; - SDL_VERSION(&wminfo.version); - if (!SDL_GetWindowWMInfo(window, &wminfo)) - return; - - flashinfo.hwnd = wminfo.info.win.window; -#endif - flashinfo.uCount = 1; flashinfo.dwFlags = FLASHW_ALL; diff --git a/src/modules/window/sdl/Window.h b/src/modules/window/sdl/Window.h index 9a6509beb..e8caa1dfe 100644 --- a/src/modules/window/sdl/Window.h +++ b/src/modules/window/sdl/Window.h @@ -27,11 +27,7 @@ #include "graphics/Graphics.h" // SDL -#if __has_include() #include -#else -#include -#endif namespace love {