mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 15:11:05 +01:00 
			
		
		
		
	Backends: SDL2,SDL3: tidying up.
This commit is contained in:
		@@ -103,16 +103,18 @@
 | 
				
			|||||||
// SDL Data
 | 
					// SDL Data
 | 
				
			||||||
struct ImGui_ImplSDL2_Data
 | 
					struct ImGui_ImplSDL2_Data
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    SDL_Window*     Window;
 | 
					    SDL_Window*             Window;
 | 
				
			||||||
    SDL_Renderer*   Renderer;
 | 
					    SDL_Renderer*           Renderer;
 | 
				
			||||||
    Uint64          Time;
 | 
					    Uint64                  Time;
 | 
				
			||||||
    Uint32          MouseWindowID;
 | 
					    char*                   ClipboardTextData;
 | 
				
			||||||
    int             MouseButtonsDown;
 | 
					
 | 
				
			||||||
    SDL_Cursor*     MouseCursors[ImGuiMouseCursor_COUNT];
 | 
					    // Mouse handling
 | 
				
			||||||
    SDL_Cursor*     LastMouseCursor;
 | 
					    Uint32                  MouseWindowID;
 | 
				
			||||||
    int             PendingMouseLeaveFrame;
 | 
					    int                     MouseButtonsDown;
 | 
				
			||||||
    char*           ClipboardTextData;
 | 
					    SDL_Cursor*             MouseCursors[ImGuiMouseCursor_COUNT];
 | 
				
			||||||
    bool            MouseCanUseGlobalState;
 | 
					    SDL_Cursor*             MouseLastCursor;
 | 
				
			||||||
 | 
					    int                     MouseLastLeaveFrame;
 | 
				
			||||||
 | 
					    bool                    MouseCanUseGlobalState;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImGui_ImplSDL2_Data()   { memset((void*)this, 0, sizeof(*this)); }
 | 
					    ImGui_ImplSDL2_Data()   { memset((void*)this, 0, sizeof(*this)); }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -368,10 +370,10 @@ bool ImGui_ImplSDL2_ProcessEvent(const SDL_Event* event)
 | 
				
			|||||||
            if (window_event == SDL_WINDOWEVENT_ENTER)
 | 
					            if (window_event == SDL_WINDOWEVENT_ENTER)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                bd->MouseWindowID = event->window.windowID;
 | 
					                bd->MouseWindowID = event->window.windowID;
 | 
				
			||||||
                bd->PendingMouseLeaveFrame = 0;
 | 
					                bd->MouseLastLeaveFrame = 0;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (window_event == SDL_WINDOWEVENT_LEAVE)
 | 
					            if (window_event == SDL_WINDOWEVENT_LEAVE)
 | 
				
			||||||
                bd->PendingMouseLeaveFrame = ImGui::GetFrameCount() + 1;
 | 
					                bd->MouseLastLeaveFrame = ImGui::GetFrameCount() + 1;
 | 
				
			||||||
            if (window_event == SDL_WINDOWEVENT_FOCUS_GAINED)
 | 
					            if (window_event == SDL_WINDOWEVENT_FOCUS_GAINED)
 | 
				
			||||||
                io.AddFocusEvent(true);
 | 
					                io.AddFocusEvent(true);
 | 
				
			||||||
            else if (event->window.event == SDL_WINDOWEVENT_FOCUS_LOST)
 | 
					            else if (event->window.event == SDL_WINDOWEVENT_FOCUS_LOST)
 | 
				
			||||||
@@ -511,7 +513,7 @@ void ImGui_ImplSDL2_Shutdown()
 | 
				
			|||||||
        SDL_free(bd->ClipboardTextData);
 | 
					        SDL_free(bd->ClipboardTextData);
 | 
				
			||||||
    for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_COUNT; cursor_n++)
 | 
					    for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_COUNT; cursor_n++)
 | 
				
			||||||
        SDL_FreeCursor(bd->MouseCursors[cursor_n]);
 | 
					        SDL_FreeCursor(bd->MouseCursors[cursor_n]);
 | 
				
			||||||
    bd->LastMouseCursor = nullptr;
 | 
					    bd->MouseLastCursor = nullptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    io.BackendPlatformName = nullptr;
 | 
					    io.BackendPlatformName = nullptr;
 | 
				
			||||||
    io.BackendPlatformUserData = nullptr;
 | 
					    io.BackendPlatformUserData = nullptr;
 | 
				
			||||||
@@ -567,10 +569,10 @@ static void ImGui_ImplSDL2_UpdateMouseCursor()
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        // Show OS mouse cursor
 | 
					        // Show OS mouse cursor
 | 
				
			||||||
        SDL_Cursor* expected_cursor = bd->MouseCursors[imgui_cursor] ? bd->MouseCursors[imgui_cursor] : bd->MouseCursors[ImGuiMouseCursor_Arrow];
 | 
					        SDL_Cursor* expected_cursor = bd->MouseCursors[imgui_cursor] ? bd->MouseCursors[imgui_cursor] : bd->MouseCursors[ImGuiMouseCursor_Arrow];
 | 
				
			||||||
        if (bd->LastMouseCursor != expected_cursor)
 | 
					        if (bd->MouseLastCursor != expected_cursor)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            SDL_SetCursor(expected_cursor); // SDL function doesn't have an early out (see #6113)
 | 
					            SDL_SetCursor(expected_cursor); // SDL function doesn't have an early out (see #6113)
 | 
				
			||||||
            bd->LastMouseCursor = expected_cursor;
 | 
					            bd->MouseLastCursor = expected_cursor;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        SDL_ShowCursor(SDL_TRUE);
 | 
					        SDL_ShowCursor(SDL_TRUE);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -651,10 +653,10 @@ void ImGui_ImplSDL2_NewFrame()
 | 
				
			|||||||
    io.DeltaTime = bd->Time > 0 ? (float)((double)(current_time - bd->Time) / frequency) : (float)(1.0f / 60.0f);
 | 
					    io.DeltaTime = bd->Time > 0 ? (float)((double)(current_time - bd->Time) / frequency) : (float)(1.0f / 60.0f);
 | 
				
			||||||
    bd->Time = current_time;
 | 
					    bd->Time = current_time;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (bd->PendingMouseLeaveFrame && bd->PendingMouseLeaveFrame >= ImGui::GetFrameCount() && bd->MouseButtonsDown == 0)
 | 
					    if (bd->MouseLastLeaveFrame && bd->MouseLastLeaveFrame >= ImGui::GetFrameCount() && bd->MouseButtonsDown == 0)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        bd->MouseWindowID = 0;
 | 
					        bd->MouseWindowID = 0;
 | 
				
			||||||
        bd->PendingMouseLeaveFrame = 0;
 | 
					        bd->MouseLastLeaveFrame = 0;
 | 
				
			||||||
        io.AddMousePosEvent(-FLT_MAX, -FLT_MAX);
 | 
					        io.AddMousePosEvent(-FLT_MAX, -FLT_MAX);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,16 +61,18 @@
 | 
				
			|||||||
// SDL Data
 | 
					// SDL Data
 | 
				
			||||||
struct ImGui_ImplSDL3_Data
 | 
					struct ImGui_ImplSDL3_Data
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    SDL_Window*     Window;
 | 
					    SDL_Window*             Window;
 | 
				
			||||||
    SDL_Renderer*   Renderer;
 | 
					    SDL_Renderer*           Renderer;
 | 
				
			||||||
    Uint64          Time;
 | 
					    Uint64                  Time;
 | 
				
			||||||
    Uint32          MouseWindowID;
 | 
					    char*                   ClipboardTextData;
 | 
				
			||||||
    int             MouseButtonsDown;
 | 
					
 | 
				
			||||||
    SDL_Cursor*     MouseCursors[ImGuiMouseCursor_COUNT];
 | 
					    // Mouse handling
 | 
				
			||||||
    SDL_Cursor*     LastMouseCursor;
 | 
					    Uint32                  MouseWindowID;
 | 
				
			||||||
    int             PendingMouseLeaveFrame;
 | 
					    int                     MouseButtonsDown;
 | 
				
			||||||
    char*           ClipboardTextData;
 | 
					    SDL_Cursor*             MouseCursors[ImGuiMouseCursor_COUNT];
 | 
				
			||||||
    bool            MouseCanUseGlobalState;
 | 
					    SDL_Cursor*             MouseLastCursor;
 | 
				
			||||||
 | 
					    int                     MousePendingLeaveFrame;
 | 
				
			||||||
 | 
					    bool                    MouseCanUseGlobalState;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImGui_ImplSDL3_Data()   { memset((void*)this, 0, sizeof(*this)); }
 | 
					    ImGui_ImplSDL3_Data()   { memset((void*)this, 0, sizeof(*this)); }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -312,7 +314,7 @@ bool ImGui_ImplSDL3_ProcessEvent(const SDL_Event* event)
 | 
				
			|||||||
        case SDL_EVENT_WINDOW_MOUSE_ENTER:
 | 
					        case SDL_EVENT_WINDOW_MOUSE_ENTER:
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            bd->MouseWindowID = event->window.windowID;
 | 
					            bd->MouseWindowID = event->window.windowID;
 | 
				
			||||||
            bd->PendingMouseLeaveFrame = 0;
 | 
					            bd->MousePendingLeaveFrame = 0;
 | 
				
			||||||
            return true;
 | 
					            return true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // - In some cases, when detaching a window from main viewport SDL may send SDL_WINDOWEVENT_ENTER one frame too late,
 | 
					        // - In some cases, when detaching a window from main viewport SDL may send SDL_WINDOWEVENT_ENTER one frame too late,
 | 
				
			||||||
@@ -321,7 +323,7 @@ bool ImGui_ImplSDL3_ProcessEvent(const SDL_Event* event)
 | 
				
			|||||||
        // FIXME: Unconfirmed whether this is still needed with SDL3.
 | 
					        // FIXME: Unconfirmed whether this is still needed with SDL3.
 | 
				
			||||||
        case SDL_EVENT_WINDOW_MOUSE_LEAVE:
 | 
					        case SDL_EVENT_WINDOW_MOUSE_LEAVE:
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            bd->PendingMouseLeaveFrame = ImGui::GetFrameCount() + 1;
 | 
					            bd->MousePendingLeaveFrame = ImGui::GetFrameCount() + 1;
 | 
				
			||||||
            return true;
 | 
					            return true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        case SDL_EVENT_WINDOW_FOCUS_GAINED:
 | 
					        case SDL_EVENT_WINDOW_FOCUS_GAINED:
 | 
				
			||||||
@@ -455,7 +457,7 @@ void ImGui_ImplSDL3_Shutdown()
 | 
				
			|||||||
        SDL_free(bd->ClipboardTextData);
 | 
					        SDL_free(bd->ClipboardTextData);
 | 
				
			||||||
    for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_COUNT; cursor_n++)
 | 
					    for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_COUNT; cursor_n++)
 | 
				
			||||||
        SDL_DestroyCursor(bd->MouseCursors[cursor_n]);
 | 
					        SDL_DestroyCursor(bd->MouseCursors[cursor_n]);
 | 
				
			||||||
    bd->LastMouseCursor = nullptr;
 | 
					    bd->MouseLastCursor = nullptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    io.BackendPlatformName = nullptr;
 | 
					    io.BackendPlatformName = nullptr;
 | 
				
			||||||
    io.BackendPlatformUserData = nullptr;
 | 
					    io.BackendPlatformUserData = nullptr;
 | 
				
			||||||
@@ -514,10 +516,10 @@ static void ImGui_ImplSDL3_UpdateMouseCursor()
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        // Show OS mouse cursor
 | 
					        // Show OS mouse cursor
 | 
				
			||||||
        SDL_Cursor* expected_cursor = bd->MouseCursors[imgui_cursor] ? bd->MouseCursors[imgui_cursor] : bd->MouseCursors[ImGuiMouseCursor_Arrow];
 | 
					        SDL_Cursor* expected_cursor = bd->MouseCursors[imgui_cursor] ? bd->MouseCursors[imgui_cursor] : bd->MouseCursors[ImGuiMouseCursor_Arrow];
 | 
				
			||||||
        if (bd->LastMouseCursor != expected_cursor)
 | 
					        if (bd->MouseLastCursor != expected_cursor)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            SDL_SetCursor(expected_cursor); // SDL function doesn't have an early out (see #6113)
 | 
					            SDL_SetCursor(expected_cursor); // SDL function doesn't have an early out (see #6113)
 | 
				
			||||||
            bd->LastMouseCursor = expected_cursor;
 | 
					            bd->MouseLastCursor = expected_cursor;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        SDL_ShowCursor();
 | 
					        SDL_ShowCursor();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -595,10 +597,10 @@ void ImGui_ImplSDL3_NewFrame()
 | 
				
			|||||||
    io.DeltaTime = bd->Time > 0 ? (float)((double)(current_time - bd->Time) / frequency) : (float)(1.0f / 60.0f);
 | 
					    io.DeltaTime = bd->Time > 0 ? (float)((double)(current_time - bd->Time) / frequency) : (float)(1.0f / 60.0f);
 | 
				
			||||||
    bd->Time = current_time;
 | 
					    bd->Time = current_time;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (bd->PendingMouseLeaveFrame && bd->PendingMouseLeaveFrame >= ImGui::GetFrameCount() && bd->MouseButtonsDown == 0)
 | 
					    if (bd->MousePendingLeaveFrame && bd->MousePendingLeaveFrame >= ImGui::GetFrameCount() && bd->MouseButtonsDown == 0)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        bd->MouseWindowID = 0;
 | 
					        bd->MouseWindowID = 0;
 | 
				
			||||||
        bd->PendingMouseLeaveFrame = 0;
 | 
					        bd->MousePendingLeaveFrame = 0;
 | 
				
			||||||
        io.AddMousePosEvent(-FLT_MAX, -FLT_MAX);
 | 
					        io.AddMousePosEvent(-FLT_MAX, -FLT_MAX);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user