Files
kaizen/include/SDL3/SDL_joystick.h
SimoZ64 28d94e8b86 Squashed 'external/SDL/' changes from 8ec576dda..90fd2a3cb
90fd2a3cb Sync SDL3 wiki -> header
edd08771a wayland: Add xdg_toplevel v7 edge constraint support
113475acb wayland: Add multi-seat support
4093e4a19 Fixed process I/O redirection to NUL on Windows
c025fdbb7 Add the CREATE_NO_WINDOW flag for background processes
8a57c83ff Updated to GameInput v1.1
f35a2736b Don't reset the render target when invalidating GPU renderer cache state
47e52ab37 Sync SDL3 wiki -> header
6a3dbe34d Sync SDL3 wiki -> header
d84c000ac Sync SDL3 wiki -> header
98e76d283 Fixed conflict when linking both SDL and hidapi statically
f6db5ba4c Add Turtle Beach VelocityOne
a1016bd06 Allow 01-joystick-polling example to be resizable
60fb1b554 Fix IMU orientations for 8bitdo wireless 2 controller in bluetooth mode
b0860fb0c Disable EGL in Emscripten builds
f303ccca6 Updated the report size for Ultimate 2 Wireless firmware v1.02
0add03780 [Windows]: dialog: Add `OFN_OVERWRITEPROMPT` to save dialogs (#12782)
a390f5716 docs: improve man page generation
93ac1e689 Fixed non-XBox controllers being detected as Series X controllers
d29bb902f Don't treat the Keychron K1 Pro System Control keyboard as a joystick
ab57ef9d7 update sdlgenblit.pl after PR/12769
b0a0d236d fix sdlgenblit.pl so that it actually matches the generated source
0fdfa925f rename local pointer vars 'pixel' to 'pixels'
46c314cc3 Revert "bool is 4 bytes in Apple MacOS X 32 bit PPC ABI"
2abfb92c5 Sync SDL3 wiki -> header
97eddacd7 Use the actual value of EGL_PLATFORM_DEVICE_EXT if it's not defined
4c1a3ccd4 rename local vars 'pixel' to 'pixelvalue'
433704e77 rename 'pixel' params of SDL_GetRGB, SDL_GetRGBA and SDL_LookupRGBAColor
83b261ae8 Remove unused message box includes
cccad933a Updated version documentation to match SDL 3.x practice
adad7dcae x11/wayland: Ignore redundant restore and fullscreen leave requests when showing the window
d7d6d8e28 Sync SDL3 wiki -> header
f7b718883 Add SDL_CreateGPURenderer
5a59b5f32 bool is 4 bytes in Apple MacOS X 32 bit PPC ABI
3b9101768 pulseaudio: cleanup TLS every time we finish a threaded-mainloop callback.
646f1f243 x11: Only enable _NET_WM_SYNC_REQUEST for OpenGL windows
33f90f2e4 GPU Vulkan: Clean up in Submit in headless mode (#12744)
93b06cffd Sync SDL3 wiki -> header
c2c3a930b Add STRING suffix to SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_* string properties
44710a248 gpu: alpha-to-coverage support
d6d2c958a Move global event handlers to SDL_VideoInit
05939909d SDL_gpu.h: SDL_GetGPUDeviceProperties() is thread-safe.
1687bc746 Sync SDL3 wiki -> header
accd952c4 SDL_gpu.h: Another attempt to clean up SDL_GetGPUDeviceProperties() docs.
c5f369f55 Sync SDL3 wiki -> header
0c9eccd0e Sync SDL3 wiki -> header
906c6c751 GPU: Add missing error code to VkErrorMessages()
205c34c62 GPU: The D3D12 blit shaders are DXIL
300013cea GPU: Don't pass null properties to SDL_CopyProperties()
8ad64aba1 GPU: Remove subheadings from SDL_GetGPUDeviceProperties() docs
94ab2b76a Sync SDL3 wiki -> header
85281be78 Re-added text removed by the wiki bridge
b53e7b447 GPU Vulkan: Fix recursive Submit calls causing defrag to fail (#12718)
b1919783c Sync SDL3 wiki -> header
39a3b14df Renamed SDL_GetGPUDeviceDebugProperties() to SDL_GetGPUDeviceProperties()
ca613b9d8 x11: Send a restored event before entering fullscreen
667b706a9 x11: Don't set the hidden flag when minimizing windows
6430aed3d Removed SDL_XInputVersion, which isn't used
40e08ee7a Assume new XBox controllers have a share button
6bb16296b Added special handling for SDL_HINT_ANDROID_ALLOW_RECREATE_ACTIVITY
ebb52973e cmake: make SDL_CPU_xxx variable visible when using CMAKE_OSX_ARCHITECTURES
b4af01cd0 only build static library in some feature tests
756b455d3 Fixed building for Xbox One
25232c077 Sync SDL3 wiki -> header
f78aa4d8e GPU: Expose debug information from devices
008690d01 Sync SDL3 wiki -> header
df3282740 Note that you might get a different size window than you expect
ab34ea5a2 Fixed documentation for SDL_GL_*_SIZE
87d6beb89 Rename cmake/sdltargets.cmake -> cmake/sdlcommands.cmake
208ec1829 Update README-documentation-rules.md
5709466dd Sync SDL3 wiki -> header
b52140086 Note that the Emscripten window properties are strings
82b245d13 Added support for the HORI Taiko No Tatsujin Drum Controller
12ef57ede Sync SDL3 wiki -> header
735b68581 Fixed wiki reformatting
cc8ec6cf1 Handle global mouse state for Emscripten (#12669)
53d053279 Sync SDL3 wiki -> header
cbc26fe2c Add Emscripten window data to window properties
4aefde015 Only send sensor data if sensors are enabled for 8BitDo controllers
6d7827344 Return early in stead of goto
c3ce216c4 Fixed crash at shutdown on Windows
e87a00c07 tests: port failing SDL_Renderer test from pysdl2 to testautomation
10819273b tests: port failing SDL_Renderer test from pysdl2 to testautomation
ffbd434a1 tests: port failing window  test from pysdl2 to testautomation
2775e7a78 tests: port failing SDL_Rect tests from pysdl2 to testautomation
39eed1d23 tests: port failing SDL_Hint tests from pysdl2 to testautomation
366a5281b Fixed comment
79a41ca7f Implemented DEBUG_8BITDO_PROTOCOL
5922e2cb7 Corrected comment with 8BitDo controller report sizes
0d9ff082f 8BitDo HIDAPI driver cleanup
e236a48e1 8BitDo
4de396734 More clarification for high DPI support
36fc1c2c9 Fixed texture colorspace when creating a texture from a surface
512485869 fix vulkan vertex buffer indexing
2e494fda3 Clarify high DPI support and best practices
44faac292 Fixed A/B/X/Y buttons on Nintendo 3DS
38c2081ae Temporarily default SDL_HINT_JOYSTICK_HIDAPI_8BITDO off
bcacc37e3 Sync SDL3 wiki -> header
e18c6bd2e 8BitDo (#12661)
6b1d6bfbe wayland: Commit the confinement region upon creation
266ee41c8 wayland: Defer creating cursor confinement regions until the surface is mapped
cb1d79db3 Sync SDL3 wiki -> header
088ad66f7 Update include/SDL3/SDL_power.h
032d69602 Add performance disclaimer in `SDL_GetPowerInfo` documentation
0d04e9ea6 Fixed build
7bb95bde4 Set the alpha opaque when blending to an RGB format
8eb57c5a4 diskaudio: Use SDL_GetAudioFormatName instead of recreating it from scratch.
f05bb7aae diskaudio: Log the raw PCM's format during "device" open.
210b317d8 x11: Popup positions after constraining are in the window-relative space, not global
daa7a5ad7 Updated Visual Studio example projects
f7a89d19c fix missing AVFoundation in CMakeLists.txt
a23f97483 Temporarily disable DwmFlush()
536a1a236 coreaudio: Added some NULL pointer checks.
712c76fdc gamepad: Fix inability to disable SDL_EVENT_GAMEPAD_UPDATE_COMPLETE events
418acf629 Sync SDL3 wiki -> header
633b9f6fb Added SDL_SetRenderTextureAddressMode() and SDL_GetRenderTextureAddressMode()
eb918af3d video: fix surface leak when duplicating mjpeg
567dfd2eb examples/renderer/19-affine-textures: add metadata for examples.libsdl.org.
5ab1aef36 examples/renderer/19-affine-textures: blue background so you can see the cube.
87e6d2250 examples, affine-textures: fix RISC-OS build.
254f34808 examples/renderer/19-affine-textures: Flip coords so SDL logo is right-side up.
391545105 examples/renderer/19-affine-textures: Whole source file was indented one space.
2ebcee203 examples: added examples/renderer/19-affine-textures to CMakeLists.txt.
2207f6bc9 examples/renderer/affine-textures: Fixed compiler warnings.
83eea00d6 Create affine-textures.c
401aaf3d2 video: Revert unnecessary member assignment
eed94cb03 Updated link to PSP Hello World
be2f7f206 Sync SDL3 wiki -> header
0f27c3aab Added SDL_PROP_PROCESS_CREATE_WORKING_DIRECTORY_STRING
289f5cfdb touch: Don't call ResetTouch() if SDL_GetTouch() can't find a virtual device.
b00b08f83 touch: Keep state correct when removing virtual touch devices during quit.
09fff161e cocoa: Clear pending state on fullscreen switch failures
05d23cae7 cocoa: Re-add sync timeout
2e61b4165 Don't send relative motion while in a modal loop
4c035a1fd audio: Allow PipeWire and PulseAudio streams to migrate to other sinks.
f3d4e6fe5 Sync SDL3 wiki -> header
8e6eaf12a wayland: Expose wl_output objects on video displays
1f917d523 Sync SDL3 wiki -> header
00f316737 Progress bar comment changes
e28974124 Added mappings for the NSO N64/SEGA/SNES controllers
b88200b79 Fixed face buttons for the NSO SNES controller under the HIDAPI driver
f355c7f21 Allow the progress API to be used on all platforms
b45ed98ae Fix spelling mistake in documentation
716e33f10 x11: Send the _XWAYLAND_MAY_GRAB_KEYBOARD message when grabbing the keyboard
a5633ad0f Sync SDL3 wiki -> header
6cc00a31b WindowProgressState API getters and fixes (#12629)
b520cde18 cocoa: Properly set the pending fullscreen spaces state when in a transition
dd9b9d451 Check if GL_OES_EGL_image_external is supported before trying to use it
7ec13a2ea Document SDL_malloc alignment guarantees
ae17b04c0 alsa: Don't start the hardware until the device thread is ready to do work.
41636959d audio: Feed output devices immediately, instead of waiting upfront.
48d4104ec pulseaudio: Fixed typo in commented-out debug logging.
8cb303126 wayland: Fix global mouse position retrieval
d6f137b2b Added a note to tag the wiki when doing feature releases
7f927de1f x11: remove 'args' and 'ret' from SDL_X11_SYM macro
b6ca03611 Fixed mixed trigger and body rumble for Xbox controllers on Windows
c3a3a11db keyboard: Don't check text input on a null window
035d9179a WIN_SetWindowProgressState(): Unsupported parameter error message
c217663fb SDL_SetWindowProgressState(): Add parameter validation check for `state`
3fa1bd81f Fixed previous commit renaming {add,remove}AudioDevice to native{Add,Remove}AudioDevice
b8381b3a2 Sync SDL3 wiki -> header
fa0a86409 Additions to progress bar comments
721476033 SDL_SetWindowProgressValue(): Move value clamp from `WIN_SetWindowProgressValue()` to `SDL_SetWindowProgressValue()`
69ad66b01 Fixed error messages in GetTaskbarList()
a3be7a137 WIN_SetWindowProgressValue(): Fix value clamp
017783835 Native functions renamed: {add,remove}AudioDevice to native{Add,Remove}AudioDevice
6e875397f Proguard: remove onNativePen
027df89ed wayland: Scale accelerated relative pointer coordinates with emulated resolutions
f52f982b1 chore: rename integer mode field names
8407a1625 Sync SDL3 wiki -> header
7a10fcdcc Add progress bar support for Windows (#12530)
6b13d6910 Improve move/resize visual smoothness on Windows
4fcef9074 audio: hold floating point exceptions when using neon
b493e29a8 x11: Fix backwards _NET_WM_SYNC_REQUEST init check
2fbb58329 SDL_ClaimWindowForGPUDevice() should fail for transparent windows
bde49abdb GPU: Support swapchain buffer transparency in Vulkan
79081a178 cocoa: Fix zoom check when leaving fullscreen
03cdd297e video: Fix boolean logic for getting the pending window position
fbdb63797 Fixed build when virtual joysticks are disabled
758eb256b Fixed DebugLogRenderCommands() output
4ceb02434 We need to rebind D3D12 resources after updating them
3538abfb8 Revert "Don't update a texture twice in the same batch on D3D12"
0681d0881 Don't update a texture twice in the same batch on D3D12
ac5b2b610 Don't send text event while ctrl/alt is held on X11/Wayland
365b7837c add private definitions to SDL_build_config.h.cmake
817260c73 Updates SDL_SetEventFilter code snippet to SDL3
3fd61b053 Updated for SDL style
581b61429 Emscripten: Support Custom Message Boxes (#12583)
54f5b7333 emscripten: Don't use legacy JS library functions for assertions
03a53ce0d Always show the on-screen keyboard on Steam Deck
8caeaaacd A Steam Controller might be generating keyboard input
cbb83be89 Show the on-screen keyboard if we don't have active keyboard input
67b4c3a15 Sync SDL3 wiki -> header
10072bb07 asyncio: SDL_LoadFileAsync was not null-terminating the file data.
85435d5a1 SDL_audio.h: Fixed typos in docs.
3ed61f203 Fixed applications that integrate Qt with SDL joystick support
de60a5f39 Revert "Make native functions be public otherwise it fails at run-time."
fe024b8fe Fixed typo in build.gradle
10fae8c34 Fixed Android build warnings
bf7b9b020 Fixed gradle deprecation warnings
ac2870250 Use the android-21 SDK as documented in README-android.md
476e7e54c Don't create surfaces with invalid pixel formats
6f456da63 GPU: Request sampleRateShading feature on Vulkan
4fd4d89b6 Make native functions be public otherwise it fails at run-time. (they are public such as the one in SDLActivity)
f2ed5c7a1 Fix illegal calls to DwmGetWindowAttribute()
96bf12444 Windows allows windows to be resized to zero height.
47b0c7547 Make sure we're getting called for the correct window
3415bc920 Fixed crash if a window couldn't be created on Windows
07e4dea69 The posix4 library has been merged into the libc library
9820f655d android: reduce visiblity as much as possible
c696e9318 GPU Vulkan: Fix render pass race (#12587)
7b93a744c time: Fix compilation on Solaris
14deef997 emscripten: Fix undefined behavior in opengles2 renderer
5283f7374 storage: Declare a private bootstrap for NDA user storage
8b924df48 Use an autoreleasepool in Cocoa_GetDisplayUsableBounds()
82335fd0e Fixed building with SDL_LEAN_AND_MEAN
a551c2a6d Fix Vulkan error check
5985f0a32 Fixed infinite recursion in SDL_IsGamepad()
6d0fb0a2e gpu: Fix MTLLibrary dispatch data destructor
3e5664a5b Fix return type in SDL_CreateGPURenderState
4fc9509ab Fixed raw input device GUIDs changing randomly between runs
0bd70684b GPU: Fix Vulkan backend never checking deallocations (#12567)
715301cef Fixed crash if info->path is NULL
f5eea7efa remove status message for SDL_STATIC_PIC PIC is controlled through CMAKE_POSITION_INDEPENDENT_CODE and not by an SDL option
35c03774f [SDL3] Adding input and FFB support for Logitech G29(PS3) on hidapi (#11598)
d66483dfc video: Send pending coordinates for moved, hidden windows
b9504f247 opengl: pixelart fragment shader uses GLSL version 1.30
05531c5f4 release: use NDK r21e for building Android release artifact
18185e30e Remove breaks under return
80ff0f45f Move default
3b58ad9d4 Add breaks and defaults to switch statements
8b6e9936e Missed a bracket
36ec4cd39 Align spacing
3b90ce499 Fix spacing; tabs to 4 spaces
60857935c Add preliminary joystick support for snake example
aad1e3516 mouse: Allow use of integer coordinates with fractional wheel events
501e71f25 Added unaligned version of SDL_ConvertPixels_SwapNV_std()
ad9f9af4e Removed accidentally enabled debug code
efe122be4 Removed width/height parameters from LoadTexture()
dcb97a5f4 Set a default shader entry point
1a2fccc56 hints: The auto mode switching hint is for 3.4.0
285fa671a Sync SDL3 wiki -> header
0bfe0497f video: Add a hint to disable auto mode switching if an exclusive fullscreen window moves between displays
58f6e9c27 Fix trailing doc comments
f15832c68 Sync SDL3 wiki -> header
17b84dbcf emscripten: add window properties for canvas ID and keyboard element (#12509)
ffe69fc35 Fixed SDL_GPUTextureSupportsSampleCount() documentation
e671bc265 Sync SDL3 wiki -> header
02faa8f75 Rename SDL_SetGPURenderStateFragmentUniformData() to SDL_SetGPURenderStateFragmentUniforms()
96194347b Added an example of fullscreen shader effects with the GPU renderer
2aee105b4 Added support for custom shaders with the GPU renderer
eb56c8af8 Sync SDL3 wiki -> header
1ae4ef65e Fixed incorrect assert
3e9e22f17 Added SDL_SCALEMODE_PIXELART
853375da6 Removed texture_size from the GPU renderer vertex shader
28ec461eb Organize the GPU renderer draw code
af0420d89 Switched GPU renderer shaders to shadercross and HLSL
c318b1f92 SDL_mutex.h: Fixed code example.
0e29c6295 gpu: Clean up unused code in Vulkan and D3D12 drivers
71c4de190 Sync SDL3 wiki -> header
512d97eab cocoa: Set the internal window data before calling methods that may result in referencing the internal data
5e951a230 windows: Fix WIN_SetWindowAlwaysOnTop causing owner window z-order changes when child windows are created or change top-level status
50a397bb4 Removed help for obsolete (and removed) command line option
3235a4eb4 Initialize the padding of aligned allocations to zero
efaafd766 VITA: Remove unused/duplicate headers
7746a9656 Fixup the mingw readme cmakelists
2ce3dfdf1 Fixed Nintendo controller face button layout under Steam
be6ed6e9c Fixed sscanf("026", "%1x%1x%1x", &r, &g, &b)
24339524c Use sized types when fixing undefined behavior
f1d16e9b4 avoid UB (left shift of negative number) in SDL_windowsevents.c
9fcca8351 gpu: Validate that CopyGPUTextureToTexture formats match
f2866418d wayland: Fix enum/boolean comparison and assignment
597bfe6b2 mouse: Add internal integer mouse mode hint for sdl2-compat
65cd2256c emscripten: Fix handling of special HTML targets
5d804a39d Implement SDL_GetSystemRAM and SDL_GetNumLogicalCPUCores for the 3ds (#12494)
99336ea37 Fixed memory leak in memory leak tracking
0306b5a86 Fix n3ds/SDL_syssem.c:SDL_SignalSemaphore (libsdl-org/SDL#12411)
3353b92a9 Fixed pen events on iOS after reinitializing SDL
ad2584813 cocoa: Ignore both clicks and motion on tooltip windows
fe245c6e0 x11: Always synthesize size events for external windows
84d047cc1 wayland: Rollback the round trip when reading data offers
fc3510785 Sync SDL3 wiki -> header
d631a3add Add a link to docs/INTRO-mingw.md
04b4577b5 Added MinGW Intro readme, touched up CMake and Visual Studio readmes. (#12485)
b99ff00a9 Removed logic forcing vsync on if setting it off fails
55695d372 Sync SDL3 wiki -> header
9c7c11f25 wayland: Roundtrip when receiving data offers
c4be7f77a wayland: Add additional MIME types for text drag & drop
e20e27e1f Added SIMD blitters for 8888 -> 8888 format conversion
4c82b5843 Added support for SDL_PIXELFORMAT_MJPG to SDL_DuplicateSurface()
cb099ebd4 Make texture scale mode a part of the 2D renderer draw state
6e2d3c9b5 x11: Enable legacy synchronization for external window resize and move events
bdde07468 Sync SDL3 wiki -> header
49af57694 Disable XTest by default
794ff283e Added support for using XTest to warp the mouse
fae324dac Update XSync code to match SDL3 conventions
f01bcaeb1 Sync SDL3 wiki -> header
fe9bdcf50 Added SDL_HINT_VIDEO_X11_EXTERNAL_WINDOW_INPUT
9f557941f Sync SDL3 wiki -> header
8f40dad46 Document the thread safety of SDL surface functions
aef240b2e Fixed continuous logging if returning to desktop mode fails on X11
e9632c83c Handle XWayland not sending display disconnected events
ca9bc6b16 Revert "Ignore BadRROutput errors from XRRGetOutputInfo()"
0c8ddc1f0 Ignore BadRROutput errors from XRRGetOutputInfo()
80ae3a751 Fixed crash when restoring the desktop mode on macOS
5f07347e4 Fixed crash unplugging a HIDAPI controller
82552e5b7 Make SDL_RegisterEvents() thread-safe
9f9a44282 video: Synthesize fullscreen related moves if the driver does not.
e7abbf158 x11: Synthesize fullscreen size events on Openbox
5d20bbf34 Presenting while drawing to a render target should fail.
debbe1cf7 Fix for Message Box failing to init on X11 (#12455)
4bb46e93c Fixed clip rect when logical presentation is enabled
7df0ffd43 Sync SDL3 wiki -> header
7c29c8b26 Added fullscreen_active to better track fullscreen state
3b9f0dff1 Use _this pointer to reference the video device
0ccf272ee Check the display device before dereferencing
6c347cbf3 video: Handle Cocoa desktop mode switch inhibition in the video layer
24ec2ed78 Don't save temporary mode changes to the desktop mode
d57aa6f7a pipewire: Don't require pw_check_library_version() with Pipewire < 0.3.75
113eb6f01 gpu: Add BC2_RGBA_UNORM_SRGB to GetBlockWidth/Height functions
2c7c3d4d7 Only use VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR on Android
ca3c5fd40 fix build:  s/SDL_DetectSandbox/SDL_GetSandbox/
eac63b473 Add the definition for DBUS_TYPE_UNIX_FD to SDL_dbus.h
16f12c0d5 Implement the XDP Camera portal
c3b415641 Sync SDL3 wiki -> header
2a0223487 Sync SDL3 wiki -> header
1a7c20698 Save and restore error messages when rolling back after failed init
2c46c3d5b Updated dynamic API for new functions
5373271a1 forbid transform change while relative mode active
428f0dcd6 add SDL_SetRelativeMouseTransform
67127afe3 Fix from #12118
e25ee2246 Added tiled 9-grid texture rendering function
954675b32 Sync SDL3 wiki -> header
44bca81fd Change default texture scale mode per renderer
b0d2a4f35 gpu: Fix Z offset for D3D12 realigned 3D texture uploads
b69201dae cocoa: Don't overwrite the desktop mode when changing the fullscreen mode
078d737a2 cocoa: Run pending events to completion
b0df1cbbe Updated to version 3.3.0 for development
65864190c Added testpen to the Xcode test project
292e43174 Updated to version 3.2.6 for release
f0cb78e08 Handle XCreateIC() failing when composition UI is enabled
55484ef02 Moved WIN_UpdateMouseCapture() to be with the other mouse functions
020664bd1 Update mouse button state when re-entering a window
b836ad4d4 Fix a root signature mismatch for the D3D12 renderer
a88105784 camera: Delete some failure code that should have been removed before.
f868408a3 Ceil the audio resampling rate to avoid over-estimating output samples.
cbdc93b17 cmake: make sure a SDL3 library is present when not using COMPONENTs
8a7beca12 camera: clear the spec when closing, so re-opening can probe again
ee5f5c917 Sync SDL3 wiki -> header
6e4193b74 Note that the file names are UTF-8 encoded
60c65f9fa SDL_camera.c: fix failure-return in SDL_PrepareCameraSurfaces().
b8c2bc143 Added build dependencies for Arch Linux
7ab1412e2 Sync SDL3 wiki -> header
725af6ad1 camera: Fixed surface formats, etc, for Emscripten backend.
ef23ebfb5 Fixed the cursor clip rect when toggling window borders on macOS
c68259944 GPU_d3d12: Switched the default swapchain scaling mode to none.
ea513fd47 Fixed vulkan gpu backend android orientation behaviour to just work like on iOS.
87b1c9736 Fix pen generated mouse events not having SDL_PEN_MOUSEID  (#12392)
a44107540 sysjoystick: don't leak fd on error
9a802797d SDL_pen: fix eraser check
54c7aa9c9 Sync SDL3 wiki -> header
35e8cf8ee render: allow render targets to use logical presentation.
281f0fae1 Include the VID/PID of generic keyboard/mouse devices on Windows
d09bf5681 clipboard: Cleanup coding style
edaf44767 tests: Add showing/setting the primary selection text to testclipboard
7b9036bea wayland: Don't overwrite clipboard data with the primary selection text
f7cadcba8 examples: Use SDL_GetAudioStreamQueued, not SDL_GetAudioStreamAvailable.
b3336c5a7 Match style
2b784b5bf Fix SDL_GlobDirectory
eb89d0c8c Don't put wired Switch Pro controllers into simple report mode
1ea99bc90 Early out if setting a duplicate window title
56e2955b6 Sync SDL3 wiki -> header
cc984c973 Added a mapping for the 8BitDo SN30 Pro+ controller on macOS
ba88b6aa0 Fixed reliability of initializing Switch controllers on macOS
66ecdc69a Don't update the report mode until the related hint is set
fab52b578 wayland: Ensure that color descriptions are always retrieved
9464aaa8a Change D3D12 GPU backend to respect has_depth_stencil_target
cf819ca81 Don't allow further operations on properties while we're destroying them
e01257376 Don't fixup mappings for Joy-Con controllers
34c373495 Fixed opening one Joy-Con when the other is visible but disconnected
049a7a04d Wake the main thread for main function dispatch
f0f593f04 Embed a description about Wayland clipboard instead of a link
bb748ef2d Don't cleanup clipboard in SDL_SendClipboardUpdate on Wayland
38a73a178 Sync SDL3 wiki -> header
85a302550 Set an error message if the rect passed to SDL_RenderReadPixels() is entirely outside the viewport
29df99ee3 Clarified SDL_RenderReadPixels() documentation
2f77558ba fix comment
44f1ec35c GPU: Make Vulkan transfer buffers dedicated allocs
1c2189c7c strings.h isn't available in Windows environments
ffdca343f Sync SDL3 wiki -> header
ac5fca4ae Clarify the expected usage of SDL_StorageReady()
fc365e945 Sync SDL3 wiki -> header
ad840e879 Better document that main functionality is in SDL_main.h
bb8dcf08e Sync SDL3 wiki -> header
698032531 Added support for the "%n" sscanf format specifier
e6a24fcbb fix stbi__parse_png_file() reading too much bytes (thanks @miniupnp!)
db4e6c193 Cocoa metal layers need their size updated before renderer updates
0a592b78c Sync SDL3 wiki -> header
58388e8db Add SDL_HINT_JOYSTICK_HAPTIC_AXES
db817a37f gpu: Fix forward declaration and inclusion of PrivateGPUDriver
a7bc6c5e0 gpu: initialize VkDebugUtilsLabelEXT::color
60b7faa98 gpu: Validate that reserved struct members are unset
2990d142c Map additonal Linux keycodes to SDL scancodes
a0086a5cc Add missing scancode names
35544df83 Changed PULSEAUDIO_FlushRecording() to only flush audio present when called.
deadfe0c9 Sync SDL3 wiki -> header
0815637cf vulkan build fix
ea77472d7 Document/ignore GPU features without universal support
ad11c6988 src/io/SDL_asyncio.c:SDL_AsyncIOFromFile(): Fix null-dereference warning
8bfde6755 Remove unnecessary fcitx's devel package dependency in linux doc
52af81ea1 wayland: Fix mapping borderless windows under libdecor
1a0a94b50 x11: Accommodate the borders when setting the initial window position
52e64f816 Use SDL C runtime functions in OpenVR driver
7224b4040 Fix errors when building stb_image with -DSDL_LIBC=OFF
945da099a pipewire: Fix possible deadlock when opening a device
70f657e52 ci: farewell, clang32 on msys2
e50db698e Disable all camera drivers if SDL_CAMERA_DISABLED is defined
1ddba3ad5 Replace "8BitDo Tech Ltd" with "8BitDo" in the manufacturer string
fdf72d1e4 Use the keyboard/mouse vendor if available
a811e0ef0 Added support for the 8BitDo Micro gamepad
bc85c5535 testcontroller: create window with high pixel density
75bbcbf87 Added support for Motion JPEG pipewire camera capture
5c214e5e9 testcamera: SDL_AppQuit destroys state and SDL
03e00cd34 v4l2: map SDL_PIXELFORMAT_MJPG to V4L2_PIX_FMT_MJPEG
fcd41c1d2 Check desired window area when checking zoom state
b5297de56 Add 'const' to pointer parameters
911e53dec Retain mouse focus as long as we're getting mouse events
3b8cb6228 Make it easier to enable IME debug logs
9a607e886 make start&length represent utf32 indices
9d06145d6 ci: fix type + names of intel compiler artifacts
fa380a400 Update include/SDL3/SDL_assert.h
2a1b617fb Update include/SDL3/SDL_assert.h
69e03094b fallback to defining SDL_TriggerBreakpoint as __builtin_trap in older linux arm64 environments that do not have a __has_builtin facility
c70f54e28 Remove redundant casts
2e346d716 Added 32-bit texture formats to Texture_GetBlockWidth() and Texture_GetBlockHeight()
5d776c070 Refactored SDL_CreateJoystickName() into a general SDL_CreateDeviceName()
3293eb1a1 use hidapi to get mouse/keyboard string
785584230 ci: disable precompiled headers for classic intel compiler
71d1de5d9 ci: add cppflags to CMAKE_(C|CXX)_FLAGS
28f086794 SPA_FALLTHROUGH expands to nothing when using the Intel compiler
8d3db06ff ci: GitHub is retiring Ubuntu 20.04 support
c153f83df ci: enable ccache
52ee0c105 Sync SDL3 wiki -> header
9267930fe Added a fast path for converting the same format and pitch
f24f9d3be Revert "testcamera: added support for Motion JPEG camera frames"
2e89c53eb Added support for decoding MJPG into NV12 textures
06602f4e8 Document that the pitch is the length of the image data for SDL_PIXELFORMAT_MJPG
a792434a3 Added initial MJPG support using stb_image
baf69edfc Revert "cmake: build SDL_uclibc with -fPIC"
fdf8e5a70 ci: build static loongarch libraries with -fPIC
9784414dd cmake: build SDL_uclibc with -fPIC
b48de48ef wayland: Add support for high-DPI icons
6e0264d38 x11: Use the current or last-requested window position when setting the size hint
1a38960ee Call SDL_DiscardAllCommands() for the software renderer as well
8f4c5e15f Finish any drawing when destroying a software renderer
1a853973a thread/windows: fix stack overflow in exception naming
a40b2de94 Fix SDL_emscriptenaudio.c under wasm64
523e6530a SDL_test: fix "'function': different 'const' qualifiers" warning in SDL_test_harness
9e4c657ed wayland: Fix color manager protocol string check
7500a758b Remove usages of `restrict` keyword in SDL_render.c
a7f01cd73 x11: Set the pending window position immediately after mapping
1fd626939 Renamed DreamPort to DreamPicoPort
31f9cb480 Unchecked Return Value in WIN_SuspendScreenSaver (#12316)
057c3602e Removing Double-free Issue
5c79f4cae Incorrect bfOffBits Calculation in WIN_ConvertDIBtoBMP
70d23b234 README-migration: Remove errant reference to SDL_FALSE_
6aef6ae9a AddPulseAudioDevice(): Fix use-after-free
3b4cfc11f wayland: Update copyright dates in added color manager source files
fadb261b6 wayland: Add color manager protocol support
6ef687c86 Simplified and fixed media foundation buffer handling
de12cb92d Fixed crash at shutdown with new hashtable code
a51316890 Fixed Memory/Resource Leaks (#12304)
045a4492f test/testaudio.c: Fix use-after-free warning
da2460f9e test/testautomation_audio.c: Free variables before returning
7ea0ffb74 update
06eb10c51 haiku: check if the returned _SDL_GLView is null or not
dea99e54f Sync SDL3 wiki -> header
175494359 Fixed camera frame acquisition on Windows 7
e3d9f1172 Remove the reference to the thread when it is detached
831fc7092 test/testautomation_intrinsics.c: Free variables before returning
c6a3b5b6e src/test/SDL_test_harness.c: Free variables before returning
84a236c92 hashtable: Redesign the hashtable API.
4a9b57919 joystick: remove dead udev code
ba4525694 Sync SDL3 wiki -> header
fd4e6d294 Don't render 0 sized texture rectangles
6f3b14a6d audio/video: Fix uninitialized field warnings
5b98c4a52 Fixed motion events with TOOL_TYPE_UNKNOWN
8a648dfd9 emscripten: Fixed unregistering of key event handlers
c16b7bcb7 SDL_Get*Driver() functions: Set error message on failure
ed0a03e9b Fixed Cursor Icon State for SYSTEM_CURSOR_PROGRESS
5dce8c748 SDL_GetRelativeMouseState(): Get relative mouse position also when relative mouse mode is disabled
cedf53bbc Sync SDL3 wiki -> header
3de975884 Document the "trace" log priority
b9d018f2a Fixed wayland cursor use-after-free at shutdown
041894a52 Sync SDL3 wiki -> header
3be67ced6 Fix GTK tray icon without menu + lifetime
1354affd2 haiku: Fixed keyboard input.
d2b7a8465 Fixed SDL_GetNumGamepadTouchpads() returning 1 for a NULL gamepad
ca29304ce Fixed continually resetting keyboard and mouse readings
f67c64464 Fixed reporting hat positions for GameInput controllers
1b35ca9c3 Refactored GameInput initialization
706de78a9 audio/video: Skip preferred drivers when loading a driver on demand
715c18739 Added an internal hint "SDL_VIDEO_X11_XINPUT2" for sdl2-compat
ce69e9898 Copy SDL2_SYSWMEVENT data into temporary memory for the event
55fd205ba Add missing integer texture formats to SDL_GPUTextureFormatTexelBlockSize (#12151)
e6029401d Check for non-NULL icon for trays on Unix
b03332b68 updated bytepusher demo to be C++ compatible
5dd249264 updated the snake demo to be C++ compatible
78f816d74 x11: Apply the modifier state from key events
99cf16287 Fixed the name of SDL_SYSWMEVENT
6c3797152 Removed the mapping for the Sanwa Supply JY-P76USV
9b18e8438 [GPU] D3D12 backend debug markers were being cut
0bce19cf1 The 10-bit texture formats have alpha on Direct3D
3cfa476d3 Added support for SDL_PIXELFORMAT_ABGR8888 textures
5ccee7719 testcamera: added support for Motion JPEG camera frames
cf41ccc6c Removed stb_image.h from SDL
9308404e9 Removed functions not used by SDL
5e31bbf05 Remove functions not used when STBI_NO_PNG and STBI_NO_HDR are defined
84b0c13c4 Added support for Motion JPEG camera capture
3bc53b9ad wayland: Don't set libdecor frame visibility before the first commit
c03258626 wayland: Scale-to-display mode requires both viewports and xdg-output for proper functionality
b63d3afc1 Sync SDL3 wiki -> header
0bc1f8712 Added SDL_PROP_SURFACE_HOTSPOT_X_NUMBER and SDL_PROP_SURFACE_HOTSPOT_Y_NUMBER
da464e9e5 win32: Keep the window on the last maximized display when leaving fullscreen
bf01cc8ce Renamed "Dreamcast Controller Usb" to "DreamPort"
ecd089bb6 Don't return short waits from SDL_IOReady()
4fd0b2a85 Fix #12142 - the problem was if the size of the vertex buffer was exceeded, the currentVertexBuffer would be reset to zero and thus we'd leave it pointing to an in-use VB that would get overwritten on the next present before the vkQueueSubmit occurred.
f6126e9ea Centered joystick axis values should be 0
d35bef64e pipewire: Ensure that the correct struct is used for enumeration APIs
9bd6d3647 Added SDL_DEPS_SHARED option to control default dynamic loading of shared libraries (#12215)
78721d720 joystick: Fix PS5 player LED hint change callback name
7aba6c4c7 Proper Resource Cleanup in WIN_UpdateWindowShape
e29ebb9f1 Update geometry renderer example
ca9a044b3 Memory Leak in WIN_CreateHCursor When CreateColorBitmap Fails
69d28027a Fix for 500ms hang after user clicks on the title bar, but before moving (#12217)
a0b6c0fd8 x11: Don't wait for events when the connection errored out (#8392)
864bb65ce Removed crc
006605c3b Corrected alphabetical order
dc035c5ca Added mapping for Dreamcast Controller USB
5d1bbd9b2 Fix SSE 4.2 test
7c12c63f6 Add generic SDL_syscond to N3DS threads source list
2ced6b09f Delete src/thread/n3ds/SDL_syscond.c
7af17f874 Sync SDL3 wiki -> header
982094c85 Updated to version 3.2.5 for development
b5c3eab6b Updated to version 3.2.4 for release
48c00bfe6 Fixed creating a window with both software and hardware renderer attached
3c6e6645f Sync SDL3 wiki -> header
ad8429f1b Let the renderer always see window events
c59ac249d Revert "wayland: Don't send size events while the window is hidden"
6cb3d37a2 Sync SDL3 wiki -> header
80653a42c Remove non-ASCII character from public header SDL_hints.h
a646dc89e Note that SDL_GUIDToString() and SDL_StringToGUID() are thread-safe.
8730f6a56 dynapi: Don't use SDL_getenv; it might malloc before the app sets an allocator.
c9341489c Fix #12197: Force set /utf-8 for msvc compilers (#12198)
8397e1fcc Fix up SDL2 style mappings for HIDAPI controllers
7691cabe4 Removed incorrect HIDAPI gamepad mapping
86691d325 GPU: Remove stencil bit from sampler aspect mask on Vulkan (#12196)
6782cfe2c Don't use the HIDAPI driver for Thrustmaster wheels
1c0e2b7f9 SDL_OpenHapticFromJoystick() returns a valid haptic object
c4550d906 testcontroller: show the gamepad device type
5ad033768 Sync SDL3 wiki -> header
68dabd48c SDL_GetTrayEntries(): Rename parameter `size` to `count`
b99e19c0a Fixed potential double-free
8ba8cca69 Fixed memory leak looking up pen tool names
2cd2834df Fixed memory leak in the pen cleanup
c4c185283 dbus: fix spurious leak reports with SDL_SHUTDOWN_DBUS_ON_QUIT=0
691a6133d Remove #undef __3DS__
33c0654d5 Allow OpenGL initialization on XB1 and XSX.
eb5ab2203 Check nullptr before calling the windows message hook for WM_ENTERSIZEMOVE and WM_ENTERMENULOOP
e7f326a84 bmp: Removed debug printf call.
61b1c25ee x11: SDL_SetWindowPosition on an unmapped window will do the actual move later.
f1b3523c6 Remove redundant parenthesis in SDL_MUSTLOCK macro
8527d042b Remove const from parameter of inline function SDL_RectsEqualEpsilon()
07c22da46 Fixed decoding 4-bit RLE encoded BMP files
8ccf85c59 Formatting spaces around pointer symbol.
94409d350 Added Switch Input-only controller entries for Zuiki MasCon controller for Nintendo Switch.
a8a2874ef Added distinct VID/PIDs for the PS4 vs Xbox eSwap Pro controllers
84bc2abda Corrected the entry for the PXN V900 racing wheel
eac07bda0 Sort the controller lists by VID/PID
6243a0653 Call the windows message hook for WM_ENTERSIZEMOVE and WM_ENTERMENULOOP
ec959a434 Sync SDL3 wiki -> header
8e51b2468 Renamed SDL_SoftStretch() to SDL_StretchSurface()
f40ef62a2 Sync SDL3 wiki -> header
614ae843a Sync SDL3 wiki -> header
8848f8656 Corrected the version where SDL_SoftStretch() was added
a98a4b8a6 Re-added SDL_SoftStretch() to the API
842f85da0 Sync SDL3 wiki -> header
c06172dc1 Track mouse button state by real mouse ID
73a814358 timer, windows: allow building high resolution code with old SDKs.
be991239d Updated to version 3.2.3 for development
2fa1e7258 Updated to version 3.2.2 for release
c92276279 proposed fix: set curr_src.h is to bottom_height before drawing bottom edges / corners in SDL_RenderTexture9Grid, to avoid issue where inadvertently using top height if the npatch existed on a larger texture than the drawn edge would cause too many pixels to be included in the bottom part of the render.
235022fe2 Fixed error C2059: syntax error: '}'
dc13a6ae9 SDL_SaveBMP_IO: Write bitmap header v5 values
fe6bd8e9b Sync SDL3 wiki -> header
bc3264130 Fixed mouse motion events while the mouse is grabbed
69d361dee Ignore SDL_HINT_RENDER_DRIVER set to software when creating a window surface
70a239210 GPU: Describe "readonly storage" images as sampled images on Vulkan backend (#12149)
4c6d949e6 wayland: make sure the desktop mode is in the fullscreen mode list
ab5cb707a Fixed enabling call logging
16f8122a0 Keep the simplest mapping of scancode + modifer for a given keycode
6beda3421 do not build camera drivers if camera support is disabled
0825d07a4 wayland: Don't send size events while the window is hidden
8e766c925 GPU: Resource binding state shadowing (#12138)
43924ec87 Sync SDL3 wiki -> header
8c2682a21 Sync SDL3 wiki -> header
e4fcc7b6e gpu/vulkan/SDL_gpu_vulkan.c: fix type redefinition error
14edb21ae check for backslashes as well as the forward slash
50b8c6cdf Sync SDL3 wiki -> header
943c4abcb pipewire: Report correct device default formats instead of hardcoding Float32.
943579a54 Fix inverted pen Y tilt on macOS and add tilt display to example - Negate tilt.y in Cocoa pen handling to correct inverted Y tilt axis - Update drawing example to display X/Y tilt values for visualization - see 0f128fd7c5/src/plugins/platforms/cocoa/qnsview_tablet.mm (L63) - see https://source.chromium.org/chromium/chromium/src/+/main:components/input/web_input_event_builders_mac.mm;drc=0af5ffa1e4cc4cc4f818725f8fee93ec57855e4b;l=421
31364477f Rename parameter of type SDL_CameraID from devid to instance_id
36758d70c Rename parameters of type SDL_AudioDeviceID from dev to devid
2abc7735a Free XIDeviceInfo in X11_MaybeAddPenByDeviceID
8298d60e4 Dynamically load CreateWaitableTimerExW and SetWaitableTimerEx
409f3ade8 Removed SDF test program
4176e188b Enable testgles2 on all platforms
cf249b0cb fix -Wformat problem in 32 bit builds
11dbff246 Sync SDL3 wiki -> header
ccd5fcef1 audio: Fix potential NULL dereference in AudioStream gain adjustment.
48f555065 wayland: Don't send keyboard and mouse added events during initialization
2a946e91b android: updated release build SDK to match documented requirements
44edbf713 Use templates for the package support files
1c008d8ed Change DBUS introspection timer from INFINITE -> DEFAULT when introspecting available dialog services
c21bc48a7 Fix undefined behavior in SDL_windowsmouse.c
1c7cc6028 Skip IsRegularFileOrPipe() check on Emscripten
8f958953f audio: Fix audio stream gain going wrong in certain scenarios.
3b3af7105 audio: Fix a minor code style thing.
725ee7665 Documentation: fixed typos around floats precision
6f098a920 Avoid a crash when a tray without a menu is clicked on Windows.
09f900f66 audio: Remove resampling limits.
5f8e0ebf5 Fixed memory leak at shutdown
913e0a5e5 SDL_migration.cocci: handle more renamed event fields
628130ec8 SDL_migration.cocci: fix incorrect SDL3 API name
fa8c0f055 Sync SDL3 wiki -> header
17c4bdd75 Sync SDL3 wiki -> header
ad8a09000 Sync SDL3 wiki -> header
8df17c97d GPU: Add notes about shader resource requirements to documentation
303fd5ed5 release: rename resources/cmake -> resources/CMake in dmg
fdf33f904 xcode+cmake: Use SDL3.framework/SDL3 as IMPORTED_LOCATION
cb3d6dc46 .wikiheaders-options: Removed wikipreamble setting.
84c4ff2f1 Sync SDL3 wiki -> header
2e381a717 Fix possible integer overflow of size + 1
129ebc77b Sync SDL3 wiki -> header
a336b62d8 Remove newlines from error messages
d0ae09368 x11: Don't force position windows with an undefined position
72a3eae0d Fix buffer overrun in ConvertAudio with different src/dst channel count
983cfe8b1 Remove even more newlines from log messages
718034f5f Remove newlines from log messages
17625e20d Removed redundant step in Visual Studio instructions
c806c271c Tweaked emscripten introduction
74536243d Emscripten works well using the normal CMake workflow
98c447802 ci: bump to NetBSD 10.1
a437dbc7e Improve log documentation
1c21a72bd Sync SDL3 wiki -> header
73fc2b03a Copy pen handling code from `SDLSurface` to `SDLControllerManager`
6f3d0b3cd Fixed build when using an older Xcode SDK
cb3cc2880 emscripten: pass --no-sandbox to the chrome web driver
df3cfbc79 Sync SDL3 wiki -> header
799093799 GPU: Note buffer alignment requirements
5bf077f1f Sync SDL3 wiki -> header
5d6a78045 Sync SDL3 wiki -> header
77b520e93 Updated to version 3.2.1 for development
bb3c5b4f3 Fix multiple occurences of typo "an simple" to "a simple"
efa6e7aec android: add style to test apk's
535d80bad Include the README and related files in the SDL framework
ed2920afe All SDL 3.0 release symbols are at version 3.2.0
7a5604cf0 Sync SDL3 wiki -> headers.
7e130e27b fnsince.pl: Remove prerelease version tapdancing.
b775135b4 Removed temporary debug code
a52fc209b Updated to version 3.2.0 for release
f16c67115 Sync SDL3 wiki -> header
90bda6548 video: Don't let SDL_CreateWindowTexture use the software renderer.
c45c4a5e5 render: SDL_HINT_RENDER_DRIVER now accepts a comma-separated list.
670a7d812 Sync SDL3 wiki -> header
8a67896d9 docs: Note the preferred function for getting the content scale of a window
852686856 dialog: cleaned up D-Bus portal implementation
071bebf23 coreaudio: Add a note about why this uses 3 buffers instead of 2.
c0a9d220b vulkan: Fixes for swapchain resize crash on X11.
ea9880b76 Sync SDL3 wiki -> header
bcf7ead6e documentation typo: SFLOAT -> FLOAT
6d5815db5 vulkan: Deal with VK_ERROR_OUT_OF_DATE_KHR returns from vkAcquireNextImageKHR.
6b7dad7d8 vulkan: move temporary pointer to its own field to prevent a bad dereference.
3e530c6db cmake: remove superfluous cmake_minimum_required
7bff36e4b ci: add ubuntu arm job
37140aa9f cmake: expand libunwind
abe6d9db9 Automatically detect SDL_main_private.h
10c9fbf41 Use proper polar direction when creating FF_RUMBLE effect
c6c746970 Translate conditional effect direction instead of hardcoding it to 0
b476695e6 Call the windows message hook while inside a modal message loop
b6d0bc043 coreaudio: Use three buffers for the audioqueue, not two.
aa10e51c7 audio: Added some minor missing comments in struct SDL_AudioDevice.
10a5b388d win32: Retain the WS_MAXIMIZEDBOX style while in fullscreen
6449339ae win32: Restore the base size of a window when leaving fullscreen
075c0337c Removed debug print statement
a036aeda3 The Vulkan renderer doesn't actually support RGB texture formats
9b454a762 Revert "testautomation: don't validate alpha values on XRGB formats"
dcadd23ba render: Prevent division by zero if logical presentation is 0 pixels.
adb91fd3d process: Don't use vfork() on Apple platforms.
819628c6b testautomation: Remove Win32 borderless resizable hint
759e01bd6 testautomation: don't validate alpha values on XRGB formats
c698c61f0 renderer: initialize the surface colorspace correctly
c975f77b0 Update joysticks and so forth during live resize
362f96a6c testcontroller: use SDL_MAIN_USE_CALLBACKS so updates happen during live resizing
f8040b2e0 Use UIKeyboardTypeDecimalPad for number fields on iOS
90b2e2527 include: Added a tiny bit to SDL_sensor.h's category documentation.
2be749b23 include: More category documentation.
642262e30 cocoa: Fix mousegrab when going fullscreen.
d5766bc4b include: More category documentation.
b809da52f assert: Try using __builtin_trap() for SDL_TriggerBreakpoint().
c4c0bfdfb Sync SDL3 wiki -> header
7133969e3 Feature add hint to remap option as alt key (#12021)
53a535029 Sync SDL3 wiki -> header
5f2dd5f04 tray: fixed multi-threading issues with GTk implementation
dfdc12026 tray: document thread-safety
d4cda5105 tray: renamed SDL_HasNoActiveTrays() to SDL_HasActiveTrays()
a974888aa tray: fixed icon colors on Windows
7570ab106 tray: improved error checking
b716eeefe testtray: minor cleanup
3afd1e7ea windows: use WIN_UTF8ToStringW() for dialog titles
78023500f Sync SDL3 wiki -> header
34c12d0db include: Add category documentation to SDL_timer.h.
b088e8919 Sync SDL3 wiki -> header
0851322fb include: Add category documentation to SDL_power.h.
43b54b3d7 Fix Windows dialog folder titles
32965b4bf pen: Send virtual mouse motion without a button press when a pen is hovering.
5da9d4ecc cocoa: Slightly better display hotplugging detection.
19f42094b Fix Windows fie dialog args freeing
721fc7de0 Correct spacing of pointers ('a* b;' -> 'a *b;')
cd269730e Fix Windows dialog memory management
049a8f0e5 Use SDL_calloc() instead of SDL_malloc()
354d2c390 Initialize invalid parent_{tray,entry} to NULL
b79ada6aa Windows trays: Fix ParentEntry & Enabling
ba95c54f9 macOS: get the correct display name on macOS 10.15+
42e0fb10f wayland: Set the mouse state before calling the hit test callback
cd0db8d35 Added Linux evdev mappings for the Wireless HORIPAD For Steam
1d7a681e4 Revert "emscripten: resizable windows take whole page, resize with browser window."
e054f3c08 Sync SDL3 wiki -> header
75317dae5 include: Added category docs for SDL_mouse.h
c7d1fd90e Added support for the 8BitDo Ultimate 2C Wireless in Bluetooth mode
dbe3baeb0 release: document using the xcframework with CMake
ad3c7b92f xcode+cmake: use SDL3.framework folder as IMPORTED_LOCATION
0401b07ee Fixed typo
08e74d29b Fixed typo
923123a52 emscripten: Let SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT accept "#none"
c603a9c94 Moved flag documentation
90b7174a7 Respect the SDL_BORDERLESS_RESIZABLE_STYLE hint, but default it to true.
6a72d32d4 emscripten: Let SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT accept "".
f3a39074b windows: use WS_THICKFRAME style on borderless windows.
842f6dc40 Fixed wrong type of `phase` (#12014)
b95989d14 Fixed sine wave distortion over time.
010f27dc7 storage: enumerate and glob on storage can accept a NULL path.
a6a8598b9 storage: deal with paths with Windows '\\' path separators appended.
7c6adc1ca gpu renderer: removed unused sampler slots
feeea6a77 Sync SDL3 wiki -> headers.
e9f7f11f1 fnsince.pl: Fix script once bump to 3.1.10 exposed a bug.
d2fc394a2 Sync SDL3 wiki -> header
d317fc9c0 emscripten: resizable windows take whole page, resize with browser window.
ee469c6af Sync SDL3 wiki -> header
d4d22dd8d GPU: Add remarks about point topology
59ea078ee x11: check to see if displays moved when connected/disconnected
1848ce680 win32: Use the window coordinates to get the monitor when de-minimizing a maximized window
656c519cc Fixed warning C6313: Incorrect operator. Use an equality test to check for zero-valued flags.
9ed96f392 Sync SDL3 wiki -> header
ae8df1dcb Note that the primary monitor isn't always at 0,0
4b429b9fa Updated README-platforms.md
616ae9906 Removed README-git.md
c2dac95f5 Revert "Add CategoryAPICategory to the complete API index"
dd4f5df82 release: support android-X-ext-Y directories
cdc5483cf Vita: Fix off-by-one error for synthetic mouse events
07a5c144c Sync SDL3 wiki -> header
eb168e410 Updated to version 3.1.11 for development
b96bb152c wayland: Don't redundantly set the border state when showing a window
5a564a718 wayland: Add a dummy function for the libdecor dismiss popup callback
9f6eeb109 wayland: Set the border state before the initial configure
274bc95df Sync SDL3 wiki -> header
07f7c4046 Sync SDL3 wiki -> header
22d8e7353 include: filled in category documentation for SDL_messagebox.h.
21a42d2b0 Add CategoryAPICategory to the complete API index
1006236aa ci: add summary to release.yml
326ce9bb8 gpu: D3D12 buildfix for Xbox
c95b842b3 video: Xbox does not use CreateIconFromSurface
d8e1ad0eb release: skip extended Android SDK versions
7ee2ab383 wayland: Fix return value check from int-to-bool conversion
1dd8fadca Updated to version 3.1.10 for the release candidate
9225a421b Sync SDL3 wiki -> header
3ffb1a8cb storage: generic title storage allows override paths without '/' appended.
874c07f8d storage: Don't allow "." and ".." paths, enforce '/' dir separators.
67664a042 testfilesystem: test some Storage APIs, too.
eb793dede filesystem: SDL_GetCurrentDirectory() should add a path separator at the end.
87e1b0eb8 filesystem: SDL_EnumerateDirectory() gives dirs with path seperators appended.
e98ee9bb0 Adjust testgl.c to test gl_release_behavior
3424ec948 video: SDL_GL_GetAttribute gets correct SDL_GL_CONTEXT_RELEASE_BEHAVIOR value.
05877f2ce cmake: Add the IoRing async i/o code to the Windows build.
4d63a2b88 io: Renamed src/file to src/io
ea642fe9f cocoa: clear mouse focus based on NSEventTypeMouseExited events (#11991)
5f4696ce6 Updating documentation for the 3.2.0 release
2c7b7d1d3 Keep the lifecycle observer active while there are windows active
355f69ebf GPU: Ensure thread safety of Vulkan resource creation
c9d602307 cocoa: Only process hit tests on left clicks
dd0bdc256 win32: Pass through non-left mouse button presses when over draggable areas
84d35587e filesystem: SDL_SYS_EnumerateDirectory inexplicably takes the same arg twice.
fc9b2478d windows: don't set focus click pending if SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH is set
18d21b36f windows: use the initial rect to anchor fixed aspect ratio resizing
199547192 cocoa: fixed resizing windows with fixed aspect ratio
67382e9c8 Fixed detection of function keys on Emscripten
23410debf SDL_GetKeyboardNameForID(): Set an error message for invalid keyboard IDs
8ce176b59 SDL_GetMouseNameForID(): Set an error message for invalid mouse IDs.
51fa076fd Don't send normal keyboard events if no application window has focus
a446381ea Tooltips and unfocusable windows can't become main windows
ebb24eedc mouse: Clean up virtual touch devices as appropriate.
dabc93a63 pen: Send virtual mouse and touch events for pen input.
169c8d514 Fix incorrect hotspot calculation for cursor positioning
8e9c44bc3 Fixed accidental removal of optional delegate interface check
4dd585fb6 coreaudio: convert MPEG channel layout to WAVE channel layout
81e57147f Child windows shouldn't take focus if the parent window is in relative mouse mode
3bea84531 Sync SDL3 wiki -> header
9ed23a4b7 Updated SDL_SetEventFilter() documentation
e19a56f4d Don't send fake key events while processing real ones on Android
1ab61635a Use SDL_Log() for keyboard debugging.
29c684c62 Removed debug logging
0eaa6197c Removed unnecessary __builtin_available check
ffe194c52 Fixed build when SDL_JOYSTICK_MFI isn't enabled
a4547fe77 Updated weak framework dependencies for new deployment targets
49dd24e19 Fixed potentially overlapping memcpy() to use memmove()
191a6417d events: use SDL_memmove instead of SDL_memcpy for overlapping memory
bf793bf43 Sync SDL3 wiki -> header
9e60a8994 audio: Allow streams to change the device-side channels maps.
b2793a2ce Removed obsolete Raspberry Pi documentation
04e3b6770 Removed outdated Visual Studio instructions
a41f93bd1 Added https://github.com/Ravbug/sdl3-sample as a more complete Android example
5ca735b40 Only use WAVE surround sound channel layouts on macOS 10.15+
cdde6dd7b Bumped deployment requirements for Apple platforms
8f8af918b Removed CMakeLists.txt example that says you shouldn't use it
8feb21a1d Updated README-cmake.md with build instructions for several platforms
4294c0683 GPU: Check texture format support in pipeline creation
31dd4fe81 Sync SDL3 wiki -> header
417ed7f35 Fix references in docs
0aa319e4f Added support for custom tray icon on Windows via SDL hints.
581537220 minor update to mingw-w64 build instructions.
5d079c9a2 GPU: Remove bogus property from header docs
d590e1f12 GPU: Align D3D12 clear properties to naming convention
7098e525d Sync SDL3 wiki -> header
fb6df9338 GPU: Add name properties to resources (#11946)
a2b0ddcca Sync SDL3 wiki -> header
d28e95322 Added thread safety documentation for SDL_iostream.h
f731741ea Sync SDL3 wiki -> header
0eaa8c6d8 Added INTRO-emscripten.md
21b433536 Scale up the text for large displays
6bc7e88ca Added INTRO-androidstudio.md
e4e76ac72 Added INTRO-xcode.md
1b30a01b4 Added INTRO-visualstudio.md
191b9d502 Added INTRO-cmake.md
7d2a1c5f8 Mention the tests in INSTALL.md
b6b939044 Simplified INSTALL.md
55e094f7a Updated INSTALL.md with simple intro breadcrumbs
584c1d579 Tweaking the README
995a6a033 Minor readability improvement for README-contributing.md
86b46c678 Removed README-git.md
96414fa56 Removed obsolete Raspberry Pi documentation
670db4d24 Made the README links in INSTALL.md markdown links
b08d04581 Added a Discord link to BUGS.txt
2ad0f1e1f Updated the credits for SDL 3.0
41d48db4a Removed the runtime README
922b73195 Simplified the README
5e4a2974a Removed obsolete warnings about MIT licensed SIMD code
3766a3940 emscripten: double the audio buffer size.
e10e42c81 Sync SDL3 wiki -> header
2b8fb0bdd wikiheaders: Maybe fix perl warning.
efaf3739c Sync SDL3 wiki -> header
4bddf521d emscripten: Override emscripten's fullscreen button with SDL's implementation.
569de8490 better numerical precision for playback example
e5a4f0936 Call SDL_UDEV_Quit() if we don't end up using it
7d7a76c07 Sync SDL3 wiki -> header
66408308b Added documentation for mouse handling in relative mode
438075a83 Sync SDL3 wiki -> header
b4562c024 cocoa: Add a hint to control menu visibility in fullscreen spaces windows
611f132fd Don't use a hint callback for SDL_HINT_ANDROID_ALLOW_RECREATE_ACTIVITY
03a3c19c2 examples: use doubles to generate sine waves and avoid distortion
307e6f2ca emscripten: simulate mouse autocapture.
f79083d9b release: don't add test directory to mingw release archives
4ba4f0a10 release: add Android aar to devel zip archive
c4f2f7b35 Removed redundant information in example pages
949ec0c50 Sync SDL3 wiki -> header
839227b4b Sync SDL3 wiki -> header
c04b739df GPU: Note that resource naming functions are not thread safe.
3df0767e3 gpu: Initialize Metal stencil format even if stencil test is disabled
307dac97a testcontroller.c: fix build errors due to -Wformat after commit b524af1
21cc1878f Reset enhanced mode state when closing a controller
b524af1b4 testcontroller: log the ID of gamepads as they are added and removed
9a83fa026 apply multiplier scale after system scale
ea859fba3 Sync SDL3 wiki -> header
551510c0e SDL_HINT_MOUSE_RELATIVE_SYSTEM_SCALE can be combined with SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE
95c158438 README-migration: note SDL2 brightness/gamma ramp APIs that have been removed.
f0af6c348 emscripten: Add SDL_EVENT_DISPLAY_ORIENTATION support.
3ad9c38a4 emscripten: Don't set OpenGL swap intervals until first PumpEvents.
d42b4ed96 Leave SDL_TriggerBreakpoint undefined on unknown platforms
9a7cfbc2d Add onNativePen to proguard-rules.pro
82125ec1d x11: Be more aggressive about finding _any_ usable messagebox font.
423184879 Revert "Separate android initialization from Activity (#11891)"
61f13b94d add a fallback SDL_TriggerBreakpoint() for MSVC after commit ebaa30d3.
d14c93c4b Separate android initialization from Activity (#11891)
c64197be1 Sync SDL3 wiki -> header
042898995 Added SDL_ClickTrayEntry()
fb0f6a119 cocoa: Display mode changes set Desktop display mode, not current.
38176bfe9 cocoa: Implemented display hotplugging support.
0e2ca934b events: Remove unused function declaration
715897aea Added support for displaying XIM composition strings
a8a65b6fc Use XIM for IME input on X11
1f3b40797 Sync SDL3 wiki -> header
fb94a79f8 stdinc: define SDL_NOLONGLONG for old Visual Studios, document the symbol.
bda90c3cb cmake: rename SDL_DISABLE_* CMake options to SDL_xxx
90aff306c gpu: Show a debug error when pipelines are not given the right shader stages
00b23a012 Sync SDL3 wiki -> header
6b776a998 keyboard: Add some SDL keycodes for common Xkb keys
e5966bbdb x11: Add support for Mod3 and more esoteric Xkb configurations
73ee99978 wayland: Add support for Mod3 and more esoteric Xkb configurations
ebaa30d33 __debugbreak was introduced in Microsoft Visual Studio 2003
c8f3f1b46 _BitScanReverse was introduced in Microsoft Visual Studio 2005
a78104a47 Disable long long support in the headers with SDL_NOLONGLONG
6cdde10ed gpu: Metal depth write should behave like Vulkan/D3D12
dd0dc64d5 Sync SDL3 wiki -> header
c688853a8 Sync SDL3 wiki -> header
507593f48 wikiheaders: Allow symbols to be filtered from manpage generation by regex.
7acf78ba9 storage: Trim the title storage root from enumerated paths
037cd25a2 win32: Use the pending size during NCCALCSIZE
e8916b260 pipewire: Use byte order pixel format aliases
d2090d1c8 Sync SDL3 wiki -> header
3f7f632e1 audio: Added SDL_AudioDeviceStreamPaused.
f61860fa9 testautomation: fixed incorrect test.
4bb3c2a1c render: Some cleanups.
61bdbacda render: SDL_RenderTextureTiled shouldn't try to drop draw calls, either.
f044a3d6c Revert "render: GetRenderViewportSize shouldn't use scale, just logical presentation."
fa7a52991 render: GetRenderViewportSize shouldn't scale viewport dimensions.
163600951 Sync SDL3 wiki -> header
bf8532094 render: Don't try to drop draws outside of the viewport.
f2f04e825 tests: Fix get/set window size test being skipped
cbdbd66e1 Sync SDL3 wiki -> header
ef1fdf11b tray: Create tray icons for libappindicator securely
e6bb50a71 Updated to version 3.1.9 for development
6b34c9fe7 Sync SDL3 wiki -> header
22422f774 Fixed ABI compatibility with 3.1.6
d7b10d05b Updated to version 3.1.8 for the preview release
4290fc8bd tray: Load GTK and libappindicator by versioned names, except on OpenBSD
6b38d250a tray: Don't try to use GTK 2 versions of libappindicator
bba066c44 tray: Don't call g_object_unref(NULL)
0bc370dfb Android doc cleanup
6934c910b opengl: use GL_UNSIGNED_BYTE instead of GL_UNSIGNED_INT_8_8_8_8_REV.
0176a19ae Fixed platform define condition for Windows phone
0180ca541 windows: Catch WM_POINTERCAPTURECHANGED events.

git-subtree-dir: external/SDL
git-subtree-split: 90fd2a3cbee5b7ead1f0517d7cc0eba1f3059207
2025-04-15 09:23:03 +02:00

1207 lines
44 KiB
C

/*
Simple DirectMedia Layer
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
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.
*/
/**
* # CategoryJoystick
*
* SDL joystick support.
*
* This is the lower-level joystick handling. If you want the simpler option,
* where what each button does is well-defined, you should use the gamepad API
* instead.
*
* The term "instance_id" is the current instantiation of a joystick device in
* the system, if the joystick is removed and then re-inserted then it will
* get a new instance_id, instance_id's are monotonically increasing
* identifiers of a joystick plugged in.
*
* The term "player_index" is the number assigned to a player on a specific
* controller. For XInput controllers this returns the XInput user index. Many
* joysticks will not be able to supply this information.
*
* SDL_GUID is used as a stable 128-bit identifier for a joystick device that
* does not change over time. It identifies class of the device (a X360 wired
* controller for example). This identifier is platform dependent.
*
* In order to use these functions, SDL_Init() must have been called with the
* SDL_INIT_JOYSTICK flag. This causes SDL to scan the system for joysticks,
* and load appropriate drivers.
*
* If you would like to receive joystick updates while the application is in
* the background, you should set the following hint before calling
* SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS
*/
#ifndef SDL_joystick_h_
#define SDL_joystick_h_
#include <SDL3/SDL_stdinc.h>
#include <SDL3/SDL_error.h>
#include <SDL3/SDL_guid.h>
#include <SDL3/SDL_mutex.h>
#include <SDL3/SDL_power.h>
#include <SDL3/SDL_properties.h>
#include <SDL3/SDL_sensor.h>
#include <SDL3/SDL_begin_code.h>
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
extern "C" {
#endif
#ifdef SDL_THREAD_SAFETY_ANALYSIS
/*
* This is not an exported symbol from SDL, this is only in the headers to
* help Clang's thread safety analysis tools to function. Do not attempt
* to access this symbol from your app, it will not work!
*/
extern SDL_Mutex *SDL_joystick_lock;
#endif
/**
* The joystick structure used to identify an SDL joystick.
*
* This is opaque data.
*
* \since This struct is available since SDL 3.2.0.
*/
typedef struct SDL_Joystick SDL_Joystick;
/**
* This is a unique ID for a joystick for the time it is connected to the
* system, and is never reused for the lifetime of the application.
*
* If the joystick is disconnected and reconnected, it will get a new ID.
*
* The value 0 is an invalid ID.
*
* \since This datatype is available since SDL 3.2.0.
*/
typedef Uint32 SDL_JoystickID;
/**
* An enum of some common joystick types.
*
* In some cases, SDL can identify a low-level joystick as being a certain
* type of device, and will report it through SDL_GetJoystickType (or
* SDL_GetJoystickTypeForID).
*
* This is by no means a complete list of everything that can be plugged into
* a computer.
*
* You may refer to
* [XInput Controller Types](https://learn.microsoft.com/en-us/windows/win32/xinput/xinput-and-controller-subtypes)
* table for a general understanding of each joystick type.
*
* \since This enum is available since SDL 3.2.0.
*/
typedef enum SDL_JoystickType
{
SDL_JOYSTICK_TYPE_UNKNOWN,
SDL_JOYSTICK_TYPE_GAMEPAD,
SDL_JOYSTICK_TYPE_WHEEL,
SDL_JOYSTICK_TYPE_ARCADE_STICK,
SDL_JOYSTICK_TYPE_FLIGHT_STICK,
SDL_JOYSTICK_TYPE_DANCE_PAD,
SDL_JOYSTICK_TYPE_GUITAR,
SDL_JOYSTICK_TYPE_DRUM_KIT,
SDL_JOYSTICK_TYPE_ARCADE_PAD,
SDL_JOYSTICK_TYPE_THROTTLE,
SDL_JOYSTICK_TYPE_COUNT
} SDL_JoystickType;
/**
* Possible connection states for a joystick device.
*
* This is used by SDL_GetJoystickConnectionState to report how a device is
* connected to the system.
*
* \since This enum is available since SDL 3.2.0.
*/
typedef enum SDL_JoystickConnectionState
{
SDL_JOYSTICK_CONNECTION_INVALID = -1,
SDL_JOYSTICK_CONNECTION_UNKNOWN,
SDL_JOYSTICK_CONNECTION_WIRED,
SDL_JOYSTICK_CONNECTION_WIRELESS
} SDL_JoystickConnectionState;
/**
* The largest value an SDL_Joystick's axis can report.
*
* \since This macro is available since SDL 3.2.0.
*
* \sa SDL_JOYSTICK_AXIS_MIN
*/
#define SDL_JOYSTICK_AXIS_MAX 32767
/**
* The smallest value an SDL_Joystick's axis can report.
*
* This is a negative number!
*
* \since This macro is available since SDL 3.2.0.
*
* \sa SDL_JOYSTICK_AXIS_MAX
*/
#define SDL_JOYSTICK_AXIS_MIN -32768
/* Function prototypes */
/**
* Locking for atomic access to the joystick API.
*
* The SDL joystick functions are thread-safe, however you can lock the
* joysticks while processing to guarantee that the joystick list won't change
* and joystick and gamepad events will not be delivered.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC void SDLCALL SDL_LockJoysticks(void) SDL_ACQUIRE(SDL_joystick_lock);
/**
* Unlocking for atomic access to the joystick API.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC void SDLCALL SDL_UnlockJoysticks(void) SDL_RELEASE(SDL_joystick_lock);
/**
* Return whether a joystick is currently connected.
*
* \returns true if a joystick is connected, false otherwise.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoysticks
*/
extern SDL_DECLSPEC bool SDLCALL SDL_HasJoystick(void);
/**
* Get a list of currently connected joysticks.
*
* \param count a pointer filled in with the number of joysticks returned, may
* be NULL.
* \returns a 0 terminated array of joystick instance IDs or NULL on failure;
* call SDL_GetError() for more information. This should be freed
* with SDL_free() when it is no longer needed.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_HasJoystick
* \sa SDL_OpenJoystick
*/
extern SDL_DECLSPEC SDL_JoystickID * SDLCALL SDL_GetJoysticks(int *count);
/**
* Get the implementation dependent name of a joystick.
*
* This can be called before any joysticks are opened.
*
* \param instance_id the joystick instance ID.
* \returns the name of the selected joystick. If no name can be found, this
* function returns NULL; call SDL_GetError() for more information.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickName
* \sa SDL_GetJoysticks
*/
extern SDL_DECLSPEC const char * SDLCALL SDL_GetJoystickNameForID(SDL_JoystickID instance_id);
/**
* Get the implementation dependent path of a joystick.
*
* This can be called before any joysticks are opened.
*
* \param instance_id the joystick instance ID.
* \returns the path of the selected joystick. If no path can be found, this
* function returns NULL; call SDL_GetError() for more information.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickPath
* \sa SDL_GetJoysticks
*/
extern SDL_DECLSPEC const char * SDLCALL SDL_GetJoystickPathForID(SDL_JoystickID instance_id);
/**
* Get the player index of a joystick.
*
* This can be called before any joysticks are opened.
*
* \param instance_id the joystick instance ID.
* \returns the player index of a joystick, or -1 if it's not available.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickPlayerIndex
* \sa SDL_GetJoysticks
*/
extern SDL_DECLSPEC int SDLCALL SDL_GetJoystickPlayerIndexForID(SDL_JoystickID instance_id);
/**
* Get the implementation-dependent GUID of a joystick.
*
* This can be called before any joysticks are opened.
*
* \param instance_id the joystick instance ID.
* \returns the GUID of the selected joystick. If called with an invalid
* instance_id, this function returns a zero GUID.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickGUID
* \sa SDL_GUIDToString
*/
extern SDL_DECLSPEC SDL_GUID SDLCALL SDL_GetJoystickGUIDForID(SDL_JoystickID instance_id);
/**
* Get the USB vendor ID of a joystick, if available.
*
* This can be called before any joysticks are opened. If the vendor ID isn't
* available this function returns 0.
*
* \param instance_id the joystick instance ID.
* \returns the USB vendor ID of the selected joystick. If called with an
* invalid instance_id, this function returns 0.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickVendor
* \sa SDL_GetJoysticks
*/
extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetJoystickVendorForID(SDL_JoystickID instance_id);
/**
* Get the USB product ID of a joystick, if available.
*
* This can be called before any joysticks are opened. If the product ID isn't
* available this function returns 0.
*
* \param instance_id the joystick instance ID.
* \returns the USB product ID of the selected joystick. If called with an
* invalid instance_id, this function returns 0.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickProduct
* \sa SDL_GetJoysticks
*/
extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetJoystickProductForID(SDL_JoystickID instance_id);
/**
* Get the product version of a joystick, if available.
*
* This can be called before any joysticks are opened. If the product version
* isn't available this function returns 0.
*
* \param instance_id the joystick instance ID.
* \returns the product version of the selected joystick. If called with an
* invalid instance_id, this function returns 0.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickProductVersion
* \sa SDL_GetJoysticks
*/
extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetJoystickProductVersionForID(SDL_JoystickID instance_id);
/**
* Get the type of a joystick, if available.
*
* This can be called before any joysticks are opened.
*
* \param instance_id the joystick instance ID.
* \returns the SDL_JoystickType of the selected joystick. If called with an
* invalid instance_id, this function returns
* `SDL_JOYSTICK_TYPE_UNKNOWN`.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickType
* \sa SDL_GetJoysticks
*/
extern SDL_DECLSPEC SDL_JoystickType SDLCALL SDL_GetJoystickTypeForID(SDL_JoystickID instance_id);
/**
* Open a joystick for use.
*
* The joystick subsystem must be initialized before a joystick can be opened
* for use.
*
* \param instance_id the joystick instance ID.
* \returns a joystick identifier or NULL on failure; call SDL_GetError() for
* more information.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_CloseJoystick
*/
extern SDL_DECLSPEC SDL_Joystick * SDLCALL SDL_OpenJoystick(SDL_JoystickID instance_id);
/**
* Get the SDL_Joystick associated with an instance ID, if it has been opened.
*
* \param instance_id the instance ID to get the SDL_Joystick for.
* \returns an SDL_Joystick on success or NULL on failure or if it hasn't been
* opened yet; call SDL_GetError() for more information.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC SDL_Joystick * SDLCALL SDL_GetJoystickFromID(SDL_JoystickID instance_id);
/**
* Get the SDL_Joystick associated with a player index.
*
* \param player_index the player index to get the SDL_Joystick for.
* \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError()
* for more information.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickPlayerIndex
* \sa SDL_SetJoystickPlayerIndex
*/
extern SDL_DECLSPEC SDL_Joystick * SDLCALL SDL_GetJoystickFromPlayerIndex(int player_index);
/**
* The structure that describes a virtual joystick touchpad.
*
* \since This struct is available since SDL 3.2.0.
*
* \sa SDL_VirtualJoystickDesc
*/
typedef struct SDL_VirtualJoystickTouchpadDesc
{
Uint16 nfingers; /**< the number of simultaneous fingers on this touchpad */
Uint16 padding[3];
} SDL_VirtualJoystickTouchpadDesc;
/**
* The structure that describes a virtual joystick sensor.
*
* \since This struct is available since SDL 3.2.0.
*
* \sa SDL_VirtualJoystickDesc
*/
typedef struct SDL_VirtualJoystickSensorDesc
{
SDL_SensorType type; /**< the type of this sensor */
float rate; /**< the update frequency of this sensor, may be 0.0f */
} SDL_VirtualJoystickSensorDesc;
/**
* The structure that describes a virtual joystick.
*
* This structure should be initialized using SDL_INIT_INTERFACE(). All
* elements of this structure are optional.
*
* \since This struct is available since SDL 3.2.0.
*
* \sa SDL_AttachVirtualJoystick
* \sa SDL_INIT_INTERFACE
* \sa SDL_VirtualJoystickSensorDesc
* \sa SDL_VirtualJoystickTouchpadDesc
*/
typedef struct SDL_VirtualJoystickDesc
{
Uint32 version; /**< the version of this interface */
Uint16 type; /**< `SDL_JoystickType` */
Uint16 padding; /**< unused */
Uint16 vendor_id; /**< the USB vendor ID of this joystick */
Uint16 product_id; /**< the USB product ID of this joystick */
Uint16 naxes; /**< the number of axes on this joystick */
Uint16 nbuttons; /**< the number of buttons on this joystick */
Uint16 nballs; /**< the number of balls on this joystick */
Uint16 nhats; /**< the number of hats on this joystick */
Uint16 ntouchpads; /**< the number of touchpads on this joystick, requires `touchpads` to point at valid descriptions */
Uint16 nsensors; /**< the number of sensors on this joystick, requires `sensors` to point at valid descriptions */
Uint16 padding2[2]; /**< unused */
Uint32 button_mask; /**< A mask of which buttons are valid for this controller
e.g. (1 << SDL_GAMEPAD_BUTTON_SOUTH) */
Uint32 axis_mask; /**< A mask of which axes are valid for this controller
e.g. (1 << SDL_GAMEPAD_AXIS_LEFTX) */
const char *name; /**< the name of the joystick */
const SDL_VirtualJoystickTouchpadDesc *touchpads; /**< A pointer to an array of touchpad descriptions, required if `ntouchpads` is > 0 */
const SDL_VirtualJoystickSensorDesc *sensors; /**< A pointer to an array of sensor descriptions, required if `nsensors` is > 0 */
void *userdata; /**< User data pointer passed to callbacks */
void (SDLCALL *Update)(void *userdata); /**< Called when the joystick state should be updated */
void (SDLCALL *SetPlayerIndex)(void *userdata, int player_index); /**< Called when the player index is set */
bool (SDLCALL *Rumble)(void *userdata, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble); /**< Implements SDL_RumbleJoystick() */
bool (SDLCALL *RumbleTriggers)(void *userdata, Uint16 left_rumble, Uint16 right_rumble); /**< Implements SDL_RumbleJoystickTriggers() */
bool (SDLCALL *SetLED)(void *userdata, Uint8 red, Uint8 green, Uint8 blue); /**< Implements SDL_SetJoystickLED() */
bool (SDLCALL *SendEffect)(void *userdata, const void *data, int size); /**< Implements SDL_SendJoystickEffect() */
bool (SDLCALL *SetSensorsEnabled)(void *userdata, bool enabled); /**< Implements SDL_SetGamepadSensorEnabled() */
void (SDLCALL *Cleanup)(void *userdata); /**< Cleans up the userdata when the joystick is detached */
} SDL_VirtualJoystickDesc;
/* Check the size of SDL_VirtualJoystickDesc
*
* If this assert fails, either the compiler is padding to an unexpected size,
* or the interface has been updated and this should be updated to match and
* the code using this interface should be updated to handle the old version.
*/
SDL_COMPILE_TIME_ASSERT(SDL_VirtualJoystickDesc_SIZE,
(sizeof(void *) == 4 && sizeof(SDL_VirtualJoystickDesc) == 84) ||
(sizeof(void *) == 8 && sizeof(SDL_VirtualJoystickDesc) == 136));
/**
* Attach a new virtual joystick.
*
* \param desc joystick description, initialized using SDL_INIT_INTERFACE().
* \returns the joystick instance ID, or 0 on failure; call SDL_GetError() for
* more information.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_DetachVirtualJoystick
*/
extern SDL_DECLSPEC SDL_JoystickID SDLCALL SDL_AttachVirtualJoystick(const SDL_VirtualJoystickDesc *desc);
/**
* Detach a virtual joystick.
*
* \param instance_id the joystick instance ID, previously returned from
* SDL_AttachVirtualJoystick().
* \returns true on success or false on failure; call SDL_GetError() for more
* information.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_AttachVirtualJoystick
*/
extern SDL_DECLSPEC bool SDLCALL SDL_DetachVirtualJoystick(SDL_JoystickID instance_id);
/**
* Query whether or not a joystick is virtual.
*
* \param instance_id the joystick instance ID.
* \returns true if the joystick is virtual, false otherwise.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC bool SDLCALL SDL_IsJoystickVirtual(SDL_JoystickID instance_id);
/**
* Set the state of an axis on an opened virtual joystick.
*
* Please note that values set here will not be applied until the next call to
* SDL_UpdateJoysticks, which can either be called directly, or can be called
* indirectly through various other SDL APIs, including, but not limited to
* the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout,
* SDL_WaitEvent.
*
* Note that when sending trigger axes, you should scale the value to the full
* range of Sint16. For example, a trigger at rest would have the value of
* `SDL_JOYSTICK_AXIS_MIN`.
*
* \param joystick the virtual joystick on which to set state.
* \param axis the index of the axis on the virtual joystick to update.
* \param value the new value for the specified axis.
* \returns true on success or false on failure; call SDL_GetError() for more
* information.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickVirtualAxis(SDL_Joystick *joystick, int axis, Sint16 value);
/**
* Generate ball motion on an opened virtual joystick.
*
* Please note that values set here will not be applied until the next call to
* SDL_UpdateJoysticks, which can either be called directly, or can be called
* indirectly through various other SDL APIs, including, but not limited to
* the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout,
* SDL_WaitEvent.
*
* \param joystick the virtual joystick on which to set state.
* \param ball the index of the ball on the virtual joystick to update.
* \param xrel the relative motion on the X axis.
* \param yrel the relative motion on the Y axis.
* \returns true on success or false on failure; call SDL_GetError() for more
* information.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickVirtualBall(SDL_Joystick *joystick, int ball, Sint16 xrel, Sint16 yrel);
/**
* Set the state of a button on an opened virtual joystick.
*
* Please note that values set here will not be applied until the next call to
* SDL_UpdateJoysticks, which can either be called directly, or can be called
* indirectly through various other SDL APIs, including, but not limited to
* the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout,
* SDL_WaitEvent.
*
* \param joystick the virtual joystick on which to set state.
* \param button the index of the button on the virtual joystick to update.
* \param down true if the button is pressed, false otherwise.
* \returns true on success or false on failure; call SDL_GetError() for more
* information.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickVirtualButton(SDL_Joystick *joystick, int button, bool down);
/**
* Set the state of a hat on an opened virtual joystick.
*
* Please note that values set here will not be applied until the next call to
* SDL_UpdateJoysticks, which can either be called directly, or can be called
* indirectly through various other SDL APIs, including, but not limited to
* the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout,
* SDL_WaitEvent.
*
* \param joystick the virtual joystick on which to set state.
* \param hat the index of the hat on the virtual joystick to update.
* \param value the new value for the specified hat.
* \returns true on success or false on failure; call SDL_GetError() for more
* information.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickVirtualHat(SDL_Joystick *joystick, int hat, Uint8 value);
/**
* Set touchpad finger state on an opened virtual joystick.
*
* Please note that values set here will not be applied until the next call to
* SDL_UpdateJoysticks, which can either be called directly, or can be called
* indirectly through various other SDL APIs, including, but not limited to
* the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout,
* SDL_WaitEvent.
*
* \param joystick the virtual joystick on which to set state.
* \param touchpad the index of the touchpad on the virtual joystick to
* update.
* \param finger the index of the finger on the touchpad to set.
* \param down true if the finger is pressed, false if the finger is released.
* \param x the x coordinate of the finger on the touchpad, normalized 0 to 1,
* with the origin in the upper left.
* \param y the y coordinate of the finger on the touchpad, normalized 0 to 1,
* with the origin in the upper left.
* \param pressure the pressure of the finger.
* \returns true on success or false on failure; call SDL_GetError() for more
* information.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickVirtualTouchpad(SDL_Joystick *joystick, int touchpad, int finger, bool down, float x, float y, float pressure);
/**
* Send a sensor update for an opened virtual joystick.
*
* Please note that values set here will not be applied until the next call to
* SDL_UpdateJoysticks, which can either be called directly, or can be called
* indirectly through various other SDL APIs, including, but not limited to
* the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout,
* SDL_WaitEvent.
*
* \param joystick the virtual joystick on which to set state.
* \param type the type of the sensor on the virtual joystick to update.
* \param sensor_timestamp a 64-bit timestamp in nanoseconds associated with
* the sensor reading.
* \param data the data associated with the sensor reading.
* \param num_values the number of values pointed to by `data`.
* \returns true on success or false on failure; call SDL_GetError() for more
* information.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC bool SDLCALL SDL_SendJoystickVirtualSensorData(SDL_Joystick *joystick, SDL_SensorType type, Uint64 sensor_timestamp, const float *data, int num_values);
/**
* Get the properties associated with a joystick.
*
* The following read-only properties are provided by SDL:
*
* - `SDL_PROP_JOYSTICK_CAP_MONO_LED_BOOLEAN`: true if this joystick has an
* LED that has adjustable brightness
* - `SDL_PROP_JOYSTICK_CAP_RGB_LED_BOOLEAN`: true if this joystick has an LED
* that has adjustable color
* - `SDL_PROP_JOYSTICK_CAP_PLAYER_LED_BOOLEAN`: true if this joystick has a
* player LED
* - `SDL_PROP_JOYSTICK_CAP_RUMBLE_BOOLEAN`: true if this joystick has
* left/right rumble
* - `SDL_PROP_JOYSTICK_CAP_TRIGGER_RUMBLE_BOOLEAN`: true if this joystick has
* simple trigger rumble
*
* \param joystick the SDL_Joystick obtained from SDL_OpenJoystick().
* \returns a valid property ID on success or 0 on failure; call
* SDL_GetError() for more information.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetJoystickProperties(SDL_Joystick *joystick);
#define SDL_PROP_JOYSTICK_CAP_MONO_LED_BOOLEAN "SDL.joystick.cap.mono_led"
#define SDL_PROP_JOYSTICK_CAP_RGB_LED_BOOLEAN "SDL.joystick.cap.rgb_led"
#define SDL_PROP_JOYSTICK_CAP_PLAYER_LED_BOOLEAN "SDL.joystick.cap.player_led"
#define SDL_PROP_JOYSTICK_CAP_RUMBLE_BOOLEAN "SDL.joystick.cap.rumble"
#define SDL_PROP_JOYSTICK_CAP_TRIGGER_RUMBLE_BOOLEAN "SDL.joystick.cap.trigger_rumble"
/**
* Get the implementation dependent name of a joystick.
*
* \param joystick the SDL_Joystick obtained from SDL_OpenJoystick().
* \returns the name of the selected joystick. If no name can be found, this
* function returns NULL; call SDL_GetError() for more information.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickNameForID
*/
extern SDL_DECLSPEC const char * SDLCALL SDL_GetJoystickName(SDL_Joystick *joystick);
/**
* Get the implementation dependent path of a joystick.
*
* \param joystick the SDL_Joystick obtained from SDL_OpenJoystick().
* \returns the path of the selected joystick. If no path can be found, this
* function returns NULL; call SDL_GetError() for more information.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickPathForID
*/
extern SDL_DECLSPEC const char * SDLCALL SDL_GetJoystickPath(SDL_Joystick *joystick);
/**
* Get the player index of an opened joystick.
*
* For XInput controllers this returns the XInput user index. Many joysticks
* will not be able to supply this information.
*
* \param joystick the SDL_Joystick obtained from SDL_OpenJoystick().
* \returns the player index, or -1 if it's not available.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_SetJoystickPlayerIndex
*/
extern SDL_DECLSPEC int SDLCALL SDL_GetJoystickPlayerIndex(SDL_Joystick *joystick);
/**
* Set the player index of an opened joystick.
*
* \param joystick the SDL_Joystick obtained from SDL_OpenJoystick().
* \param player_index player index to assign to this joystick, or -1 to clear
* the player index and turn off player LEDs.
* \returns true on success or false on failure; call SDL_GetError() for more
* information.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickPlayerIndex
*/
extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickPlayerIndex(SDL_Joystick *joystick, int player_index);
/**
* Get the implementation-dependent GUID for the joystick.
*
* This function requires an open joystick.
*
* \param joystick the SDL_Joystick obtained from SDL_OpenJoystick().
* \returns the GUID of the given joystick. If called on an invalid index,
* this function returns a zero GUID; call SDL_GetError() for more
* information.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickGUIDForID
* \sa SDL_GUIDToString
*/
extern SDL_DECLSPEC SDL_GUID SDLCALL SDL_GetJoystickGUID(SDL_Joystick *joystick);
/**
* Get the USB vendor ID of an opened joystick, if available.
*
* If the vendor ID isn't available this function returns 0.
*
* \param joystick the SDL_Joystick obtained from SDL_OpenJoystick().
* \returns the USB vendor ID of the selected joystick, or 0 if unavailable.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickVendorForID
*/
extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetJoystickVendor(SDL_Joystick *joystick);
/**
* Get the USB product ID of an opened joystick, if available.
*
* If the product ID isn't available this function returns 0.
*
* \param joystick the SDL_Joystick obtained from SDL_OpenJoystick().
* \returns the USB product ID of the selected joystick, or 0 if unavailable.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickProductForID
*/
extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetJoystickProduct(SDL_Joystick *joystick);
/**
* Get the product version of an opened joystick, if available.
*
* If the product version isn't available this function returns 0.
*
* \param joystick the SDL_Joystick obtained from SDL_OpenJoystick().
* \returns the product version of the selected joystick, or 0 if unavailable.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickProductVersionForID
*/
extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetJoystickProductVersion(SDL_Joystick *joystick);
/**
* Get the firmware version of an opened joystick, if available.
*
* If the firmware version isn't available this function returns 0.
*
* \param joystick the SDL_Joystick obtained from SDL_OpenJoystick().
* \returns the firmware version of the selected joystick, or 0 if
* unavailable.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetJoystickFirmwareVersion(SDL_Joystick *joystick);
/**
* Get the serial number of an opened joystick, if available.
*
* Returns the serial number of the joystick, or NULL if it is not available.
*
* \param joystick the SDL_Joystick obtained from SDL_OpenJoystick().
* \returns the serial number of the selected joystick, or NULL if
* unavailable.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC const char * SDLCALL SDL_GetJoystickSerial(SDL_Joystick *joystick);
/**
* Get the type of an opened joystick.
*
* \param joystick the SDL_Joystick obtained from SDL_OpenJoystick().
* \returns the SDL_JoystickType of the selected joystick.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickTypeForID
*/
extern SDL_DECLSPEC SDL_JoystickType SDLCALL SDL_GetJoystickType(SDL_Joystick *joystick);
/**
* Get the device information encoded in a SDL_GUID structure.
*
* \param guid the SDL_GUID you wish to get info about.
* \param vendor a pointer filled in with the device VID, or 0 if not
* available.
* \param product a pointer filled in with the device PID, or 0 if not
* available.
* \param version a pointer filled in with the device version, or 0 if not
* available.
* \param crc16 a pointer filled in with a CRC used to distinguish different
* products with the same VID/PID, or 0 if not available.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickGUIDForID
*/
extern SDL_DECLSPEC void SDLCALL SDL_GetJoystickGUIDInfo(SDL_GUID guid, Uint16 *vendor, Uint16 *product, Uint16 *version, Uint16 *crc16);
/**
* Get the status of a specified joystick.
*
* \param joystick the joystick to query.
* \returns true if the joystick has been opened, false if it has not; call
* SDL_GetError() for more information.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC bool SDLCALL SDL_JoystickConnected(SDL_Joystick *joystick);
/**
* Get the instance ID of an opened joystick.
*
* \param joystick an SDL_Joystick structure containing joystick information.
* \returns the instance ID of the specified joystick on success or 0 on
* failure; call SDL_GetError() for more information.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC SDL_JoystickID SDLCALL SDL_GetJoystickID(SDL_Joystick *joystick);
/**
* Get the number of general axis controls on a joystick.
*
* Often, the directional pad on a game controller will either look like 4
* separate buttons or a POV hat, and not axes, but all of this is up to the
* device and platform.
*
* \param joystick an SDL_Joystick structure containing joystick information.
* \returns the number of axis controls/number of axes on success or -1 on
* failure; call SDL_GetError() for more information.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickAxis
* \sa SDL_GetNumJoystickBalls
* \sa SDL_GetNumJoystickButtons
* \sa SDL_GetNumJoystickHats
*/
extern SDL_DECLSPEC int SDLCALL SDL_GetNumJoystickAxes(SDL_Joystick *joystick);
/**
* Get the number of trackballs on a joystick.
*
* Joystick trackballs have only relative motion events associated with them
* and their state cannot be polled.
*
* Most joysticks do not have trackballs.
*
* \param joystick an SDL_Joystick structure containing joystick information.
* \returns the number of trackballs on success or -1 on failure; call
* SDL_GetError() for more information.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickBall
* \sa SDL_GetNumJoystickAxes
* \sa SDL_GetNumJoystickButtons
* \sa SDL_GetNumJoystickHats
*/
extern SDL_DECLSPEC int SDLCALL SDL_GetNumJoystickBalls(SDL_Joystick *joystick);
/**
* Get the number of POV hats on a joystick.
*
* \param joystick an SDL_Joystick structure containing joystick information.
* \returns the number of POV hats on success or -1 on failure; call
* SDL_GetError() for more information.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickHat
* \sa SDL_GetNumJoystickAxes
* \sa SDL_GetNumJoystickBalls
* \sa SDL_GetNumJoystickButtons
*/
extern SDL_DECLSPEC int SDLCALL SDL_GetNumJoystickHats(SDL_Joystick *joystick);
/**
* Get the number of buttons on a joystick.
*
* \param joystick an SDL_Joystick structure containing joystick information.
* \returns the number of buttons on success or -1 on failure; call
* SDL_GetError() for more information.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetJoystickButton
* \sa SDL_GetNumJoystickAxes
* \sa SDL_GetNumJoystickBalls
* \sa SDL_GetNumJoystickHats
*/
extern SDL_DECLSPEC int SDLCALL SDL_GetNumJoystickButtons(SDL_Joystick *joystick);
/**
* Set the state of joystick event processing.
*
* If joystick events are disabled, you must call SDL_UpdateJoysticks()
* yourself and check the state of the joystick when you want joystick
* information.
*
* \param enabled whether to process joystick events or not.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_JoystickEventsEnabled
* \sa SDL_UpdateJoysticks
*/
extern SDL_DECLSPEC void SDLCALL SDL_SetJoystickEventsEnabled(bool enabled);
/**
* Query the state of joystick event processing.
*
* If joystick events are disabled, you must call SDL_UpdateJoysticks()
* yourself and check the state of the joystick when you want joystick
* information.
*
* \returns true if joystick events are being processed, false otherwise.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_SetJoystickEventsEnabled
*/
extern SDL_DECLSPEC bool SDLCALL SDL_JoystickEventsEnabled(void);
/**
* Update the current state of the open joysticks.
*
* This is called automatically by the event loop if any joystick events are
* enabled.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC void SDLCALL SDL_UpdateJoysticks(void);
/**
* Get the current state of an axis control on a joystick.
*
* SDL makes no promises about what part of the joystick any given axis refers
* to. Your game should have some sort of configuration UI to let users
* specify what each axis should be bound to. Alternately, SDL's higher-level
* Game Controller API makes a great effort to apply order to this lower-level
* interface, so you know that a specific axis is the "left thumb stick," etc.
*
* The value returned by SDL_GetJoystickAxis() is a signed integer (-32768 to
* 32767) representing the current position of the axis. It may be necessary
* to impose certain tolerances on these values to account for jitter.
*
* \param joystick an SDL_Joystick structure containing joystick information.
* \param axis the axis to query; the axis indices start at index 0.
* \returns a 16-bit signed integer representing the current position of the
* axis or 0 on failure; call SDL_GetError() for more information.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetNumJoystickAxes
*/
extern SDL_DECLSPEC Sint16 SDLCALL SDL_GetJoystickAxis(SDL_Joystick *joystick, int axis);
/**
* Get the initial state of an axis control on a joystick.
*
* The state is a value ranging from -32768 to 32767.
*
* The axis indices start at index 0.
*
* \param joystick an SDL_Joystick structure containing joystick information.
* \param axis the axis to query; the axis indices start at index 0.
* \param state upon return, the initial value is supplied here.
* \returns true if this axis has any initial value, or false if not.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC bool SDLCALL SDL_GetJoystickAxisInitialState(SDL_Joystick *joystick, int axis, Sint16 *state);
/**
* Get the ball axis change since the last poll.
*
* Trackballs can only return relative motion since the last call to
* SDL_GetJoystickBall(), these motion deltas are placed into `dx` and `dy`.
*
* Most joysticks do not have trackballs.
*
* \param joystick the SDL_Joystick to query.
* \param ball the ball index to query; ball indices start at index 0.
* \param dx stores the difference in the x axis position since the last poll.
* \param dy stores the difference in the y axis position since the last poll.
* \returns true on success or false on failure; call SDL_GetError() for more
* information.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetNumJoystickBalls
*/
extern SDL_DECLSPEC bool SDLCALL SDL_GetJoystickBall(SDL_Joystick *joystick, int ball, int *dx, int *dy);
/**
* Get the current state of a POV hat on a joystick.
*
* The returned value will be one of the `SDL_HAT_*` values.
*
* \param joystick an SDL_Joystick structure containing joystick information.
* \param hat the hat index to get the state from; indices start at index 0.
* \returns the current hat position.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetNumJoystickHats
*/
extern SDL_DECLSPEC Uint8 SDLCALL SDL_GetJoystickHat(SDL_Joystick *joystick, int hat);
#define SDL_HAT_CENTERED 0x00u
#define SDL_HAT_UP 0x01u
#define SDL_HAT_RIGHT 0x02u
#define SDL_HAT_DOWN 0x04u
#define SDL_HAT_LEFT 0x08u
#define SDL_HAT_RIGHTUP (SDL_HAT_RIGHT|SDL_HAT_UP)
#define SDL_HAT_RIGHTDOWN (SDL_HAT_RIGHT|SDL_HAT_DOWN)
#define SDL_HAT_LEFTUP (SDL_HAT_LEFT|SDL_HAT_UP)
#define SDL_HAT_LEFTDOWN (SDL_HAT_LEFT|SDL_HAT_DOWN)
/**
* Get the current state of a button on a joystick.
*
* \param joystick an SDL_Joystick structure containing joystick information.
* \param button the button index to get the state from; indices start at
* index 0.
* \returns true if the button is pressed, false otherwise.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_GetNumJoystickButtons
*/
extern SDL_DECLSPEC bool SDLCALL SDL_GetJoystickButton(SDL_Joystick *joystick, int button);
/**
* Start a rumble effect.
*
* Each call to this function cancels any previous rumble effect, and calling
* it with 0 intensity stops any rumbling.
*
* This function requires you to process SDL events or call
* SDL_UpdateJoysticks() to update rumble state.
*
* \param joystick the joystick to vibrate.
* \param low_frequency_rumble the intensity of the low frequency (left)
* rumble motor, from 0 to 0xFFFF.
* \param high_frequency_rumble the intensity of the high frequency (right)
* rumble motor, from 0 to 0xFFFF.
* \param duration_ms the duration of the rumble effect, in milliseconds.
* \returns true, or false if rumble isn't supported on this joystick.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC bool SDLCALL SDL_RumbleJoystick(SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms);
/**
* Start a rumble effect in the joystick's triggers.
*
* Each call to this function cancels any previous trigger rumble effect, and
* calling it with 0 intensity stops any rumbling.
*
* Note that this is rumbling of the _triggers_ and not the game controller as
* a whole. This is currently only supported on Xbox One controllers. If you
* want the (more common) whole-controller rumble, use SDL_RumbleJoystick()
* instead.
*
* This function requires you to process SDL events or call
* SDL_UpdateJoysticks() to update rumble state.
*
* \param joystick the joystick to vibrate.
* \param left_rumble the intensity of the left trigger rumble motor, from 0
* to 0xFFFF.
* \param right_rumble the intensity of the right trigger rumble motor, from 0
* to 0xFFFF.
* \param duration_ms the duration of the rumble effect, in milliseconds.
* \returns true on success or false on failure; call SDL_GetError() for more
* information.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_RumbleJoystick
*/
extern SDL_DECLSPEC bool SDLCALL SDL_RumbleJoystickTriggers(SDL_Joystick *joystick, Uint16 left_rumble, Uint16 right_rumble, Uint32 duration_ms);
/**
* Update a joystick's LED color.
*
* An example of a joystick LED is the light on the back of a PlayStation 4's
* DualShock 4 controller.
*
* For joysticks with a single color LED, the maximum of the RGB values will
* be used as the LED brightness.
*
* \param joystick the joystick to update.
* \param red the intensity of the red LED.
* \param green the intensity of the green LED.
* \param blue the intensity of the blue LED.
* \returns true on success or false on failure; call SDL_GetError() for more
* information.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickLED(SDL_Joystick *joystick, Uint8 red, Uint8 green, Uint8 blue);
/**
* Send a joystick specific effect packet.
*
* \param joystick the joystick to affect.
* \param data the data to send to the joystick.
* \param size the size of the data to send to the joystick.
* \returns true on success or false on failure; call SDL_GetError() for more
* information.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC bool SDLCALL SDL_SendJoystickEffect(SDL_Joystick *joystick, const void *data, int size);
/**
* Close a joystick previously opened with SDL_OpenJoystick().
*
* \param joystick the joystick device to close.
*
* \since This function is available since SDL 3.2.0.
*
* \sa SDL_OpenJoystick
*/
extern SDL_DECLSPEC void SDLCALL SDL_CloseJoystick(SDL_Joystick *joystick);
/**
* Get the connection state of a joystick.
*
* \param joystick the joystick to query.
* \returns the connection state on success or
* `SDL_JOYSTICK_CONNECTION_INVALID` on failure; call SDL_GetError()
* for more information.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC SDL_JoystickConnectionState SDLCALL SDL_GetJoystickConnectionState(SDL_Joystick *joystick);
/**
* Get the battery state of a joystick.
*
* You should never take a battery status as absolute truth. Batteries
* (especially failing batteries) are delicate hardware, and the values
* reported here are best estimates based on what that hardware reports. It's
* not uncommon for older batteries to lose stored power much faster than it
* reports, or completely drain when reporting it has 20 percent left, etc.
*
* \param joystick the joystick to query.
* \param percent a pointer filled in with the percentage of battery life
* left, between 0 and 100, or NULL to ignore. This will be
* filled in with -1 we can't determine a value or there is no
* battery.
* \returns the current battery state or `SDL_POWERSTATE_ERROR` on failure;
* call SDL_GetError() for more information.
*
* \since This function is available since SDL 3.2.0.
*/
extern SDL_DECLSPEC SDL_PowerState SDLCALL SDL_GetJoystickPowerInfo(SDL_Joystick *joystick, int *percent);
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
}
#endif
#include <SDL3/SDL_close_code.h>
#endif /* SDL_joystick_h_ */