Commit Graph

3295 Commits

Author SHA1 Message Date
Simon McVittie
81ac656b7c SDL_CalculateRGBSize, SDL_CalculateYUVSize: set the error indicator
These functions historically didn't set the error indicator on overflow.

Before commit 447b508a "error: SDL's allocators now call SDL_OutOfMemory
on error", their callers would call SDL_OutOfMemory() instead, which was
assumed to be close enough in meaning: "that's a silly amount of memory
that would overflow size_t" is similar to "that's more memory than
is available". Now that responsibility for calling SDL_OutOfMemory()
has been pushed down into SDL_calloc() and friends, the functions that
check for overflows might as well set more specific errors.

Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-01-18 13:21:50 -08:00
Ryan C. Gordon
949b4fc349 x11: XI_Motion should mark the global mouse position as changed.
Otherwise we'll miss it when XWarpPointer() is used. x11vnc may do this to
manage mouse input in some circumstances, so it can be possible for _all_
mouse motion to go through this path, breaking SDL_GetGlobalMouseState().

Thanks to @chrismile for all the detective work to figure this out!

Fixes #8827.

(cherry picked from commit cc7fe8c255)
2024-01-18 15:15:43 -05:00
Anonymous Maarten
dbdc65fc95 video: move standard c, sse and lsx implementations of yuv2rgb to its own source 2024-01-18 10:59:13 -08:00
Sam Lantinga
a31dc6dfcb Switched SDL_TouchID and SDL_FingerID to be Uint64 with 0 being an invalid value 2024-01-18 10:55:24 -08:00
Sam Lantinga
fc0c774976 Renamed SDL_ThreadID() to SDL_GetCurrentThreadID()
Also renamed SDL_threadID to SDL_ThreadID and made it Uint64 for consistency with other ID types
2024-01-18 08:18:37 -08:00
Sam Lantinga
f8dfee01bb Made SDL_ReadSurfacePixel a public function
Fixes https://github.com/libsdl-org/SDL/issues/8320
2024-01-18 07:00:10 -08:00
Sam Lantinga
a2665f54c8 Updated the atomic API for SDL 3.0 naming conventions
Fixes https://github.com/libsdl-org/SDL/issues/7388
2024-01-18 04:41:34 -08:00
Sam Lantinga
fd34bc56f9 cocoa: Fix SDL_CocoaWindowData keyboard_focus being left pointing to a destroyed SDL window if input focus not previously reset for that window
- If a window being destroyed is a child of an inactive window and was the last keyboard focus of the window, that window will be left with a stale pointer
  to the destroyed window that it will attempt to restore the next time that window is focused. SDL_DestroyWindow will have already taken care of moving
  focus if this window is the current SDL keyboard focus so this change intentionally does not set focus.

- Like Cocoa_HideWindow, this attempts to move the focus to the closest parent window that is not hidden or destroying.
2024-01-18 03:36:54 -08:00
Sam Lantinga
0a99ad7a68 cocoa: Fix Cocoa_RaiseWindow not making child window key if SDL_HINT_WINDOW_ACTIVATE_WHEN_RAISED is true
- We intentionally don't raise the application when raising a child window to allow raising a child window to the top without setting the application active but the
  child window should still be set as key window for the application if desired.
2024-01-18 03:36:52 -08:00
Sam Lantinga
f4a0bc02d5 Re-added prototypes for stub API functions 2024-01-18 03:26:11 -08:00
Sam Lantinga
a0967c017f Fixed building with the video subsystem disabled 2024-01-17 09:24:04 -08:00
Sam Lantinga
ba02722755 Removed SDL_LOADSO_DISABLED
Loading shared libraries is core functionality on platforms that support it.
2024-01-17 09:24:04 -08:00
Sam Lantinga
0d7df16812 Timers are a required platform feature
Many SDL subsystems depend on being able to see time passing. If you are porting to a new platform, you'll need to fill in a timer implementation as part of the initial port.

Fixes https://github.com/libsdl-org/SDL/issues/8850
2024-01-16 20:50:08 -08:00
Sylvain
e6c8872fdc Fixed bug #7614: Segmentation Fault in SDL_BlitSurface 2024-01-16 07:09:35 -08:00
Sam Lantinga
6e48d4532c Added raw input device handle for WM_INPUT mouse button handling 2024-01-15 19:47:55 -08:00
Sam Lantinga
cf5e0637b5 Touchpads already have their right/left buttons swapped in raw input
Fixes https://github.com/libsdl-org/SDL/issues/8597
2024-01-15 19:41:46 -08:00
Sam Lantinga
fb2d7ed83e Restore window minimum and maximum size if it is recreated
Fixes https://github.com/libsdl-org/SDL/issues/8805
2024-01-15 16:33:49 -08:00
Frank Praznik
4f3d4bd110 wayland: Add the ability to import and wrap external surfaces
Add the ability to import and wrap external surfaces from external toolkits such as Qt and GTK.

Wayland surfaces and windows are more intrinsically tied to the client library than other windowing systems, so it is necessary to provide a way to initialize SDL with an existing wl_display object, which needs to be set prior to video system initialization, or export the internal SDL wl_display object for use by external applications or toolkits. For this, the global property SDL_PROPERTY_GLOBAL_VIDEO_WAYLAND_WL_DISPLAY_POINTER is used.

A Wayland example was added to testnative, and a basic example of Qt 6 interoperation is provided in the Wayland readme to demonstrate the use of external windows with both SDL owning the wl_display, and an external toolkit owning it.
2024-01-15 13:54:35 -05:00
chalonverse
3a4ac15a27 Make Xbox GDK code public (and fix some GDK code rot) (#8844) 2024-01-14 20:31:41 -08:00
Frank Praznik
649556befa win32: Let windows manage the floating state unless explicitly overridden
Windows doesn't inform applications if the window is in the docked/tiled state, so let windows manage the window size when restoring from a fixed-size state, unless the application explicitly requested a new size/position.

Fixes the video_getSetWindowState test.
2024-01-13 15:24:25 -08:00
Frank Praznik
d4a9748740 win32: Fix test failures
WM_WINDOWPOSCHANGING needs to return 0 when a resize was initiated programmatically

Checking the SWP_NOMOVE and SWP_NOSIZE flags in the WINDOWPOS struct when handling WM_WINDOWPOSCHANGED to avoid sending redundant resize and move events is unreliable, as they can be set even when the window has moved or changed size, such as when leaving fullscreen, or programmatically resizing a window without STYLE_RESIZABLE set.

Fixes the video_getSetWindowSize and video_setWindowCenteredOnDisplay tests.
2024-01-13 15:24:25 -08:00
Sam Lantinga
f0b9c7f0f0 Let Windows track floating window state
This fixes restoring window size and position after moving it to a tiled location (which isn't maximized) and then back.
2024-01-12 10:58:30 -08:00
Sam Lantinga
98be55894e Moved window state change handling from WM_WINDOWPOSCHANGING to WM_WINDOWPOSCHANGED
Applications might override WM_WINDOWPOSCHANGING which would prevent us from getting the correct window state.

This also fixes cases where the window doesn't get WM_SHOWWINDOW, as described in Raymond Chen's blog post:
https://devblogs.microsoft.com/oldnewthing/20080115-00/?p=23813
2024-01-12 09:38:28 -08:00
Sam Lantinga
7efeb36131 Pass the frame DPI to WIN_AdjustWindowRectForHWND() 2024-01-12 09:33:05 -08:00
Sam Lantinga
e4ee1cade7 Revert "SDL_windowsevents.c: fixed -Werror=unused-variable"
This reverts commit f8cce4ead4.
2024-01-12 09:33:05 -08:00
Ozkan Sezer
f8cce4ead4 SDL_windowsevents.c: fixed -Werror=unused-variable 2024-01-12 18:56:10 +03:00
Sam Lantinga
277fded7ba Refactor AdjustWindowRectEx() into WIN_AdjustWindowRectForHWND()
Also include the window EXSTYLE to calls to AdjustWindowRectEx()
2024-01-12 07:07:27 -08:00
Sam Lantinga
312160935d Removed deprecated use of __IPHONEOS__ (thanks @Dragon-Baroque!) 2024-01-12 06:51:44 -08:00
Sam Lantinga
483155bbf9 Fixed borderless window client area calculation 2024-01-11 13:49:28 -08:00
George Broughton
0c6b070761 Capture debug macros off by default 2024-01-11 10:22:36 -05:00
Sam Lantinga
b5bc64aa55 Fixed pause key on Windows (thanks Mikhail!) 2024-01-10 16:13:01 -08:00
Frank Praznik
3a219caf3d wayland: Restore accidentally removed line of code 2024-01-08 18:01:06 -05:00
Sam Lantinga
590d0bec6f Revert "Make sure new windows have mouse and keyboard focus if there's no windowing system"
This reverts commit 5948ea997f.

This isn't needed, the proper focus logic is in SDL_ShowWindow()
2024-01-08 14:32:28 -08:00
Sam Lantinga
5948ea997f Make sure new windows have mouse and keyboard focus if there's no windowing system 2024-01-08 13:54:18 -08:00
Frank Praznik
4b6df89238 wayland: Add a property to allow creation of a wl_egl_window object even if OpenGL is not enabled
Useful if the application handles OpenGL outside of SDL and wants to use the window without having to pull in Wayland as a dependency.
2024-01-08 14:54:47 -05:00
Frank Praznik
f7dd0f9491 wayland: Allow the creation of roleless window surfaces for custom application use
Allow for the creation of SDL windows with a roleless surface that applications can use for their own purposes, such as with a windowing protocol other than XDG toplevel.

The property `wayland.surface_role_custom` will create a window with a surface that SDL can render to and handles input for, but is not associated with a toplevel window, so applications can use it for their own, custom purposes (e.g. wlr_layer_shell).

A test/minimal example is included in tests/testwaylandcustom.c
2024-01-08 14:54:47 -05:00
Frank Praznik
4417250d0d wayland: Remove the registry from the window properties
A Wayland registry object can only have one listener attached at a time, so an application attempting to use the backend SDL registry object for its own purposes will just result in an error. Remove this property, as it is of no use to applications and will only result in errors.

If an application needs the registry, it needs to get the wl_display object via `SDL.window.wayland.display` and use wl_display_get_registry() to create a new registry object that it can attach its own listeners to.
2024-01-08 14:54:47 -05:00
Frank Praznik
392796e49c wayland: Eliminate redundant protocol checks
If the xdg_wm_base protocol isn't present, the window won't be assigned a valid surface type at creation time, which makes these checks redundant.

The libdecor path was already cleaned up in this manner some time ago.
2024-01-08 14:54:47 -05:00
Sam Lantinga
1a13dae219 Added constant definitions for SDL properties
Fixes https://github.com/libsdl-org/SDL/issues/8622
2024-01-07 16:59:41 -08:00
Sam Lantinga
014a63b4b5 Renamed ShowTextInput/HideTextInput to ShowScreenKeyboard/HideScreenKeyboard on Android
This better reflects the actual implementation and makes SDL_HINT_ENABLE_SCREEN_KEYBOARD work on Android.

Fixes https://github.com/libsdl-org/SDL/issues/8652
2024-01-06 08:11:22 -08:00
Sam Lantinga
3a9a52fe6c updateKeyboard should use the SDL window's screen instead of the view window's screen, which may be nil.
Fixes https://github.com/libsdl-org/SDL/issues/8200
2024-01-06 07:31:10 -08:00
Sam Lantinga
787a15f760 Fix Mac child windows that are created hidden showing if their parent window is shown
- Child windows are added and removed dynamically from the window hierarchy when they're shown/hidden. Adding a hidden child window to a visible
  parent is fine, but adding a hidden child window to a hidden parent will cause the child to show when the parent window is shown as it's still a part of
  the window hierarchy.

- For some reason, not adding the child window to the parent entirely causes the child to not focus correctly the first time it's shown. Adding then immediately
  calling orderOut to remove the child window from the hierarchy does work correctly so we do this to work around the weird issue.
2024-01-04 12:44:57 -08:00
Sam Lantinga
d6b1fc9576 Add SDL_MAC_REGISTER_ACTIVATION_HANDLERS hint to allow disabling the normal application startup/activation/deactivation handlers 2024-01-04 12:44:54 -08:00
Sam Lantinga
c03c01e9b2 Make sure we get mouse events as soon as possible 2024-01-04 09:12:55 -08:00
Frank Praznik
ed62d6e7de cocoa: Set the titled flag on fullscreen space windows
For some reason, fullscreen space windows won't get any mouse button events unless the NSWindowStyleMaskTitled flag is set when entering fullscreen, even though they successfully become key and receive mouse motion events. Make sure the flag is always set when entering fullscreen space state.
2024-01-03 21:12:34 -05:00
Sam Lantinga
31851a50d2 Fixed dropping raw input because of mixing GetRawInputBuffer() and WM_INPUT handling
It turns out that when you enable raw input and then process Windows messages, you'll get the currently pending input in GetRawInputBuffer(), and you'll get any new input that occurs while processing messages as WM_INPUT.

The fix for this is to create a dedicated thread to handle raw input and only use GetRawInputBuffer() in that thread. A nice side effect of this is that we'll get mouse input at the lowest latency possible, but raw mouse events will now occur on a separate thread, outside of the normal event loop processing.

Improved fix for https://github.com/libsdl-org/SDL/issues/8756
2024-01-03 02:20:23 -08:00
Nour Fouad
987744aae8 Fix Duplicated includes 2024-01-02 16:34:11 -08:00
Sam Lantinga
2b369a14ab Fixed allocation and alignment of raw input buffers 2024-01-02 09:25:28 -08:00
Sam Lantinga
8fe4a45edf Use GetRawInputBuffer() instead processing raw input one at a time
This is a huge performance improvement for high polling rate mice, like the Razer Viper 8K mouse.

Fixes https://github.com/libsdl-org/SDL/issues/8756
2024-01-01 20:41:15 -08:00
Sam Lantinga
5b3ee51c6c Updated copyright for 2024 2024-01-01 13:15:26 -08:00