@ -25,6 +25,7 @@ 
			
		
	
		
		
			
				
					
					// CHANGELOG
 // CHANGELOG
  
			
		
	
		
		
			
				
					
					// (minor and older changes stripped away, please see git history for details)
 // (minor and older changes stripped away, please see git history for details)
  
			
		
	
		
		
			
				
					
					//  2023-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
 //  2023-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
  
			
		
	
		
		
			
				
					
					//  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-10-05: Inputs: Added support for extra ImGuiKey values: F13 to F24 function keys, app back/forward keys.
  
			
		
	
		
		
			
				
					
					//  2023-05-04: Fixed build on Emscripten/iOS/Android. (#6391)
 //  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-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)
  
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -44,10 +45,15 @@ 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					// SDL
 // SDL
  
			
		
	
		
		
			
				
					
					# include  <SDL3/SDL.h> # include  <SDL3/SDL.h>  
			
		
	
		
		
			
				
					
					# include  <SDL3/SDL_syswm.h>  
			
		
	
		
		
			
				
					
					# if defined(__APPLE__) # if defined(__APPLE__)  
			
		
	
		
		
			
				
					
					# include  <TargetConditionals.h> # include  <TargetConditionals.h>  
			
		
	
		
		
			
				
					
					# endif # endif  
			
		
	
		
		
			
				
					
					# ifdef _WIN32  
			
		
	
		
		
			
				
					
					# ifndef WIN32_LEAN_AND_MEAN  
			
		
	
		
		
			
				
					
					# define WIN32_LEAN_AND_MEAN  
			
		
	
		
		
			
				
					
					# endif  
			
		
	
		
		
			
				
					
					# include  <windows.h>  
			
		
	
		
		
			
				
					
					# endif  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					# if !defined(__EMSCRIPTEN__) && !defined(__ANDROID__) && !(defined(__APPLE__) && TARGET_OS_IOS) && !defined(__amigaos4__) # if !defined(__EMSCRIPTEN__) && !defined(__ANDROID__) && !(defined(__APPLE__) && TARGET_OS_IOS) && !defined(__amigaos4__)  
			
		
	
		
		
			
				
					
					# define SDL_HAS_CAPTURE_AND_GLOBAL_MOUSE    1 # define SDL_HAS_CAPTURE_AND_GLOBAL_MOUSE    1  
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -369,10 +375,22 @@ bool ImGui_ImplSDL3_ProcessEvent(const SDL_Event* event) 
			
		
	
		
		
			
				
					
					    return  false ;      return  false ;   
			
		
	
		
		
			
				
					
					} }  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					static  void  ImGui_ImplSDL3_SetupPlatformHandles ( ImGuiViewport *  viewport ,  SDL_Window *  window )  
			
		
	
		
		
			
				
					
					{  
			
		
	
		
		
			
				
					
					    viewport - > PlatformHandle  =  window ;   
			
		
	
		
		
			
				
					
					    viewport - > PlatformHandleRaw  =  nullptr ;   
			
		
	
		
		
			
				
					
					# if defined(__WIN32__) && !defined(__WINRT__)  
			
		
	
		
		
			
				
					
					    viewport - > PlatformHandleRaw  =  ( HWND ) SDL_GetProperty ( SDL_GetWindowProperties ( window ) ,  " SDL.window.win32.hwnd " ,  NULL ) ;   
			
		
	
		
		
			
				
					
					# elif defined(__APPLE__) && defined(SDL_VIDEO_DRIVER_COCOA)  
			
		
	
		
		
			
				
					
					    viewport - > PlatformHandleRaw  =  ( void * ) SDL_GetProperty ( SDL_GetWindowProperties ( window ) ,  " SDL.window.cocoa.window " ,  NULL ) ;   
			
		
	
		
		
			
				
					
					# endif  
			
		
	
		
		
			
				
					
					}  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					static  bool  ImGui_ImplSDL3_Init ( SDL_Window *  window ,  SDL_Renderer *  renderer ,  void *  sdl_gl_context ) static  bool  ImGui_ImplSDL3_Init ( SDL_Window *  window ,  SDL_Renderer *  renderer ,  void *  sdl_gl_context )  
			
		
	
		
		
			
				
					
					{ {  
			
		
	
		
		
			
				
					
					    ImGuiIO &  io  =  ImGui : : GetIO ( ) ;      ImGuiIO &  io  =  ImGui : : GetIO ( ) ;   
			
		
	
		
		
			
				
					
					    IM_ASSERT ( io . BackendPlatformUserData  = =  nullptr  & &  " Already initialized a platform backend! " ) ;      IM_ASSERT ( io . BackendPlatformUserData  = =  nullptr  & &  " Already initialized a platform backend! " ) ;   
			
		
	
		
		
			
				
					
					    IM_UNUSED ( sdl_gl_context ) ;  // Unused in this branch
   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    // Check and store if we are on a SDL backend that supports global mouse position
      // Check and store if we are on a SDL backend that supports global mouse position
   
			
		
	
		
		
			
				
					
					    // ("wayland" and "rpi" don't support it, but we chose to use a white-list instead of a black-list)
      // ("wayland" and "rpi" don't support it, but we chose to use a white-list instead of a black-list)
   
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -426,17 +444,7 @@ static bool ImGui_ImplSDL3_Init(SDL_Window* window, SDL_Renderer* renderer, void 
			
		
	
		
		
			
				
					
					    // Set platform dependent data in viewport
      // Set platform dependent data in viewport
   
			
		
	
		
		
			
				
					
					    // Our mouse update function expect PlatformHandle to be filled for the main viewport
      // Our mouse update function expect PlatformHandle to be filled for the main viewport
   
			
		
	
		
		
			
				
					
					    ImGuiViewport *  main_viewport  =  ImGui : : GetMainViewport ( ) ;      ImGuiViewport *  main_viewport  =  ImGui : : GetMainViewport ( ) ;   
			
		
	
		
		
			
				
					
					    main_viewport - > PlatformHandle  =  ( void * ) window ;      ImGui_ImplSDL3_SetupPlatformHandles ( main_viewport ,  window ) ;   
			
				
				
			
		
	
		
		
			
				
					
					    main_viewport - > PlatformHandleRaw  =  nullptr ;   
			
		
	
		
		
			
				
					
					    SDL_SysWMinfo  info ;   
			
		
	
		
		
			
				
					
					    if  ( SDL_GetWindowWMInfo ( window ,  & info ,  SDL_SYSWM_CURRENT_VERSION )  = =  0 )   
			
		
	
		
		
			
				
					
					    {   
			
		
	
		
		
			
				
					
					# if defined(SDL_ENABLE_SYSWM_WINDOWS)  
			
		
	
		
		
			
				
					
					        main_viewport - > PlatformHandleRaw  =  ( void * ) info . info . win . window ;   
			
		
	
		
		
			
				
					
					# elif defined(__APPLE__) && defined(SDL_ENABLE_SYSWM_COCOA)  
			
		
	
		
		
			
				
					
					        main_viewport - > PlatformHandleRaw  =  ( void * ) info . info . cocoa . window ;   
			
		
	
		
		
			
				
					
					# endif  
			
		
	
		
		
			
				
					
					    }   
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    // From 2.0.5: Set SDL hint to receive mouse click events on window focus, otherwise SDL doesn't emit the event.
      // From 2.0.5: Set SDL hint to receive mouse click events on window focus, otherwise SDL doesn't emit the event.
   
			
		
	
		
		
			
				
					
					    // Without this, when clicking to gain focus, our widgets wouldn't activate even though they showed as hovered.
      // Without this, when clicking to gain focus, our widgets wouldn't activate even though they showed as hovered.
   
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -626,10 +634,10 @@ static void ImGui_ImplSDL3_UpdateGamepads() 
			
		
	
		
		
			
				
					
					    const  int  thumb_dead_zone  =  8000 ;            // SDL_gamecontroller.h suggests using this value.
      const  int  thumb_dead_zone  =  8000 ;            // SDL_gamecontroller.h suggests using this value.
   
			
		
	
		
		
			
				
					
					    MAP_BUTTON ( ImGuiKey_GamepadStart ,            SDL_GAMEPAD_BUTTON_START ) ;      MAP_BUTTON ( ImGuiKey_GamepadStart ,            SDL_GAMEPAD_BUTTON_START ) ;   
			
		
	
		
		
			
				
					
					    MAP_BUTTON ( ImGuiKey_GamepadBack ,             SDL_GAMEPAD_BUTTON_BACK ) ;      MAP_BUTTON ( ImGuiKey_GamepadBack ,             SDL_GAMEPAD_BUTTON_BACK ) ;   
			
		
	
		
		
			
				
					
					    MAP_BUTTON ( ImGuiKey_GamepadFaceLeft ,         SDL_GAMEPAD_BUTTON_X  ) ;                // Xbox X, PS Square
      MAP_BUTTON ( ImGuiKey_GamepadFaceLeft ,         SDL_GAMEPAD_BUTTON_WEST  ) ;            // Xbox X, PS Square
   
			
				
				
			
		
	
		
		
			
				
					
					    MAP_BUTTON ( ImGuiKey_GamepadFaceRight ,        SDL_GAMEPAD_BUTTON_B  ) ;                // Xbox B, PS Circle
      MAP_BUTTON ( ImGuiKey_GamepadFaceRight ,        SDL_GAMEPAD_BUTTON_EAST  ) ;            // Xbox B, PS Circle
   
			
				
				
			
		
	
		
		
			
				
					
					    MAP_BUTTON ( ImGuiKey_GamepadFaceUp ,           SDL_GAMEPAD_BUTTON_Y  ) ;                // Xbox Y, PS Triangle
      MAP_BUTTON ( ImGuiKey_GamepadFaceUp ,           SDL_GAMEPAD_BUTTON_NORTH  ) ;           // Xbox Y, PS Triangle
   
			
				
				
			
		
	
		
		
			
				
					
					    MAP_BUTTON ( ImGuiKey_GamepadFaceDown ,         SDL_GAMEPAD_BUTTON_A  ) ;                // Xbox A, PS Cross
      MAP_BUTTON ( ImGuiKey_GamepadFaceDown ,         SDL_GAMEPAD_BUTTON_SOUTH  ) ;           // Xbox A, PS Cross
   
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					    MAP_BUTTON ( ImGuiKey_GamepadDpadLeft ,         SDL_GAMEPAD_BUTTON_DPAD_LEFT ) ;      MAP_BUTTON ( ImGuiKey_GamepadDpadLeft ,         SDL_GAMEPAD_BUTTON_DPAD_LEFT ) ;   
			
		
	
		
		
			
				
					
					    MAP_BUTTON ( ImGuiKey_GamepadDpadRight ,        SDL_GAMEPAD_BUTTON_DPAD_RIGHT ) ;      MAP_BUTTON ( ImGuiKey_GamepadDpadRight ,        SDL_GAMEPAD_BUTTON_DPAD_RIGHT ) ;   
			
		
	
		
		
			
				
					
					    MAP_BUTTON ( ImGuiKey_GamepadDpadUp ,           SDL_GAMEPAD_BUTTON_DPAD_UP ) ;      MAP_BUTTON ( ImGuiKey_GamepadDpadUp ,           SDL_GAMEPAD_BUTTON_DPAD_UP ) ;   
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -790,17 +798,7 @@ static void ImGui_ImplSDL3_CreateWindow(ImGuiViewport* viewport) 
			
		
	
		
		
			
				
					
					    if  ( use_opengl  & &  backup_context )      if  ( use_opengl  & &  backup_context )   
			
		
	
		
		
			
				
					
					        SDL_GL_MakeCurrent ( vd - > Window ,  backup_context ) ;          SDL_GL_MakeCurrent ( vd - > Window ,  backup_context ) ;   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    viewport - > PlatformHandle  =  ( void * ) vd - > Window ;      ImGui_ImplSDL3_SetupPlatformHandles ( viewport ,  vd - > Window ) ;   
			
				
				
			
		
	
		
		
			
				
					
					    viewport - > PlatformHandleRaw  =  nullptr ;   
			
		
	
		
		
			
				
					
					    SDL_SysWMinfo  info ;   
			
		
	
		
		
			
				
					
					    if  ( SDL_GetWindowWMInfo ( vd - > Window ,  & info ,  SDL_SYSWM_CURRENT_VERSION ) )   
			
		
	
		
		
			
				
					
					    {   
			
		
	
		
		
			
				
					
					# if defined(SDL_VIDEO_DRIVER_WINDOWS)  
			
		
	
		
		
			
				
					
					        viewport - > PlatformHandleRaw  =  info . info . win . window ;   
			
		
	
		
		
			
				
					
					# elif defined(__APPLE__) && defined(SDL_VIDEO_DRIVER_COCOA)  
			
		
	
		
		
			
				
					
					        viewport - > PlatformHandleRaw  =  ( void * ) info . info . cocoa . window ;   
			
		
	
		
		
			
				
					
					# endif  
			
		
	
		
		
			
				
					
					    }   
			
		
	
		
		
	
		
		
			
				
					
					} }  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					static  void  ImGui_ImplSDL3_DestroyWindow ( ImGuiViewport *  viewport ) static  void  ImGui_ImplSDL3_DestroyWindow ( ImGuiViewport *  viewport )  
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -927,7 +925,7 @@ static int ImGui_ImplSDL3_CreateVkSurface(ImGuiViewport* viewport, ImU64 vk_inst 
			
		
	
		
		
			
				
					
					{ {  
			
		
	
		
		
			
				
					
					    ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ;      ImGui_ImplSDL3_ViewportData *  vd  =  ( ImGui_ImplSDL3_ViewportData * ) viewport - > PlatformUserData ;   
			
		
	
		
		
			
				
					
					    ( void ) vk_allocator ;      ( void ) vk_allocator ;   
			
		
	
		
		
			
				
					
					    SDL_bool  ret  =  SDL_Vulkan_CreateSurface ( vd - > Window ,  ( VkInstance ) vk_instance ,  ( VkSurfaceKHR * ) out_vk_surface ) ;      SDL_bool  ret  =  SDL_Vulkan_CreateSurface ( vd - > Window ,  ( VkInstance ) vk_instance ,  ( VkAllocationCallbacks * ) vk_allocator ,  ( Vk SurfaceKHR * ) out_vk_surface ) ;   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					    return  ret  ?  0  :  1 ;  // ret ? VK_SUCCESS : VK_NOT_READY
      return  ret  ?  0  :  1 ;  // ret ? VK_SUCCESS : VK_NOT_READY
   
			
		
	
		
		
			
				
					
					} }