2025-08-11 17:28:38 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// dear imgui: Platform Backend for SDL3
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// This needs to be used along with a Renderer (e.g. SDL_GPU, DirectX11, OpenGL3, Vulkan..)
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// (Info: SDL3 is a cross-platform general purpose library for handling windows, inputs, graphics context creation, etc.)
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 06:07:58 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								// Implemented features:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  [X] Platform: Clipboard support.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  [X] Platform: Mouse support. Can discriminate Mouse/TouchScreen.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:09:28 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  [X] Platform: Keyboard support. Since 1.87 we are using the io.AddKeyEvent() function. Pass ImGuiKey values to all key functions e.g. ImGui::IsKeyPressed(ImGuiKey_Space). [Legacy SDL_SCANCODE_* values are obsolete since 1.87 and not supported since 1.91.5]
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  [X] Platform: Gamepad support.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  [X] Platform: Mouse cursor shape and visibility (ImGuiBackendFlags_HasMouseCursors). Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  [x] Platform: Multi-viewport support (multiple windows). Enable with 'io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable' -> the OS animation effect when window gets created/destroyed is problematic. SDL2 backend doesn't have issue.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// Missing features or Issues:
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:01:31 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  [ ] Platform: Multi-viewport: Minimized windows seems to break mouse wheel events (at least under Windows).
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  [x] Platform: IME support. Position somehow broken in SDL3 + app needs to call 'SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");' before SDL_CreateWindow()!.
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-09 22:26:36 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// Learn about Dear ImGui:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// - FAQ                  https://dearimgui.com/faq
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// - Getting Started      https://dearimgui.com/getting-started
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// - Documentation        https://dearimgui.com/docs (same as your local docs/ folder).
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// - Introduction, links and more at the top of imgui.cpp
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// CHANGELOG
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// (minor and older changes stripped away, please see git history for details)
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:05:46 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  2025-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-13 16:08:45 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  2025-06-27: IME: avoid calling SDL_StartTextInput() again if already active. (#8727)
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  2025-05-15: [Docking] Add Platform_GetWindowFramebufferScale() handler, to allow varying Retina display density on multiple monitors.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2025-05-06: [Docking] macOS: fixed secondary viewports not appearing on other monitors before of parenting.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2025-04-09: [Docking] Revert update monitors and work areas information every frame. Only do it on Windows. (#8415, #8558)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2025-04-22: IME: honor ImGuiPlatformImeData->WantTextInput as an alternative way to call SDL_StartTextInput(), without IME being necessarily visible.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2025-04-09: Don't attempt to call SDL_CaptureMouse() on drivers where we don't call SDL_GetGlobalMouseState(). (#8561)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2025-03-30: Update for SDL3 api changes: Revert SDL_GetClipboardText() memory ownership change. (#8530, #7801)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2025-03-21: Fill gamepad inputs and set ImGuiBackendFlags_HasGamepad regardless of ImGuiConfigFlags_NavEnableGamepad being set.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  2025-03-10: When dealing with OEM keys, use scancodes instead of translated keycodes to choose ImGuiKey values. (#7136, #7201, #7206, #7306, #7670, #7672, #8468)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2025-02-26: Only start SDL_CaptureMouse() when mouse is being dragged, to mitigate issues with e.g.Linux debuggers not claiming capture back. (#6410, #3650)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2025-02-25: [Docking] Revert to use SDL_GetDisplayBounds() for WorkPos/WorkRect if SDL_GetDisplayUsableBounds() failed.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2025-02-24: Avoid calling SDL_GetGlobalMouseState() when mouse is in relative mode.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2025-02-21: [Docking] Update monitors and work areas information every frame, as the later may change regardless of monitor changes. (#8415)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2025-02-18: Added ImGuiMouseCursor_Wait and ImGuiMouseCursor_Progress mouse cursor support.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2025-02-10: Using SDL_OpenURL() in platform_io.Platform_OpenInShellFn handler.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:28:38 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  2025-01-20: Made ImGui_ImplSDL3_SetGamepadMode(ImGui_ImplSDL3_GamepadMode_Manual) accept an empty array.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:09:28 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  2024-10-24: Emscripten: SDL_EVENT_MOUSE_WHEEL event doesn't require dividing by 100.0f on Emscripten.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:28:38 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  2024-09-11: (Docking) Added support for viewport->ParentViewportId field to support parenting at OS level. (#7973)
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  2024-09-03: Update for SDL3 api changes: SDL_GetGamepads() memory ownership revert. (#7918, #7898, #7807)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2024-08-22: moved some OS/backend related function pointers from ImGuiIO to ImGuiPlatformIO:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//               - io.GetClipboardTextFn    -> platform_io.Platform_GetClipboardTextFn
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//               - io.SetClipboardTextFn    -> platform_io.Platform_SetClipboardTextFn
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//               - io.PlatformSetImeDataFn  -> platform_io.Platform_SetImeDataFn
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2024-08-19: Storing SDL_WindowID inside ImGuiViewport::PlatformHandle instead of SDL_Window*.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2024-08-19: ImGui_ImplSDL3_ProcessEvent() now ignores events intended for other SDL windows. (#7853)
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 06:07:58 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  2024-07-22: Update for SDL3 api changes: SDL_GetGamepads() memory ownership change. (#7807)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2024-07-18: Update for SDL3 api changes: SDL_GetClipboardText() memory ownership change. (#7801)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2024-07-15: Update for SDL3 api changes: SDL_GetProperty() change to SDL_GetPointerProperty(). (#7794)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2024-07-02: Update for SDL3 api changes: SDLK_x renames and SDLK_KP_x removals (#7761, #7762).
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:47:11 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  2024-07-01: Update for SDL3 api changes: SDL_SetTextInputRect() changed to SDL_SetTextInputArea().
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2024-06-26: Update for SDL3 api changes: SDL_StartTextInput()/SDL_StopTextInput()/SDL_SetTextInputRect() functions signatures.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2024-06-24: Update for SDL3 api changes: SDL_EVENT_KEY_DOWN/SDL_EVENT_KEY_UP contents.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2024-06-03; Update for SDL3 api changes: SDL_SYSTEM_CURSOR_ renames.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2024-05-15: Update for SDL3 api changes: SDLK_ renames.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:10:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  2024-04-15: Inputs: Re-enable calling SDL_StartTextInput()/SDL_StopTextInput() as SDL3 no longer enables it by default and should play nicer with IME.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  2024-02-13: Inputs: Fixed gamepad support. Handle gamepad disconnection. Added ImGui_ImplSDL3_SetGamepadMode().
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-09 22:26:36 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  2023-11-13: Updated for recent SDL3 API changes.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2023-10-05: Inputs: Added support for extra ImGuiKey values: F13 to F24 function keys, app back/forward keys.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//  2023-05-04: Fixed build on Emscripten/iOS/Android. (#6391)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2023-04-06: Inputs: Avoid calling SDL_StartTextInput()/SDL_StopTextInput() as they don't only pertain to IME. It's unclear exactly what their relation is to IME. (#6306)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2023-04-04: Inputs: Added support for io.AddMouseSourceEvent() to discriminate ImGuiMouseSource_Mouse/ImGuiMouseSource_TouchScreen. (#2702)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2023-02-23: Accept SDL_GetPerformanceCounter() not returning a monotonically increasing value. (#6189, #6114, #3644)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//  2023-02-07: Forked "imgui_impl_sdl2" into "imgui_impl_sdl3". Removed version checks for old feature. Refer to imgui_impl_sdl2.cpp for older changelog.
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "imgui.h" 
 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-30 01:42:51 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifndef IMGUI_DISABLE 
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  "imgui_impl_sdl3.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Clang warnings with -Weverything
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if defined(__clang__) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# pragma clang diagnostic push 
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# pragma clang diagnostic ignored "-Wold-style-cast"                  // warning: use of old-style cast
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# pragma clang diagnostic ignored "-Wimplicit-int-float-conversion"   // warning: implicit conversion from 'xxx' to 'float' may lose precision
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// SDL
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  <SDL3/SDL.h> 
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  <stdio.h>                // for snprintf()
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# if defined(__APPLE__) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  <TargetConditionals.h> 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-09 22:26:36 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifdef _WIN32 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# ifndef WIN32_LEAN_AND_MEAN 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define WIN32_LEAN_AND_MEAN 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  <windows.h> 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# if !defined(__EMSCRIPTEN__) && !defined(__ANDROID__) && !(defined(__APPLE__) && TARGET_OS_IOS) && !defined(__amigaos4__) 
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# define SDL_HAS_CAPTURE_AND_GLOBAL_MOUSE    1 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# else 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define SDL_HAS_CAPTURE_AND_GLOBAL_MOUSE    0 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:23:51 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// FIXME-LEGACY: remove when SDL 3.1.3 preview is released.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# ifndef SDLK_APOSTROPHE 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define SDLK_APOSTROPHE SDLK_QUOTE 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# ifndef SDLK_GRAVE 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define SDLK_GRAVE SDLK_BACKQUOTE 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								// SDL Data
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								struct  ImGui_ImplSDL3_Data 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    SDL_Window *              Window ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    SDL_WindowID             WindowID ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    SDL_Renderer *            Renderer ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Uint64                   Time ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    char *                    ClipboardTextData ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    char                     BackendPlatformName [ 48 ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    bool                     UseVulkan ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    bool                     WantUpdateMonitors ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:47:11 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // IME handling
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SDL_Window *              ImeWindow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // Mouse handling
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Uint32                   MouseWindowID ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int                      MouseButtonsDown ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SDL_Cursor *              MouseCursors [ ImGuiMouseCursor_COUNT ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SDL_Cursor *              MouseLastCursor ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int                      MousePendingLeaveFrame ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bool                     MouseCanUseGlobalState ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    bool                     MouseCanUseCapture ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    bool                     MouseCanReportHoveredViewport ;   // This is hard to use/unreliable on SDL so we'll set ImGuiBackendFlags_HasMouseHoveredViewport dynamically based on state.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // Gamepad handling
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImVector < SDL_Gamepad * >   Gamepads ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_GamepadMode   GamepadMode ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bool                     WantUpdateGamepadsList ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_Data ( )    {  memset ( ( void * ) this ,  0 ,  sizeof ( * this ) ) ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Backend data stored in io.BackendPlatformUserData to allow support for multiple Dear ImGui contexts
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// It is STRONGLY preferred that you use docking branch with multi-viewports (== single Dear ImGui context + multiple windows) instead of multiple Dear ImGui contexts.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// FIXME: multi-context support is not well tested and probably dysfunctional in this backend.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// FIXME: some shared resources (mouse cursor shape, gamepad) are mishandled when using multi-context.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  ImGui_ImplSDL3_Data *  ImGui_ImplSDL3_GetBackendData ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    return  ImGui : : GetCurrentContext ( )  ?  ( ImGui_ImplSDL3_Data * ) ImGui : : GetIO ( ) . BackendPlatformUserData  :  nullptr ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Forward Declarations
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_UpdateMonitors ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:52:57 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_InitMultiViewportSupport ( SDL_Window *  window ,  void *  sdl_gl_context ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_ShutdownMultiViewportSupport ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Functions
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  const  char *  ImGui_ImplSDL3_GetClipboardText ( ImGuiContext * ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_Data *  bd  =  ImGui_ImplSDL3_GetBackendData ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    if  ( bd - > ClipboardTextData ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        SDL_free ( bd - > ClipboardTextData ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    bd - > ClipboardTextData  =  SDL_GetClipboardText ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    return  bd - > ClipboardTextData ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_SetClipboardText ( ImGuiContext * ,  const  char *  text ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SDL_SetClipboardText ( text ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 06:07:58 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_PlatformSetImeData ( ImGuiContext * ,  ImGuiViewport *  viewport ,  ImGuiPlatformImeData *  data ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:47:11 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_Data *  bd  =  ImGui_ImplSDL3_GetBackendData ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    SDL_WindowID  window_id  =  ( SDL_WindowID ) ( intptr_t ) viewport - > PlatformHandle ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SDL_Window *  window  =  SDL_GetWindowFromID ( window_id ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( ( ! ( data - > WantVisible  | |  data - > WantTextInput )  | |  bd - > ImeWindow  ! =  window )  & &  bd - > ImeWindow  ! =  nullptr ) 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:47:11 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        SDL_StopTextInput ( bd - > ImeWindow ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        bd - > ImeWindow  =  nullptr ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( data - > WantVisible ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        SDL_Rect  r ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        r . x  =  ( int ) ( data - > InputPos . x  -  viewport - > Pos . x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        r . y  =  ( int ) ( data - > InputPos . y  -  viewport - > Pos . y  +  data - > InputLineHeight ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        r . w  =  1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        r . h  =  ( int ) data - > InputLineHeight ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:47:11 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        SDL_SetTextInputArea ( window ,  & r ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        bd - > ImeWindow  =  window ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-13 16:08:45 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( ! SDL_TextInputActive ( window )  & &  ( data - > WantVisible  | |  data - > WantTextInput ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        SDL_StartTextInput ( window ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:06:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// Not static to allow third-party code to use that if they want to (but undocumented)
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:09:28 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								ImGuiKey  ImGui_ImplSDL3_KeyEventToImGuiKey ( SDL_Keycode  keycode ,  SDL_Scancode  scancode ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:06:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								ImGuiKey  ImGui_ImplSDL3_KeyEventToImGuiKey ( SDL_Keycode  keycode ,  SDL_Scancode  scancode ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 06:07:58 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // Keypad doesn't have individual key values in SDL3
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    switch  ( scancode ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_SCANCODE_KP_0 :  return  ImGuiKey_Keypad0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_SCANCODE_KP_1 :  return  ImGuiKey_Keypad1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_SCANCODE_KP_2 :  return  ImGuiKey_Keypad2 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_SCANCODE_KP_3 :  return  ImGuiKey_Keypad3 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_SCANCODE_KP_4 :  return  ImGuiKey_Keypad4 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_SCANCODE_KP_5 :  return  ImGuiKey_Keypad5 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_SCANCODE_KP_6 :  return  ImGuiKey_Keypad6 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_SCANCODE_KP_7 :  return  ImGuiKey_Keypad7 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_SCANCODE_KP_8 :  return  ImGuiKey_Keypad8 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_SCANCODE_KP_9 :  return  ImGuiKey_Keypad9 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_SCANCODE_KP_PERIOD :  return  ImGuiKey_KeypadDecimal ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_SCANCODE_KP_DIVIDE :  return  ImGuiKey_KeypadDivide ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_SCANCODE_KP_MULTIPLY :  return  ImGuiKey_KeypadMultiply ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_SCANCODE_KP_MINUS :  return  ImGuiKey_KeypadSubtract ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_SCANCODE_KP_PLUS :  return  ImGuiKey_KeypadAdd ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_SCANCODE_KP_ENTER :  return  ImGuiKey_KeypadEnter ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_SCANCODE_KP_EQUALS :  return  ImGuiKey_KeypadEqual ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        default :  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    switch  ( keycode ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_TAB :  return  ImGuiKey_Tab ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_LEFT :  return  ImGuiKey_LeftArrow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_RIGHT :  return  ImGuiKey_RightArrow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_UP :  return  ImGuiKey_UpArrow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_DOWN :  return  ImGuiKey_DownArrow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_PAGEUP :  return  ImGuiKey_PageUp ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_PAGEDOWN :  return  ImGuiKey_PageDown ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_HOME :  return  ImGuiKey_Home ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_END :  return  ImGuiKey_End ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_INSERT :  return  ImGuiKey_Insert ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_DELETE :  return  ImGuiKey_Delete ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_BACKSPACE :  return  ImGuiKey_Backspace ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_SPACE :  return  ImGuiKey_Space ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_RETURN :  return  ImGuiKey_Enter ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_ESCAPE :  return  ImGuiKey_Escape ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        //case SDLK_APOSTROPHE: return ImGuiKey_Apostrophe;
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_COMMA :  return  ImGuiKey_Comma ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        //case SDLK_MINUS: return ImGuiKey_Minus;
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_PERIOD :  return  ImGuiKey_Period ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        //case SDLK_SLASH: return ImGuiKey_Slash;
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_SEMICOLON :  return  ImGuiKey_Semicolon ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        //case SDLK_EQUALS: return ImGuiKey_Equal;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        //case SDLK_LEFTBRACKET: return ImGuiKey_LeftBracket;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        //case SDLK_BACKSLASH: return ImGuiKey_Backslash;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        //case SDLK_RIGHTBRACKET: return ImGuiKey_RightBracket;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        //case SDLK_GRAVE: return ImGuiKey_GraveAccent;
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_CAPSLOCK :  return  ImGuiKey_CapsLock ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_SCROLLLOCK :  return  ImGuiKey_ScrollLock ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_NUMLOCKCLEAR :  return  ImGuiKey_NumLock ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_PRINTSCREEN :  return  ImGuiKey_PrintScreen ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_PAUSE :  return  ImGuiKey_Pause ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_LCTRL :  return  ImGuiKey_LeftCtrl ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_LSHIFT :  return  ImGuiKey_LeftShift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_LALT :  return  ImGuiKey_LeftAlt ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_LGUI :  return  ImGuiKey_LeftSuper ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_RCTRL :  return  ImGuiKey_RightCtrl ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_RSHIFT :  return  ImGuiKey_RightShift ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_RALT :  return  ImGuiKey_RightAlt ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_RGUI :  return  ImGuiKey_RightSuper ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_APPLICATION :  return  ImGuiKey_Menu ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_0 :  return  ImGuiKey_0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_1 :  return  ImGuiKey_1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_2 :  return  ImGuiKey_2 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_3 :  return  ImGuiKey_3 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_4 :  return  ImGuiKey_4 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_5 :  return  ImGuiKey_5 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_6 :  return  ImGuiKey_6 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_7 :  return  ImGuiKey_7 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_8 :  return  ImGuiKey_8 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_9 :  return  ImGuiKey_9 ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 06:07:58 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        case  SDLK_A :  return  ImGuiKey_A ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_B :  return  ImGuiKey_B ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_C :  return  ImGuiKey_C ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_D :  return  ImGuiKey_D ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_E :  return  ImGuiKey_E ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F :  return  ImGuiKey_F ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_G :  return  ImGuiKey_G ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_H :  return  ImGuiKey_H ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_I :  return  ImGuiKey_I ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_J :  return  ImGuiKey_J ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_K :  return  ImGuiKey_K ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_L :  return  ImGuiKey_L ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_M :  return  ImGuiKey_M ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_N :  return  ImGuiKey_N ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_O :  return  ImGuiKey_O ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_P :  return  ImGuiKey_P ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_Q :  return  ImGuiKey_Q ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_R :  return  ImGuiKey_R ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_S :  return  ImGuiKey_S ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_T :  return  ImGuiKey_T ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_U :  return  ImGuiKey_U ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_V :  return  ImGuiKey_V ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_W :  return  ImGuiKey_W ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_X :  return  ImGuiKey_X ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_Y :  return  ImGuiKey_Y ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_Z :  return  ImGuiKey_Z ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F1 :  return  ImGuiKey_F1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F2 :  return  ImGuiKey_F2 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F3 :  return  ImGuiKey_F3 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F4 :  return  ImGuiKey_F4 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F5 :  return  ImGuiKey_F5 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F6 :  return  ImGuiKey_F6 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F7 :  return  ImGuiKey_F7 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F8 :  return  ImGuiKey_F8 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F9 :  return  ImGuiKey_F9 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F10 :  return  ImGuiKey_F10 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F11 :  return  ImGuiKey_F11 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F12 :  return  ImGuiKey_F12 ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-09 22:26:36 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        case  SDLK_F13 :  return  ImGuiKey_F13 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F14 :  return  ImGuiKey_F14 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F15 :  return  ImGuiKey_F15 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F16 :  return  ImGuiKey_F16 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F17 :  return  ImGuiKey_F17 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F18 :  return  ImGuiKey_F18 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F19 :  return  ImGuiKey_F19 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F20 :  return  ImGuiKey_F20 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F21 :  return  ImGuiKey_F21 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F22 :  return  ImGuiKey_F22 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F23 :  return  ImGuiKey_F23 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_F24 :  return  ImGuiKey_F24 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_AC_BACK :  return  ImGuiKey_AppBack ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDLK_AC_FORWARD :  return  ImGuiKey_AppForward ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 06:07:58 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        default :  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // Fallback to scancode
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    switch  ( scancode ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    case  SDL_SCANCODE_GRAVE :  return  ImGuiKey_GraveAccent ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    case  SDL_SCANCODE_MINUS :  return  ImGuiKey_Minus ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    case  SDL_SCANCODE_EQUALS :  return  ImGuiKey_Equal ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    case  SDL_SCANCODE_LEFTBRACKET :  return  ImGuiKey_LeftBracket ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    case  SDL_SCANCODE_RIGHTBRACKET :  return  ImGuiKey_RightBracket ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    case  SDL_SCANCODE_NONUSBACKSLASH :  return  ImGuiKey_Oem102 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    case  SDL_SCANCODE_BACKSLASH :  return  ImGuiKey_Backslash ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    case  SDL_SCANCODE_SEMICOLON :  return  ImGuiKey_Semicolon ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    case  SDL_SCANCODE_APOSTROPHE :  return  ImGuiKey_Apostrophe ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    case  SDL_SCANCODE_COMMA :  return  ImGuiKey_Comma ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    case  SDL_SCANCODE_PERIOD :  return  ImGuiKey_Period ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    case  SDL_SCANCODE_SLASH :  return  ImGuiKey_Slash ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    default :  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    return  ImGuiKey_None ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_UpdateKeyModifiers ( SDL_Keymod  sdl_key_mods ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGuiIO &  io  =  ImGui : : GetIO ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    io . AddKeyEvent ( ImGuiMod_Ctrl ,  ( sdl_key_mods  &  SDL_KMOD_CTRL )  ! =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    io . AddKeyEvent ( ImGuiMod_Shift ,  ( sdl_key_mods  &  SDL_KMOD_SHIFT )  ! =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    io . AddKeyEvent ( ImGuiMod_Alt ,  ( sdl_key_mods  &  SDL_KMOD_ALT )  ! =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    io . AddKeyEvent ( ImGuiMod_Super ,  ( sdl_key_mods  &  SDL_KMOD_GUI )  ! =  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  ImGuiViewport *  ImGui_ImplSDL3_GetViewportForWindowID ( SDL_WindowID  window_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  ImGui : : FindViewportByPlatformHandle ( ( void * ) ( intptr_t ) window_id ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-18 15:31:29 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application, or clear/overwrite your copy of the mouse data.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application, or clear/overwrite your copy of the keyboard data.
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  ImGui_ImplSDL3_ProcessEvent ( const  SDL_Event *  event ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_Data *  bd  =  ImGui_ImplSDL3_GetBackendData ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:10:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    IM_ASSERT ( bd  ! =  nullptr  & &  " Context or backend not initialized! Did you call ImGui_ImplSDL3_Init()? " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGuiIO &  io  =  ImGui : : GetIO ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    switch  ( event - > type ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_MOUSE_MOTION : 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        { 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            if  ( ImGui_ImplSDL3_GetViewportForWindowID ( event - > motion . windowID )  = =  nullptr ) 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            ImVec2  mouse_pos ( ( float ) event - > motion . x ,  ( float ) event - > motion . y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( io . ConfigFlags  &  ImGuiConfigFlags_ViewportsEnable ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                int  window_x ,  window_y ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                SDL_GetWindowPosition ( SDL_GetWindowFromID ( event - > motion . windowID ) ,  & window_x ,  & window_y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                mouse_pos . x  + =  window_x ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                mouse_pos . y  + =  window_y ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            io . AddMouseSourceEvent ( event - > motion . which  = =  SDL_TOUCH_MOUSEID  ?  ImGuiMouseSource_TouchScreen  :  ImGuiMouseSource_Mouse ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            io . AddMousePosEvent ( mouse_pos . x ,  mouse_pos . y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_MOUSE_WHEEL : 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        { 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            if  ( ImGui_ImplSDL3_GetViewportForWindowID ( event - > wheel . windowID )  = =  nullptr ) 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            //IMGUI_DEBUG_LOG("wheel %.2f %.2f, precise %.2f %.2f\n", (float)event->wheel.x, (float)event->wheel.y, event->wheel.preciseX, event->wheel.preciseY);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            float  wheel_x  =  - event - > wheel . x ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            float  wheel_y  =  event - > wheel . y ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            io . AddMouseSourceEvent ( event - > wheel . which  = =  SDL_TOUCH_MOUSEID  ?  ImGuiMouseSource_TouchScreen  :  ImGuiMouseSource_Mouse ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            io . AddMouseWheelEvent ( wheel_x ,  wheel_y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_MOUSE_BUTTON_DOWN : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_MOUSE_BUTTON_UP : 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        { 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            if  ( ImGui_ImplSDL3_GetViewportForWindowID ( event - > button . windowID )  = =  nullptr ) 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            int  mouse_button  =  - 1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( event - > button . button  = =  SDL_BUTTON_LEFT )  {  mouse_button  =  0 ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( event - > button . button  = =  SDL_BUTTON_RIGHT )  {  mouse_button  =  1 ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( event - > button . button  = =  SDL_BUTTON_MIDDLE )  {  mouse_button  =  2 ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-18 15:31:29 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            if  ( event - > button . button  = =  SDL_BUTTON_X1 )  {  mouse_button  =  3 ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( event - > button . button  = =  SDL_BUTTON_X2 )  {  mouse_button  =  4 ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            if  ( mouse_button  = =  - 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                break ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            io . AddMouseSourceEvent ( event - > button . which  = =  SDL_TOUCH_MOUSEID  ?  ImGuiMouseSource_TouchScreen  :  ImGuiMouseSource_Mouse ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            io . AddMouseButtonEvent ( mouse_button ,  ( event - > type  = =  SDL_EVENT_MOUSE_BUTTON_DOWN ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            bd - > MouseButtonsDown  =  ( event - > type  = =  SDL_EVENT_MOUSE_BUTTON_DOWN )  ?  ( bd - > MouseButtonsDown  |  ( 1  < <  mouse_button ) )  :  ( bd - > MouseButtonsDown  &  ~ ( 1  < <  mouse_button ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_TEXT_INPUT : 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        { 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            if  ( ImGui_ImplSDL3_GetViewportForWindowID ( event - > text . windowID )  = =  nullptr ) 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            io . AddInputCharactersUTF8 ( event - > text . text ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_KEY_DOWN : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_KEY_UP : 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        { 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            ImGuiViewport *  viewport  =  ImGui_ImplSDL3_GetViewportForWindowID ( event - > key . windowID ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( viewport  = =  nullptr ) 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            //IMGUI_DEBUG_LOG("SDL_EVENT_KEY_%s : key=0x%08X ('%s'), scancode=%d ('%s'), mod=%X, windowID=%d, viewport=%08X\n",
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            //    (event->type == SDL_EVENT_KEY_DOWN) ? "DOWN" : "UP  ", event->key.key, SDL_GetKeyName(event->key.key), event->key.scancode, SDL_GetScancodeName(event->key.scancode), event->key.mod, event->key.windowID, viewport ? viewport->ID : 0);
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:47:11 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            ImGui_ImplSDL3_UpdateKeyModifiers ( ( SDL_Keymod ) event - > key . mod ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 06:07:58 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            ImGuiKey  key  =  ImGui_ImplSDL3_KeyEventToImGuiKey ( event - > key . key ,  event - > key . scancode ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            io . AddKeyEvent ( key ,  ( event - > type  = =  SDL_EVENT_KEY_DOWN ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            io . SetKeyEventNativeData ( key ,  ( int ) event - > key . key ,  ( int ) event - > key . scancode ,  ( int ) event - > key . scancode ) ;  // To support legacy indexing (<1.87 user code). Legacy backend uses SDLK_*** as indices to IsKeyXXX() functions.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_DISPLAY_ORIENTATION : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_DISPLAY_ADDED : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_DISPLAY_REMOVED : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_DISPLAY_MOVED : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_DISPLAY_CONTENT_SCALE_CHANGED : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            bd - > WantUpdateMonitors  =  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_WINDOW_MOUSE_ENTER : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        { 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            if  ( ImGui_ImplSDL3_GetViewportForWindowID ( event - > window . windowID )  = =  nullptr ) 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            bd - > MouseWindowID  =  event - > window . windowID ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            bd - > MousePendingLeaveFrame  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // - In some cases, when detaching a window from main viewport SDL may send SDL_WINDOWEVENT_ENTER one frame too late,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        //   causing SDL_WINDOWEVENT_LEAVE on previous frame to interrupt drag operation by clear mouse position. This is why
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        //   we delay process the SDL_WINDOWEVENT_LEAVE events by one frame. See issue #5012 for details.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // FIXME: Unconfirmed whether this is still needed with SDL3.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_WINDOW_MOUSE_LEAVE : 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        { 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:50:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            if  ( ImGui_ImplSDL3_GetViewportForWindowID ( event - > window . windowID )  = =  nullptr ) 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            bd - > MousePendingLeaveFrame  =  ImGui : : GetFrameCount ( )  +  1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_WINDOW_FOCUS_GAINED : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_WINDOW_FOCUS_LOST : 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        { 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            ImGuiViewport *  viewport  =  ImGui_ImplSDL3_GetViewportForWindowID ( event - > window . windowID ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( viewport  = =  nullptr ) 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            //IMGUI_DEBUG_LOG("%s: windowId %d, viewport: %08X\n", (event->type == SDL_EVENT_WINDOW_FOCUS_GAINED) ? "SDL_EVENT_WINDOW_FOCUS_GAINED" : "SDL_WINDOWEVENT_FOCUS_LOST", event->window.windowID, viewport ? viewport->ID : 0);
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            io . AddFocusEvent ( event - > type  = =  SDL_EVENT_WINDOW_FOCUS_GAINED ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            return  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_WINDOW_CLOSE_REQUESTED : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_WINDOW_MOVED : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_WINDOW_RESIZED : 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            ImGuiViewport *  viewport  =  ImGui_ImplSDL3_GetViewportForWindowID ( event - > window . windowID ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( viewport  = =  NULL ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( event - > type  = =  SDL_EVENT_WINDOW_CLOSE_REQUESTED ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                viewport - > PlatformRequestClose  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( event - > type  = =  SDL_EVENT_WINDOW_MOVED ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                viewport - > PlatformRequestMove  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( event - > type  = =  SDL_EVENT_WINDOW_RESIZED ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                viewport - > PlatformRequestResize  =  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            return  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_GAMEPAD_ADDED : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        case  SDL_EVENT_GAMEPAD_REMOVED : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            bd - > WantUpdateGamepadsList  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        default : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            break ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-09 22:26:36 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_SetupPlatformHandles ( ImGuiViewport *  viewport ,  SDL_Window *  window ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    viewport - > PlatformHandle  =  ( void * ) ( intptr_t ) SDL_GetWindowID ( window ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-09 22:26:36 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    viewport - > PlatformHandleRaw  =  nullptr ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 06:07:58 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# if defined(_WIN32) && !defined(__WINRT__) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    viewport - > PlatformHandleRaw  =  ( HWND ) SDL_GetPointerProperty ( SDL_GetWindowProperties ( window ) ,  SDL_PROP_WINDOW_WIN32_HWND_POINTER ,  nullptr ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# elif defined(__APPLE__) 
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 06:07:58 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    viewport - > PlatformHandleRaw  =  SDL_GetPointerProperty ( SDL_GetWindowProperties ( window ) ,  SDL_PROP_WINDOW_COCOA_WINDOW_POINTER ,  nullptr ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-09 22:26:36 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  bool  ImGui_ImplSDL3_Init ( SDL_Window *  window ,  SDL_Renderer *  renderer ,  void *  sdl_gl_context ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGuiIO &  io  =  ImGui : : GetIO ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:23:51 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    IMGUI_CHECKVERSION ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    IM_ASSERT ( io . BackendPlatformUserData  = =  nullptr  & &  " Already initialized a platform backend! " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-09 22:26:36 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    IM_UNUSED ( sdl_gl_context ) ;  // Unused in this branch
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    //SDL_SetHint(SDL_HINT_EVENT_LOGGING, "2");
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    const  int  ver_linked  =  SDL_GetVersion ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // Setup backend capabilities flags
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_Data *  bd  =  IM_NEW ( ImGui_ImplSDL3_Data ) ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    snprintf ( bd - > BackendPlatformName ,  sizeof ( bd - > BackendPlatformName ) ,  " imgui_impl_sdl3 (%d.%d.%d; %d.%d.%d) " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        SDL_MAJOR_VERSION ,  SDL_MINOR_VERSION ,  SDL_MICRO_VERSION ,  SDL_VERSIONNUM_MAJOR ( ver_linked ) ,  SDL_VERSIONNUM_MINOR ( ver_linked ) ,  SDL_VERSIONNUM_MICRO ( ver_linked ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    io . BackendPlatformUserData  =  ( void * ) bd ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    io . BackendPlatformName  =  bd - > BackendPlatformName ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    io . BackendFlags  | =  ImGuiBackendFlags_HasMouseCursors ;            // We can honor GetMouseCursor() values (optional)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    io . BackendFlags  | =  ImGuiBackendFlags_HasSetMousePos ;             // We can honor io.WantSetMousePos requests (optional, rarely used)
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // (ImGuiBackendFlags_PlatformHasViewports may be set just below)
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > Window  =  window ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    bd - > WindowID  =  SDL_GetWindowID ( window ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    bd - > Renderer  =  renderer ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // SDL on Linux/OSX doesn't report events for unfocused windows (see https://github.com/ocornut/imgui/issues/4960)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // We will use 'MouseCanReportHoveredViewport' to set 'ImGuiBackendFlags_HasMouseHoveredViewport' dynamically each frame.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# ifndef __APPLE__ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > MouseCanReportHoveredViewport  =  bd - > MouseCanUseGlobalState ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# else 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > MouseCanReportHoveredViewport  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // Check and store if we are on a SDL backend that supports SDL_GetGlobalMouseState() and SDL_CaptureMouse()
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // ("wayland" and "rpi" don't support it, but we chose to use a white-list instead of a black-list)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > MouseCanUseGlobalState  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > MouseCanUseCapture  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if SDL_HAS_CAPTURE_AND_GLOBAL_MOUSE 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    const  char *  sdl_backend  =  SDL_GetCurrentVideoDriver ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    const  char *  capture_and_global_state_whitelist [ ]  =  {  " windows " ,  " cocoa " ,  " x11 " ,  " DIVE " ,  " VMAN "  } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    for  ( const  char *  item  :  capture_and_global_state_whitelist ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( strncmp ( sdl_backend ,  item ,  strlen ( item ) )  = =  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            bd - > MouseCanUseGlobalState  =  bd - > MouseCanUseCapture  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( bd - > MouseCanUseGlobalState ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        io . BackendFlags  | =  ImGuiBackendFlags_PlatformHasViewports ;   // We can create multi-viewports on the Platform side (optional)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGuiPlatformIO &  platform_io  =  ImGui : : GetPlatformIO ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    platform_io . Platform_SetClipboardTextFn  =  ImGui_ImplSDL3_SetClipboardText ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    platform_io . Platform_GetClipboardTextFn  =  ImGui_ImplSDL3_GetClipboardText ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    platform_io . Platform_SetImeDataFn  =  ImGui_ImplSDL3_PlatformSetImeData ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    platform_io . Platform_OpenInShellFn  =  [ ] ( ImGuiContext * ,  const  char *  url )  {  return  SDL_OpenURL ( url )  = =  0 ;  } ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:06:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // Update monitor a first time during init
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateMonitors ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // Gamepad handling
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > GamepadMode  =  ImGui_ImplSDL3_GamepadMode_AutoFirst ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > WantUpdateGamepadsList  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    // Load mouse cursors
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:38:15 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    bd - > MouseCursors [ ImGuiMouseCursor_Arrow ]  =  SDL_CreateSystemCursor ( SDL_SYSTEM_CURSOR_DEFAULT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > MouseCursors [ ImGuiMouseCursor_TextInput ]  =  SDL_CreateSystemCursor ( SDL_SYSTEM_CURSOR_TEXT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > MouseCursors [ ImGuiMouseCursor_ResizeAll ]  =  SDL_CreateSystemCursor ( SDL_SYSTEM_CURSOR_MOVE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > MouseCursors [ ImGuiMouseCursor_ResizeNS ]  =  SDL_CreateSystemCursor ( SDL_SYSTEM_CURSOR_NS_RESIZE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > MouseCursors [ ImGuiMouseCursor_ResizeEW ]  =  SDL_CreateSystemCursor ( SDL_SYSTEM_CURSOR_EW_RESIZE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > MouseCursors [ ImGuiMouseCursor_ResizeNESW ]  =  SDL_CreateSystemCursor ( SDL_SYSTEM_CURSOR_NESW_RESIZE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > MouseCursors [ ImGuiMouseCursor_ResizeNWSE ]  =  SDL_CreateSystemCursor ( SDL_SYSTEM_CURSOR_NWSE_RESIZE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > MouseCursors [ ImGuiMouseCursor_Hand ]  =  SDL_CreateSystemCursor ( SDL_SYSTEM_CURSOR_POINTER ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    bd - > MouseCursors [ ImGuiMouseCursor_Wait ]  =  SDL_CreateSystemCursor ( SDL_SYSTEM_CURSOR_WAIT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > MouseCursors [ ImGuiMouseCursor_Progress ]  =  SDL_CreateSystemCursor ( SDL_SYSTEM_CURSOR_PROGRESS ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:38:15 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    bd - > MouseCursors [ ImGuiMouseCursor_NotAllowed ]  =  SDL_CreateSystemCursor ( SDL_SYSTEM_CURSOR_NOT_ALLOWED ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // Set platform dependent data in viewport
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // Our mouse update function expect PlatformHandle to be filled for the main viewport
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGuiViewport *  main_viewport  =  ImGui : : GetMainViewport ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-09 22:26:36 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_SetupPlatformHandles ( main_viewport ,  window ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // From 2.0.5: Set SDL hint to receive mouse click events on window focus, otherwise SDL doesn't emit the event.
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    // Without this, when clicking to gain focus, our widgets wouldn't activate even though they showed as hovered.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // (This is unfortunately a global SDL setting, so enabling it might have a side-effect on your application.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // It is unlikely to make a difference, but if your app absolutely needs to ignore the initial on-focus click:
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // you can ignore SDL_EVENT_MOUSE_BUTTON_DOWN events coming right after a SDL_EVENT_WINDOW_FOCUS_GAINED)
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    SDL_SetHint ( SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH ,  " 1 " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // From 2.0.22: Disable auto-capture, this is preventing drag and drop across multiple windows (see #5710)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SDL_SetHint ( SDL_HINT_MOUSE_AUTO_CAPTURE ,  " 0 " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // SDL 3.x : see https://github.com/libsdl-org/SDL/issues/6659
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SDL_SetHint ( " SDL_BORDERLESS_WINDOWED_STYLE " ,  " 0 " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // We need SDL_CaptureMouse(), SDL_GetGlobalMouseState() from SDL 2.0.4+ to support multiple viewports.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // We left the call to ImGui_ImplSDL3_InitPlatformInterface() outside of #ifdef to avoid unused-function warnings.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:52:57 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( io . BackendFlags  &  ImGuiBackendFlags_PlatformHasViewports ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ImGui_ImplSDL3_InitMultiViewportSupport ( window ,  sdl_gl_context ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:47:11 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// Should technically be a SDL_GLContext but due to typedef it is sane to keep it void* in public interface.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  ImGui_ImplSDL3_InitForOpenGL ( SDL_Window *  window ,  void *  sdl_gl_context ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    return  ImGui_ImplSDL3_Init ( window ,  nullptr ,  sdl_gl_context ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  ImGui_ImplSDL3_InitForVulkan ( SDL_Window *  window ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( ! ImGui_ImplSDL3_Init ( window ,  nullptr ,  nullptr ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        return  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_Data *  bd  =  ImGui_ImplSDL3_GetBackendData ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    bd - > UseVulkan  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  ImGui_ImplSDL3_InitForD3D ( SDL_Window *  window ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if !defined(_WIN32) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    IM_ASSERT ( 0  & &  " Unsupported " ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    return  ImGui_ImplSDL3_Init ( window ,  nullptr ,  nullptr ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  ImGui_ImplSDL3_InitForMetal ( SDL_Window *  window ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    return  ImGui_ImplSDL3_Init ( window ,  nullptr ,  nullptr ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  ImGui_ImplSDL3_InitForSDLRenderer ( SDL_Window *  window ,  SDL_Renderer *  renderer ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    return  ImGui_ImplSDL3_Init ( window ,  renderer ,  nullptr ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:05:46 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  ImGui_ImplSDL3_InitForSDLGPU ( SDL_Window *  window ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  ImGui_ImplSDL3_Init ( window ,  nullptr ,  nullptr ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-09 21:45:33 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								bool  ImGui_ImplSDL3_InitForOther ( SDL_Window *  window ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  ImGui_ImplSDL3_Init ( window ,  nullptr ,  nullptr ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_CloseGamepads ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								void  ImGui_ImplSDL3_Shutdown ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_Data *  bd  =  ImGui_ImplSDL3_GetBackendData ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    IM_ASSERT ( bd  ! =  nullptr  & &  " No platform backend to shutdown, or already shutdown? " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    ImGuiIO &  io  =  ImGui : : GetIO ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:52:57 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ShutdownMultiViewportSupport ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( bd - > ClipboardTextData ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        SDL_free ( bd - > ClipboardTextData ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    for  ( ImGuiMouseCursor  cursor_n  =  0 ;  cursor_n  <  ImGuiMouseCursor_COUNT ;  cursor_n + + ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        SDL_DestroyCursor ( bd - > MouseCursors [ cursor_n ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_CloseGamepads ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    io . BackendPlatformName  =  nullptr ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    io . BackendPlatformUserData  =  nullptr ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    io . BackendFlags  & =  ~ ( ImGuiBackendFlags_HasMouseCursors  |  ImGuiBackendFlags_HasSetMousePos  |  ImGuiBackendFlags_HasGamepad  |  ImGuiBackendFlags_PlatformHasViewports  |  ImGuiBackendFlags_HasMouseHoveredViewport ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    IM_DELETE ( bd ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// This code is incredibly messy because some of the functions we need for full viewport support are not available in SDL < 2.0.4.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_UpdateMouseData ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_Data *  bd  =  ImGui_ImplSDL3_GetBackendData ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    ImGuiIO &  io  =  ImGui : : GetIO ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // We forward mouse input when hovered or captured (via SDL_EVENT_MOUSE_MOTION) or when focused (below)
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# if SDL_HAS_CAPTURE_AND_GLOBAL_MOUSE 
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // - SDL_CaptureMouse() let the OS know e.g. that our drags can extend outside of parent boundaries (we want updated position) and shouldn't trigger other operations outside.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // - Debuggers under Linux tends to leave captured mouse on break, which may be very inconvenient, so to mitigate the issue we wait until mouse has moved to begin capture.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( bd - > MouseCanUseCapture ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        bool  want_capture  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        for  ( int  button_n  =  0 ;  button_n  <  ImGuiMouseButton_COUNT  & &  ! want_capture ;  button_n + + ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( ImGui : : IsMouseDragging ( button_n ,  1.0f ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                want_capture  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        SDL_CaptureMouse ( want_capture ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    SDL_Window *  focused_window  =  SDL_GetKeyboardFocus ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    const  bool  is_app_focused  =  ( focused_window  & &  ( bd - > Window  = =  focused_window  | |  ImGui_ImplSDL3_GetViewportForWindowID ( SDL_GetWindowID ( focused_window ) )  ! =  NULL ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								# else 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SDL_Window *  focused_window  =  bd - > Window ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    const  bool  is_app_focused  =  ( SDL_GetWindowFlags ( bd - > Window )  &  SDL_WINDOW_INPUT_FOCUS )  ! =  0 ;  // SDL 2.0.3 and non-windowed systems: single-viewport only
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( is_app_focused ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:52:57 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        // (Optional) Set OS mouse position from Dear ImGui if requested (rarely used, only when io.ConfigNavMoveSetMousePos is enabled by user)
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        if  ( io . WantSetMousePos ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# if SDL_HAS_CAPTURE_AND_GLOBAL_MOUSE 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( io . ConfigFlags  &  ImGuiConfigFlags_ViewportsEnable ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                SDL_WarpMouseGlobal ( io . MousePos . x ,  io . MousePos . y ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                SDL_WarpMouseInWindow ( bd - > Window ,  io . MousePos . x ,  io . MousePos . y ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        // (Optional) Fallback to provide mouse position when focused (SDL_EVENT_MOUSE_MOTION already provides this when hovered or captured)
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        const  bool  is_relative_mouse_mode  =  SDL_GetWindowRelativeMouseMode ( bd - > Window ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( bd - > MouseCanUseGlobalState  & &  bd - > MouseButtonsDown  = =  0  & &  ! is_relative_mouse_mode ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            // Single-viewport mode: mouse position in client window coordinates (io.MousePos is (0,0) when the mouse is on the upper-left corner of the app window)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            // Multi-viewport mode: mouse position in OS absolute coordinates (io.MousePos is (0,0) when the mouse is on the upper-left of the primary monitor)
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            float  mouse_x ,  mouse_y ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            int  window_x ,  window_y ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            SDL_GetGlobalMouseState ( & mouse_x ,  & mouse_y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( ! ( io . ConfigFlags  &  ImGuiConfigFlags_ViewportsEnable ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                SDL_GetWindowPosition ( focused_window ,  & window_x ,  & window_y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                mouse_x  - =  window_x ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                mouse_y  - =  window_y ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            io . AddMousePosEvent ( ( float ) mouse_x ,  ( float ) mouse_y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // (Optional) When using multiple viewports: call io.AddMouseViewportEvent() with the viewport the OS mouse cursor is hovering.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // If ImGuiBackendFlags_HasMouseHoveredViewport is not set by the backend, Dear imGui will ignore this field and infer the information using its flawed heuristic.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // - [!] SDL backend does NOT correctly ignore viewports with the _NoInputs flag.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    //       Some backend are not able to handle that correctly. If a backend report an hovered viewport that has the _NoInputs flag (e.g. when dragging a window
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    //       for docking, the viewport has the _NoInputs flag in order to allow us to find the viewport under), then Dear ImGui is forced to ignore the value reported
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    //       by the backend, and use its flawed heuristic to guess the viewport behind.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // - [X] SDL backend correctly reports this regardless of another viewport behind focused and dragged from (we need this to find a useful drag and drop target).
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( io . BackendFlags  &  ImGuiBackendFlags_HasMouseHoveredViewport ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ImGuiID  mouse_viewport_id  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        if  ( ImGuiViewport *  mouse_viewport  =  ImGui_ImplSDL3_GetViewportForWindowID ( bd - > MouseWindowID ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            mouse_viewport_id  =  mouse_viewport - > ID ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        io . AddMouseViewportEvent ( mouse_viewport_id ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_UpdateMouseCursor ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGuiIO &  io  =  ImGui : : GetIO ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( io . ConfigFlags  &  ImGuiConfigFlags_NoMouseCursorChange ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        return ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_Data *  bd  =  ImGui_ImplSDL3_GetBackendData ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGuiMouseCursor  imgui_cursor  =  ImGui : : GetMouseCursor ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( io . MouseDrawCursor  | |  imgui_cursor  = =  ImGuiMouseCursor_None ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // Hide OS mouse cursor if imgui is drawing it or if it wants no cursor
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        SDL_HideCursor ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // Show OS mouse cursor
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        SDL_Cursor *  expected_cursor  =  bd - > MouseCursors [ imgui_cursor ]  ?  bd - > MouseCursors [ imgui_cursor ]  :  bd - > MouseCursors [ ImGuiMouseCursor_Arrow ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        if  ( bd - > MouseLastCursor  ! =  expected_cursor ) 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            SDL_SetCursor ( expected_cursor ) ;  // SDL function doesn't have an early out (see #6113)
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            bd - > MouseLastCursor  =  expected_cursor ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        SDL_ShowCursor ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_CloseGamepads ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_Data *  bd  =  ImGui_ImplSDL3_GetBackendData ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( bd - > GamepadMode  ! =  ImGui_ImplSDL3_GamepadMode_Manual ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        for  ( SDL_Gamepad *  gamepad  :  bd - > Gamepads ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            SDL_CloseGamepad ( gamepad ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > Gamepads . resize ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								void  ImGui_ImplSDL3_SetGamepadMode ( ImGui_ImplSDL3_GamepadMode  mode ,  SDL_Gamepad * *  manual_gamepads_array ,  int  manual_gamepads_count ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_Data *  bd  =  ImGui_ImplSDL3_GetBackendData ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_CloseGamepads ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( mode  = =  ImGui_ImplSDL3_GamepadMode_Manual ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:28:38 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        IM_ASSERT ( manual_gamepads_array  ! =  nullptr  | |  manual_gamepads_count  < =  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        for  ( int  n  =  0 ;  n  <  manual_gamepads_count ;  n + + ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            bd - > Gamepads . push_back ( manual_gamepads_array [ n ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        IM_ASSERT ( manual_gamepads_array  = =  nullptr  & &  manual_gamepads_count  < =  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        bd - > WantUpdateGamepadsList  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > GamepadMode  =  mode ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_UpdateGamepadButton ( ImGui_ImplSDL3_Data *  bd ,  ImGuiIO &  io ,  ImGuiKey  key ,  SDL_GamepadButton  button_no ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bool  merged_value  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    for  ( SDL_Gamepad *  gamepad  :  bd - > Gamepads ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        merged_value  | =  SDL_GetGamepadButton ( gamepad ,  button_no )  ! =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    io . AddKeyEvent ( key ,  merged_value ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  inline  float  Saturate ( float  v )  {  return  v  <  0.0f  ?  0.0f  :  v   >  1.0f  ?  1.0f  :  v ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_UpdateGamepadAnalog ( ImGui_ImplSDL3_Data *  bd ,  ImGuiIO &  io ,  ImGuiKey  key ,  SDL_GamepadAxis  axis_no ,  float  v0 ,  float  v1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    float  merged_value  =  0.0f ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    for  ( SDL_Gamepad *  gamepad  :  bd - > Gamepads ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        float  vn  =  Saturate ( ( float ) ( SDL_GetGamepadAxis ( gamepad ,  axis_no )  -  v0 )  /  ( float ) ( v1  -  v0 ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( merged_value  <  vn ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            merged_value  =  vn ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    io . AddKeyAnalogEvent ( key ,  merged_value  >  0.1f ,  merged_value ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_UpdateGamepads ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGuiIO &  io  =  ImGui : : GetIO ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_Data *  bd  =  ImGui_ImplSDL3_GetBackendData ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // Update list of gamepads to use
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( bd - > WantUpdateGamepadsList  & &  bd - > GamepadMode  ! =  ImGui_ImplSDL3_GamepadMode_Manual ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ImGui_ImplSDL3_CloseGamepads ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        int  sdl_gamepads_count  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        SDL_JoystickID *  sdl_gamepads  =  SDL_GetGamepads ( & sdl_gamepads_count ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        for  ( int  n  =  0 ;  n  <  sdl_gamepads_count ;  n + + ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            if  ( SDL_Gamepad *  gamepad  =  SDL_OpenGamepad ( sdl_gamepads [ n ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                bd - > Gamepads . push_back ( gamepad ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                if  ( bd - > GamepadMode  = =  ImGui_ImplSDL3_GamepadMode_AutoFirst ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                    break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        bd - > WantUpdateGamepadsList  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        SDL_free ( sdl_gamepads ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    io . BackendFlags  & =  ~ ImGuiBackendFlags_HasGamepad ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( bd - > Gamepads . Size  = =  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        return ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    io . BackendFlags  | =  ImGuiBackendFlags_HasGamepad ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // Update gamepad inputs
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    const  int  thumb_dead_zone  =  8000 ;            // SDL_gamepad.h suggests using this value.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:10:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadButton ( bd ,  io ,  ImGuiKey_GamepadStart ,        SDL_GAMEPAD_BUTTON_START ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadButton ( bd ,  io ,  ImGuiKey_GamepadBack ,         SDL_GAMEPAD_BUTTON_BACK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadButton ( bd ,  io ,  ImGuiKey_GamepadFaceLeft ,     SDL_GAMEPAD_BUTTON_WEST ) ;            // Xbox X, PS Square
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadButton ( bd ,  io ,  ImGuiKey_GamepadFaceRight ,    SDL_GAMEPAD_BUTTON_EAST ) ;            // Xbox B, PS Circle
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadButton ( bd ,  io ,  ImGuiKey_GamepadFaceUp ,       SDL_GAMEPAD_BUTTON_NORTH ) ;           // Xbox Y, PS Triangle
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadButton ( bd ,  io ,  ImGuiKey_GamepadFaceDown ,     SDL_GAMEPAD_BUTTON_SOUTH ) ;           // Xbox A, PS Cross
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadButton ( bd ,  io ,  ImGuiKey_GamepadDpadLeft ,     SDL_GAMEPAD_BUTTON_DPAD_LEFT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadButton ( bd ,  io ,  ImGuiKey_GamepadDpadRight ,    SDL_GAMEPAD_BUTTON_DPAD_RIGHT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadButton ( bd ,  io ,  ImGuiKey_GamepadDpadUp ,       SDL_GAMEPAD_BUTTON_DPAD_UP ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadButton ( bd ,  io ,  ImGuiKey_GamepadDpadDown ,     SDL_GAMEPAD_BUTTON_DPAD_DOWN ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadButton ( bd ,  io ,  ImGuiKey_GamepadL1 ,           SDL_GAMEPAD_BUTTON_LEFT_SHOULDER ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadButton ( bd ,  io ,  ImGuiKey_GamepadR1 ,           SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadAnalog ( bd ,  io ,  ImGuiKey_GamepadL2 ,           SDL_GAMEPAD_AXIS_LEFT_TRIGGER ,   0.0f ,  32767 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadAnalog ( bd ,  io ,  ImGuiKey_GamepadR2 ,           SDL_GAMEPAD_AXIS_RIGHT_TRIGGER ,  0.0f ,  32767 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadButton ( bd ,  io ,  ImGuiKey_GamepadL3 ,           SDL_GAMEPAD_BUTTON_LEFT_STICK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadButton ( bd ,  io ,  ImGuiKey_GamepadR3 ,           SDL_GAMEPAD_BUTTON_RIGHT_STICK ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadAnalog ( bd ,  io ,  ImGuiKey_GamepadLStickLeft ,   SDL_GAMEPAD_AXIS_LEFTX ,   - thumb_dead_zone ,  - 32768 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadAnalog ( bd ,  io ,  ImGuiKey_GamepadLStickRight ,  SDL_GAMEPAD_AXIS_LEFTX ,   + thumb_dead_zone ,  + 32767 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadAnalog ( bd ,  io ,  ImGuiKey_GamepadLStickUp ,     SDL_GAMEPAD_AXIS_LEFTY ,   - thumb_dead_zone ,  - 32768 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadAnalog ( bd ,  io ,  ImGuiKey_GamepadLStickDown ,   SDL_GAMEPAD_AXIS_LEFTY ,   + thumb_dead_zone ,  + 32767 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadAnalog ( bd ,  io ,  ImGuiKey_GamepadRStickLeft ,   SDL_GAMEPAD_AXIS_RIGHTX ,  - thumb_dead_zone ,  - 32768 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadAnalog ( bd ,  io ,  ImGuiKey_GamepadRStickRight ,  SDL_GAMEPAD_AXIS_RIGHTX ,  + thumb_dead_zone ,  + 32767 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadAnalog ( bd ,  io ,  ImGuiKey_GamepadRStickUp ,     SDL_GAMEPAD_AXIS_RIGHTY ,  - thumb_dead_zone ,  - 32768 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepadAnalog ( bd ,  io ,  ImGuiKey_GamepadRStickDown ,   SDL_GAMEPAD_AXIS_RIGHTY ,  + thumb_dead_zone ,  + 32767 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_UpdateMonitors ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_Data *  bd  =  ImGui_ImplSDL3_GetBackendData ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    ImGuiPlatformIO &  platform_io  =  ImGui : : GetPlatformIO ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    platform_io . Monitors . resize ( 0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    bd - > WantUpdateMonitors  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int  display_count ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    SDL_DisplayID *  displays  =  SDL_GetDisplays ( & display_count ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    for  ( int  n  =  0 ;  n  <  display_count ;  n + + ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        // Warning: the validity of monitor DPI information on Windows depends on the application DPI awareness settings, which generally needs to be set in the manifest or at runtime.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        SDL_DisplayID  display_id  =  displays [ n ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        ImGuiPlatformMonitor  monitor ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        SDL_Rect  r ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        SDL_GetDisplayBounds ( display_id ,  & r ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        monitor . MainPos  =  monitor . WorkPos  =  ImVec2 ( ( float ) r . x ,  ( float ) r . y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        monitor . MainSize  =  monitor . WorkSize  =  ImVec2 ( ( float ) r . w ,  ( float ) r . h ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        if  ( SDL_GetDisplayUsableBounds ( display_id ,  & r )  & &  r . w  >  0  & &  r . h  >  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            monitor . WorkPos  =  ImVec2 ( ( float ) r . x ,  ( float ) r . y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            monitor . WorkSize  =  ImVec2 ( ( float ) r . w ,  ( float ) r . h ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        monitor . DpiScale  =  SDL_GetDisplayContentScale ( display_id ) ;  // See https://wiki.libsdl.org/SDL3/README-highdpi for details.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        monitor . PlatformHandle  =  ( void * ) ( intptr_t ) n ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        if  ( monitor . DpiScale  < =  0.0f ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            continue ;  // Some accessibility applications are declaring virtual monitors with a DPI of 0, see #7902.
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        platform_io . Monitors . push_back ( monitor ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    SDL_free ( displays ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_GetWindowSizeAndFramebufferScale ( SDL_Window *  window ,  ImVec2 *  out_size ,  ImVec2 *  out_framebuffer_scale ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int  w ,  h ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    int  display_w ,  display_h ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SDL_GetWindowSize ( window ,  & w ,  & h ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( SDL_GetWindowFlags ( window )  &  SDL_WINDOW_MINIMIZED ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        w  =  h  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SDL_GetWindowSizeInPixels ( window ,  & display_w ,  & display_h ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( out_size  ! =  nullptr ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        * out_size  =  ImVec2 ( ( float ) w ,  ( float ) h ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( out_framebuffer_scale  ! =  nullptr ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        * out_framebuffer_scale  =  ( w  >  0  & &  h  >  0 )  ?  ImVec2 ( ( float ) display_w  /  w ,  ( float ) display_h  /  h )  :  ImVec2 ( 1.0f ,  1.0f ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								void  ImGui_ImplSDL3_NewFrame ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_Data *  bd  =  ImGui_ImplSDL3_GetBackendData ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:10:39 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    IM_ASSERT ( bd  ! =  nullptr  & &  " Context or backend not initialized! Did you call ImGui_ImplSDL3_Init()? " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    ImGuiIO &  io  =  ImGui : : GetIO ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // Setup main viewport size (every frame to accommodate for window resizing)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_GetWindowSizeAndFramebufferScale ( bd - > Window ,  & io . DisplaySize ,  & io . DisplayFramebufferScale ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // Update monitors
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifdef WIN32 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > WantUpdateMonitors  =  true ;  // Keep polling under Windows to handle changes of work area when resizing task-bar (#8415)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( bd - > WantUpdateMonitors ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ImGui_ImplSDL3_UpdateMonitors ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // Setup time step (we could also use SDL_GetTicksNS() available since SDL3)
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // (Accept SDL_GetPerformanceCounter() not returning a monotonically increasing value. Happens in VMs and Emscripten, see #6189, #6114, #3644)
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    static  Uint64  frequency  =  SDL_GetPerformanceFrequency ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Uint64  current_time  =  SDL_GetPerformanceCounter ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( current_time  < =  bd - > Time ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        current_time  =  bd - > Time  +  1 ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    io . DeltaTime  =  bd - > Time  >  0  ?  ( float ) ( ( double ) ( current_time  -  bd - > Time )  /  frequency )  :  ( float ) ( 1.0f  /  60.0f ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    bd - > Time  =  current_time ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( bd - > MousePendingLeaveFrame  & &  bd - > MousePendingLeaveFrame  > =  ImGui : : GetFrameCount ( )  & &  bd - > MouseButtonsDown  = =  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-18 15:31:29 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        bd - > MouseWindowID  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 04:37:21 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        bd - > MousePendingLeaveFrame  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-18 15:31:29 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        io . AddMousePosEvent ( - FLT_MAX ,  - FLT_MAX ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // Our io.AddMouseViewportEvent() calls will only be valid when not capturing.
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:47:11 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // Technically speaking testing for 'bd->MouseButtonsDown == 0' would be more rigorous, but testing for payload reduces noise and potential side-effects.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( bd - > MouseCanReportHoveredViewport  & &  ImGui : : GetDragDropPayload ( )  = =  nullptr ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        io . BackendFlags  | =  ImGuiBackendFlags_HasMouseHoveredViewport ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        io . BackendFlags  & =  ~ ImGuiBackendFlags_HasMouseHoveredViewport ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateMouseData ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateMouseCursor ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // Update game controllers (if enabled and available)
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_UpdateGamepads ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//--------------------------------------------------------------------------------------------------------
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// MULTI-VIEWPORT / PLATFORM INTERFACE SUPPORT
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// This is an _advanced_ and _optional_ feature, allowing the backend to create and handle multiple viewports simultaneously.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// If you are new to dear imgui or creating a new binding for dear imgui, it is recommended that you completely ignore this section first..
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//--------------------------------------------------------------------------------------------------------
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// Helper structure we store in the void* PlatformUserData field of each ImGuiViewport to easily retrieve our backend data.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								struct  ImGui_ImplSDL3_ViewportData 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SDL_Window *      Window ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:06:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    SDL_Window *      ParentWindow ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    Uint32           WindowID ;        // Stored in ImGuiViewport::PlatformHandle. Use SDL_GetWindowFromID() to get SDL_Window* from Uint32 WindowID.
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    bool             WindowOwned ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SDL_GLContext    GLContext ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:52:18 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData ( )    {  Window  =  ParentWindow  =  nullptr ;  WindowID  =  0 ;  WindowOwned  =  false ;  GLContext  =  nullptr ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ~ ImGui_ImplSDL3_ViewportData ( )   {  IM_ASSERT ( Window  = =  nullptr  & &  GLContext  = =  nullptr ) ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:06:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  SDL_Window *  ImGui_ImplSDL3_GetSDLWindowFromViewportID ( ImGuiID  viewport_id ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( viewport_id  ! =  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( ImGuiViewport *  viewport  =  ImGui : : FindViewportByID ( viewport_id ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            SDL_WindowID  window_id  =  ( SDL_WindowID ) ( intptr_t ) viewport - > PlatformHandle ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            return  SDL_GetWindowFromID ( window_id ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  nullptr ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_CreateWindow ( ImGuiViewport *  viewport ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_Data *  bd  =  ImGui_ImplSDL3_GetBackendData ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  vd  =  IM_NEW ( ImGui_ImplSDL3_ViewportData ) ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    viewport - > PlatformUserData  =  vd ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:06:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    vd - > ParentWindow  =  ImGui_ImplSDL3_GetSDLWindowFromViewportID ( viewport - > ParentViewportId ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    ImGuiViewport *  main_viewport  =  ImGui : : GetMainViewport ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  main_viewport_data  =  ( ImGui_ImplSDL3_ViewportData * ) main_viewport - > PlatformUserData ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // Share GL resources with main context
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    bool  use_opengl  =  ( main_viewport_data - > GLContext  ! =  nullptr ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SDL_GLContext  backup_context  =  nullptr ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    if  ( use_opengl ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        backup_context  =  SDL_GL_GetCurrentContext ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        SDL_GL_SetAttribute ( SDL_GL_SHARE_WITH_CURRENT_CONTEXT ,  1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        SDL_GL_MakeCurrent ( main_viewport_data - > Window ,  main_viewport_data - > GLContext ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:09:28 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    SDL_WindowFlags  sdl_flags  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 17:28:38 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    sdl_flags  | =  SDL_WINDOW_HIDDEN ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    sdl_flags  | =  use_opengl  ?  SDL_WINDOW_OPENGL  :  ( bd - > UseVulkan  ?  SDL_WINDOW_VULKAN  :  0 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 16:09:28 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    sdl_flags  | =  SDL_GetWindowFlags ( bd - > Window )  &  SDL_WINDOW_HIGH_PIXEL_DENSITY ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    sdl_flags  | =  ( viewport - > Flags  &  ImGuiViewportFlags_NoDecoration )  ?  SDL_WINDOW_BORDERLESS  :  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    sdl_flags  | =  ( viewport - > Flags  &  ImGuiViewportFlags_NoDecoration )  ?  0  :  SDL_WINDOW_RESIZABLE ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-30 01:42:51 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    sdl_flags  | =  ( viewport - > Flags  &  ImGuiViewportFlags_NoTaskBarIcon )  ?  SDL_WINDOW_UTILITY  :  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    sdl_flags  | =  ( viewport - > Flags  &  ImGuiViewportFlags_TopMost )  ?  SDL_WINDOW_ALWAYS_ON_TOP  :  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    vd - > Window  =  SDL_CreateWindow ( " No Title Yet " ,  ( int ) viewport - > Size . x ,  ( int ) viewport - > Size . y ,  sdl_flags ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifndef __APPLE__  // On Mac, SDL3 Parenting appears to prevent viewport from appearing in another monitor
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:06:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    SDL_SetWindowParent ( vd - > Window ,  vd - > ParentWindow ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    SDL_SetWindowPosition ( vd - > Window ,  ( int ) viewport - > Pos . x ,  ( int ) viewport - > Pos . y ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    vd - > WindowOwned  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( use_opengl ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        vd - > GLContext  =  SDL_GL_CreateContext ( vd - > Window ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        SDL_GL_SetSwapInterval ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( use_opengl  & &  backup_context ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        SDL_GL_MakeCurrent ( vd - > Window ,  backup_context ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-09 22:26:36 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_SetupPlatformHandles ( viewport ,  vd - > Window ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_DestroyWindow ( ImGuiViewport *  viewport ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  ( ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  ( vd - > GLContext  & &  vd - > WindowOwned ) 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 06:07:58 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            SDL_GL_DestroyContext ( vd - > GLContext ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        if  ( vd - > Window  & &  vd - > WindowOwned ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            SDL_DestroyWindow ( vd - > Window ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        vd - > GLContext  =  nullptr ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        vd - > Window  =  nullptr ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        IM_DELETE ( vd ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    viewport - > PlatformUserData  =  viewport - > PlatformHandle  =  nullptr ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_ShowWindow ( ImGuiViewport *  viewport ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# if defined(_WIN32) && !(defined(WINAPI_FAMILY) && ((defined(WINAPI_FAMILY_APP) && WINAPI_FAMILY == WINAPI_FAMILY_APP) || (defined(WINAPI_FAMILY_GAMES) && WINAPI_FAMILY == WINAPI_FAMILY_GAMES))) 
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    HWND  hwnd  =  ( HWND ) viewport - > PlatformHandleRaw ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:06:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // SDL hack: Show icon in task bar (#7989)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // Note: SDL_WINDOW_UTILITY can be used to control task bar visibility, but on Windows, it does not affect child windows.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( ! ( viewport - > Flags  &  ImGuiViewportFlags_NoTaskBarIcon ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        LONG  ex_style  =  : : GetWindowLong ( hwnd ,  GWL_EXSTYLE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:06:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        ex_style  | =  WS_EX_APPWINDOW ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ex_style  & =  ~ WS_EX_TOOLWINDOW ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        : : ShowWindow ( hwnd ,  SW_HIDE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								        : : SetWindowLong ( hwnd ,  GWL_EXSTYLE ,  ex_style ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifdef __APPLE__ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SDL_SetHint ( SDL_HINT_WINDOW_ACTIVATE_WHEN_SHOWN ,  " 1 " ) ;  // Otherwise new window appear under
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# else 
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    SDL_SetHint ( SDL_HINT_WINDOW_ACTIVATE_WHEN_SHOWN ,  ( viewport - > Flags  &  ImGuiViewportFlags_NoFocusOnAppearing )  ?  " 0 "  :  " 1 " ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    SDL_ShowWindow ( vd - > Window ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:06:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_UpdateWindow ( ImGuiViewport *  viewport ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    IM_UNUSED ( vd ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:06:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifndef __APPLE__  // On Mac, SDL3 Parenting appears to prevent viewport from appearing in another monitor
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:06:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    // Update SDL3 parent if it changed _after_ creation.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // This is for advanced apps that are manipulating ParentViewportID manually.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SDL_Window *  new_parent  =  ImGui_ImplSDL3_GetSDLWindowFromViewportID ( viewport - > ParentViewportId ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    if  ( new_parent  ! =  vd - > ParentWindow ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        vd - > ParentWindow  =  new_parent ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        SDL_SetWindowParent ( vd - > Window ,  vd - > ParentWindow ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:06:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  ImVec2  ImGui_ImplSDL3_GetWindowPos ( ImGuiViewport *  viewport ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    int  x  =  0 ,  y  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SDL_GetWindowPosition ( vd - > Window ,  & x ,  & y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  ImVec2 ( ( float ) x ,  ( float ) y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_SetWindowPos ( ImGuiViewport *  viewport ,  ImVec2  pos ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    SDL_SetWindowPosition ( vd - > Window ,  ( int ) pos . x ,  ( int ) pos . y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  ImVec2  ImGui_ImplSDL3_GetWindowSize ( ImGuiViewport *  viewport ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    int  w  =  0 ,  h  =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    SDL_GetWindowSize ( vd - > Window ,  & w ,  & h ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  ImVec2 ( ( float ) w ,  ( float ) h ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_SetWindowSize ( ImGuiViewport *  viewport ,  ImVec2  size ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    SDL_SetWindowSize ( vd - > Window ,  ( int ) size . x ,  ( int ) size . y ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  ImVec2  ImGui_ImplSDL3_GetWindowFramebufferScale ( ImGuiViewport *  viewport ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImVec2  framebuffer_scale ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_GetWindowSizeAndFramebufferScale ( vd - > Window ,  nullptr ,  & framebuffer_scale ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  framebuffer_scale ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_SetWindowTitle ( ImGuiViewport *  viewport ,  const  char *  title ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    SDL_SetWindowTitle ( vd - > Window ,  title ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_SetWindowAlpha ( ImGuiViewport *  viewport ,  float  alpha ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    SDL_SetWindowOpacity ( vd - > Window ,  alpha ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_SetWindowFocus ( ImGuiViewport *  viewport ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    SDL_RaiseWindow ( vd - > Window ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  bool  ImGui_ImplSDL3_GetWindowFocus ( ImGuiViewport *  viewport ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    return  ( SDL_GetWindowFlags ( vd - > Window )  &  SDL_WINDOW_INPUT_FOCUS )  ! =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  bool  ImGui_ImplSDL3_GetWindowMinimized ( ImGuiViewport *  viewport ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    return  ( SDL_GetWindowFlags ( vd - > Window )  &  SDL_WINDOW_MINIMIZED )  ! =  0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_RenderWindow ( ImGuiViewport *  viewport ,  void * ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    if  ( vd - > GLContext ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        SDL_GL_MakeCurrent ( vd - > Window ,  vd - > GLContext ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_SwapBuffers ( ImGuiViewport *  viewport ,  void * ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    if  ( vd - > GLContext ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        SDL_GL_MakeCurrent ( vd - > Window ,  vd - > GLContext ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        SDL_GL_SwapWindow ( vd - > Window ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Vulkan support (the Vulkan renderer needs to call a platform-side support function to create the surface)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// SDL is graceful enough to _not_ need <vulkan/vulkan.h> so we can safely include this.
 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  <SDL3/SDL_vulkan.h> 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  int  ImGui_ImplSDL3_CreateVkSurface ( ImGuiViewport *  viewport ,  ImU64  vk_instance ,  const  void *  vk_allocator ,  ImU64 *  out_vk_surface ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    ( void ) vk_allocator ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    bool  ret  =  SDL_Vulkan_CreateSurface ( vd - > Window ,  ( VkInstance ) vk_instance ,  ( const  VkAllocationCallbacks * ) vk_allocator ,  ( VkSurfaceKHR * ) out_vk_surface ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    return  ret  ?  0  :  1 ;  // ret ? VK_SUCCESS : VK_NOT_READY
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:52:57 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_InitMultiViewportSupport ( SDL_Window *  window ,  void *  sdl_gl_context ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // Register platform interface (will be coupled with a renderer interface)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGuiPlatformIO &  platform_io  =  ImGui : : GetPlatformIO ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    platform_io . Platform_CreateWindow  =  ImGui_ImplSDL3_CreateWindow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    platform_io . Platform_DestroyWindow  =  ImGui_ImplSDL3_DestroyWindow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    platform_io . Platform_ShowWindow  =  ImGui_ImplSDL3_ShowWindow ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:06:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    platform_io . Platform_UpdateWindow  =  ImGui_ImplSDL3_UpdateWindow ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    platform_io . Platform_SetWindowPos  =  ImGui_ImplSDL3_SetWindowPos ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    platform_io . Platform_GetWindowPos  =  ImGui_ImplSDL3_GetWindowPos ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    platform_io . Platform_SetWindowSize  =  ImGui_ImplSDL3_SetWindowSize ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    platform_io . Platform_GetWindowSize  =  ImGui_ImplSDL3_GetWindowSize ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 21:40:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    platform_io . Platform_GetWindowFramebufferScale  =  ImGui_ImplSDL3_GetWindowFramebufferScale ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    platform_io . Platform_SetWindowFocus  =  ImGui_ImplSDL3_SetWindowFocus ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    platform_io . Platform_GetWindowFocus  =  ImGui_ImplSDL3_GetWindowFocus ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    platform_io . Platform_GetWindowMinimized  =  ImGui_ImplSDL3_GetWindowMinimized ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    platform_io . Platform_SetWindowTitle  =  ImGui_ImplSDL3_SetWindowTitle ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    platform_io . Platform_RenderWindow  =  ImGui_ImplSDL3_RenderWindow ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    platform_io . Platform_SwapBuffers  =  ImGui_ImplSDL3_SwapBuffers ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    platform_io . Platform_SetWindowAlpha  =  ImGui_ImplSDL3_SetWindowAlpha ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    platform_io . Platform_CreateVkSurface  =  ImGui_ImplSDL3_CreateVkSurface ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // Register main window handle (which is owned by the main application, not by us)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    // This is mostly for simplicity and consistency, so that our code (e.g. mouse handling etc.) can use same logic for main and secondary viewports.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGuiViewport *  main_viewport  =  ImGui : : GetMainViewport ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ImGui_ImplSDL3_ViewportData *  vd  =  IM_NEW ( ImGui_ImplSDL3_ViewportData ) ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    vd - > Window  =  window ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    vd - > WindowID  =  SDL_GetWindowID ( window ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    vd - > WindowOwned  =  false ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 05:47:11 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    vd - > GLContext  =  ( SDL_GLContext ) sdl_gl_context ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								    main_viewport - > PlatformUserData  =  vd ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-08-10 17:25:20 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    main_viewport - > PlatformHandle  =  ( void * ) ( intptr_t ) vd - > WindowID ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-08-11 15:52:57 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  void  ImGui_ImplSDL3_ShutdownMultiViewportSupport ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-08 02:04:23 -05:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ImGui : : DestroyPlatformWindows ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-08-30 01:42:51 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//-----------------------------------------------------------------------------
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-06-08 01:29:16 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# if defined(__clang__) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# pragma clang diagnostic pop 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
									
										
										
										
											2023-08-30 01:42:51 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif  // #ifndef IMGUI_DISABLE