Commit Graph

4110 Commits

Author SHA1 Message Date
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
Sam Lantinga
a7b79c483c Remove unused 'window' variable from -[Cocoa_WindowListener windowWillExitFullScreen] 2024-01-01 13:15:39 -08:00
Sam Lantinga
44c2f344d6 Fixed build 2023-12-30 11:47:56 -08:00
Sam Lantinga
e3d50619f8 Fixed fatal error: SDL_pen.h: No such file or directory 2023-12-29 20:04:40 -08:00
Frank Praznik
5d0c893723 wayland: Remove bitfield specifiers from boolean values
If SDL_bool is no longer unsigned, this won't work as the valid values are only 1 and -1.
2023-12-29 14:18:55 -05:00
Sam Lantinga
dc1c27885e Fixed warning C4389: '!=': signed/unsigned mismatch in SDL_blit.c 2023-12-29 09:26:36 -08:00
Sam Lantinga
d71454da17 Store the surface properties in the reserved pointer of a surface
This prevents us from exposing the properties publicly and allows us to repurpose the pointer later if necessary.

Fixes https://github.com/libsdl-org/SDL/issues/8758
2023-12-29 08:17:06 -08:00
Frank Praznik
b6a92c113f wayland: Don't apply old libdecor window dimensions
Don't overwrite the current dimensions unless they've actually changed, or programmatically set dimensions can be overwritten.
2023-12-29 08:59:45 -05:00
Sam Lantinga
c24b33d8d9 Fixed building with older Windows SDK 2023-12-28 15:14:34 -08:00
Sam Lantinga
ce329d60e4 Added support for alpha blending using palette alpha
Fixes https://github.com/libsdl-org/SDL_image/issues/409
2023-12-28 09:33:02 -08:00
Frank Praznik
9c3e831e33 uikit: Send fullscreen enter/leave events
Send fullscreen enter/leave events, which will implicitly update the fullscreen flag. Manually setting the flag will suppress attempts to send the events later, as the flag is used for deduplication purposes in the event code.
2023-12-27 17:23:49 -05:00
Reilly Brogan
4ce935b910 Fix static build with libdecor 0.2.0 2023-12-26 16:29:36 -08:00
Susko3
5d6d149862 Allow passing in extrainfo value to GetMouseMessageSource()
This saves a syscall in WM_INPUT handling
2023-12-26 13:42:19 -08:00
Susko3
e0df963ef0 Fix wrong bit count in comment
If we're counting bits from 0, then the MSB is bit 31!
2023-12-26 13:42:19 -08:00
Susko3
c2a55cd2c5 Add missing (void) in functions params 2023-12-26 13:42:19 -08:00
Susko3
a3c8f2f6cb Consolidate mouse-touch event checking logic
Saves one `GetMessageExtraInfo()` syscall when handling WM_INPUT events.

Will provide consistent results across various event types.
2023-12-26 13:42:19 -08:00
Susko3
d747daf03d Use correct touch check flag
Matches the one in `GetMouseMessageSource()`.
From my testing on Windows 11, the lower 8 bits in touch events cycle
trough the values 0x8c-0x95 in order.
2023-12-26 13:42:19 -08:00
Susko3
bbdd41f287 Fix windows touch using wrong axis for normalisation
Regressed with 9302d7732d
2023-12-26 09:12:17 -08:00
Sam Lantinga
1bf78ed544 We get a resize event when the view enters fullscreen mode on iOS
The call stack is:

We want to use this instead of the desktop mode because the view may be in a different orientation than the device orientation, which the desktop mode is based on.
2023-12-24 17:45:35 -08:00
Sam Lantinga
e3b5999bb4 Use the application requested size to determine automatic orientation on iOS
Fixes https://github.com/libsdl-org/SDL/issues/8201
2023-12-24 17:14:16 -08:00
Sam Lantinga
278e3f9184 Whoops, fixed setting fullscreen flag 2023-12-24 17:12:01 -08:00
Sam Lantinga
69e60e0f1b Fixed setting fullscreen mode on iOS
Needed to update the actual window flags based on the requested state (@Kontrabant)
2023-12-24 16:24:22 -08:00
Frank Praznik
199f7cc3b1 x11: Ignore border extents when the border hint is unset
Old extent events can arrive after the border hint has been unset. Ignore the reported values in this case to avoid reporting bogus border sizes.
2023-12-22 12:19:28 -05:00
Sylvain
ffd82fb7c4 Add scaleMode to SDL_SoftStretch(), remove SDL_SoftStretchLinear(). 2023-12-22 09:13:21 -08:00
Sylvain
5dba04b29b Remove SDL_{Set,Get}SurfaceScale().
Add Scale parameter to SDL_BlitSurfaceScaled() and SDL_BlitSurfaceScaledUnchecked()
(see #8732)
2023-12-22 02:08:49 -08:00
Frank Praznik
e66896406d cocoa: Set appropriate flags on fullscreen spaces windows
Don't mark fullscreen windows as having a title bar if the window is borderless, or it can end up in a weird, pseudo-decorated state when leaving fullscreen if the borders were toggled back on while the window was fullscreen.

Setting the window styling when about to leave fullscreen caused issues with this as well and is no longer needed, as it is ensured that the window's resizable state won't change while in a fullscreen space, or in a transition period.
2023-12-21 17:44:23 -05:00
Frank Praznik
57fcb9044c video: Remove more assumptions about window state in the video layer
Don't check the fullscreen flag when toggling resizable, bordered, always on top, minimum size and maximum size, as the flag doesn't reflect pending async changes that may be in progress.

These properties can be made to be safely toggled while the window is in fullscreen mode and applied when returning to windowed mode, which ensures that requested window settings aren't lost if calling these functions while async fullscreen changes are in flight.
2023-12-21 17:44:23 -05:00
Dimitriy Ryazantcev
cb90653695 win32: use USER_DEFAULT_SCREEN_DPI instead of explicit 96 value 2023-12-21 08:32:10 -08:00
Sam Lantinga
2ad50e9675 Make the SDL3 surface ABI compatible with SDL2
We'll use properties for new data associated with a surface, which lets us preserve ABI compatibility with SDL2 and any surfaces created by applications and passed in to SDL functions.
2023-12-21 06:58:22 -08:00
Sam Lantinga
f72d6a7fd9 Use more verbose names for properties, to match upcoming public property names 2023-12-21 06:58:22 -08:00
Dimitriy Ryazantcev
3152b98e87 win32: minor fixup in WIN_UpdateKeymap()
Remove unused defines in SDL_windowsevents.c
2023-12-20 11:01:45 -08:00
Frank Praznik
69ec0322d3 win32: Make leaving fullscreen when the window already isn't fullscreen a no-op
Otherwise, the styling on external windows may end up being overridden.
2023-12-18 11:47:59 -05:00
Frank Praznik
8f79e0b7f8 win32: Fix high-DPI debug logging 2023-12-18 11:31:37 -05:00
Sylvain
84a0d5f623 Added SDL_SetSurfaceScaleMode() and SDL_GetSurfaceScaleMode() to control scale mode using SDL_BlitSurfaceScaled() 2023-12-17 15:39:53 -08:00
Frank Praznik
1745289b1b x11: Don't move the window when restoring and ensure that resize and position events are sent when entering or leaving fullscreen
Account for the border sizes when restoring the window and only turn off resize events when entering or leaving fullscreen until the frame extents are changed, and only if they are, or previously were, non-zero.

This necessitated further refinement to the sync algorithm as well, but as a result, the sync function no longer occasionally times out if creating a window and immediately recreating it when initializing a renderer, and some rare, spurious size and position failures in the centered window and state automated tests seem to be fixed.
2023-12-17 11:39:49 -05:00
Frank Praznik
b937c54b66 win32: Set all size and position variables for external windows 2023-12-15 16:41:20 -05:00