From 36423af606df4e1cf8135ce58c0f84151fcaca52 Mon Sep 17 00:00:00 2001 From: Gerasim Troeglazov <3dEyes@gmail.com> Date: Fri, 5 Mar 2021 18:49:34 +1000 Subject: [PATCH] libsdl2:bump version * add support for haiku system cursors * disable direct mode (fix mouse glitch) --- ...l2-2.0.10.recipe => libsdl2-2.0.14.recipe} | 10 +- .../libsdl2/patches/libsdl2-2.0.10.patchset | 1294 ----------------- .../libsdl2/patches/libsdl2-2.0.14.patchset | 206 +++ 3 files changed, 211 insertions(+), 1299 deletions(-) rename media-libs/libsdl2/{libsdl2-2.0.10.recipe => libsdl2-2.0.14.recipe} (85%) delete mode 100644 media-libs/libsdl2/patches/libsdl2-2.0.10.patchset create mode 100644 media-libs/libsdl2/patches/libsdl2-2.0.14.patchset diff --git a/media-libs/libsdl2/libsdl2-2.0.10.recipe b/media-libs/libsdl2/libsdl2-2.0.14.recipe similarity index 85% rename from media-libs/libsdl2/libsdl2-2.0.10.recipe rename to media-libs/libsdl2/libsdl2-2.0.14.recipe index 121f06171..573ce27d5 100644 --- a/media-libs/libsdl2/libsdl2-2.0.10.recipe +++ b/media-libs/libsdl2/libsdl2-2.0.14.recipe @@ -4,11 +4,11 @@ designed to provide low level access to audio, keyboard, mouse, joystick, and \ graphics hardware via OpenGL and Direct3D. It is used by video playback \ software, emulators, and popular games." HOMEPAGE="https://www.libsdl.org/" -COPYRIGHT="1997-2018 Sam Lantinga" +COPYRIGHT="1997-2021 Sam Lantinga" LICENSE="Zlib" REVISION="1" SOURCE_URI="https://www.libsdl.org/release/SDL2-$portVersion.tar.gz" -CHECKSUM_SHA256="b4656c13a1f0d0023ae2f4a9cf08ec92fffb464e0f24238337784159b8b91d57" +CHECKSUM_SHA256="d8215b571a581be1332d2106f8036fcb03d12a70bae01e20f424976d275432bc" SOURCE_DIR="SDL2-$portVersion" PATCHES="libsdl2-$portVersion.patchset" @@ -17,7 +17,7 @@ SECONDARY_ARCHITECTURES="x86_gcc2 x86" PROVIDES=" libsdl2$secondaryArchSuffix = $portVersion compat >= 2.0 - lib:libSDL2_2.0$secondaryArchSuffix = 0.10.0 compat >= 0 + lib:libSDL2_2.0$secondaryArchSuffix = 0.14.0 compat >= 0 " REQUIRES=" haiku$secondaryArchSuffix @@ -29,8 +29,8 @@ REQUIRES=" PROVIDES_devel=" libsdl2${secondaryArchSuffix}_devel = $portVersion compat >= 2.0 cmd:sdl2_config$secondaryArchSuffix = $portVersion compat >= 2.0 - devel:libSDL2$secondaryArchSuffix = 0.10.0 compat >= 0 - devel:libSDL2_2.0$secondaryArchSuffix = 0.10.0 compat >= 0 + devel:libSDL2$secondaryArchSuffix = 0.14.0 compat >= 0 + devel:libSDL2_2.0$secondaryArchSuffix = 0.14.0 compat >= 0 " REQUIRES_devel=" libsdl2$secondaryArchSuffix == $portVersion base diff --git a/media-libs/libsdl2/patches/libsdl2-2.0.10.patchset b/media-libs/libsdl2/patches/libsdl2-2.0.10.patchset deleted file mode 100644 index 1f54c9deb..000000000 --- a/media-libs/libsdl2/patches/libsdl2-2.0.10.patchset +++ /dev/null @@ -1,1294 +0,0 @@ -From d476ddfe0ff3183c3cc2393eca2924065bd6e3bf Mon Sep 17 00:00:00 2001 -From: Jerome Duval -Date: Fri, 29 Aug 2014 15:24:11 +0000 -Subject: haiku patch - - -diff --git a/src/video/haiku/SDL_bopengl.cc b/src/video/haiku/SDL_bopengl.cc -index 5065e9f..44b21fe 100644 ---- a/src/video/haiku/SDL_bopengl.cc -+++ b/src/video/haiku/SDL_bopengl.cc -@@ -54,7 +54,7 @@ int HAIKU_GL_LoadLibrary(_THIS, const char *path) - if( get_image_symbol(info.id, "glBegin", B_SYMBOL_TYPE_ANY, - &location) == B_OK) { - -- _this->gl_config.dll_handle = (void *) (size_t) info.id; -+ _this->gl_config.dll_handle = (void *) (addr_t) info.id; - _this->gl_config.driver_loaded = 1; - SDL_strlcpy(_this->gl_config.driver_path, "libGL.so", - SDL_arraysize(_this->gl_config.driver_path)); -@@ -69,7 +69,7 @@ void *HAIKU_GL_GetProcAddress(_THIS, const char *proc) - void *location = NULL; - status_t err; - if ((err = -- get_image_symbol((image_id) (size_t) _this->gl_config.dll_handle, -+ get_image_symbol((image_id) (addr_t) _this->gl_config.dll_handle, - proc, B_SYMBOL_TYPE_ANY, - &location)) == B_OK) { - return location; --- -2.23.0 - - -From fde3e77a378cf1941530b661420eb2dfa34c46d6 Mon Sep 17 00:00:00 2001 -From: Jerome Duval -Date: Thu, 25 Feb 2016 20:23:41 +0000 -Subject: remove nacl, missing templates on Haiku - - -diff --git a/configure.ac b/configure.ac -index 9e782c6..c0527a2 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -1520,33 +1520,6 @@ AS_HELP_STRING([--enable-wayland-shared], [dynamically load Wayland support [[de - } - - --dnl Check for Native Client stuff --CheckNativeClient() --{ -- AC_TRY_COMPILE([ -- #if !defined(__native_client__) -- #error "NO NACL" -- #endif -- ],[ -- ],[ -- AC_DEFINE(SDL_VIDEO_DRIVER_NACL, 1, [ ]) -- AC_DEFINE(SDL_AUDIO_DRIVER_NACL, 1, [ ]) -- AC_DEFINE(HAVE_POW, 1, [ ]) -- AC_DEFINE(HAVE_OPENGLES2, 1, [ ]) -- AC_DEFINE(SDL_VIDEO_OPENGL_ES2, 1, [ ]) -- AC_DEFINE(SDL_VIDEO_RENDER_OGL_ES2, 1, [ ]) -- -- SDL_LIBS="-lppapi_simple -lppapi_gles2 $SDL_LIBS" -- -- SDLMAIN_SOURCES="$srcdir/src/main/nacl/*.c" -- SOURCES="$SOURCES $srcdir/src/audio/nacl/*.c" -- SUMMARY_audio="${SUMMARY_audio} nacl" -- SOURCES="$SOURCES $srcdir/src/video/nacl/*.c" -- SUMMARY_video="${SUMMARY_video} nacl opengles2" -- ]) --} -- -- - CheckRPI() - { - AC_ARG_ENABLE(video-rpi, --- -2.23.0 - - -From 589c40f315003962c5e404ad647ce386edcbae90 Mon Sep 17 00:00:00 2001 -From: Jerome Duval -Date: Sat, 30 Sep 2017 13:36:12 +0200 -Subject: fix AC_DEFINE - - -diff --git a/configure.ac b/configure.ac -index c0527a2..166d06b 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -1823,7 +1823,7 @@ int event_type = XI_TouchBegin; - XITouchClassInfo *t; - ],[ - have_xinput2_multitouch=yes -- AC_DEFINE([SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH], 1, []) -+ AC_DEFINE([SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH], [], [Description]) - SUMMARY_video_x11="${SUMMARY_video_x11} xinput2_multitouch" - ]) - AC_MSG_RESULT($have_xinput2_multitouch) --- -2.23.0 - - -From 02e0c626e48881378cf191a353312340d5b71bcf Mon Sep 17 00:00:00 2001 -From: Adrien Destugues -Date: Fri, 2 Feb 2018 09:40:46 +0100 -Subject: Fix secondary arch build. - -Rather than trying to guess the name of libstdc++, run libtool in C++ -mode so it figures this out by itself. The previous way of detecting -libstdc++ would not allow for building a secondary architecture package. - -diff --git a/Makefile.in b/Makefile.in -index 567624e..1c5622f 100644 ---- a/Makefile.in -+++ b/Makefile.in -@@ -147,13 +147,13 @@ update-revision: - .PHONY: all update-revision install install-bin install-hdrs install-lib install-data uninstall uninstall-bin uninstall-hdrs uninstall-lib uninstall-data clean distclean dist $(OBJECTS:.lo=.d) - - $(objects)/$(TARGET): $(GEN_HEADERS) $(GEN_OBJECTS) $(OBJECTS) $(VERSION_OBJECTS) -- $(RUN_CMD_LTLINK)$(LIBTOOL) --tag=CC --mode=link $(CC) -o $@ $(OBJECTS) $(GEN_OBJECTS) $(VERSION_OBJECTS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LT_LDFLAGS) -+ $(RUN_CMD_LTLINK)$(LIBTOOL) --tag=CXX --mode=link $(CXX) -o $@ $(OBJECTS) $(GEN_OBJECTS) $(VERSION_OBJECTS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LT_LDFLAGS) - - $(objects)/$(SDLMAIN_TARGET): $(SDLMAIN_OBJECTS) -- $(RUN_CMD_LTLINK)$(LIBTOOL) --tag=CC --mode=link $(CC) -static -o $@ $(SDLMAIN_OBJECTS) -rpath $(libdir) -+ $(RUN_CMD_LTLINK)$(LIBTOOL) --tag=CXX --mode=link $(CXX) -static -o $@ $(SDLMAIN_OBJECTS) -rpath $(libdir) - - $(objects)/$(SDLTEST_TARGET): $(SDLTEST_OBJECTS) -- $(RUN_CMD_LTLINK)$(LIBTOOL) --tag=CC --mode=link $(CC) -static -o $@ $(SDLTEST_OBJECTS) -rpath $(libdir) -+ $(RUN_CMD_LTLINK)$(LIBTOOL) --tag=CXX --mode=link $(CXX) -static -o $@ $(SDLTEST_OBJECTS) -rpath $(libdir) - - install: all install-bin install-hdrs install-lib install-data - install-bin: -diff --git a/configure.ac b/configure.ac -index 166d06b..8d8da32 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -3692,9 +3692,6 @@ AS_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau - # The Haiku platform requires special setup. - SOURCES="$srcdir/src/main/haiku/*.cc $SOURCES" - EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lroot -lbe -lmedia -lgame -ldevice -ltextencoding" -- # Haiku's x86 spins use libstdc++.r4.so (for binary compat?), but -- # other spins, like x86-64, use a more standard "libstdc++.so.*" -- AC_CHECK_FILE("/boot/system/lib/libstdc++.r4.so", EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lstdc++.r4", EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lstdc++") - ;; - arm*-apple-darwin*|*-ios-*) - ARCH=ios --- -2.23.0 - - -From 16e2d5728c785f8f95ccded8c007430bca1981a3 Mon Sep 17 00:00:00 2001 -From: Adrien Destugues -Date: Fri, 2 Feb 2018 10:40:00 +0100 -Subject: Fix crash when opening window - -- _num_clips was not set in constructor, so a NULL _clips could be - mistakenly dereferenced. -- As _clips is accessible outside the class, it is not a good idea to - free/reallocate it. Try to limit this by reallocating only when it needs to - grow. - -diff --git a/src/video/haiku/SDL_BWin.h b/src/video/haiku/SDL_BWin.h -index da84dd5..1534059 100644 ---- a/src/video/haiku/SDL_BWin.h -+++ b/src/video/haiku/SDL_BWin.h -@@ -86,6 +86,7 @@ class SDL_BWin:public BDirectWindow - _buffer_locker = new BLocker(); - _bitmap = NULL; - _clips = NULL; -+ _num_clips = 0; - - #ifdef DRAWTHREAD - _draw_thread_id = spawn_thread(HAIKU_DrawThread, "drawing_thread", -@@ -179,13 +180,17 @@ class SDL_BWin:public BDirectWindow - _connected = true; - - case B_DIRECT_MODIFY: -- if(_clips) { -- free(_clips); -- _clips = NULL; -+ if (info->clip_list_count > _num_clips) -+ { -+ if(_clips) { -+ free(_clips); -+ _clips = NULL; -+ } - } - - _num_clips = info->clip_list_count; -- _clips = (clipping_rect *)malloc(_num_clips*sizeof(clipping_rect)); -+ if (_clips == NULL) -+ _clips = (clipping_rect *)malloc(_num_clips*sizeof(clipping_rect)); - if(_clips) { - memcpy(_clips, info->clip_list, - _num_clips*sizeof(clipping_rect)); -@@ -652,7 +657,7 @@ private: - clipping_rect _bounds; - BLocker *_buffer_locker; - clipping_rect *_clips; -- int32 _num_clips; -+ uint32 _num_clips; - int32 _bytes_per_px; - thread_id _draw_thread_id; - --- -2.23.0 - - -From 3c9f7b22940e2cffbd2d29105c9715849d6b6844 Mon Sep 17 00:00:00 2001 -From: Gerasim Troeglazov <3dEyes@gmail.com> -Date: Sat, 15 Sep 2018 23:16:25 +1000 -Subject: Add simple relative mode for mouse - - -diff --git a/src/main/haiku/SDL_BApp.h b/src/main/haiku/SDL_BApp.h -index ae51ebc..764c8fc 100644 ---- a/src/main/haiku/SDL_BApp.h -+++ b/src/main/haiku/SDL_BApp.h -@@ -230,6 +230,21 @@ private: - win = GetSDLWindow(winID); - SDL_SendMouseMotion(win, 0, 0, x, y); - -+ // Simple relative mode support for mouse. -+ if ((SDL_GetMouse()->relative_mode || -+ (win->flags & SDL_WINDOW_INPUT_GRABBED)) && -+ (win->flags & SDL_WINDOW_INPUT_FOCUS)) { -+ int winWidth, winHeight, winPosX, winPosY; -+ SDL_GetWindowSize(win, &winWidth, &winHeight); -+ SDL_GetWindowPosition(win, &winPosX, &winPosY); -+ set_mouse_position((winPosX + winWidth / 2), (winPosY + winHeight / 2)); -+ if (!be_app->IsCursorHidden()) -+ be_app->HideCursor(); -+ } else { -+ if (be_app->IsCursorHidden()) -+ be_app->ShowCursor(); -+ } -+ - /* Tell the application that the mouse passed over, redraw needed */ - HAIKU_UpdateWindowFramebuffer(NULL,win,NULL,-1); - } --- -2.23.0 - - -From 27ce813719170553130e8defceb7216c74ee4832 Mon Sep 17 00:00:00 2001 -From: Gerasim Troeglazov <3dEyes@gmail.com> -Date: Tue, 18 Sep 2018 20:47:07 +1000 -Subject: Add support for relative mouse mode - - -diff --git a/src/main/haiku/SDL_BApp.h b/src/main/haiku/SDL_BApp.h -index 764c8fc..3e7b472 100644 ---- a/src/main/haiku/SDL_BApp.h -+++ b/src/main/haiku/SDL_BApp.h -@@ -228,7 +228,6 @@ private: - return; - } - win = GetSDLWindow(winID); -- SDL_SendMouseMotion(win, 0, 0, x, y); - - // Simple relative mode support for mouse. - if ((SDL_GetMouse()->relative_mode || -@@ -237,10 +236,14 @@ private: - int winWidth, winHeight, winPosX, winPosY; - SDL_GetWindowSize(win, &winWidth, &winHeight); - SDL_GetWindowPosition(win, &winPosX, &winPosY); -+ int dx = x - (winWidth / 2); -+ int dy = y - (winHeight / 2); -+ SDL_SendMouseMotion(win, 0, SDL_GetMouse()->relative_mode, dx, dy); - set_mouse_position((winPosX + winWidth / 2), (winPosY + winHeight / 2)); - if (!be_app->IsCursorHidden()) - be_app->HideCursor(); - } else { -+ SDL_SendMouseMotion(win, 0, 0, x, y); - if (be_app->IsCursorHidden()) - be_app->ShowCursor(); - } -diff --git a/src/video/haiku/SDL_BWin.h b/src/video/haiku/SDL_BWin.h -index 1534059..9f79927 100644 ---- a/src/video/haiku/SDL_BWin.h -+++ b/src/video/haiku/SDL_BWin.h -@@ -319,22 +319,17 @@ class SDL_BWin:public BDirectWindow - && msg->FindInt32("be:transit", &transit) == B_OK) { - _MouseMotionEvent(where, transit); - } -+ break; - -- /* FIXME: Apparently a button press/release event might be dropped -- if made before before a different button is released. Does -- B_MOUSE_MOVED have the data needed to check if a mouse button -- state has changed? */ -+ case B_MOUSE_DOWN: - if (msg->FindInt32("buttons", &buttons) == B_OK) { -- _MouseButtonEvent(buttons); -+ _MouseButtonEvent(buttons, SDL_PRESSED); - } - break; - -- case B_MOUSE_DOWN: - case B_MOUSE_UP: -- /* _MouseButtonEvent() detects any and all buttons that may have -- changed state, as well as that button's new state */ - if (msg->FindInt32("buttons", &buttons) == B_OK) { -- _MouseButtonEvent(buttons); -+ _MouseButtonEvent(buttons, SDL_RELEASED); - } - break; - -@@ -497,26 +492,17 @@ private: - if true: SDL_SetCursor(NULL); */ - } - -- void _MouseButtonEvent(int32 buttons) { -+ void _MouseButtonEvent(int32 buttons, Uint8 state) { - int32 buttonStateChange = buttons ^ _last_buttons; - -- /* Make sure at least one button has changed state */ -- if( !(buttonStateChange) ) { -- return; -- } -- -- /* Add any mouse button events */ - if(buttonStateChange & B_PRIMARY_MOUSE_BUTTON) { -- _SendMouseButton(SDL_BUTTON_LEFT, buttons & -- B_PRIMARY_MOUSE_BUTTON); -+ _SendMouseButton(SDL_BUTTON_LEFT, state); - } - if(buttonStateChange & B_SECONDARY_MOUSE_BUTTON) { -- _SendMouseButton(SDL_BUTTON_RIGHT, buttons & -- B_PRIMARY_MOUSE_BUTTON); -+ _SendMouseButton(SDL_BUTTON_RIGHT, state); - } - if(buttonStateChange & B_TERTIARY_MOUSE_BUTTON) { -- _SendMouseButton(SDL_BUTTON_MIDDLE, buttons & -- B_PRIMARY_MOUSE_BUTTON); -+ _SendMouseButton(SDL_BUTTON_MIDDLE, state); - } - - _last_buttons = buttons; --- -2.23.0 - - -From 3de9cf0943043bb730fa92e380df5026044a4241 Mon Sep 17 00:00:00 2001 -From: Peter Kosyh -Date: Sat, 6 Oct 2018 12:48:15 +0300 -Subject: haiku: mouse->ShowMouse method added - - -diff --git a/src/main/haiku/SDL_BApp.h b/src/main/haiku/SDL_BApp.h -index 3e7b472..01fcba7 100644 ---- a/src/main/haiku/SDL_BApp.h -+++ b/src/main/haiku/SDL_BApp.h -@@ -244,7 +244,7 @@ private: - be_app->HideCursor(); - } else { - SDL_SendMouseMotion(win, 0, 0, x, y); -- if (be_app->IsCursorHidden()) -+ if (SDL_ShowCursor(-1) && be_app->IsCursorHidden()) - be_app->ShowCursor(); - } - -diff --git a/src/video/haiku/SDL_bvideo.cc b/src/video/haiku/SDL_bvideo.cc -index 52e0f1d..68300a9 100644 ---- a/src/video/haiku/SDL_bvideo.cc -+++ b/src/video/haiku/SDL_bvideo.cc -@@ -19,6 +19,7 @@ - 3. This notice may not be removed or altered from any source distribution. - */ - #include "../../SDL_internal.h" -+#include "../../main/haiku/SDL_BApp.h" - - #if SDL_VIDEO_DRIVER_HAIKU - -@@ -132,6 +133,33 @@ void HAIKU_DeleteDevice(SDL_VideoDevice * device) - SDL_free(device); - } - -+static int HAIKU_ShowCursor(SDL_Cursor *cur) -+{ -+ SDL_Mouse *mouse = SDL_GetMouse(); -+ int show; -+ if (!mouse) -+ return 0; -+ show = (cur || !mouse->focus); -+ if (show) { -+ if (be_app->IsCursorHidden()) -+ be_app->ShowCursor(); -+ } else { -+ if (!be_app->IsCursorHidden()) -+ be_app->HideCursor(); -+ } -+ return 0; -+} -+ -+static void HAIKU_MouseInit(_THIS) -+{ -+ SDL_Mouse *mouse = SDL_GetMouse(); -+ if (!mouse) -+ return; -+ mouse->ShowCursor = HAIKU_ShowCursor; -+ mouse->cur_cursor = (SDL_Cursor*)0x1; -+ mouse->def_cursor = (SDL_Cursor*)0x2; -+} -+ - int HAIKU_VideoInit(_THIS) - { - /* Initialize the Be Application for appserver interaction */ -@@ -145,6 +173,8 @@ int HAIKU_VideoInit(_THIS) - /* Init the keymap */ - HAIKU_InitOSKeymap(); - -+ HAIKU_MouseInit(_this); -+ - #if SDL_VIDEO_OPENGL - /* testgl application doesn't load library, just tries to load symbols */ - /* is it correct? if so we have to load library here */ --- -2.23.0 - - -From 9b6b67cb04c1c9090bad39f1cabca3a32064abf7 Mon Sep 17 00:00:00 2001 -From: Peter Kosyh -Date: Sat, 6 Oct 2018 13:50:30 +0300 -Subject: mouse_relative fix - - -diff --git a/src/main/haiku/SDL_BApp.h b/src/main/haiku/SDL_BApp.h -index 01fcba7..a4367f6 100644 ---- a/src/main/haiku/SDL_BApp.h -+++ b/src/main/haiku/SDL_BApp.h -@@ -230,9 +230,7 @@ private: - win = GetSDLWindow(winID); - - // Simple relative mode support for mouse. -- if ((SDL_GetMouse()->relative_mode || -- (win->flags & SDL_WINDOW_INPUT_GRABBED)) && -- (win->flags & SDL_WINDOW_INPUT_FOCUS)) { -+ if (SDL_GetMouse()->relative_mode) { - int winWidth, winHeight, winPosX, winPosY; - SDL_GetWindowSize(win, &winWidth, &winHeight); - SDL_GetWindowPosition(win, &winPosX, &winPosY); --- -2.23.0 - - -From 5425a5446f6c790e503682e493489b5053d30a33 Mon Sep 17 00:00:00 2001 -From: Peter Kosyh -Date: Sat, 6 Oct 2018 14:28:41 +0300 -Subject: mouse wheel y invert - - -diff --git a/src/main/haiku/SDL_BApp.h b/src/main/haiku/SDL_BApp.h -index a4367f6..6bdf6db 100644 ---- a/src/main/haiku/SDL_BApp.h -+++ b/src/main/haiku/SDL_BApp.h -@@ -277,7 +277,7 @@ private: - return; - } - win = GetSDLWindow(winID); -- SDL_SendMouseWheel(win, 0, xTicks, yTicks, SDL_MOUSEWHEEL_NORMAL); -+ SDL_SendMouseWheel(win, 0, xTicks, -yTicks, SDL_MOUSEWHEEL_NORMAL); - } - - void _HandleKey(BMessage *msg) { --- -2.23.0 - - -From cccac2a60f7774d50d94fd8d34a956d030310cee Mon Sep 17 00:00:00 2001 -From: Gerasim Troeglazov <3dEyes@gmail.com> -Date: Mon, 5 Nov 2018 23:25:54 +1000 -Subject: Disable pointer history - - -diff --git a/src/video/haiku/SDL_BWin.h b/src/video/haiku/SDL_BWin.h -index 9f79927..be2fafd 100644 ---- a/src/video/haiku/SDL_BWin.h -+++ b/src/video/haiku/SDL_BWin.h -@@ -140,6 +140,7 @@ class SDL_BWin:public BDirectWindow - _gl_type = gl_flags; - } - AddChild(_SDL_GLView); -+ _SDL_GLView->SetEventMask(B_POINTER_EVENTS | B_KEYBOARD_EVENTS, B_NO_POINTER_HISTORY); - _SDL_GLView->EnableDirectMode(true); - _SDL_GLView->LockGL(); /* "New" GLViews are created */ - Unlock(); --- -2.23.0 - - -From f9196a6a5eb94cc1a6c71e1e8a03923c1a05c881 Mon Sep 17 00:00:00 2001 -From: EXL -Date: Wed, 5 Dec 2018 07:02:11 +0000 -Subject: Implement message box for Haiku - -Add implementation for functions: - -SDL_ShowSimpleMessageBox() -SDL_ShowMessageBox() - -Add simple customization support also. -Fix build for x86_gcc2. - -diff --git a/include/SDL_syswm.h b/include/SDL_syswm.h -index 7aa8c68..162fd5d 100644 ---- a/include/SDL_syswm.h -+++ b/include/SDL_syswm.h -@@ -129,7 +129,8 @@ typedef enum - SDL_SYSWM_WINRT, - SDL_SYSWM_ANDROID, - SDL_SYSWM_VIVANTE, -- SDL_SYSWM_OS2 -+ SDL_SYSWM_OS2, -+ SDL_SYSWM_HAIKU - } SDL_SYSWM_TYPE; - - /** -diff --git a/src/main/haiku/SDL_BeApp.cc b/src/main/haiku/SDL_BeApp.cc -index 2d78059..4eb215c 100644 ---- a/src/main/haiku/SDL_BeApp.cc -+++ b/src/main/haiku/SDL_BeApp.cc -@@ -48,13 +48,14 @@ extern "C" { - static int SDL_BeAppActive = 0; - static SDL_Thread *SDL_AppThread = NULL; - -+/* Default application signature */ -+const char *signature = "application/x-SDL-executable"; -+ - static int - StartBeApp(void *unused) - { - BApplication *App; - -- // default application signature -- const char *signature = "application/x-SDL-executable"; - // dig resources for correct signature - image_info info; - int32 cookie = 0; -diff --git a/src/main/haiku/SDL_BeApp.h b/src/main/haiku/SDL_BeApp.h -index d14e14f..5fcfa54 100644 ---- a/src/main/haiku/SDL_BeApp.h -+++ b/src/main/haiku/SDL_BeApp.h -@@ -31,6 +31,9 @@ extern int SDL_InitBeApp(void); - /* Quit the Be Application, if there's nothing left to do */ - extern void SDL_QuitBeApp(void); - -+/* Be Application Signature*/ -+extern const char *signature; -+ - /* vi: set ts=4 sw=4 expandtab: */ - - #ifdef __cplusplus -diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c -index c63f746..655175b 100644 ---- a/src/video/SDL_video.c -+++ b/src/video/SDL_video.c -@@ -3843,9 +3843,12 @@ SDL_IsScreenKeyboardShown(SDL_Window *window) - #if SDL_VIDEO_DRIVER_X11 - #include "x11/SDL_x11messagebox.h" - #endif -+#if SDL_VIDEO_DRIVER_HAIKU -+#include "haiku/SDL_bmessagebox.h" -+#endif - - --#if SDL_VIDEO_DRIVER_WINDOWS || SDL_VIDEO_DRIVER_WINRT || SDL_VIDEO_DRIVER_COCOA || SDL_VIDEO_DRIVER_UIKIT || SDL_VIDEO_DRIVER_X11 -+#if SDL_VIDEO_DRIVER_WINDOWS || SDL_VIDEO_DRIVER_WINRT || SDL_VIDEO_DRIVER_COCOA || SDL_VIDEO_DRIVER_UIKIT || SDL_VIDEO_DRIVER_X11 || SDL_VIDEO_DRIVER_HAIKU - static SDL_bool SDL_MessageboxValidForDriver(const SDL_MessageBoxData *messageboxdata, SDL_SYSWM_TYPE drivertype) - { - SDL_SysWMinfo info; -@@ -3937,6 +3940,13 @@ SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid) - X11_ShowMessageBox(messageboxdata, buttonid) == 0) { - retval = 0; - } -+#endif -+#if SDL_VIDEO_DRIVER_HAIKU -+ if (retval == -1 && -+ SDL_MessageboxValidForDriver(messageboxdata, SDL_SYSWM_HAIKU) && -+ BE_ShowMessageBox(messageboxdata, buttonid) == 0) { -+ retval = 0; -+ } - #endif - if (retval == -1) { - SDL_SetError("No message system available"); -diff --git a/src/video/haiku/SDL_bmessagebox.cc b/src/video/haiku/SDL_bmessagebox.cc -new file mode 100644 -index 0000000..9b9fe14 ---- /dev/null -+++ b/src/video/haiku/SDL_bmessagebox.cc -@@ -0,0 +1,425 @@ -+/* -+ Simple DirectMedia Layer -+ Copyright (C) 1997-2018 Sam Lantinga -+ Copyright (C) 2018 EXL -+ -+ 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. -+*/ -+ -+#include "../../SDL_internal.h" -+ -+#if SDL_VIDEO_DRIVER_HAIKU -+ -+#include "SDL_messagebox.h" -+ -+/* For application signature. */ -+#include "../../main/haiku/SDL_BeApp.h" -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+ -+#include -+#include -+#include -+ -+enum -+{ -+ G_CLOSE_BUTTON_ID = -1, -+ G_DEFAULT_BUTTON_ID = 0, -+ G_MAX_STRING_LENGTH_BYTES = 120 -+}; -+ -+class BE_SDL_MessageBox : public BAlert -+{ -+ float fComputedMessageBoxWidth; -+ -+ BTextView *fMessageBoxTextView; -+ -+ int fCloseButton; -+ int fDefaultButton; -+ -+ bool fCustomColorScheme; -+ bool fThereIsLongLine; -+ rgb_color fTextColor; -+ -+ const char *fTitle; -+ const char *BE_SDL_DefTitle; -+ const char *BE_SDL_DefMessage; -+ const char *BE_SDL_DefButton; -+ -+ std::vector fButtons; -+ -+ static bool -+ SortButtonsPredicate(const SDL_MessageBoxButtonData *aButtonLeft, -+ const SDL_MessageBoxButtonData *aButtonRight) -+ { -+ return aButtonLeft->buttonid < aButtonRight->buttonid; -+ } -+ -+ alert_type -+ ConvertMessageBoxType(const SDL_MessageBoxFlags aWindowType) const -+ { -+ switch (aWindowType) -+ { -+ default: -+ case SDL_MESSAGEBOX_WARNING: -+ { -+ return B_WARNING_ALERT; -+ } -+ case SDL_MESSAGEBOX_ERROR: -+ { -+ return B_STOP_ALERT; -+ } -+ case SDL_MESSAGEBOX_INFORMATION: -+ { -+ return B_INFO_ALERT; -+ } -+ } -+ } -+ -+ rgb_color -+ ConvertColorType(const SDL_MessageBoxColor *aColor) const -+ { -+ rgb_color color = { aColor->r, aColor->g, aColor->b, color.alpha = 255 }; -+ return color; -+ } -+ -+ int32 -+ GetLeftPanelWidth(void) const -+ { -+ // See file "haiku/src/kits/interface/Alert.cpp" for this magic numbers. -+ // IconStripeWidth = 30 * Scale -+ // IconSize = 32 * Scale -+ // Scale = max_c(1, ((int32)be_plain_font->Size() + 15) / 16) -+ // RealWidth = (IconStripeWidth * Scale) + (IconSize * Scale) -+ -+ int32 scale = max_c(1, ((int32)be_plain_font->Size() + 15) / 16); -+ return (30 * scale) + (32 * scale); -+ } -+ -+ void -+ UpdateTextViewWidth(void) -+ { -+ fComputedMessageBoxWidth = fMessageBoxTextView->PreferredSize().Width() + GetLeftPanelWidth(); -+ } -+ -+ void -+ ParseSdlMessageBoxData(const SDL_MessageBoxData *aMessageBoxData) -+ { -+ if (aMessageBoxData == NULL) -+ { -+ SetTitle(BE_SDL_DefTitle); -+ SetMessageText(BE_SDL_DefMessage); -+ AddButton(BE_SDL_DefButton); -+ return; -+ } -+ -+ if (aMessageBoxData->numbuttons <= 0) -+ { -+ AddButton(BE_SDL_DefButton); -+ } -+ else -+ { -+ AddSdlButtons(aMessageBoxData->buttons, aMessageBoxData->numbuttons); -+ } -+ -+ if (aMessageBoxData->colorScheme != NULL) -+ { -+ fCustomColorScheme = true; -+ ApplyAndParseColorScheme(aMessageBoxData->colorScheme); -+ } -+ -+ (aMessageBoxData->title != NULL) ? -+ SetTitle(aMessageBoxData->title) : SetTitle(BE_SDL_DefTitle); -+ (aMessageBoxData->message != NULL) ? -+ SetMessageText(aMessageBoxData->message) : SetMessageText(BE_SDL_DefMessage); -+ -+ SetType(ConvertMessageBoxType(static_cast(aMessageBoxData->flags))); -+ } -+ -+ void -+ ApplyAndParseColorScheme(const SDL_MessageBoxColorScheme *aColorScheme) -+ { -+ SetBackgroundColor(&aColorScheme->colors[SDL_MESSAGEBOX_COLOR_BACKGROUND]); -+ fTextColor = ConvertColorType(&aColorScheme->colors[SDL_MESSAGEBOX_COLOR_TEXT]); -+ SetButtonColors(&aColorScheme->colors[SDL_MESSAGEBOX_COLOR_BUTTON_BORDER], -+ &aColorScheme->colors[SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND], -+ &aColorScheme->colors[SDL_MESSAGEBOX_COLOR_TEXT], -+ &aColorScheme->colors[SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED]); -+ } -+ -+ void -+ SetButtonColors(const SDL_MessageBoxColor *aBorderColor, -+ const SDL_MessageBoxColor *aBackgroundColor, -+ const SDL_MessageBoxColor *aTextColor, -+ const SDL_MessageBoxColor *aSelectedColor) -+ { -+ if (fCustomColorScheme) -+ { -+ int32 countButtons = CountButtons(); -+ for (int i = 0; i < countButtons; ++i) -+ { -+ ButtonAt(i)->SetViewColor(ConvertColorType(aBorderColor)); -+ ButtonAt(i)->SetLowColor(ConvertColorType(aBackgroundColor)); -+ -+ // This doesn't work. See this why: -+ // https://github.com/haiku/haiku/commit/de9c53f8f5008c7b3b0af75d944a628e17f6dffe -+ // Let it remain. -+ ButtonAt(i)->SetHighColor(ConvertColorType(aTextColor)); -+ } -+ } -+ // TODO: Not Implemented. -+ // Is it even necessary?! -+ (void)aSelectedColor; -+ } -+ -+ void -+ SetBackgroundColor(const SDL_MessageBoxColor *aColor) -+ { -+ rgb_color background = ConvertColorType(aColor); -+ -+ GetLayout()->View()->SetViewColor(background); -+ // See file "haiku/src/kits/interface/Alert.cpp", the "TAlertView" is the internal name of the left panel. -+ FindView("TAlertView")->SetViewColor(background); -+ fMessageBoxTextView->SetViewColor(background); -+ } -+ -+ bool -+ CheckLongLines(const char *aMessage) -+ { -+ int final = 0; -+ -+ // This UTF-8 friendly. -+ BString message = aMessage; -+ int32 length = message.CountChars(); -+ -+ for (int i = 0, c = 0; i < length; ++i) -+ { -+ c++; -+ if (*(message.CharAt(i)) == '\n') -+ { -+ c = 0; -+ } -+ if (c > final) -+ { -+ final = c; -+ } -+ } -+ -+ return (final > G_MAX_STRING_LENGTH_BYTES); -+ } -+ -+ void -+ SetMessageText(const char *aMessage) -+ { -+ fThereIsLongLine = CheckLongLines(aMessage); -+ if (fThereIsLongLine) -+ { -+ fMessageBoxTextView->SetWordWrap(true); -+ } -+ -+ rgb_color textColor = ui_color(B_PANEL_TEXT_COLOR); -+ if (fCustomColorScheme) -+ { -+ textColor = fTextColor; -+ } -+ -+ /* -+ if (fNoTitledWindow) -+ { -+ fMessageBoxTextView->SetFontAndColor(be_bold_font); -+ fMessageBoxTextView->Insert(fTitle); -+ fMessageBoxTextView->Insert("\n\n"); -+ fMessageBoxTextView->SetFontAndColor(be_plain_font); -+ } -+ */ -+ -+ fMessageBoxTextView->SetFontAndColor(be_plain_font, B_FONT_ALL, &textColor); -+ fMessageBoxTextView->Insert(aMessage); -+ -+ // Be sure to call update width method. -+ UpdateTextViewWidth(); -+ } -+ -+ void -+ AddSdlButtons(const SDL_MessageBoxButtonData *aButtons, int aNumButtons) -+ { -+ for (int i = 0; i < aNumButtons; ++i) -+ { -+ fButtons.push_back(&aButtons[i]); -+ } -+ -+ std::sort(fButtons.begin(), fButtons.end(), &BE_SDL_MessageBox::SortButtonsPredicate); -+ -+ size_t countButtons = fButtons.size(); -+ for (size_t i = 0; i < countButtons; ++i) -+ { -+ switch (fButtons[i]->flags) -+ { -+ case SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT: -+ { -+ fCloseButton = static_cast(i); -+ break; -+ } -+ case SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT: -+ { -+ fDefaultButton = static_cast(i); -+ break; -+ } -+ default: -+ { -+ break; -+ } -+ } -+ AddButton(fButtons[i]->text); -+ } -+ -+ SetDefaultButton(ButtonAt(fDefaultButton)); -+ } -+ -+public: -+ explicit -+ BE_SDL_MessageBox(const SDL_MessageBoxData *aMessageBoxData) -+ : BAlert(NULL, NULL, NULL, NULL, NULL, B_WIDTH_FROM_LABEL, B_WARNING_ALERT), -+ fComputedMessageBoxWidth(0.0f), -+ fCloseButton(G_CLOSE_BUTTON_ID), fDefaultButton(G_DEFAULT_BUTTON_ID), -+ fCustomColorScheme(false), fThereIsLongLine(false), -+ BE_SDL_DefTitle("SDL2 MessageBox"), -+ BE_SDL_DefMessage("Some information has been lost."), -+ BE_SDL_DefButton("OK") -+ { -+ // MessageBox settings. -+ // We need a title to display it. -+ SetLook(B_TITLED_WINDOW_LOOK); -+ SetFlags(Flags() | B_CLOSE_ON_ESCAPE); -+ -+ // MessageBox TextView settings. -+ fMessageBoxTextView = TextView(); -+ fMessageBoxTextView->SetWordWrap(false); -+ fMessageBoxTextView->SetStylable(true); -+ -+ ParseSdlMessageBoxData(aMessageBoxData); -+ } -+ -+ int -+ GetCloseButtonId(void) const -+ { -+ return fCloseButton; -+ } -+ -+ virtual -+ ~BE_SDL_MessageBox(void) -+ { -+ fButtons.clear(); -+ } -+ -+protected: -+ virtual void -+ FrameResized(float aNewWidth, float aNewHeight) -+ { -+ if (fComputedMessageBoxWidth > aNewWidth) -+ { -+ ResizeTo(fComputedMessageBoxWidth, aNewHeight); -+ } -+ else -+ { -+ BAlert::FrameResized(aNewWidth, aNewHeight); -+ } -+ } -+ -+ virtual void -+ SetTitle(const char* aTitle) -+ { -+ fTitle = aTitle; -+ BAlert::SetTitle(aTitle); -+ } -+}; -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+int -+BE_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid) -+{ -+ // Initialize button by closed or error value first. -+ *buttonid = G_CLOSE_BUTTON_ID; -+ -+ // We need to check "be_app" pointer to "NULL". The "messageboxdata->window" pointer isn't appropriate here -+ // because it is possible to create a MessageBox from another thread. This fixes the following errors: -+ // "You need a valid BApplication object before interacting with the app_server." -+ // "2 BApplication objects were created. Only one is allowed." -+ BApplication *application = NULL; -+ if (be_app == NULL) -+ { -+ application = new(std::nothrow) BApplication(signature); -+ if (application == NULL) -+ { -+ return SDL_SetError("Cannot create the BApplication object. Lack of memory?"); -+ } -+ } -+ -+ BE_SDL_MessageBox *SDL_MessageBox = new(std::nothrow) BE_SDL_MessageBox(messageboxdata); -+ if (SDL_MessageBox == NULL) -+ { -+ return SDL_SetError("Cannot create the BE_SDL_MessageBox (BAlert inheritor) object. Lack of memory?"); -+ } -+ const int closeButton = SDL_MessageBox->GetCloseButtonId(); -+ int pushedButton = SDL_MessageBox->Go(); -+ -+ // The close button is equivalent to pressing Escape. -+ if (closeButton != G_CLOSE_BUTTON_ID && pushedButton == G_CLOSE_BUTTON_ID) -+ { -+ pushedButton = closeButton; -+ } -+ -+ // It's deleted by itself after the "Go()" method was executed. -+ /* -+ if (messageBox != NULL) -+ { -+ delete messageBox; -+ } -+ */ -+ if (application != NULL) -+ { -+ delete application; -+ } -+ -+ // Initialize button by real pushed value then. -+ *buttonid = pushedButton; -+ -+ return 0; -+} -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif /* SDL_VIDEO_DRIVER_HAIKU */ -+ -+/* vi: set ts=4 sw=4 expandtab: */ -diff --git a/src/video/haiku/SDL_bmessagebox.h b/src/video/haiku/SDL_bmessagebox.h -new file mode 100644 -index 0000000..4f35cda ---- /dev/null -+++ b/src/video/haiku/SDL_bmessagebox.h -@@ -0,0 +1,45 @@ -+/* -+ Simple DirectMedia Layer -+ Copyright (C) 1997-2018 Sam Lantinga -+ Copyright (C) 2018 EXL -+ -+ 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 SDL_BMESSAGEBOX_H -+#define SDL_BMESSAGEBOX_H -+ -+#include "../../SDL_internal.h" -+ -+#if SDL_VIDEO_DRIVER_HAIKU -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+extern int -+BE_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid); -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif /* SDL_VIDEO_DRIVER_HAIKU */ -+ -+#endif -+ -+/* vi: set ts=4 sw=4 expandtab: */ -diff --git a/src/video/haiku/SDL_bwindow.cc b/src/video/haiku/SDL_bwindow.cc -index 6c68802..e818532 100644 ---- a/src/video/haiku/SDL_bwindow.cc -+++ b/src/video/haiku/SDL_bwindow.cc -@@ -26,6 +26,8 @@ - #include "SDL_BWin.h" - #include - -+#include "SDL_syswm.h" -+ - /* Define a path to window's BWIN data */ - #ifdef __cplusplus - extern "C" { -@@ -217,7 +219,15 @@ void HAIKU_DestroyWindow(_THIS, SDL_Window * window) { - SDL_bool HAIKU_GetWindowWMInfo(_THIS, SDL_Window * window, - struct SDL_SysWMinfo *info) { - /* FIXME: What is the point of this? What information should be included? */ -- return SDL_FALSE; -+ if (info->version.major == SDL_MAJOR_VERSION && -+ info->version.minor == SDL_MINOR_VERSION) { -+ info->subsystem = SDL_SYSWM_HAIKU; -+ return SDL_TRUE; -+ } else { -+ SDL_SetError("Application not compiled with SDL %d.%d", -+ SDL_MAJOR_VERSION, SDL_MINOR_VERSION); -+ return SDL_FALSE; -+ } - } - - --- -2.23.0 - - -From b0294f6967ec08ad13de8c9850633bdacfa501a1 Mon Sep 17 00:00:00 2001 -From: Gerasim Troeglazov <3dEyes@gmail.com> -Date: Thu, 20 Jun 2019 23:29:44 +1000 -Subject: Move SetEventMask to SetRelativeMouseMode handler - - -diff --git a/src/video/haiku/SDL_BWin.h b/src/video/haiku/SDL_BWin.h -index be2fafd..9f79927 100644 ---- a/src/video/haiku/SDL_BWin.h -+++ b/src/video/haiku/SDL_BWin.h -@@ -140,7 +140,6 @@ class SDL_BWin:public BDirectWindow - _gl_type = gl_flags; - } - AddChild(_SDL_GLView); -- _SDL_GLView->SetEventMask(B_POINTER_EVENTS | B_KEYBOARD_EVENTS, B_NO_POINTER_HISTORY); - _SDL_GLView->EnableDirectMode(true); - _SDL_GLView->LockGL(); /* "New" GLViews are created */ - Unlock(); -diff --git a/src/video/haiku/SDL_bvideo.cc b/src/video/haiku/SDL_bvideo.cc -index 68300a9..5e564c9 100644 ---- a/src/video/haiku/SDL_bvideo.cc -+++ b/src/video/haiku/SDL_bvideo.cc -@@ -36,6 +36,11 @@ extern "C" { - #include "SDL_bmodes.h" - #include "SDL_bframebuffer.h" - #include "SDL_bevents.h" -+#include "SDL_BWin.h" -+ -+static SDL_INLINE SDL_BWin *_ToBeWin(SDL_Window *window) { -+ return ((SDL_BWin*)(window->driverdata)); -+} - - /* FIXME: Undefined functions */ - // #define HAIKU_PumpEvents NULL -@@ -150,12 +155,34 @@ static int HAIKU_ShowCursor(SDL_Cursor *cur) - return 0; - } - -+static int -+HAIKU_SetRelativeMouseMode(SDL_bool enabled) -+{ -+ SDL_Window *window = SDL_GetMouseFocus(); -+ if (!window) { -+ return 0; -+ } -+ -+ SDL_BWin *bewin = _ToBeWin(window); -+ BGLView *_SDL_GLView = bewin->GetGLView(); -+ -+ bewin->Lock(); -+ if (enabled) -+ _SDL_GLView->SetEventMask(B_POINTER_EVENTS | B_KEYBOARD_EVENTS, B_NO_POINTER_HISTORY); -+ else -+ _SDL_GLView->SetEventMask(0, 0); -+ bewin->Unlock(); -+ -+ return 0; -+} -+ - static void HAIKU_MouseInit(_THIS) - { - SDL_Mouse *mouse = SDL_GetMouse(); - if (!mouse) - return; - mouse->ShowCursor = HAIKU_ShowCursor; -+ mouse->SetRelativeMouseMode = HAIKU_SetRelativeMouseMode; - mouse->cur_cursor = (SDL_Cursor*)0x1; - mouse->def_cursor = (SDL_Cursor*)0x2; - } --- -2.23.0 - - -From c0da8c7a9243ecf6d24f0ee7f33c6b5467d2cb0d Mon Sep 17 00:00:00 2001 -From: Jerome Duval -Date: Tue, 29 Oct 2019 19:13:09 +0100 -Subject: remove unused stuff - - -diff --git a/configure.ac b/configure.ac -index 8d8da32..d8950c2 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -887,45 +887,6 @@ AS_HELP_STRING([--enable-oss], [support the OSS audio API [[default=maybe]]]), - fi - } - --dnl See if the ALSA audio interface is supported --CheckALSA() --{ -- AC_ARG_ENABLE(alsa, --AS_HELP_STRING([--enable-alsa], [support the ALSA audio API [[default=yes]]]), -- , enable_alsa=yes) -- if test x$enable_audio = xyes -a x$enable_alsa = xyes; then -- AM_PATH_ALSA(1.0.11, have_alsa=yes, have_alsa=no) -- # Restore all flags from before the ALSA detection runs -- CFLAGS="$alsa_save_CFLAGS" -- LDFLAGS="$alsa_save_LDFLAGS" -- LIBS="$alsa_save_LIBS" -- if test x$have_alsa = xyes; then -- AC_ARG_ENABLE(alsa-shared, --AS_HELP_STRING([--enable-alsa-shared], [dynamically load ALSA audio support [[default=yes]]]), -- , enable_alsa_shared=yes) -- alsa_lib=[`find_lib "libasound.so.*" "$ALSA_LIBS" | sed 's/.*\/\(.*\)/\1/; q'`] -- -- AC_DEFINE(SDL_AUDIO_DRIVER_ALSA, 1, [ ]) -- SOURCES="$SOURCES $srcdir/src/audio/alsa/*.c" -- EXTRA_CFLAGS="$EXTRA_CFLAGS $ALSA_CFLAGS" -- if test x$have_loadso != xyes && \ -- test x$enable_alsa_shared = xyes; then -- AC_MSG_WARN([You must have SDL_LoadObject() support for dynamic ALSA loading]) -- fi -- if test x$have_loadso = xyes && \ -- test x$enable_alsa_shared = xyes && test x$alsa_lib != x; then -- echo "-- dynamic libasound -> $alsa_lib" -- AC_DEFINE_UNQUOTED(SDL_AUDIO_DRIVER_ALSA_DYNAMIC, "$alsa_lib", [ ]) -- SUMMARY_audio="${SUMMARY_audio} alsa(dynamic)" -- else -- EXTRA_LDFLAGS="$EXTRA_LDFLAGS $ALSA_LIBS" -- SUMMARY_audio="${SUMMARY_audio} alsa" -- fi -- have_audio=yes -- fi -- fi --} -- - dnl Find JACK Audio - CheckJACK() - { -@@ -970,41 +931,6 @@ AS_HELP_STRING([--enable-jack-shared], [dynamically load JACK audio support [[de - fi - } - --dnl Find the ESD includes and libraries --CheckESD() --{ -- AC_ARG_ENABLE(esd, --AS_HELP_STRING([--enable-esd], [support the Enlightened Sound Daemon [[default=yes]]]), -- , enable_esd=yes) -- if test x$enable_audio = xyes -a x$enable_esd = xyes; then -- AM_PATH_ESD(0.2.8, have_esd=yes, have_esd=no) -- if test x$have_esd = xyes; then -- AC_ARG_ENABLE(esd-shared, --AS_HELP_STRING([--enable-esd-shared], [dynamically load ESD audio support [[default=yes]]]), -- , enable_esd_shared=yes) -- esd_lib=[`find_lib "libesd.so.*" "$ESD_LIBS" | sed 's/.*\/\(.*\)/\1/; q'`] -- -- AC_DEFINE(SDL_AUDIO_DRIVER_ESD, 1, [ ]) -- SOURCES="$SOURCES $srcdir/src/audio/esd/*.c" -- EXTRA_CFLAGS="$EXTRA_CFLAGS $ESD_CFLAGS" -- if test x$have_loadso != xyes && \ -- test x$enable_esd_shared = xyes; then -- AC_MSG_WARN([You must have SDL_LoadObject() support for dynamic ESD loading]) -- fi -- if test x$have_loadso = xyes && \ -- test x$enable_esd_shared = xyes && test x$esd_lib != x; then -- echo "-- dynamic libesd -> $esd_lib" -- AC_DEFINE_UNQUOTED(SDL_AUDIO_DRIVER_ESD_DYNAMIC, "$esd_lib", [ ]) -- SUMMARY_audio="${SUMMARY_audio} esd(dynamic)" -- else -- EXTRA_LDFLAGS="$EXTRA_LDFLAGS $ESD_LIBS" -- SUMMARY_audio="${SUMMARY_audio} esd" -- fi -- have_audio=yes -- fi -- fi --} -- - dnl Find PulseAudio - CheckPulseAudio() - { -@@ -2978,17 +2904,6 @@ XINPUT_STATE_EX s1; - esac - fi - -- AC_CHECK_HEADER(mmdeviceapi.h, have_wasapi=yes) -- if test x$have_wasapi = xyes; then -- AC_DEFINE(HAVE_MMDEVICEAPI_H,1,[]) -- fi -- AC_CHECK_HEADER(audioclient.h,,have_wasapi=no) -- if test x$have_wasapi = xyes; then -- AC_DEFINE(HAVE_AUDIOCLIENT_H,1,[]) -- fi -- -- AC_CHECK_HEADER(endpointvolume.h,AC_DEFINE(HAVE_ENDPOINTVOLUME_H,1,[])) -- - AC_ARG_ENABLE(wasapi, - AS_HELP_STRING([--enable-wasapi], [use the Windows WASAPI audio driver [[default=yes]]]), - , enable_wasapi=yes) --- -2.23.0 - diff --git a/media-libs/libsdl2/patches/libsdl2-2.0.14.patchset b/media-libs/libsdl2/patches/libsdl2-2.0.14.patchset new file mode 100644 index 000000000..26af98636 --- /dev/null +++ b/media-libs/libsdl2/patches/libsdl2-2.0.14.patchset @@ -0,0 +1,206 @@ +From cab82bafaa473b144c3bb04d04faf27627848a7c Mon Sep 17 00:00:00 2001 +From: Gerasim Troeglazov <3dEyes@gmail.com> +Date: Fri, 5 Mar 2021 17:29:13 +1000 +Subject: Fix relative mode for mouse + + +diff --git a/src/video/haiku/SDL_bvideo.cc b/src/video/haiku/SDL_bvideo.cc +index 817fccf..234eaf0 100644 +--- a/src/video/haiku/SDL_bvideo.cc ++++ b/src/video/haiku/SDL_bvideo.cc +@@ -37,6 +37,12 @@ extern "C" { + #include "SDL_bframebuffer.h" + #include "SDL_bevents.h" + ++#include "SDL_BWin.h" ++ ++static SDL_INLINE SDL_BWin *_ToBeWin(SDL_Window *window) { ++ return ((SDL_BWin*)(window->driverdata)); ++} ++ + #include + + /* FIXME: Undefined functions */ +@@ -152,12 +158,34 @@ static int HAIKU_ShowCursor(SDL_Cursor *cur) + return 0; + } + ++static int ++HAIKU_SetRelativeMouseMode(SDL_bool enabled) ++{ ++ SDL_Window *window = SDL_GetMouseFocus(); ++ if (!window) { ++ return 0; ++ } ++ ++ SDL_BWin *bewin = _ToBeWin(window); ++ BGLView *_SDL_GLView = bewin->GetGLView(); ++ ++ bewin->Lock(); ++ if (enabled) ++ _SDL_GLView->SetEventMask(B_POINTER_EVENTS | B_KEYBOARD_EVENTS, B_NO_POINTER_HISTORY); ++ else ++ _SDL_GLView->SetEventMask(0, 0); ++ bewin->Unlock(); ++ ++ return 0; ++} ++ + static void HAIKU_MouseInit(_THIS) + { + SDL_Mouse *mouse = SDL_GetMouse(); + if (!mouse) + return; + mouse->ShowCursor = HAIKU_ShowCursor; ++ mouse->SetRelativeMouseMode = HAIKU_SetRelativeMouseMode; + mouse->cur_cursor = (SDL_Cursor*)0x1; + mouse->def_cursor = (SDL_Cursor*)0x2; + } +-- +2.30.0 + + +From 3325c1a3db41dbe80e3914b2534a73ec7a5382b7 Mon Sep 17 00:00:00 2001 +From: Gerasim Troeglazov <3dEyes@gmail.com> +Date: Fri, 5 Mar 2021 17:30:08 +1000 +Subject: Add support for system cursors + + +diff --git a/src/video/haiku/SDL_BWin.h b/src/video/haiku/SDL_BWin.h +index 34f0d5f..220d60a 100644 +--- a/src/video/haiku/SDL_BWin.h ++++ b/src/video/haiku/SDL_BWin.h +@@ -37,6 +37,7 @@ extern "C" { + + #include + #include ++#include + #include + #include + #if SDL_VIDEO_OPENGL +diff --git a/src/video/haiku/SDL_bvideo.cc b/src/video/haiku/SDL_bvideo.cc +index 234eaf0..0948451 100644 +--- a/src/video/haiku/SDL_bvideo.cc ++++ b/src/video/haiku/SDL_bvideo.cc +@@ -141,20 +141,72 @@ void HAIKU_DeleteDevice(SDL_VideoDevice * device) + SDL_free(device); + } + +-static int HAIKU_ShowCursor(SDL_Cursor *cur) ++static SDL_Cursor * ++HAIKU_CreateSystemCursor(SDL_SystemCursor id) ++{ ++ SDL_Cursor *cursor; ++ BCursorID cursorId = B_CURSOR_ID_SYSTEM_DEFAULT; ++ ++ switch(id) ++ { ++ default: ++ SDL_assert(0); ++ return NULL; ++ case SDL_SYSTEM_CURSOR_ARROW: cursorId = B_CURSOR_ID_SYSTEM_DEFAULT; break; ++ case SDL_SYSTEM_CURSOR_IBEAM: cursorId = B_CURSOR_ID_I_BEAM; break; ++ case SDL_SYSTEM_CURSOR_WAIT: cursorId = B_CURSOR_ID_PROGRESS; break; ++ case SDL_SYSTEM_CURSOR_CROSSHAIR: cursorId = B_CURSOR_ID_CROSS_HAIR; break; ++ case SDL_SYSTEM_CURSOR_WAITARROW: cursorId = B_CURSOR_ID_PROGRESS; break; ++ case SDL_SYSTEM_CURSOR_SIZENWSE: cursorId = B_CURSOR_ID_RESIZE_NORTH_WEST_SOUTH_EAST; break; ++ case SDL_SYSTEM_CURSOR_SIZENESW: cursorId = B_CURSOR_ID_RESIZE_NORTH_EAST_SOUTH_WEST; break; ++ case SDL_SYSTEM_CURSOR_SIZEWE: cursorId = B_CURSOR_ID_RESIZE_EAST_WEST; break; ++ case SDL_SYSTEM_CURSOR_SIZENS: cursorId = B_CURSOR_ID_RESIZE_NORTH_SOUTH; break; ++ case SDL_SYSTEM_CURSOR_SIZEALL: cursorId = B_CURSOR_ID_MOVE; break; ++ case SDL_SYSTEM_CURSOR_NO: cursorId = B_CURSOR_ID_NOT_ALLOWED; break; ++ case SDL_SYSTEM_CURSOR_HAND: cursorId = B_CURSOR_ID_FOLLOW_LINK; break; ++ } ++ ++ cursor = (SDL_Cursor *) SDL_calloc(1, sizeof(*cursor)); ++ if (cursor) { ++ cursor->driverdata = (void *)new BCursor(cursorId); ++ } else { ++ SDL_OutOfMemory(); ++ } ++ ++ return cursor; ++} ++ ++static SDL_Cursor * ++HAIKU_CreateDefaultCursor() ++{ ++ return HAIKU_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW); ++} ++ ++static void ++HAIKU_FreeCursor(SDL_Cursor * cursor) ++{ ++ if (cursor->driverdata) { ++ delete (BCursor*) cursor->driverdata; ++ } ++ SDL_free(cursor); ++} ++ ++static int HAIKU_ShowCursor(SDL_Cursor *cursor) + { + SDL_Mouse *mouse = SDL_GetMouse(); +- int show; ++ + if (!mouse) + return 0; +- show = (cur || !mouse->focus); +- if (show) { +- if (be_app->IsCursorHidden()) +- be_app->ShowCursor(); ++ ++ if (cursor) { ++ BCursor *hCursor = (BCursor*)cursor->driverdata; ++ be_app->SetCursor(hCursor); + } else { +- if (!be_app->IsCursorHidden()) +- be_app->HideCursor(); ++ BCursor *hCursor = new BCursor(B_CURSOR_ID_NO_CURSOR); ++ be_app->SetCursor(hCursor); ++ delete hCursor; + } ++ + return 0; + } + +@@ -184,10 +236,12 @@ static void HAIKU_MouseInit(_THIS) + SDL_Mouse *mouse = SDL_GetMouse(); + if (!mouse) + return; ++ mouse->CreateSystemCursor = HAIKU_CreateSystemCursor; + mouse->ShowCursor = HAIKU_ShowCursor; ++ mouse->FreeCursor = HAIKU_FreeCursor; + mouse->SetRelativeMouseMode = HAIKU_SetRelativeMouseMode; +- mouse->cur_cursor = (SDL_Cursor*)0x1; +- mouse->def_cursor = (SDL_Cursor*)0x2; ++ ++ SDL_SetDefaultCursor(HAIKU_CreateDefaultCursor()); + } + + int HAIKU_VideoInit(_THIS) +-- +2.30.0 + + +From 74d61a5e46f4ba2b1fd628ee2ca89a7eaeee120b Mon Sep 17 00:00:00 2001 +From: Gerasim Troeglazov <3dEyes@gmail.com> +Date: Fri, 5 Mar 2021 17:31:02 +1000 +Subject: Disable direct mode for BGLView + + +diff --git a/src/video/haiku/SDL_BWin.h b/src/video/haiku/SDL_BWin.h +index 220d60a..2b01d11 100644 +--- a/src/video/haiku/SDL_BWin.h ++++ b/src/video/haiku/SDL_BWin.h +@@ -142,7 +142,7 @@ class SDL_BWin:public BDirectWindow + } + AddChild(_SDL_GLView); + _SDL_GLView->SetEventMask(B_POINTER_EVENTS | B_KEYBOARD_EVENTS, B_NO_POINTER_HISTORY); +- _SDL_GLView->EnableDirectMode(true); ++ _SDL_GLView->EnableDirectMode(false); /* Disable direct mode */ + _SDL_GLView->LockGL(); /* "New" GLViews are created */ + Unlock(); + return (_SDL_GLView); +-- +2.30.0 +