mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	Merge branch 'master' into navigation
# Conflicts: # imgui.cpp # imgui.h # imgui_demo.cpp # imgui_internal.h
This commit is contained in:
		
							
								
								
									
										110
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										110
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -252,11 +252,13 @@
 | 
				
			|||||||
 Here is a change-log of API breaking changes, if you are using one of the functions listed, expect to have to fix some code.
 | 
					 Here is a change-log of API breaking changes, if you are using one of the functions listed, expect to have to fix some code.
 | 
				
			||||||
 Also read releases logs https://github.com/ocornut/imgui/releases for more details.
 | 
					 Also read releases logs https://github.com/ocornut/imgui/releases for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 - 2017/10/20 (1.52) - changed IsWindowHovered() default parameters behavior to return false if a popup window is blocking access to the window or an item is active in another window. You can use the newly introduced IsWindowHovered() flags to requests those specific behavior if you need them.
 | 
				
			||||||
 | 
					 - 2017/10/20 (1.52) - removed the IsItemRectHovered()/IsWindowRectHovered() names introduced in 1.51, the new flags available for IsItemHovered() and IsWindowHovered() are providing much more details/options, and those legacy entry points were confusing/misleading.
 | 
				
			||||||
 - 2017/10/17 (1.52) - marked the old 5-parameters version of Begin() as obsolete (still available). Use SetNextWindowSize()+Begin() instead!
 | 
					 - 2017/10/17 (1.52) - marked the old 5-parameters version of Begin() as obsolete (still available). Use SetNextWindowSize()+Begin() instead!
 | 
				
			||||||
 - 2017/10/11 (1.52) - renamed AlignFirstTextHeightToWidgets() to AlignTextToFramePadding(). Kept inline redirection function (will obsolete).
 | 
					 - 2017/10/11 (1.52) - renamed AlignFirstTextHeightToWidgets() to AlignTextToFramePadding(). Kept inline redirection function (will obsolete).
 | 
				
			||||||
 - 2017/09/25 (1.52) - removed SetNextWindowPosCenter() because SetNextWindowPos() now has the optional pivot information to do the same and more. Kept redirection function (will obsolete). 
 | 
					 - 2017/09/25 (1.52) - removed SetNextWindowPosCenter() because SetNextWindowPos() now has the optional pivot information to do the same and more. Kept redirection function (will obsolete). 
 | 
				
			||||||
 - 2017/08/25 (1.52) - io.MousePos needs to be set to ImVec2(-FLT_MAX,-FLT_MAX) when mouse is unavailable/missing. Previously ImVec2(-1,-1) was enough but we now accept negative mouse coordinates. In your binding if you need to support unavailable mouse, make sure to replace "io.MousePos = ImVec2(-1,-1)" with "io.MousePos = ImVec2(-FLT_MAX,-FLT_MAX)".
 | 
					 - 2017/08/25 (1.52) - io.MousePos needs to be set to ImVec2(-FLT_MAX,-FLT_MAX) when mouse is unavailable/missing. Previously ImVec2(-1,-1) was enough but we now accept negative mouse coordinates. In your binding if you need to support unavailable mouse, make sure to replace "io.MousePos = ImVec2(-1,-1)" with "io.MousePos = ImVec2(-FLT_MAX,-FLT_MAX)".
 | 
				
			||||||
 - 2017/08/22 (1.51) - renamed IsItemHoveredRect() to IsItemRectHovered(). Kept inline redirection function (will obsolete).
 | 
					 - 2017/08/22 (1.51) - renamed IsItemHoveredRect() to IsItemRectHovered(). Kept inline redirection function (will obsolete). -> (1.52) use IsItemHovered(ImGuiHoveredFlags_RectOnly)! 
 | 
				
			||||||
                     - renamed IsMouseHoveringAnyWindow() to IsAnyWindowHovered() for consistency. Kept inline redirection function (will obsolete).
 | 
					                     - renamed IsMouseHoveringAnyWindow() to IsAnyWindowHovered() for consistency. Kept inline redirection function (will obsolete).
 | 
				
			||||||
                     - renamed IsMouseHoveringWindow() to IsWindowRectHovered() for consistency. Kept inline redirection function (will obsolete).
 | 
					                     - renamed IsMouseHoveringWindow() to IsWindowRectHovered() for consistency. Kept inline redirection function (will obsolete).
 | 
				
			||||||
 - 2017/08/20 (1.51) - renamed GetStyleColName() to GetStyleColorName() for consistency.
 | 
					 - 2017/08/20 (1.51) - renamed GetStyleColName() to GetStyleColorName() for consistency.
 | 
				
			||||||
@@ -681,7 +683,7 @@ static void             MarkIniSettingsDirty(ImGuiWindow* window);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static ImRect           GetVisibleRect();
 | 
					static ImRect           GetVisibleRect();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void             CloseInactivePopups();
 | 
					static void             CloseInactivePopups(ImGuiWindow* ref_window);
 | 
				
			||||||
static void             ClosePopupToLevel(int remaining);
 | 
					static void             ClosePopupToLevel(int remaining);
 | 
				
			||||||
static ImGuiWindow*     GetFrontMostModalRootWindow();
 | 
					static ImGuiWindow*     GetFrontMostModalRootWindow();
 | 
				
			||||||
static ImVec2           FindBestPopupWindowPos(const ImVec2& base_pos, const ImVec2& size, int* last_dir, const ImRect& rect_to_avoid);
 | 
					static ImVec2           FindBestPopupWindowPos(const ImVec2& base_pos, const ImVec2& size, int* last_dir, const ImRect& rect_to_avoid);
 | 
				
			||||||
@@ -2055,15 +2057,22 @@ void ImGui::KeepAliveID(ImGuiID id)
 | 
				
			|||||||
        g.ActiveIdIsAlive = true;
 | 
					        g.ActiveIdIsAlive = true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline bool IsWindowContentHoverable(ImGuiWindow* window)
 | 
					static inline bool IsWindowContentHoverable(ImGuiWindow* window, ImGuiHoveredFlags flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // An active popup disable hovering on other windows (apart from its own children)
 | 
					    // An active popup disable hovering on other windows (apart from its own children)
 | 
				
			||||||
    // FIXME-OPT: This could be cached/stored within the window.
 | 
					    // FIXME-OPT: This could be cached/stored within the window.
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
    if (g.NavWindow)
 | 
					    if (g.NavWindow)
 | 
				
			||||||
        if (ImGuiWindow* focused_root_window = g.NavWindow->RootWindow)
 | 
					        if (ImGuiWindow* focused_root_window = g.NavWindow->RootWindow)
 | 
				
			||||||
            if ((focused_root_window->Flags & ImGuiWindowFlags_Popup) != 0 && focused_root_window->WasActive && focused_root_window != window->RootWindow)
 | 
					            if (focused_root_window->WasActive && focused_root_window != window->RootWindow)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                // For the purpose of those flags we differentiate "standard popup" from "modal popup"
 | 
				
			||||||
 | 
					                // NB: The order of those two tests is important because Modal windows are also Popups.
 | 
				
			||||||
 | 
					                if (focused_root_window->Flags & ImGuiWindowFlags_Modal)
 | 
				
			||||||
                    return false;
 | 
					                    return false;
 | 
				
			||||||
 | 
					                if ((focused_root_window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiHoveredFlags_AllowWhenBlockedByPopup))
 | 
				
			||||||
 | 
					                    return false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -2336,7 +2345,7 @@ bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg)
 | 
				
			|||||||
// This is roughly matching the behavior of internal-facing ItemHoverable()
 | 
					// This is roughly matching the behavior of internal-facing ItemHoverable()
 | 
				
			||||||
// - we allow hovering to be true when ActiveId==window->MoveID, so that clicking on non-interactive items such as a Text() item still returns true with IsItemHovered())
 | 
					// - we allow hovering to be true when ActiveId==window->MoveID, so that clicking on non-interactive items such as a Text() item still returns true with IsItemHovered())
 | 
				
			||||||
// - this should work even for non-interactive items that have no ID, so we cannot use LastItemId
 | 
					// - this should work even for non-interactive items that have no ID, so we cannot use LastItemId
 | 
				
			||||||
bool ImGui::IsItemHovered()
 | 
					bool ImGui::IsItemHovered(ImGuiHoveredFlags flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2350,21 +2359,16 @@ bool ImGui::IsItemHovered()
 | 
				
			|||||||
    // Until a solution is found I believe reverting to the test from 2017/09/27 is safe since this was the test that has been running for a long while.
 | 
					    // Until a solution is found I believe reverting to the test from 2017/09/27 is safe since this was the test that has been running for a long while.
 | 
				
			||||||
    //if (g.HoveredWindow != window)
 | 
					    //if (g.HoveredWindow != window)
 | 
				
			||||||
    //    return false;
 | 
					    //    return false;
 | 
				
			||||||
    if (g.HoveredRootWindow != window->RootWindow)
 | 
					    if (g.HoveredRootWindow != window->RootWindow && !(flags & ImGuiHoveredFlags_AllowWhenOverlapped))
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
 | 
					    if (!(flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem))
 | 
				
			||||||
        if (g.ActiveId != 0 && g.ActiveId != window->DC.LastItemId && !g.ActiveIdAllowOverlap && g.ActiveId != window->MoveId)
 | 
					        if (g.ActiveId != 0 && g.ActiveId != window->DC.LastItemId && !g.ActiveIdAllowOverlap && g.ActiveId != window->MoveId)
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
    if (g.NavDisableMouseHover || !IsWindowContentHoverable(window))
 | 
					    if (g.NavDisableMouseHover || !IsWindowContentHoverable(window, flags))
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ImGui::IsItemRectHovered()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    ImGuiWindow* window = GetCurrentWindowRead();
 | 
					 | 
				
			||||||
    return window->DC.LastItemRectHoveredRect;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Internal facing ItemHoverable() used when submitting widgets. Differs slightly from IsItemHovered().
 | 
					// Internal facing ItemHoverable() used when submitting widgets. Differs slightly from IsItemHovered().
 | 
				
			||||||
bool ImGui::ItemHoverable(const ImRect& bb, ImGuiID id)
 | 
					bool ImGui::ItemHoverable(const ImRect& bb, ImGuiID id)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -2379,7 +2383,7 @@ bool ImGui::ItemHoverable(const ImRect& bb, ImGuiID id)
 | 
				
			|||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    if (!IsMouseHoveringRect(bb.Min, bb.Max))
 | 
					    if (!IsMouseHoveringRect(bb.Min, bb.Max))
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    if (g.NavDisableMouseHover || !IsWindowContentHoverable(window))
 | 
					    if (!g.NavDisableMouseHover || !IsWindowContentHoverable(window, ImGuiHoveredFlags_Default))
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    SetHoveredID(id);
 | 
					    SetHoveredID(id);
 | 
				
			||||||
@@ -3236,7 +3240,7 @@ void ImGui::NewFrame()
 | 
				
			|||||||
    // But in order to allow the user to call NewFrame() multiple times without calling Render(), we are doing an explicit clear.
 | 
					    // But in order to allow the user to call NewFrame() multiple times without calling Render(), we are doing an explicit clear.
 | 
				
			||||||
    g.CurrentWindowStack.resize(0);
 | 
					    g.CurrentWindowStack.resize(0);
 | 
				
			||||||
    g.CurrentPopupStack.resize(0);
 | 
					    g.CurrentPopupStack.resize(0);
 | 
				
			||||||
    CloseInactivePopups();
 | 
					    CloseInactivePopups(g.NavWindow);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Create implicit window - we will only render it if the user has added something to it.
 | 
					    // Create implicit window - we will only render it if the user has added something to it.
 | 
				
			||||||
    // We don't use "Debug" to avoid colliding with user trying to create a "Debug" window with custom flags.
 | 
					    // We don't use "Debug" to avoid colliding with user trying to create a "Debug" window with custom flags.
 | 
				
			||||||
@@ -3566,10 +3570,12 @@ void ImGui::EndFrame()
 | 
				
			|||||||
        g.CurrentWindow->Active = false;
 | 
					        g.CurrentWindow->Active = false;
 | 
				
			||||||
    ImGui::End();
 | 
					    ImGui::End();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Click to focus window and start moving (after we're done with all our widgets)
 | 
					    if (g.ActiveId == 0 && g.HoveredId == 0)
 | 
				
			||||||
    if (g.ActiveId == 0 && g.HoveredId == 0 && g.IO.MouseClicked[0])
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (!(g.NavWindow && !g.NavWindow->WasActive && g.NavWindow->Active)) // Unless we just made a popup appear
 | 
					        if (!g.NavWindow || !g.NavWindow->Appearing) // Unless we just made a window/popup appear
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            // Click to focus window and start moving (after we're done with all our widgets)
 | 
				
			||||||
 | 
					            if (g.IO.MouseClicked[0])
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                if (g.HoveredRootWindow != NULL)
 | 
					                if (g.HoveredRootWindow != NULL)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
@@ -3582,7 +3588,7 @@ void ImGui::EndFrame()
 | 
				
			|||||||
                        g.NavDisableHighlight = true;
 | 
					                        g.NavDisableHighlight = true;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    */
 | 
					                    */
 | 
				
			||||||
                if (!(g.HoveredWindow->Flags & ImGuiWindowFlags_NoMove))
 | 
					                    if (!(g.HoveredWindow->Flags & ImGuiWindowFlags_NoMove) && !(g.HoveredRootWindow->Flags & ImGuiWindowFlags_NoMove))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        g.MovedWindow = g.HoveredWindow;
 | 
					                        g.MovedWindow = g.HoveredWindow;
 | 
				
			||||||
                        g.MovedWindowMoveId = g.HoveredWindow->MoveId;
 | 
					                        g.MovedWindowMoveId = g.HoveredWindow->MoveId;
 | 
				
			||||||
@@ -3595,6 +3601,14 @@ void ImGui::EndFrame()
 | 
				
			|||||||
                    FocusWindow(NULL);
 | 
					                    FocusWindow(NULL);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // With right mouse button we close popups without changing focus
 | 
				
			||||||
 | 
					            // (The left mouse button path calls FocusWindow which will lead NewFrame->CloseInactivePopups to trigger)
 | 
				
			||||||
 | 
					            if (g.IO.MouseClicked[1])
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                CloseInactivePopups(g.HoveredWindow);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Sort the window list so that all child windows are after their parent
 | 
					    // Sort the window list so that all child windows are after their parent
 | 
				
			||||||
@@ -4425,7 +4439,7 @@ void ImGui::OpenPopup(const char* str_id)
 | 
				
			|||||||
    OpenPopupEx(g.CurrentWindow->GetID(str_id), false);
 | 
					    OpenPopupEx(g.CurrentWindow->GetID(str_id), false);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void CloseInactivePopups()
 | 
					static void CloseInactivePopups(ImGuiWindow* ref_window)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
    if (g.OpenPopupStack.empty())
 | 
					    if (g.OpenPopupStack.empty())
 | 
				
			||||||
@@ -4434,7 +4448,7 @@ static void CloseInactivePopups()
 | 
				
			|||||||
    // When popups are stacked, clicking on a lower level popups puts focus back to it and close popups above it.
 | 
					    // When popups are stacked, clicking on a lower level popups puts focus back to it and close popups above it.
 | 
				
			||||||
    // Don't close our own child popup windows
 | 
					    // Don't close our own child popup windows
 | 
				
			||||||
    int n = 0;
 | 
					    int n = 0;
 | 
				
			||||||
    if (g.NavWindow)
 | 
					    if (ref_window)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        for (n = 0; n < g.OpenPopupStack.Size; n++)
 | 
					        for (n = 0; n < g.OpenPopupStack.Size; n++)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -4447,7 +4461,7 @@ static void CloseInactivePopups()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            bool has_focus = false;
 | 
					            bool has_focus = false;
 | 
				
			||||||
            for (int m = n; m < g.OpenPopupStack.Size && !has_focus; m++)
 | 
					            for (int m = n; m < g.OpenPopupStack.Size && !has_focus; m++)
 | 
				
			||||||
                has_focus = (g.OpenPopupStack[m].Window && g.OpenPopupStack[m].Window->RootWindow == g.NavWindow->RootWindow);
 | 
					                has_focus = (g.OpenPopupStack[m].Window && g.OpenPopupStack[m].Window->RootWindow == ref_window->RootWindow);
 | 
				
			||||||
            if (!has_focus)
 | 
					            if (!has_focus)
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -4623,9 +4637,10 @@ bool ImGui::BeginPopupContextItem(const char* str_id, int mouse_button)
 | 
				
			|||||||
    ImGuiWindow* window = GImGui->CurrentWindow;
 | 
					    ImGuiWindow* window = GImGui->CurrentWindow;
 | 
				
			||||||
    ImGuiID id = str_id ? window->GetID(str_id) : window->DC.LastItemId; // If user hasn't passed an ID, we can use the LastItemID. Using LastItemID as a Popup ID won't conflict!
 | 
					    ImGuiID id = str_id ? window->GetID(str_id) : window->DC.LastItemId; // If user hasn't passed an ID, we can use the LastItemID. Using LastItemID as a Popup ID won't conflict!
 | 
				
			||||||
    IM_ASSERT(id != 0);                                                  // However, you cannot pass a NULL str_id if the last item has no identifier (e.g. a Text() item)
 | 
					    IM_ASSERT(id != 0);                                                  // However, you cannot pass a NULL str_id if the last item has no identifier (e.g. a Text() item)
 | 
				
			||||||
    if (IsItemHovered() && IsMouseClicked(mouse_button))
 | 
					    if (IsMouseClicked(mouse_button))
 | 
				
			||||||
        OpenPopupEx(id, false);
 | 
					        if (IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
 | 
				
			||||||
    return BeginPopupEx(id, 0);
 | 
					            OpenPopupEx(id, true);
 | 
				
			||||||
 | 
					    return BeginPopupEx(id, ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_AlwaysAutoResize);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ImGui::BeginPopupContextWindow(const char* str_id, int mouse_button, bool also_over_items)
 | 
					bool ImGui::BeginPopupContextWindow(const char* str_id, int mouse_button, bool also_over_items)
 | 
				
			||||||
@@ -4633,10 +4648,11 @@ bool ImGui::BeginPopupContextWindow(const char* str_id, int mouse_button, bool a
 | 
				
			|||||||
    if (!str_id)
 | 
					    if (!str_id)
 | 
				
			||||||
        str_id = "window_context";
 | 
					        str_id = "window_context";
 | 
				
			||||||
    ImGuiID id = GImGui->CurrentWindow->GetID(str_id);
 | 
					    ImGuiID id = GImGui->CurrentWindow->GetID(str_id);
 | 
				
			||||||
    if (IsWindowRectHovered() && IsMouseClicked(mouse_button))
 | 
					    if (IsMouseClicked(mouse_button))
 | 
				
			||||||
 | 
					        if (IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
 | 
				
			||||||
            if (also_over_items || !IsAnyItemHovered())
 | 
					            if (also_over_items || !IsAnyItemHovered())
 | 
				
			||||||
                OpenPopupEx(id, true);
 | 
					                OpenPopupEx(id, true);
 | 
				
			||||||
    return BeginPopupEx(id, 0);
 | 
					    return BeginPopupEx(id, ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_AlwaysAutoResize);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ImGui::BeginPopupContextVoid(const char* str_id, int mouse_button)
 | 
					bool ImGui::BeginPopupContextVoid(const char* str_id, int mouse_button)
 | 
				
			||||||
@@ -4646,7 +4662,7 @@ bool ImGui::BeginPopupContextVoid(const char* str_id, int mouse_button)
 | 
				
			|||||||
    ImGuiID id = GImGui->CurrentWindow->GetID(str_id);
 | 
					    ImGuiID id = GImGui->CurrentWindow->GetID(str_id);
 | 
				
			||||||
    if (!IsAnyWindowHovered() && IsMouseClicked(mouse_button))
 | 
					    if (!IsAnyWindowHovered() && IsMouseClicked(mouse_button))
 | 
				
			||||||
        OpenPopupEx(id, true);
 | 
					        OpenPopupEx(id, true);
 | 
				
			||||||
    return BeginPopupEx(id, 0);
 | 
					    return BeginPopupEx(id, ImGuiWindowFlags_ShowBorders | ImGuiWindowFlags_AlwaysAutoResize);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags)
 | 
					static bool BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags)
 | 
				
			||||||
@@ -4654,6 +4670,7 @@ static bool BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, b
 | 
				
			|||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
    ImGuiWindow* parent_window = ImGui::GetCurrentWindow();
 | 
					    ImGuiWindow* parent_window = ImGui::GetCurrentWindow();
 | 
				
			||||||
    ImGuiWindowFlags flags = ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_ChildWindow;
 | 
					    ImGuiWindowFlags flags = ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_ChildWindow;
 | 
				
			||||||
 | 
					    flags |= (parent_window->Flags & ImGuiWindowFlags_NoMove);  // Inherit the NoMove flag
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const ImVec2 content_avail = ImGui::GetContentRegionAvail();
 | 
					    const ImVec2 content_avail = ImGui::GetContentRegionAvail();
 | 
				
			||||||
    ImVec2 size = ImFloor(size_arg);
 | 
					    ImVec2 size = ImFloor(size_arg);
 | 
				
			||||||
@@ -6051,16 +6068,18 @@ const char* ImGui::GetStyleColorName(ImGuiCol idx)
 | 
				
			|||||||
    return "Unknown";
 | 
					    return "Unknown";
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ImGui::IsWindowHovered()
 | 
					bool ImGui::IsWindowHovered(ImGuiHoveredFlags flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    IM_ASSERT((flags & ImGuiHoveredFlags_AllowWhenOverlapped) == 0);   // Flags not supported by this function
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
    return g.HoveredWindow == g.CurrentWindow && IsWindowContentHoverable(g.HoveredRootWindow);
 | 
					    if (g.HoveredWindow != g.CurrentWindow)
 | 
				
			||||||
}
 | 
					        return false;
 | 
				
			||||||
 | 
					    if (!IsWindowContentHoverable(g.HoveredRootWindow, flags))
 | 
				
			||||||
bool ImGui::IsWindowRectHovered()
 | 
					        return false;
 | 
				
			||||||
{
 | 
					    if (!(flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem))
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					        if (g.ActiveId != 0 && g.ActiveIdWindow != g.CurrentWindow)
 | 
				
			||||||
    return g.HoveredWindow == g.CurrentWindow;
 | 
					            return false;
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ImGui::IsWindowFocused()
 | 
					bool ImGui::IsWindowFocused()
 | 
				
			||||||
@@ -6081,10 +6100,18 @@ bool ImGui::IsRootWindowOrAnyChildFocused()
 | 
				
			|||||||
    return g.NavWindow && g.NavWindow->RootWindow == g.CurrentWindow->RootWindow;
 | 
					    return g.NavWindow && g.NavWindow->RootWindow == g.CurrentWindow->RootWindow;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ImGui::IsRootWindowOrAnyChildHovered()
 | 
					bool ImGui::IsRootWindowOrAnyChildHovered(ImGuiHoveredFlags flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    IM_ASSERT((flags & ImGuiHoveredFlags_AllowWhenOverlapped) == 0);   // Flags not supported by this function
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
    return g.HoveredRootWindow && (g.HoveredRootWindow == g.CurrentWindow->RootWindow) && IsWindowContentHoverable(g.HoveredRootWindow);
 | 
					    if (!g.HoveredRootWindow || (g.HoveredRootWindow != g.CurrentWindow->RootWindow))
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    if (!IsWindowContentHoverable(g.HoveredRootWindow, flags))
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    if (!(flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem))
 | 
				
			||||||
 | 
					        if (g.ActiveId != 0 && g.ActiveIdWindow != g.CurrentWindow)
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
float ImGui::GetWindowWidth()
 | 
					float ImGui::GetWindowWidth()
 | 
				
			||||||
@@ -6256,13 +6283,6 @@ void ImGui::SetNextWindowPos(const ImVec2& pos, ImGuiCond cond, const ImVec2& pi
 | 
				
			|||||||
    g.SetNextWindowPosCond = cond ? cond : ImGuiCond_Always;
 | 
					    g.SetNextWindowPosCond = cond ? cond : ImGuiCond_Always;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
 | 
					 | 
				
			||||||
void ImGui::SetNextWindowPosCenter(ImGuiCond cond)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    SetNextWindowPos(GetIO().DisplaySize * 0.5f, cond, ImVec2(0.5f, 0.5f));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void ImGui::SetNextWindowSize(const ImVec2& size, ImGuiCond cond)
 | 
					void ImGui::SetNextWindowSize(const ImVec2& size, ImGuiCond cond)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										57
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								imgui.h
									
									
									
									
									
								
							@@ -81,6 +81,7 @@ typedef int ImGuiColumnsFlags;      // flags: for *Columns*()
 | 
				
			|||||||
typedef int ImGuiInputTextFlags;    // flags: for InputText*()                  // enum ImGuiInputTextFlags_
 | 
					typedef int ImGuiInputTextFlags;    // flags: for InputText*()                  // enum ImGuiInputTextFlags_
 | 
				
			||||||
typedef int ImGuiSelectableFlags;   // flags: for Selectable()                  // enum ImGuiSelectableFlags_
 | 
					typedef int ImGuiSelectableFlags;   // flags: for Selectable()                  // enum ImGuiSelectableFlags_
 | 
				
			||||||
typedef int ImGuiTreeNodeFlags;     // flags: for TreeNode*(), Collapsing*()    // enum ImGuiTreeNodeFlags_
 | 
					typedef int ImGuiTreeNodeFlags;     // flags: for TreeNode*(), Collapsing*()    // enum ImGuiTreeNodeFlags_
 | 
				
			||||||
 | 
					typedef int ImGuiHoveredFlags;      // flags: for IsItemHovered()               // enum ImGuiHoveredFlags_
 | 
				
			||||||
typedef int (*ImGuiTextEditCallback)(ImGuiTextEditCallbackData *data);
 | 
					typedef int (*ImGuiTextEditCallback)(ImGuiTextEditCallbackData *data);
 | 
				
			||||||
typedef void (*ImGuiSizeConstraintCallback)(ImGuiSizeConstraintCallbackData* data);
 | 
					typedef void (*ImGuiSizeConstraintCallback)(ImGuiSizeConstraintCallbackData* data);
 | 
				
			||||||
#ifdef _MSC_VER
 | 
					#ifdef _MSC_VER
 | 
				
			||||||
@@ -421,8 +422,7 @@ namespace ImGui
 | 
				
			|||||||
    IMGUI_API void          SetItemDefaultFocus(); // FIXME-NAVIGATION                          // make last item the default focused item of a window
 | 
					    IMGUI_API void          SetItemDefaultFocus(); // FIXME-NAVIGATION                          // make last item the default focused item of a window
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Utilities
 | 
					    // Utilities
 | 
				
			||||||
    IMGUI_API bool          IsItemHovered();                                                    // is the last item hovered by mouse (and usable)? or we are currently using Nav and the item is focused.
 | 
					    IMGUI_API bool          IsItemHovered(ImGuiHoveredFlags flags = 0);                         // is the last item hovered by mouse (and usable)? or we are currently using Nav and the item is focused.
 | 
				
			||||||
    IMGUI_API bool          IsItemRectHovered();                                                // is the last item hovered by mouse? even if another item is active or window is blocked by popup while we are hovering this
 | 
					 | 
				
			||||||
    IMGUI_API bool          IsItemActive();                                                     // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false)
 | 
					    IMGUI_API bool          IsItemActive();                                                     // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false)
 | 
				
			||||||
    IMGUI_API bool          IsItemFocused();                                                    // is the last item focused for keyboard/gamepad navigation?
 | 
					    IMGUI_API bool          IsItemFocused();                                                    // is the last item focused for keyboard/gamepad navigation?
 | 
				
			||||||
    IMGUI_API bool          IsItemClicked(int mouse_button = 0);                                // is the last item clicked? (e.g. button/node just clicked on)
 | 
					    IMGUI_API bool          IsItemClicked(int mouse_button = 0);                                // is the last item clicked? (e.g. button/node just clicked on)
 | 
				
			||||||
@@ -435,11 +435,10 @@ namespace ImGui
 | 
				
			|||||||
    IMGUI_API ImVec2        GetItemRectSize();                                                  // "
 | 
					    IMGUI_API ImVec2        GetItemRectSize();                                                  // "
 | 
				
			||||||
    IMGUI_API void          SetItemAllowOverlap();                                              // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area.
 | 
					    IMGUI_API void          SetItemAllowOverlap();                                              // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area.
 | 
				
			||||||
    IMGUI_API bool          IsWindowFocused();                                                  // is current window focused
 | 
					    IMGUI_API bool          IsWindowFocused();                                                  // is current window focused
 | 
				
			||||||
    IMGUI_API bool          IsWindowHovered();                                                  // is current window hovered and hoverable (not blocked by a popup) (differentiate child windows from each others)
 | 
					    IMGUI_API bool          IsWindowHovered(ImGuiHoveredFlags flags = 0);                       // is current window hovered (and typically: not blocked by a popup/modal)
 | 
				
			||||||
    IMGUI_API bool          IsWindowRectHovered();                                              // is current window rectangle hovered, disregarding of any consideration of being blocked by a popup. (unlike IsWindowHovered() this will return true even if the window is blocked because of a popup)
 | 
					 | 
				
			||||||
    IMGUI_API bool          IsRootWindowFocused();                                              // is current root window focused (root = top-most parent of a child, otherwise self)
 | 
					    IMGUI_API bool          IsRootWindowFocused();                                              // is current root window focused (root = top-most parent of a child, otherwise self)
 | 
				
			||||||
    IMGUI_API bool          IsRootWindowOrAnyChildFocused();                                    // is current root window or any of its child (including current window) focused
 | 
					    IMGUI_API bool          IsRootWindowOrAnyChildFocused();                                    // is current root window or any of its child (including current window) focused
 | 
				
			||||||
    IMGUI_API bool          IsRootWindowOrAnyChildHovered();                                    // is current root window or any of its child (including current window) hovered and hoverable (not blocked by a popup)
 | 
					    IMGUI_API bool          IsRootWindowOrAnyChildHovered(ImGuiHoveredFlags flags = 0);         // is current root window or any of its child (including current window) hovered and hoverable (not blocked by a popup)
 | 
				
			||||||
    IMGUI_API bool          IsAnyWindowFocused();
 | 
					    IMGUI_API bool          IsAnyWindowFocused();
 | 
				
			||||||
    IMGUI_API bool          IsAnyWindowHovered();                                               // is mouse hovering any visible window
 | 
					    IMGUI_API bool          IsAnyWindowHovered();                                               // is mouse hovering any visible window
 | 
				
			||||||
    IMGUI_API bool          IsRectVisible(const ImVec2& size);                                  // test if rectangle (of given size, starting from cursor position) is visible / not clipped.
 | 
					    IMGUI_API bool          IsRectVisible(const ImVec2& size);                                  // test if rectangle (of given size, starting from cursor position) is visible / not clipped.
 | 
				
			||||||
@@ -495,21 +494,6 @@ namespace ImGui
 | 
				
			|||||||
    IMGUI_API ImGuiContext* GetCurrentContext();
 | 
					    IMGUI_API ImGuiContext* GetCurrentContext();
 | 
				
			||||||
    IMGUI_API void          SetCurrentContext(ImGuiContext* ctx);
 | 
					    IMGUI_API void          SetCurrentContext(ImGuiContext* ctx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Obsolete functions (Will be removed! Also see 'API BREAKING CHANGES' section in imgui.cpp)
 | 
					 | 
				
			||||||
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
 | 
					 | 
				
			||||||
    bool                    Begin(const char* name, bool* p_open, const ImVec2& size_on_first_use, float bg_alpha_override = -1.0f, ImGuiWindowFlags flags = 0); // OBSOLETE 1.52+. use SetNextWindowSize() instead if you want to set a window size.
 | 
					 | 
				
			||||||
    static inline void      AlignFirstTextHeightToWidgets() { AlignTextToFramePadding(); }     // OBSOLETE 1.52+
 | 
					 | 
				
			||||||
    void                    SetNextWindowPosCenter(ImGuiCond cond = 0);                        // OBSOLETE 1.52+
 | 
					 | 
				
			||||||
    static inline bool      IsItemHoveredRect() { return IsItemRectHovered(); }                // OBSOLETE 1.51+
 | 
					 | 
				
			||||||
    static inline bool      IsPosHoveringAnyWindow(const ImVec2&) { IM_ASSERT(0); return false; } // OBSOLETE 1.51+. This was partly broken. You probably wanted to use ImGui::GetIO().WantCaptureMouse instead.
 | 
					 | 
				
			||||||
    static inline bool      IsMouseHoveringAnyWindow() { return IsAnyWindowHovered(); }        // OBSOLETE 1.51+
 | 
					 | 
				
			||||||
    static inline bool      IsMouseHoveringWindow() { return IsWindowRectHovered(); }          // OBSOLETE 1.51+
 | 
					 | 
				
			||||||
    static inline bool      CollapsingHeader(const char* label, const char* str_id, bool framed = true, bool default_open = false) { (void)str_id; (void)framed; ImGuiTreeNodeFlags default_open_flags = 1<<5; return CollapsingHeader(label, (default_open ? default_open_flags : 0)); } // OBSOLETE 1.49+
 | 
					 | 
				
			||||||
    static inline ImFont*   GetWindowFont() { return GetFont(); }                              // OBSOLETE 1.48+
 | 
					 | 
				
			||||||
    static inline float     GetWindowFontSize() { return GetFontSize(); }                      // OBSOLETE 1.48+
 | 
					 | 
				
			||||||
    static inline void      SetScrollPosHere() { SetScrollHere(); }                            // OBSOLETE 1.42+
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
} // namespace ImGui
 | 
					} // namespace ImGui
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Flags for ImGui::Begin()
 | 
					// Flags for ImGui::Begin()
 | 
				
			||||||
@@ -597,6 +581,16 @@ enum ImGuiSelectableFlags_
 | 
				
			|||||||
    ImGuiSelectableFlags_AllowDoubleClick   = 1 << 2    // Generate press events on double clicks too
 | 
					    ImGuiSelectableFlags_AllowDoubleClick   = 1 << 2    // Generate press events on double clicks too
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum ImGuiHoveredFlags_
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ImGuiHoveredFlags_Default                       = 0,        // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them.
 | 
				
			||||||
 | 
					    ImGuiHoveredFlags_AllowWhenBlockedByPopup       = 1 << 0,   // Return true even if a popup window is normally blocking access to this item/window
 | 
				
			||||||
 | 
					    //ImGuiHoveredFlags_AllowWhenBlockedByModal     = 1 << 1,   // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet.
 | 
				
			||||||
 | 
					    ImGuiHoveredFlags_AllowWhenBlockedByActiveItem  = 1 << 2,   // Return true even if an active item is blocking access to this item/window
 | 
				
			||||||
 | 
					    ImGuiHoveredFlags_AllowWhenOverlapped           = 1 << 3,   // Return true even if the position is overlapped by another window
 | 
				
			||||||
 | 
					    ImGuiHoveredFlags_RectOnly                      = ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array
 | 
					// User fill ImGuiIO.KeyMap[] array with indices into the ImGuiIO.KeysDown[512] array
 | 
				
			||||||
enum ImGuiKey_
 | 
					enum ImGuiKey_
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -916,9 +910,9 @@ struct ImGuiIO
 | 
				
			|||||||
    //------------------------------------------------------------------
 | 
					    //------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImVec2      MousePosPrev;               // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame())
 | 
					    ImVec2      MousePosPrev;               // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame())
 | 
				
			||||||
    bool        MouseClicked[5];            // Mouse button went from !Down to Down
 | 
					 | 
				
			||||||
    ImVec2      MouseClickedPos[5];         // Position at time of clicking
 | 
					    ImVec2      MouseClickedPos[5];         // Position at time of clicking
 | 
				
			||||||
    float       MouseClickedTime[5];        // Time of last click (used to figure out double-click)
 | 
					    float       MouseClickedTime[5];        // Time of last click (used to figure out double-click)
 | 
				
			||||||
 | 
					    bool        MouseClicked[5];            // Mouse button went from !Down to Down
 | 
				
			||||||
    bool        MouseDoubleClicked[5];      // Has mouse button been double-clicked?
 | 
					    bool        MouseDoubleClicked[5];      // Has mouse button been double-clicked?
 | 
				
			||||||
    bool        MouseReleased[5];           // Mouse button went from Down to !Down
 | 
					    bool        MouseReleased[5];           // Mouse button went from Down to !Down
 | 
				
			||||||
    bool        MouseDownOwned[5];          // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds.
 | 
					    bool        MouseDownOwned[5];          // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds.
 | 
				
			||||||
@@ -933,6 +927,27 @@ struct ImGuiIO
 | 
				
			|||||||
    IMGUI_API   ImGuiIO();
 | 
					    IMGUI_API   ImGuiIO();
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Obsolete functions (Will be removed! Also see 'API BREAKING CHANGES' section in imgui.cpp)
 | 
				
			||||||
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
 | 
				
			||||||
 | 
					namespace ImGui
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    bool                    Begin(const char* name, bool* p_open, const ImVec2& size_on_first_use, float bg_alpha_override = -1.0f, ImGuiWindowFlags flags = 0); // OBSOLETE 1.52+. use SetNextWindowSize() instead if you want to set a window size.
 | 
				
			||||||
 | 
					    static inline void      AlignFirstTextHeightToWidgets() { AlignTextToFramePadding(); }     // OBSOLETE 1.52+
 | 
				
			||||||
 | 
					    static inline void      SetNextWindowPosCenter(ImGuiCond cond = 0) { SetNextWindowPos(ImVec2(GetIO().DisplaySize.x * 0.5f, GetIO().DisplaySize.y * 0.5f), cond, ImVec2(0.5f, 0.5f)); } // OBSOLETE 1.52+
 | 
				
			||||||
 | 
					    static inline bool      IsItemHoveredRect() { return IsItemHovered(ImGuiHoveredFlags_RectOnly); } // OBSOLETE 1.51+
 | 
				
			||||||
 | 
					    static inline bool      IsPosHoveringAnyWindow(const ImVec2&) { IM_ASSERT(0); return false; } // OBSOLETE 1.51+. This was partly broken. You probably wanted to use ImGui::GetIO().WantCaptureMouse instead.
 | 
				
			||||||
 | 
					    static inline bool      IsMouseHoveringAnyWindow() { return IsAnyWindowHovered(); }        // OBSOLETE 1.51+
 | 
				
			||||||
 | 
					    static inline bool      IsMouseHoveringWindow() { return IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem); } // OBSOLETE 1.51+
 | 
				
			||||||
 | 
					    static inline bool      CollapsingHeader(const char* label, const char* str_id, bool framed = true, bool default_open = false) { (void)str_id; (void)framed; ImGuiTreeNodeFlags default_open_flags = 1 << 5; return CollapsingHeader(label, (default_open ? default_open_flags : 0)); } // OBSOLETE 1.49+
 | 
				
			||||||
 | 
					    static inline ImFont*   GetWindowFont() { return GetFont(); }                              // OBSOLETE 1.48+
 | 
				
			||||||
 | 
					    static inline float     GetWindowFontSize() { return GetFontSize(); }                      // OBSOLETE 1.48+
 | 
				
			||||||
 | 
					    static inline void      SetScrollPosHere() { SetScrollHere(); }                            // OBSOLETE 1.42+
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//-----------------------------------------------------------------------------
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
// Helpers
 | 
					// Helpers
 | 
				
			||||||
//-----------------------------------------------------------------------------
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1386,22 +1386,6 @@ void ImGui::ShowTestWindow(bool* p_open)
 | 
				
			|||||||
                ImGui::EndPopup();
 | 
					                ImGui::EndPopup();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ImGui::Spacing();
 | 
					 | 
				
			||||||
            ImGui::TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!");
 | 
					 | 
				
			||||||
            ImGui::Separator();
 | 
					 | 
				
			||||||
            // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above.
 | 
					 | 
				
			||||||
            // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here
 | 
					 | 
				
			||||||
            // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus.
 | 
					 | 
				
			||||||
            ImGui::PushID("foo");
 | 
					 | 
				
			||||||
            ImGui::MenuItem("Menu item", "CTRL+M");
 | 
					 | 
				
			||||||
            if (ImGui::BeginMenu("Menu inside a regular window"))
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                ShowExampleMenuFile();
 | 
					 | 
				
			||||||
                ImGui::EndMenu();
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            ImGui::PopID();
 | 
					 | 
				
			||||||
            ImGui::Separator();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            ImGui::TreePop();
 | 
					            ImGui::TreePop();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1418,7 +1402,9 @@ void ImGui::ShowTestWindow(bool* p_open)
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                if (ImGui::Selectable("Set to zero")) value = 0.0f;
 | 
					                if (ImGui::Selectable("Set to zero")) value = 0.0f;
 | 
				
			||||||
                if (ImGui::Selectable("Set to PI")) value = 3.1415f;
 | 
					                if (ImGui::Selectable("Set to PI")) value = 3.1415f;
 | 
				
			||||||
                ImGui::DragFloat("Value", &value, 0.1f, 0.0f, 0.0f);
 | 
					                ImGui::PushItemWidth(-1);
 | 
				
			||||||
 | 
					                ImGui::DragFloat("##Value", &value, 0.1f, 0.0f, 0.0f);
 | 
				
			||||||
 | 
					                ImGui::PopItemWidth();
 | 
				
			||||||
                ImGui::EndPopup();
 | 
					                ImGui::EndPopup();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1489,6 +1475,25 @@ void ImGui::ShowTestWindow(bool* p_open)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            ImGui::TreePop();
 | 
					            ImGui::TreePop();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (ImGui::TreeNode("Menus inside a regular window"))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ImGui::TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!");
 | 
				
			||||||
 | 
					            ImGui::Separator();
 | 
				
			||||||
 | 
					            // NB: As a quirk in this very specific example, we want to differentiate the parent of this menu from the parent of the various popup menus above.
 | 
				
			||||||
 | 
					            // To do so we are encloding the items in a PushID()/PopID() block to make them two different menusets. If we don't, opening any popup above and hovering our menu here
 | 
				
			||||||
 | 
					            // would open it. This is because once a menu is active, we allow to switch to a sibling menu by just hovering on it, which is the desired behavior for regular menus.
 | 
				
			||||||
 | 
					            ImGui::PushID("foo");
 | 
				
			||||||
 | 
					            ImGui::MenuItem("Menu item", "CTRL+M");
 | 
				
			||||||
 | 
					            if (ImGui::BeginMenu("Menu inside a regular window"))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                ShowExampleMenuFile();
 | 
				
			||||||
 | 
					                ImGui::EndMenu();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            ImGui::PopID();
 | 
				
			||||||
 | 
					            ImGui::Separator();
 | 
				
			||||||
 | 
					            ImGui::TreePop();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (ImGui::CollapsingHeader("Columns"))
 | 
					    if (ImGui::CollapsingHeader("Columns"))
 | 
				
			||||||
@@ -1796,6 +1801,34 @@ void ImGui::ShowTestWindow(bool* p_open)
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (ImGui::TreeNode("Hovering"))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            // Testing IsWindowHovered() function
 | 
				
			||||||
 | 
					            ImGui::BulletText(
 | 
				
			||||||
 | 
					                "IsWindowHovered() = %d\n"
 | 
				
			||||||
 | 
					                "IsWindowHovered(_AllowWhenBlockedByPopup) = %d\n"
 | 
				
			||||||
 | 
					                "IsWindowHovered(_AllowWhenBlockedByActiveItem) = %d\n",
 | 
				
			||||||
 | 
					                ImGui::IsWindowHovered(),
 | 
				
			||||||
 | 
					                ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup),
 | 
				
			||||||
 | 
					                ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Testing IsItemHovered() function (because BulletText is an item itself and that would affect the output of IsItemHovered, we pass all lines in a single items to shorten the code)
 | 
				
			||||||
 | 
					            ImGui::Button("ITEM");
 | 
				
			||||||
 | 
					            ImGui::BulletText(
 | 
				
			||||||
 | 
					                "IsItemHovered() = %d\n"
 | 
				
			||||||
 | 
					                "IsItemHovered(_AllowWhenBlockedByPopup) = %d\n"
 | 
				
			||||||
 | 
					                "IsItemHovered(_AllowWhenBlockedByActiveItem) = %d\n"
 | 
				
			||||||
 | 
					                "IsItemHovered(_AllowWhenOverlapped) = %d\n"
 | 
				
			||||||
 | 
					                "IsItemhovered(_RectOnly) = %d\n",
 | 
				
			||||||
 | 
					                ImGui::IsItemHovered(),
 | 
				
			||||||
 | 
					                ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup),
 | 
				
			||||||
 | 
					                ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem),
 | 
				
			||||||
 | 
					                ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenOverlapped),
 | 
				
			||||||
 | 
					                ImGui::IsItemHovered(ImGuiHoveredFlags_RectOnly));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ImGui::TreePop();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (ImGui::TreeNode("Dragging"))
 | 
					        if (ImGui::TreeNode("Dragging"))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ImGui::TextWrapped("You can use ImGui::GetMouseDragDelta(0) to query for the dragged amount on any widget.");
 | 
					            ImGui::TextWrapped("You can use ImGui::GetMouseDragDelta(0) to query for the dragged amount on any widget.");
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user