mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-11-04 09:44:29 +00:00 
			
		
		
		
	Backends: SDL2:+SDL3 Implement SetPlatformImeDataFn (amends). (#6071, #1953) + fix SDL3 setting PlatformHandleRaw. (#6146)
This commit is contained in:
		@@ -8,8 +8,7 @@
 | 
				
			|||||||
//  [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 will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set]
 | 
					//  [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 will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set]
 | 
				
			||||||
//  [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'.
 | 
					//  [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'.
 | 
				
			||||||
//  [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'.
 | 
					//  [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'.
 | 
				
			||||||
// Missing features:
 | 
					//  [X] Platform: Basic IME support. App needs to call 'SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");' before SDL_CreateWindow()!.
 | 
				
			||||||
//  [ ] Platform: SDL2 handling of IME under Windows appears to be broken and it explicitly disable the regular Windows IME. You can restore Windows IME by compiling SDL with SDL_DISABLE_WINDOWS_IME.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.
 | 
					// 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.
 | 
					// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need.
 | 
				
			||||||
@@ -18,6 +17,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-02-07: Implement IME handler (io.SetPlatformImeDataFn will call SDL_SetTextInputRect()/SDL_StartTextInput()).
 | 
				
			||||||
//  2023-02-07: *BREAKING CHANGE* Renamed this backend file from imgui_impl_sdl.cpp/.h to imgui_impl_sdl2.cpp/.h in prevision for the future release of SDL3.
 | 
					//  2023-02-07: *BREAKING CHANGE* Renamed this backend file from imgui_impl_sdl.cpp/.h to imgui_impl_sdl2.cpp/.h in prevision for the future release of SDL3.
 | 
				
			||||||
//  2023-02-02: Avoid calling SDL_SetCursor() when cursor has not changed, as the function is surprisingly costly on Mac with latest SDL (may be fixed in next SDL version).
 | 
					//  2023-02-02: Avoid calling SDL_SetCursor() when cursor has not changed, as the function is surprisingly costly on Mac with latest SDL (may be fixed in next SDL version).
 | 
				
			||||||
//  2023-02-02: Added support for SDL 2.0.18+ preciseX/preciseY mouse wheel data for smooth scrolling + Scaling X value on Emscripten (bug?). (#4019, #6096)
 | 
					//  2023-02-02: Added support for SDL 2.0.18+ preciseX/preciseY mouse wheel data for smooth scrolling + Scaling X value on Emscripten (bug?). (#4019, #6096)
 | 
				
			||||||
@@ -84,7 +84,6 @@
 | 
				
			|||||||
#define SDL_HAS_CAPTURE_AND_GLOBAL_MOUSE    0
 | 
					#define SDL_HAS_CAPTURE_AND_GLOBAL_MOUSE    0
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#define SDL_HAS_VULKAN                      SDL_VERSION_ATLEAST(2,0,6)
 | 
					#define SDL_HAS_VULKAN                      SDL_VERSION_ATLEAST(2,0,6)
 | 
				
			||||||
#define SDL_HAS_SET_TEXT_INPUT_RECT         SDL_VERSION_ATLEAST(2,0,0)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SDL Data
 | 
					// SDL Data
 | 
				
			||||||
struct ImGui_ImplSDL2_Data
 | 
					struct ImGui_ImplSDL2_Data
 | 
				
			||||||
@@ -127,6 +126,25 @@ static void ImGui_ImplSDL2_SetClipboardText(void*, const char* text)
 | 
				
			|||||||
    SDL_SetClipboardText(text);
 | 
					    SDL_SetClipboardText(text);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Note: native IME will only display if user calls SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1") _before_ SDL_CreateWindow().
 | 
				
			||||||
 | 
					static void ImGui_ImplSDL2_SetPlatformImeData(ImGuiViewport*, ImGuiPlatformImeData* data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (data->WantVisible)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        SDL_Rect r;
 | 
				
			||||||
 | 
					        r.x = (int)data->InputPos.x;
 | 
				
			||||||
 | 
					        r.y = (int)data->InputPos.y;
 | 
				
			||||||
 | 
					        r.w = 1;
 | 
				
			||||||
 | 
					        r.h = (int)data->InputLineHeight;
 | 
				
			||||||
 | 
					        SDL_SetTextInputRect(&r);
 | 
				
			||||||
 | 
					        SDL_StartTextInput();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        SDL_StopTextInput();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static ImGuiKey ImGui_ImplSDL2_KeycodeToImGuiKey(int keycode)
 | 
					static ImGuiKey ImGui_ImplSDL2_KeycodeToImGuiKey(int keycode)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    switch (keycode)
 | 
					    switch (keycode)
 | 
				
			||||||
@@ -337,27 +355,6 @@ bool ImGui_ImplSDL2_ProcessEvent(const SDL_Event* event)
 | 
				
			|||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if SDL_HAS_SET_TEXT_INPUT_RECT
 | 
					 | 
				
			||||||
static void ImGui_ImplSDL2_SetPlatformImeData(ImGuiViewport* viewport, ImGuiPlatformImeData* data)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    (void)viewport;
 | 
					 | 
				
			||||||
    if (data->WantVisible)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        SDL_Rect r;
 | 
					 | 
				
			||||||
        r.x = (int)data->InputPos.x;
 | 
					 | 
				
			||||||
        r.y = (int)data->InputPos.y;
 | 
					 | 
				
			||||||
        r.w = 1;
 | 
					 | 
				
			||||||
        r.h = (int)data->InputLineHeight;
 | 
					 | 
				
			||||||
        SDL_SetTextInputRect(&r);
 | 
					 | 
				
			||||||
        SDL_StartTextInput();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        SDL_StopTextInput();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static bool ImGui_ImplSDL2_Init(SDL_Window* window, SDL_Renderer* renderer)
 | 
					static bool ImGui_ImplSDL2_Init(SDL_Window* window, SDL_Renderer* renderer)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiIO& io = ImGui::GetIO();
 | 
					    ImGuiIO& io = ImGui::GetIO();
 | 
				
			||||||
@@ -388,10 +385,7 @@ static bool ImGui_ImplSDL2_Init(SDL_Window* window, SDL_Renderer* renderer)
 | 
				
			|||||||
    io.SetClipboardTextFn = ImGui_ImplSDL2_SetClipboardText;
 | 
					    io.SetClipboardTextFn = ImGui_ImplSDL2_SetClipboardText;
 | 
				
			||||||
    io.GetClipboardTextFn = ImGui_ImplSDL2_GetClipboardText;
 | 
					    io.GetClipboardTextFn = ImGui_ImplSDL2_GetClipboardText;
 | 
				
			||||||
    io.ClipboardUserData = nullptr;
 | 
					    io.ClipboardUserData = nullptr;
 | 
				
			||||||
 | 
					 | 
				
			||||||
#if SDL_HAS_SET_TEXT_INPUT_RECT
 | 
					 | 
				
			||||||
    io.SetPlatformImeDataFn = ImGui_ImplSDL2_SetPlatformImeData;
 | 
					    io.SetPlatformImeDataFn = ImGui_ImplSDL2_SetPlatformImeData;
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Load mouse cursors
 | 
					    // Load mouse cursors
 | 
				
			||||||
    bd->MouseCursors[ImGuiMouseCursor_Arrow] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
 | 
					    bd->MouseCursors[ImGuiMouseCursor_Arrow] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
 | 
				
			||||||
@@ -428,6 +422,13 @@ static bool ImGui_ImplSDL2_Init(SDL_Window* window, SDL_Renderer* renderer)
 | 
				
			|||||||
    SDL_SetHint(SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH, "1");
 | 
					    SDL_SetHint(SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH, "1");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // From 2.0.18: Enable native IME.
 | 
				
			||||||
 | 
					    // IMPORTANT: This is used at the time of SDL_CreateWindow() so this will only affects secondary windows, if any.
 | 
				
			||||||
 | 
					    // For the main window to be affected, your application needs to call this manually before calling SDL_CreateWindow().
 | 
				
			||||||
 | 
					#ifdef SDL_HINT_IME_SHOW_UI
 | 
				
			||||||
 | 
					    SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // From 2.0.22: Disable auto-capture, this is preventing drag and drop across multiple windows (see #5710)
 | 
					    // From 2.0.22: Disable auto-capture, this is preventing drag and drop across multiple windows (see #5710)
 | 
				
			||||||
#ifdef SDL_HINT_MOUSE_AUTO_CAPTURE
 | 
					#ifdef SDL_HINT_MOUSE_AUTO_CAPTURE
 | 
				
			||||||
    SDL_SetHint(SDL_HINT_MOUSE_AUTO_CAPTURE, "0");
 | 
					    SDL_SetHint(SDL_HINT_MOUSE_AUTO_CAPTURE, "0");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,8 +7,7 @@
 | 
				
			|||||||
//  [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 will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set]
 | 
					//  [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 will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set]
 | 
				
			||||||
//  [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'.
 | 
					//  [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'.
 | 
				
			||||||
//  [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'.
 | 
					//  [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'.
 | 
				
			||||||
// Missing features:
 | 
					//  [X] Platform: Basic IME support. App needs to call 'SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");' before SDL_CreateWindow()!.
 | 
				
			||||||
//  [ ] Platform: SDL2 handling of IME under Windows appears to be broken and it explicitly disable the regular Windows IME. You can restore Windows IME by compiling SDL with SDL_DISABLE_WINDOWS_IME.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.
 | 
					// 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.
 | 
					// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,8 @@
 | 
				
			|||||||
//  [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 will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set]
 | 
					//  [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 will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set]
 | 
				
			||||||
//  [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'.
 | 
					//  [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'.
 | 
				
			||||||
//  [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'.
 | 
					//  [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'.
 | 
				
			||||||
 | 
					// Missing features:
 | 
				
			||||||
 | 
					//  [x] Platform: Basic IME support. Position somehow broken in SDL3 + app needs to call 'SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");' before SDL_CreateWindow()!.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.
 | 
					// 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.
 | 
					// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need.
 | 
				
			||||||
@@ -75,6 +77,24 @@ static void ImGui_ImplSDL3_SetClipboardText(void*, const char* text)
 | 
				
			|||||||
    SDL_SetClipboardText(text);
 | 
					    SDL_SetClipboardText(text);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void ImGui_ImplSDL3_SetPlatformImeData(ImGuiViewport*, ImGuiPlatformImeData* data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (data->WantVisible)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        SDL_Rect r;
 | 
				
			||||||
 | 
					        r.x = (int)data->InputPos.x;
 | 
				
			||||||
 | 
					        r.y = (int)data->InputPos.y;
 | 
				
			||||||
 | 
					        r.w = 1;
 | 
				
			||||||
 | 
					        r.h = (int)data->InputLineHeight;
 | 
				
			||||||
 | 
					        SDL_SetTextInputRect(&r);
 | 
				
			||||||
 | 
					        SDL_StartTextInput();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        SDL_StopTextInput();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static ImGuiKey ImGui_ImplSDL3_KeycodeToImGuiKey(int keycode)
 | 
					static ImGuiKey ImGui_ImplSDL3_KeycodeToImGuiKey(int keycode)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    switch (keycode)
 | 
					    switch (keycode)
 | 
				
			||||||
@@ -310,6 +330,7 @@ static bool ImGui_ImplSDL3_Init(SDL_Window* window, SDL_Renderer* renderer)
 | 
				
			|||||||
    io.SetClipboardTextFn = ImGui_ImplSDL3_SetClipboardText;
 | 
					    io.SetClipboardTextFn = ImGui_ImplSDL3_SetClipboardText;
 | 
				
			||||||
    io.GetClipboardTextFn = ImGui_ImplSDL3_GetClipboardText;
 | 
					    io.GetClipboardTextFn = ImGui_ImplSDL3_GetClipboardText;
 | 
				
			||||||
    io.ClipboardUserData = nullptr;
 | 
					    io.ClipboardUserData = nullptr;
 | 
				
			||||||
 | 
					    io.SetPlatformImeDataFn = ImGui_ImplSDL3_SetPlatformImeData;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Load mouse cursors
 | 
					    // Load mouse cursors
 | 
				
			||||||
    bd->MouseCursors[ImGuiMouseCursor_Arrow] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
 | 
					    bd->MouseCursors[ImGuiMouseCursor_Arrow] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
 | 
				
			||||||
@@ -327,11 +348,11 @@ static bool ImGui_ImplSDL3_Init(SDL_Window* window, SDL_Renderer* renderer)
 | 
				
			|||||||
    ImGuiViewport* main_viewport = ImGui::GetMainViewport();
 | 
					    ImGuiViewport* main_viewport = ImGui::GetMainViewport();
 | 
				
			||||||
    main_viewport->PlatformHandleRaw = nullptr;
 | 
					    main_viewport->PlatformHandleRaw = nullptr;
 | 
				
			||||||
    SDL_SysWMinfo info;
 | 
					    SDL_SysWMinfo info;
 | 
				
			||||||
    if (SDL_GetWindowWMInfo(window, &info, SDL_SYSWM_CURRENT_VERSION))
 | 
					    if (SDL_GetWindowWMInfo(window, &info, SDL_SYSWM_CURRENT_VERSION) == 0)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
#if defined(SDL_VIDEO_DRIVER_WINDOWS)
 | 
					#if defined(SDL_ENABLE_SYSWM_WINDOWS)
 | 
				
			||||||
        main_viewport->PlatformHandleRaw = (void*)info.info.win.window;
 | 
					        main_viewport->PlatformHandleRaw = (void*)info.info.win.window;
 | 
				
			||||||
#elif defined(__APPLE__) && defined(SDL_VIDEO_DRIVER_COCOA)
 | 
					#elif defined(__APPLE__) && defined(SDL_ENABLE_SYSWM_COCOA)
 | 
				
			||||||
        main_viewport->PlatformHandleRaw = (void*)info.info.cocoa.window;
 | 
					        main_viewport->PlatformHandleRaw = (void*)info.info.cocoa.window;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,8 @@
 | 
				
			|||||||
//  [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 will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set]
 | 
					//  [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 will also be supported unless IMGUI_DISABLE_OBSOLETE_KEYIO is set]
 | 
				
			||||||
//  [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'.
 | 
					//  [X] Platform: Gamepad support. Enabled with 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad'.
 | 
				
			||||||
//  [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'.
 | 
					//  [X] Platform: Mouse cursor shape and visibility. Disable with 'io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange'.
 | 
				
			||||||
 | 
					// Missing features:
 | 
				
			||||||
 | 
					//  [x] Platform: Basic IME support. Position somehow broken in SDL3 + app needs to call 'SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");' before SDL_CreateWindow()!.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// You can use unmodified imgui_impl_* files in your project. See examples/ folder for examples of using this.
 | 
					// 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.
 | 
					// Prefer including the entire imgui/ repository into your project (either as a copy or as a submodule), and only build the backends you need.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -98,6 +98,9 @@ All changes:
 | 
				
			|||||||
  for smooth scrolling as reported by SDL. (#4019, #6096)
 | 
					  for smooth scrolling as reported by SDL. (#4019, #6096)
 | 
				
			||||||
- Backends: SDL2: Avoid calling SDL_SetCursor() when cursor has not changed, as the function
 | 
					- Backends: SDL2: Avoid calling SDL_SetCursor() when cursor has not changed, as the function
 | 
				
			||||||
  is surprisingly costly on Mac with latest SDL (may be fixed in next SDL version). (#6113)
 | 
					  is surprisingly costly on Mac with latest SDL (may be fixed in next SDL version). (#6113)
 | 
				
			||||||
 | 
					- Backends: SDL2: Implement IME handler to call SDL_SetTextInputRect()/SDL_StartTextInput().
 | 
				
			||||||
 | 
					  It will only works with SDL 2.0.18+ if your code calls 'SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1")'
 | 
				
			||||||
 | 
					  prior to calling SDL_CreateWindow(). Updated all examples accordingly. (#6071, #1953)
 | 
				
			||||||
- Backends: SDL3: Added experimental imgui_impl_sdl3.cpp backend. (#6146) [@dovker, @ocornut]
 | 
					- Backends: SDL3: Added experimental imgui_impl_sdl3.cpp backend. (#6146) [@dovker, @ocornut]
 | 
				
			||||||
  SDL 3.0.0 has not yet been released, so it is possible that its specs/api will change before
 | 
					  SDL 3.0.0 has not yet been released, so it is possible that its specs/api will change before
 | 
				
			||||||
  release. This backend is provided as a convenience for early adopters etc. We don't recommend
 | 
					  release. This backend is provided as a convenience for early adopters etc. We don't recommend
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,6 +35,11 @@ int main(int, char**)
 | 
				
			|||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // From 2.0.18: Enable native IME.
 | 
				
			||||||
 | 
					#ifdef SDL_HINT_IME_SHOW_UI
 | 
				
			||||||
 | 
					    SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Setup window
 | 
					    // Setup window
 | 
				
			||||||
    SDL_WindowFlags window_flags = (SDL_WindowFlags)(SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI);
 | 
					    SDL_WindowFlags window_flags = (SDL_WindowFlags)(SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI);
 | 
				
			||||||
    SDL_Window* window = SDL_CreateWindow("Dear ImGui SDL2+DirectX11 example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, window_flags);
 | 
					    SDL_Window* window = SDL_CreateWindow("Dear ImGui SDL2+DirectX11 example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, window_flags);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,6 +53,9 @@ int main(int, char**)
 | 
				
			|||||||
    // Inform SDL that we will be using metal for rendering. Without this hint initialization of metal renderer may fail.
 | 
					    // Inform SDL that we will be using metal for rendering. Without this hint initialization of metal renderer may fail.
 | 
				
			||||||
    SDL_SetHint(SDL_HINT_RENDER_DRIVER, "metal");
 | 
					    SDL_SetHint(SDL_HINT_RENDER_DRIVER, "metal");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Enable native IME.
 | 
				
			||||||
 | 
					    SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    SDL_Window* window = SDL_CreateWindow("Dear ImGui SDL+Metal example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI);
 | 
					    SDL_Window* window = SDL_CreateWindow("Dear ImGui SDL+Metal example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI);
 | 
				
			||||||
    if (window == NULL)
 | 
					    if (window == NULL)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,6 +24,11 @@ int main(int, char**)
 | 
				
			|||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // From 2.0.18: Enable native IME.
 | 
				
			||||||
 | 
					#ifdef SDL_HINT_IME_SHOW_UI
 | 
				
			||||||
 | 
					    SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Setup window
 | 
					    // Setup window
 | 
				
			||||||
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
 | 
					    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
 | 
				
			||||||
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
 | 
					    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,6 +53,11 @@ int main(int, char**)
 | 
				
			|||||||
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
 | 
					    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // From 2.0.18: Enable native IME.
 | 
				
			||||||
 | 
					#ifdef SDL_HINT_IME_SHOW_UI
 | 
				
			||||||
 | 
					    SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Create window with graphics context
 | 
					    // Create window with graphics context
 | 
				
			||||||
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
 | 
					    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
 | 
				
			||||||
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
 | 
					    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,6 +27,11 @@ int main(int, char**)
 | 
				
			|||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // From 2.0.18: Enable native IME.
 | 
				
			||||||
 | 
					#ifdef SDL_HINT_IME_SHOW_UI
 | 
				
			||||||
 | 
					    SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Create window with SDL_Renderer graphics context
 | 
					    // Create window with SDL_Renderer graphics context
 | 
				
			||||||
    SDL_WindowFlags window_flags = (SDL_WindowFlags)(SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI);
 | 
					    SDL_WindowFlags window_flags = (SDL_WindowFlags)(SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI);
 | 
				
			||||||
    SDL_Window* window = SDL_CreateWindow("Dear ImGui SDL2+SDL_Renderer example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, window_flags);
 | 
					    SDL_Window* window = SDL_CreateWindow("Dear ImGui SDL2+SDL_Renderer example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, window_flags);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -350,6 +350,11 @@ int main(int, char**)
 | 
				
			|||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // From 2.0.18: Enable native IME.
 | 
				
			||||||
 | 
					#ifdef SDL_HINT_IME_SHOW_UI
 | 
				
			||||||
 | 
					    SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Create window with Vulkan graphics context
 | 
					    // Create window with Vulkan graphics context
 | 
				
			||||||
    SDL_WindowFlags window_flags = (SDL_WindowFlags)(SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI);
 | 
					    SDL_WindowFlags window_flags = (SDL_WindowFlags)(SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI);
 | 
				
			||||||
    SDL_Window* window = SDL_CreateWindow("Dear ImGui SDL2+Vulkan example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, window_flags);
 | 
					    SDL_Window* window = SDL_CreateWindow("Dear ImGui SDL2+Vulkan example", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, window_flags);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,6 +53,9 @@ int main(int, char**)
 | 
				
			|||||||
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
 | 
					    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Enable native IME.
 | 
				
			||||||
 | 
					    SDL_SetHint(SDL_HINT_IME_SHOW_UI, "1");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Create window with graphics context
 | 
					    // Create window with graphics context
 | 
				
			||||||
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
 | 
					    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
 | 
				
			||||||
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
 | 
					    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,8 +27,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example_sdl2_sdlrenderer",
 | 
				
			|||||||
EndProject
 | 
					EndProject
 | 
				
			||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example_sdl2_vulkan", "example_sdl2_vulkan\example_sdl2_vulkan.vcxproj", "{BAE3D0B5-9695-4EB1-AD0F-75890EB4A3B3}"
 | 
					Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example_sdl2_vulkan", "example_sdl2_vulkan\example_sdl2_vulkan.vcxproj", "{BAE3D0B5-9695-4EB1-AD0F-75890EB4A3B3}"
 | 
				
			||||||
EndProject
 | 
					EndProject
 | 
				
			||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example_sdl3_opengl3", "example_sdl3_opengl3\example_sdl3_opengl3.vcxproj", "{84AAA301-84FE-428B-9E3E-817BC8123C0C}"
 | 
					 | 
				
			||||||
EndProject
 | 
					 | 
				
			||||||
Global
 | 
					Global
 | 
				
			||||||
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
						GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
				
			||||||
		Debug|Win32 = Debug|Win32
 | 
							Debug|Win32 = Debug|Win32
 | 
				
			||||||
@@ -133,14 +131,6 @@ Global
 | 
				
			|||||||
		{BAE3D0B5-9695-4EB1-AD0F-75890EB4A3B3}.Release|Win32.Build.0 = Release|Win32
 | 
							{BAE3D0B5-9695-4EB1-AD0F-75890EB4A3B3}.Release|Win32.Build.0 = Release|Win32
 | 
				
			||||||
		{BAE3D0B5-9695-4EB1-AD0F-75890EB4A3B3}.Release|x64.ActiveCfg = Release|x64
 | 
							{BAE3D0B5-9695-4EB1-AD0F-75890EB4A3B3}.Release|x64.ActiveCfg = Release|x64
 | 
				
			||||||
		{BAE3D0B5-9695-4EB1-AD0F-75890EB4A3B3}.Release|x64.Build.0 = Release|x64
 | 
							{BAE3D0B5-9695-4EB1-AD0F-75890EB4A3B3}.Release|x64.Build.0 = Release|x64
 | 
				
			||||||
		{84AAA301-84FE-428B-9E3E-817BC8123C0C}.Debug|Win32.ActiveCfg = Debug|Win32
 | 
					 | 
				
			||||||
		{84AAA301-84FE-428B-9E3E-817BC8123C0C}.Debug|Win32.Build.0 = Debug|Win32
 | 
					 | 
				
			||||||
		{84AAA301-84FE-428B-9E3E-817BC8123C0C}.Debug|x64.ActiveCfg = Debug|x64
 | 
					 | 
				
			||||||
		{84AAA301-84FE-428B-9E3E-817BC8123C0C}.Debug|x64.Build.0 = Debug|x64
 | 
					 | 
				
			||||||
		{84AAA301-84FE-428B-9E3E-817BC8123C0C}.Release|Win32.ActiveCfg = Release|Win32
 | 
					 | 
				
			||||||
		{84AAA301-84FE-428B-9E3E-817BC8123C0C}.Release|Win32.Build.0 = Release|Win32
 | 
					 | 
				
			||||||
		{84AAA301-84FE-428B-9E3E-817BC8123C0C}.Release|x64.ActiveCfg = Release|x64
 | 
					 | 
				
			||||||
		{84AAA301-84FE-428B-9E3E-817BC8123C0C}.Release|x64.Build.0 = Release|x64
 | 
					 | 
				
			||||||
	EndGlobalSection
 | 
						EndGlobalSection
 | 
				
			||||||
	GlobalSection(SolutionProperties) = preSolution
 | 
						GlobalSection(SolutionProperties) = preSolution
 | 
				
			||||||
		HideSolutionNode = FALSE
 | 
							HideSolutionNode = FALSE
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4819,8 +4819,12 @@ void ImGui::EndFrame()
 | 
				
			|||||||
    ErrorCheckEndFrameSanityChecks();
 | 
					    ErrorCheckEndFrameSanityChecks();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Notify Platform/OS when our Input Method Editor cursor has moved (e.g. CJK inputs using Microsoft IME)
 | 
					    // Notify Platform/OS when our Input Method Editor cursor has moved (e.g. CJK inputs using Microsoft IME)
 | 
				
			||||||
    if (g.IO.SetPlatformImeDataFn && memcmp(&g.PlatformImeData, &g.PlatformImeDataPrev, sizeof(ImGuiPlatformImeData)) != 0)
 | 
					    ImGuiPlatformImeData* ime_data = &g.PlatformImeData;
 | 
				
			||||||
        g.IO.SetPlatformImeDataFn(GetMainViewport(), &g.PlatformImeData);
 | 
					    if (g.IO.SetPlatformImeDataFn && memcmp(ime_data, &g.PlatformImeDataPrev, sizeof(ImGuiPlatformImeData)) != 0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        IMGUI_DEBUG_LOG_IO("Calling io.SetPlatformImeDataFn(): WantVisible: %d, InputPos (%.2f,%.2f)\n", ime_data->WantVisible, ime_data->InputPos.x, ime_data->InputPos.y);
 | 
				
			||||||
 | 
					        g.IO.SetPlatformImeDataFn(GetMainViewport(), ime_data);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Hide implicit/fallback "Debug" window if it hasn't been used
 | 
					    // Hide implicit/fallback "Debug" window if it hasn't been used
 | 
				
			||||||
    g.WithinFrameScopeWithImplicitWindow = false;
 | 
					    g.WithinFrameScopeWithImplicitWindow = false;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user