mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Merge branch 'master' into viewport
# Conflicts: # imgui.cpp # imgui.h
This commit is contained in:
		@@ -53,6 +53,12 @@ Other Changes:
 | 
				
			|||||||
- Window: Resizing from edges (with io.ConfigResizeWindowsFromEdges Beta flag) extends the hit region
 | 
					- Window: Resizing from edges (with io.ConfigResizeWindowsFromEdges Beta flag) extends the hit region
 | 
				
			||||||
  of root floating windows outside the window, making it easier to resize windows. Resize grips are also
 | 
					  of root floating windows outside the window, making it easier to resize windows. Resize grips are also
 | 
				
			||||||
  extended accordingly so there are no discontinuity when hovering between borders and corners. (#1495, #822)
 | 
					  extended accordingly so there are no discontinuity when hovering between borders and corners. (#1495, #822)
 | 
				
			||||||
 | 
					- Window: Added ImGuiWindowFlags_NoBackground flag to avoid rendering window background. This is mostly to allow
 | 
				
			||||||
 | 
					  the creation of new flag combinations, as we could already use SetNextWindowBgAlpha(0.0f). (#1660) [@biojppm, @ocornut]
 | 
				
			||||||
 | 
					- Window: Added ImGuiWindowFlags_NoDecoration helper flag which is essentially NoTitleBar+NoResize+NoScrollbar+NoCollapse.
 | 
				
			||||||
 | 
					- Window: Added ImGuiWindowFlags_NoMouseInputs which is basically the old ImGuiWindowFlags_NoInputs (essentially
 | 
				
			||||||
 | 
					  we have renamed ImGuiWindowFlags_NoInputs to ImGuiWindowFlags_NoMouseInputs). Made the new ImGuiWindowFlags_NoInputs
 | 
				
			||||||
 | 
					  encompass both NoMouseInputs+NoNav, which is consistent with its description. (#1660, #787)
 | 
				
			||||||
- Window, Inputs: Fixed resizing from edges when io.MousePos is not pixel-rounded by rounding mouse position input. (#2110)
 | 
					- Window, Inputs: Fixed resizing from edges when io.MousePos is not pixel-rounded by rounding mouse position input. (#2110)
 | 
				
			||||||
- BeginChild(): Fixed BeginChild(const char*, ...) variation erroneously not applying the ID stack
 | 
					- BeginChild(): Fixed BeginChild(const char*, ...) variation erroneously not applying the ID stack
 | 
				
			||||||
  to the provided string to uniquely identify the child window. This was undoing an intentional change
 | 
					  to the provided string to uniquely identify the child window. This was undoing an intentional change
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -113,11 +113,11 @@ Languages: (third-party bindings)
 | 
				
			|||||||
- C#/.Net: [ImGui.NET](https://github.com/mellinoe/ImGui.NET)
 | 
					- C#/.Net: [ImGui.NET](https://github.com/mellinoe/ImGui.NET)
 | 
				
			||||||
- ChaiScript: [imgui-chaiscript](https://github.com/JuJuBoSc/imgui-chaiscript)
 | 
					- ChaiScript: [imgui-chaiscript](https://github.com/JuJuBoSc/imgui-chaiscript)
 | 
				
			||||||
- D: [DerelictImgui](https://github.com/Extrawurst/DerelictImgui)
 | 
					- D: [DerelictImgui](https://github.com/Extrawurst/DerelictImgui)
 | 
				
			||||||
- Go: [go-imgui](https://github.com/Armored-Dragon/go-imgui)
 | 
					- Go: [imgui-go](https://github.com/inkyblackness/imgui-go) or [go-imgui](https://github.com/Armored-Dragon/go-imgui)
 | 
				
			||||||
- Haxe/hxcpp: [linc_imgui](https://github.com/Aidan63/linc_imgui)
 | 
					- Haxe/hxcpp: [linc_imgui](https://github.com/Aidan63/linc_imgui)
 | 
				
			||||||
- Java: [jimgui](https://github.com/ice1000/jimgui)
 | 
					- Java: [jimgui](https://github.com/ice1000/jimgui)
 | 
				
			||||||
- JavaScript: [imgui-js](https://github.com/flyover/imgui-js)
 | 
					- JavaScript: [imgui-js](https://github.com/flyover/imgui-js)
 | 
				
			||||||
- Lua: [imgui_lua_bindings](https://github.com/patrickriordan/imgui_lua_bindings) or [lua-ffi-bindings](https://github.com/thenumbernine/lua-ffi-bindings)
 | 
					- Lua: [LuaJIT-ImGui](https://github.com/sonoro1234/LuaJIT-ImGui), [imgui_lua_bindings](https://github.com/patrickriordan/imgui_lua_bindings) or [lua-ffi-bindings](https://github.com/thenumbernine/lua-ffi-bindings)
 | 
				
			||||||
- Odin: [odin-dear_imgui](https://github.com/ThisDrunkDane/odin-dear_imgui)
 | 
					- Odin: [odin-dear_imgui](https://github.com/ThisDrunkDane/odin-dear_imgui)
 | 
				
			||||||
- Pascal: [imgui-pas](https://github.com/dpethes/imgui-pas)
 | 
					- Pascal: [imgui-pas](https://github.com/dpethes/imgui-pas)
 | 
				
			||||||
- PureBasic: [pb-cimgui](https://github.com/hippyau/pb-cimgui)
 | 
					- PureBasic: [pb-cimgui](https://github.com/hippyau/pb-cimgui)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
	archiveVersion = 1;
 | 
						archiveVersion = 1;
 | 
				
			||||||
	classes = {
 | 
						classes = {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
	objectVersion = 50;
 | 
						objectVersion = 48;
 | 
				
			||||||
	objects = {
 | 
						objects = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Begin PBXBuildFile section */
 | 
					/* Begin PBXBuildFile section */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
	archiveVersion = 1;
 | 
						archiveVersion = 1;
 | 
				
			||||||
	classes = {
 | 
						classes = {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
	objectVersion = 50;
 | 
						objectVersion = 48;
 | 
				
			||||||
	objects = {
 | 
						objects = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Begin PBXBuildFile section */
 | 
					/* Begin PBXBuildFile section */
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										42
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -3110,9 +3110,9 @@ void ImGui::UpdateMouseWheel()
 | 
				
			|||||||
    // If a child window has the ImGuiWindowFlags_NoScrollWithMouse flag, we give a chance to scroll its parent (unless either ImGuiWindowFlags_NoInputs or ImGuiWindowFlags_NoScrollbar are also set).
 | 
					    // If a child window has the ImGuiWindowFlags_NoScrollWithMouse flag, we give a chance to scroll its parent (unless either ImGuiWindowFlags_NoInputs or ImGuiWindowFlags_NoScrollbar are also set).
 | 
				
			||||||
    ImGuiWindow* window = g.HoveredWindow;
 | 
					    ImGuiWindow* window = g.HoveredWindow;
 | 
				
			||||||
    ImGuiWindow* scroll_window = window;
 | 
					    ImGuiWindow* scroll_window = window;
 | 
				
			||||||
    while ((scroll_window->Flags & ImGuiWindowFlags_ChildWindow) && (scroll_window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(scroll_window->Flags & ImGuiWindowFlags_NoScrollbar) && !(scroll_window->Flags & ImGuiWindowFlags_NoInputs) && scroll_window->ParentWindow)
 | 
					    while ((scroll_window->Flags & ImGuiWindowFlags_ChildWindow) && (scroll_window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(scroll_window->Flags & ImGuiWindowFlags_NoScrollbar) && !(scroll_window->Flags & ImGuiWindowFlags_NoMouseInputs) && scroll_window->ParentWindow)
 | 
				
			||||||
        scroll_window = scroll_window->ParentWindow;
 | 
					        scroll_window = scroll_window->ParentWindow;
 | 
				
			||||||
    const bool scroll_allowed = !(scroll_window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(scroll_window->Flags & ImGuiWindowFlags_NoInputs);
 | 
					    const bool scroll_allowed = !(scroll_window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(scroll_window->Flags & ImGuiWindowFlags_NoMouseInputs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (g.IO.MouseWheel != 0.0f)
 | 
					    if (g.IO.MouseWheel != 0.0f)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -3938,7 +3938,7 @@ static void FindHoveredWindow()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    ImGuiWindow* hovered_window = NULL;
 | 
					    ImGuiWindow* hovered_window = NULL;
 | 
				
			||||||
    ImGuiWindow* hovered_window_ignoring_moving_window = NULL;
 | 
					    ImGuiWindow* hovered_window_ignoring_moving_window = NULL;
 | 
				
			||||||
    if (g.MovingWindow && !(g.MovingWindow->Flags & ImGuiWindowFlags_NoInputs))
 | 
					    if (g.MovingWindow && !(g.MovingWindow->Flags & ImGuiWindowFlags_NoMouseInputs))
 | 
				
			||||||
        hovered_window = g.MovingWindow;
 | 
					        hovered_window = g.MovingWindow;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImVec2 padding_regular = g.Style.TouchExtraPadding;
 | 
					    ImVec2 padding_regular = g.Style.TouchExtraPadding;
 | 
				
			||||||
@@ -3948,7 +3948,7 @@ static void FindHoveredWindow()
 | 
				
			|||||||
        ImGuiWindow* window = g.Windows[i];
 | 
					        ImGuiWindow* window = g.Windows[i];
 | 
				
			||||||
        if (!window->Active || window->Hidden)
 | 
					        if (!window->Active || window->Hidden)
 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
        if (window->Flags & ImGuiWindowFlags_NoInputs)
 | 
					        if (window->Flags & ImGuiWindowFlags_NoMouseInputs)
 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
        IM_ASSERT(window->Viewport);
 | 
					        IM_ASSERT(window->Viewport);
 | 
				
			||||||
        if (window->Viewport != g.MouseViewport)
 | 
					        if (window->Viewport != g.MouseViewport)
 | 
				
			||||||
@@ -4802,7 +4802,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Automatically disable manual moving/resizing when NoInputs is set
 | 
					    // Automatically disable manual moving/resizing when NoInputs is set
 | 
				
			||||||
    if (flags & ImGuiWindowFlags_NoInputs)
 | 
					    if ((flags & ImGuiWindowFlags_NoInputs) == ImGuiWindowFlags_NoInputs)
 | 
				
			||||||
        flags |= ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize;
 | 
					        flags |= ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (flags & ImGuiWindowFlags_NavFlattened)
 | 
					    if (flags & ImGuiWindowFlags_NavFlattened)
 | 
				
			||||||
@@ -5216,15 +5216,19 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
 | 
				
			|||||||
        else
 | 
					        else
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // Window background
 | 
					            // Window background
 | 
				
			||||||
            ImU32 bg_col = GetColorU32(GetWindowBgColorIdxFromFlags(flags));
 | 
					            if (!(flags & ImGuiWindowFlags_NoBackground))
 | 
				
			||||||
            if (g.NextWindowData.BgAlphaCond != 0)
 | 
					 | 
				
			||||||
                bg_col = (bg_col & ~IM_COL32_A_MASK) | (IM_F32_TO_INT8_SAT(g.NextWindowData.BgAlphaVal) << IM_COL32_A_SHIFT);
 | 
					 | 
				
			||||||
            if (window->ViewportOwned)
 | 
					 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                //window->Viewport->Alpha = ((bg_col & IM_COL32_A_MASK) >> IM_COL32_A_SHIFT) / 255.0f;
 | 
					                ImU32 bg_col = GetColorU32(GetWindowBgColorIdxFromFlags(flags));
 | 
				
			||||||
                bg_col = (bg_col | IM_COL32_A_MASK);
 | 
					                if (g.NextWindowData.BgAlphaCond != 0)
 | 
				
			||||||
 | 
					                    bg_col = (bg_col & ~IM_COL32_A_MASK) | (IM_F32_TO_INT8_SAT(g.NextWindowData.BgAlphaVal) << IM_COL32_A_SHIFT);
 | 
				
			||||||
 | 
					                if (window->ViewportOwned)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    //window->Viewport->Alpha = ((bg_col & IM_COL32_A_MASK) >> IM_COL32_A_SHIFT) / 255.0f;
 | 
				
			||||||
 | 
					                    bg_col = (bg_col | IM_COL32_A_MASK);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                window->DrawList->AddRectFilled(window->Pos + ImVec2(0, window->TitleBarHeight()), window->Pos + window->Size, bg_col, window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Bot);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            window->DrawList->AddRectFilled(window->Pos + ImVec2(0, window->TitleBarHeight()), window->Pos + window->Size, bg_col, window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? ImDrawCornerFlags_All : ImDrawCornerFlags_Bot);
 | 
					            g.NextWindowData.BgAlphaCond = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Title bar
 | 
					            // Title bar
 | 
				
			||||||
            ImU32 title_bar_col = GetColorU32(window->Collapsed ? ImGuiCol_TitleBgCollapsed : title_bar_is_highlight ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg);
 | 
					            ImU32 title_bar_col = GetColorU32(window->Collapsed ? ImGuiCol_TitleBgCollapsed : title_bar_is_highlight ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg);
 | 
				
			||||||
@@ -5262,7 +5266,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Borders
 | 
					            // Borders
 | 
				
			||||||
            if (window_border_size > 0.0f)
 | 
					            if (window_border_size > 0.0f && !(flags & ImGuiWindowFlags_NoBackground))
 | 
				
			||||||
                window->DrawList->AddRect(window->Pos, window->Pos + window->Size, GetColorU32(ImGuiCol_Border), window_rounding, ImDrawCornerFlags_All, window_border_size);
 | 
					                window->DrawList->AddRect(window->Pos, window->Pos + window->Size, GetColorU32(ImGuiCol_Border), window_rounding, ImDrawCornerFlags_All, window_border_size);
 | 
				
			||||||
            if (border_held != -1)
 | 
					            if (border_held != -1)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -6690,7 +6694,7 @@ void ImGui::BeginTooltipEx(ImGuiWindowFlags extra_flags, bool override_previous_
 | 
				
			|||||||
                window->HiddenFramesRegular = 1;
 | 
					                window->HiddenFramesRegular = 1;
 | 
				
			||||||
                ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", ++g.TooltipOverrideCount);
 | 
					                ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", ++g.TooltipOverrideCount);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
    ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip|ImGuiWindowFlags_NoInputs|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoNav;
 | 
					    ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip|ImGuiWindowFlags_NoInputs|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_AlwaysAutoResize;
 | 
				
			||||||
    Begin(window_name, NULL, flags | extra_flags);
 | 
					    Begin(window_name, NULL, flags | extra_flags);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -8727,7 +8731,7 @@ void ImGui::NavUpdateWindowingList()
 | 
				
			|||||||
    SetNextWindowSizeConstraints(ImVec2(viewport->Size.x * 0.20f, viewport->Size.y * 0.20f), ImVec2(FLT_MAX, FLT_MAX));
 | 
					    SetNextWindowSizeConstraints(ImVec2(viewport->Size.x * 0.20f, viewport->Size.y * 0.20f), ImVec2(FLT_MAX, FLT_MAX));
 | 
				
			||||||
    SetNextWindowPos(viewport->Pos + viewport->Size * 0.5f, ImGuiCond_Always, ImVec2(0.5f, 0.5f));
 | 
					    SetNextWindowPos(viewport->Pos + viewport->Size * 0.5f, ImGuiCond_Always, ImVec2(0.5f, 0.5f));
 | 
				
			||||||
    PushStyleVar(ImGuiStyleVar_WindowPadding, g.Style.WindowPadding * 2.0f);
 | 
					    PushStyleVar(ImGuiStyleVar_WindowPadding, g.Style.WindowPadding * 2.0f);
 | 
				
			||||||
    Begin("###NavWindowingList", NULL, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings);
 | 
					    Begin("###NavWindowingList", NULL, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings);
 | 
				
			||||||
    for (int n = g.WindowsFocusOrder.Size - 1; n >= 0; n--)
 | 
					    for (int n = g.WindowsFocusOrder.Size - 1; n >= 0; n--)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ImGuiWindow* window = g.WindowsFocusOrder[n];
 | 
					        ImGuiWindow* window = g.WindowsFocusOrder[n];
 | 
				
			||||||
@@ -10003,10 +10007,10 @@ void ImGui::ShowMetricsWindow(bool* p_open)
 | 
				
			|||||||
            ImGuiWindowFlags flags = window->Flags;
 | 
					            ImGuiWindowFlags flags = window->Flags;
 | 
				
			||||||
            NodeDrawList(window, window->Viewport, window->DrawList, "DrawList");
 | 
					            NodeDrawList(window, window->Viewport, window->DrawList, "DrawList");
 | 
				
			||||||
            ImGui::BulletText("Pos: (%.1f,%.1f), Size: (%.1f,%.1f), SizeContents (%.1f,%.1f)", window->Pos.x, window->Pos.y, window->Size.x, window->Size.y, window->SizeContents.x, window->SizeContents.y);
 | 
					            ImGui::BulletText("Pos: (%.1f,%.1f), Size: (%.1f,%.1f), SizeContents (%.1f,%.1f)", window->Pos.x, window->Pos.y, window->Size.x, window->Size.y, window->SizeContents.x, window->SizeContents.y);
 | 
				
			||||||
            ImGui::BulletText("Flags: 0x%08X (%s%s%s%s%s%s%s%s..)", flags,
 | 
					            ImGui::BulletText("Flags: 0x%08X (%s%s%s%s%s%s%s%s%s..)", flags,
 | 
				
			||||||
                (flags & ImGuiWindowFlags_ChildWindow) ? "Child " : "", (flags & ImGuiWindowFlags_Tooltip)   ? "Tooltip "   : "", (flags & ImGuiWindowFlags_Popup) ? "Popup " : "",
 | 
					                (flags & ImGuiWindowFlags_ChildWindow)  ? "Child " : "",      (flags & ImGuiWindowFlags_Tooltip)     ? "Tooltip "   : "",  (flags & ImGuiWindowFlags_Popup) ? "Popup " : "",
 | 
				
			||||||
                (flags & ImGuiWindowFlags_Modal)       ? "Modal " : "", (flags & ImGuiWindowFlags_ChildMenu) ? "ChildMenu " : "", (flags & ImGuiWindowFlags_NoSavedSettings) ? "NoSavedSettings " : "",
 | 
					                (flags & ImGuiWindowFlags_Modal)        ? "Modal " : "",      (flags & ImGuiWindowFlags_ChildMenu)   ? "ChildMenu " : "",  (flags & ImGuiWindowFlags_NoSavedSettings) ? "NoSavedSettings " : "",
 | 
				
			||||||
                (flags & ImGuiWindowFlags_NoInputs)    ? "NoInputs":"", (flags & ImGuiWindowFlags_AlwaysAutoResize) ? "AlwaysAutoResize" : "");
 | 
					                (flags & ImGuiWindowFlags_NoMouseInputs)? "NoMouseInputs":"", (flags & ImGuiWindowFlags_NoNavInputs) ? "NoNavInputs" : "", (flags & ImGuiWindowFlags_AlwaysAutoResize) ? "AlwaysAutoResize" : "");
 | 
				
			||||||
            ImGui::BulletText("Scroll: (%.2f/%.2f,%.2f/%.2f)", window->Scroll.x, GetWindowScrollMaxX(window), window->Scroll.y, GetWindowScrollMaxY(window));
 | 
					            ImGui::BulletText("Scroll: (%.2f/%.2f,%.2f/%.2f)", window->Scroll.x, GetWindowScrollMaxX(window), window->Scroll.y, GetWindowScrollMaxY(window));
 | 
				
			||||||
            ImGui::BulletText("Active: %d/%d, WriteAccessed: %d, BeginOrderWithinContext: %d", window->Active, window->WasActive, window->WriteAccessed, (window->Active || window->WasActive) ? window->BeginOrderWithinContext : -1);
 | 
					            ImGui::BulletText("Active: %d/%d, WriteAccessed: %d, BeginOrderWithinContext: %d", window->Active, window->WasActive, window->WriteAccessed, (window->Active || window->WasActive) ? window->BeginOrderWithinContext : -1);
 | 
				
			||||||
            ImGui::BulletText("Appearing: %d, Hidden: %d (Reg %d Resize %d), SkipItems: %d", window->Appearing, window->Hidden, window->HiddenFramesRegular, window->HiddenFramesForResize, window->SkipItems);
 | 
					            ImGui::BulletText("Appearing: %d, Hidden: %d (Reg %d Resize %d), SkipItems: %d", window->Appearing, window->Hidden, window->HiddenFramesRegular, window->HiddenFramesForResize, window->SkipItems);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								imgui.h
									
									
									
									
									
								
							@@ -237,7 +237,7 @@ namespace ImGui
 | 
				
			|||||||
    IMGUI_API void          SetNextWindowContentSize(const ImVec2& size);                               // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin()
 | 
					    IMGUI_API void          SetNextWindowContentSize(const ImVec2& size);                               // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin()
 | 
				
			||||||
    IMGUI_API void          SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0);                 // set next window collapsed state. call before Begin()
 | 
					    IMGUI_API void          SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0);                 // set next window collapsed state. call before Begin()
 | 
				
			||||||
    IMGUI_API void          SetNextWindowFocus();                                                       // set next window to be focused / front-most. call before Begin()
 | 
					    IMGUI_API void          SetNextWindowFocus();                                                       // set next window to be focused / front-most. call before Begin()
 | 
				
			||||||
    IMGUI_API void          SetNextWindowBgAlpha(float alpha);                                          // set next window background color alpha. helper to easily modify ImGuiCol_WindowBg/ChildBg/PopupBg.
 | 
					    IMGUI_API void          SetNextWindowBgAlpha(float alpha);                                          // set next window background color alpha. helper to easily modify ImGuiCol_WindowBg/ChildBg/PopupBg. you may also use ImGuiWindowFlags_NoBackground.
 | 
				
			||||||
    IMGUI_API void          SetNextWindowViewport(ImGuiID viewport_id);                                 // set next window viewport
 | 
					    IMGUI_API void          SetNextWindowViewport(ImGuiID viewport_id);                                 // set next window viewport
 | 
				
			||||||
    IMGUI_API void          SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0);                        // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects.
 | 
					    IMGUI_API void          SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0);                        // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects.
 | 
				
			||||||
    IMGUI_API void          SetWindowSize(const ImVec2& size, ImGuiCond cond = 0);                      // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects.
 | 
					    IMGUI_API void          SetWindowSize(const ImVec2& size, ImGuiCond cond = 0);                      // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects.
 | 
				
			||||||
@@ -493,7 +493,7 @@ namespace ImGui
 | 
				
			|||||||
    IMGUI_API bool          BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1);                                 // helper to open and begin popup when clicked in void (where there are no imgui windows).
 | 
					    IMGUI_API bool          BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1);                                 // helper to open and begin popup when clicked in void (where there are no imgui windows).
 | 
				
			||||||
    IMGUI_API bool          BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0);                     // modal dialog (regular window with title bar, block interactions behind the modal window, can't close the modal window by clicking outside)
 | 
					    IMGUI_API bool          BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0);                     // modal dialog (regular window with title bar, block interactions behind the modal window, can't close the modal window by clicking outside)
 | 
				
			||||||
    IMGUI_API void          EndPopup();                                                                                             // only call EndPopup() if BeginPopupXXX() returns true!
 | 
					    IMGUI_API void          EndPopup();                                                                                             // only call EndPopup() if BeginPopupXXX() returns true!
 | 
				
			||||||
    IMGUI_API bool          OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1);                                  // helper to open popup when clicked on last item. return true when just opened.
 | 
					    IMGUI_API bool          OpenPopupOnItemClick(const char* str_id = NULL, int mouse_button = 1);                                  // helper to open popup when clicked on last item (note: actually triggers on the mouse _released_ event to be consistent with popup behaviors). return true when just opened.
 | 
				
			||||||
    IMGUI_API bool          IsPopupOpen(const char* str_id);                                    // return true if the popup is open
 | 
					    IMGUI_API bool          IsPopupOpen(const char* str_id);                                    // return true if the popup is open
 | 
				
			||||||
    IMGUI_API void          CloseCurrentPopup();                                                // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup.
 | 
					    IMGUI_API void          CloseCurrentPopup();                                                // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -639,8 +639,9 @@ enum ImGuiWindowFlags_
 | 
				
			|||||||
    ImGuiWindowFlags_NoScrollWithMouse      = 1 << 4,   // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set.
 | 
					    ImGuiWindowFlags_NoScrollWithMouse      = 1 << 4,   // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set.
 | 
				
			||||||
    ImGuiWindowFlags_NoCollapse             = 1 << 5,   // Disable user collapsing window by double-clicking on it
 | 
					    ImGuiWindowFlags_NoCollapse             = 1 << 5,   // Disable user collapsing window by double-clicking on it
 | 
				
			||||||
    ImGuiWindowFlags_AlwaysAutoResize       = 1 << 6,   // Resize every window to its content every frame
 | 
					    ImGuiWindowFlags_AlwaysAutoResize       = 1 << 6,   // Resize every window to its content every frame
 | 
				
			||||||
 | 
					    ImGuiWindowFlags_NoBackground           = 1 << 7,   // Disable drawing background color (WindowBg, etc.) and outside border. Similar as using SetNextWindowBgAlpha(0.0f).
 | 
				
			||||||
    ImGuiWindowFlags_NoSavedSettings        = 1 << 8,   // Never load/save settings in .ini file
 | 
					    ImGuiWindowFlags_NoSavedSettings        = 1 << 8,   // Never load/save settings in .ini file
 | 
				
			||||||
    ImGuiWindowFlags_NoInputs               = 1 << 9,   // Disable catching mouse or keyboard inputs, hovering test with pass through.
 | 
					    ImGuiWindowFlags_NoMouseInputs          = 1 << 9,   // Disable catching mouse, hovering test with pass through.
 | 
				
			||||||
    ImGuiWindowFlags_MenuBar                = 1 << 10,  // Has a menu-bar
 | 
					    ImGuiWindowFlags_MenuBar                = 1 << 10,  // Has a menu-bar
 | 
				
			||||||
    ImGuiWindowFlags_HorizontalScrollbar    = 1 << 11,  // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section.
 | 
					    ImGuiWindowFlags_HorizontalScrollbar    = 1 << 11,  // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section.
 | 
				
			||||||
    ImGuiWindowFlags_NoFocusOnAppearing     = 1 << 12,  // Disable taking focus when transitioning from hidden to visible state
 | 
					    ImGuiWindowFlags_NoFocusOnAppearing     = 1 << 12,  // Disable taking focus when transitioning from hidden to visible state
 | 
				
			||||||
@@ -651,6 +652,8 @@ enum ImGuiWindowFlags_
 | 
				
			|||||||
    ImGuiWindowFlags_NoNavInputs            = 1 << 18,  // No gamepad/keyboard navigation within the window
 | 
					    ImGuiWindowFlags_NoNavInputs            = 1 << 18,  // No gamepad/keyboard navigation within the window
 | 
				
			||||||
    ImGuiWindowFlags_NoNavFocus             = 1 << 19,  // No focusing toward this window with gamepad/keyboard navigation (e.g. skipped by CTRL+TAB)
 | 
					    ImGuiWindowFlags_NoNavFocus             = 1 << 19,  // No focusing toward this window with gamepad/keyboard navigation (e.g. skipped by CTRL+TAB)
 | 
				
			||||||
    ImGuiWindowFlags_NoNav                  = ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus,
 | 
					    ImGuiWindowFlags_NoNav                  = ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus,
 | 
				
			||||||
 | 
					    ImGuiWindowFlags_NoDecoration           = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse,
 | 
				
			||||||
 | 
					    ImGuiWindowFlags_NoInputs               = ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // [Internal]
 | 
					    // [Internal]
 | 
				
			||||||
    ImGuiWindowFlags_NavFlattened           = 1 << 23,  // [BETA] Allow gamepad/keyboard navigation to cross over parent border to this child (only use on child that have no scrolling!)
 | 
					    ImGuiWindowFlags_NavFlattened           = 1 << 23,  // [BETA] Allow gamepad/keyboard navigation to cross over parent border to this child (only use on child that have no scrolling!)
 | 
				
			||||||
@@ -910,7 +913,7 @@ enum ImGuiBackendFlags_
 | 
				
			|||||||
    // [BETA] Viewports
 | 
					    // [BETA] Viewports
 | 
				
			||||||
    ImGuiBackendFlags_PlatformHasViewports  = 1 << 10,  // Back-end Platform supports multiple viewports.
 | 
					    ImGuiBackendFlags_PlatformHasViewports  = 1 << 10,  // Back-end Platform supports multiple viewports.
 | 
				
			||||||
    ImGuiBackendFlags_HasMouseHoveredViewport=1 << 11,  // Back-end Platform supports setting io.MouseHoveredViewport to the viewport directly under the mouse _IGNORING_ viewports with the ImGuiViewportFlags_NoInputs flag and _REGARDLESS_ of whether another viewport is focused and may be capturing the mouse. This information is _NOT EASY_ to provide correctly with most high-level engines! Don't set this without studying how the examples/ back-end handle it!
 | 
					    ImGuiBackendFlags_HasMouseHoveredViewport=1 << 11,  // Back-end Platform supports setting io.MouseHoveredViewport to the viewport directly under the mouse _IGNORING_ viewports with the ImGuiViewportFlags_NoInputs flag and _REGARDLESS_ of whether another viewport is focused and may be capturing the mouse. This information is _NOT EASY_ to provide correctly with most high-level engines! Don't set this without studying how the examples/ back-end handle it!
 | 
				
			||||||
    ImGuiBackendFlags_RendererHasViewports  = 1 << 12,  // Back-end Renderer supports multiple viewports.
 | 
					    ImGuiBackendFlags_RendererHasViewports  = 1 << 12   // Back-end Renderer supports multiple viewports.
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Enumeration for PushStyleColor() / PopStyleColor()
 | 
					// Enumeration for PushStyleColor() / PopStyleColor()
 | 
				
			||||||
@@ -1623,7 +1626,7 @@ struct ImDrawCmd
 | 
				
			|||||||
    ImDrawCallback  UserCallback;           // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally.
 | 
					    ImDrawCallback  UserCallback;           // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally.
 | 
				
			||||||
    void*           UserCallbackData;       // The draw callback code can access this.
 | 
					    void*           UserCallbackData;       // The draw callback code can access this.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = NULL; UserCallback = NULL; UserCallbackData = NULL; }
 | 
					    ImDrawCmd() { ElemCount = 0; ClipRect.x = ClipRect.y = ClipRect.z = ClipRect.w = 0.0f; TextureId = (ImTextureID)NULL; UserCallback = NULL; UserCallbackData = NULL; }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h)
 | 
					// Vertex index (override with '#define ImDrawIdx unsigned int' inside in imconfig.h)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -207,6 +207,7 @@ void ImGui::ShowDemoWindow(bool* p_open)
 | 
				
			|||||||
    static bool no_collapse = false;
 | 
					    static bool no_collapse = false;
 | 
				
			||||||
    static bool no_close = false;
 | 
					    static bool no_close = false;
 | 
				
			||||||
    static bool no_nav = false;
 | 
					    static bool no_nav = false;
 | 
				
			||||||
 | 
					    static bool no_background = false;
 | 
				
			||||||
    static bool no_bring_to_front = false;
 | 
					    static bool no_bring_to_front = false;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    ImGuiWindowFlags window_flags = 0;
 | 
					    ImGuiWindowFlags window_flags = 0;
 | 
				
			||||||
@@ -217,6 +218,7 @@ void ImGui::ShowDemoWindow(bool* p_open)
 | 
				
			|||||||
    if (no_resize)          window_flags |= ImGuiWindowFlags_NoResize;
 | 
					    if (no_resize)          window_flags |= ImGuiWindowFlags_NoResize;
 | 
				
			||||||
    if (no_collapse)        window_flags |= ImGuiWindowFlags_NoCollapse;
 | 
					    if (no_collapse)        window_flags |= ImGuiWindowFlags_NoCollapse;
 | 
				
			||||||
    if (no_nav)             window_flags |= ImGuiWindowFlags_NoNav;
 | 
					    if (no_nav)             window_flags |= ImGuiWindowFlags_NoNav;
 | 
				
			||||||
 | 
					    if (no_background)      window_flags |= ImGuiWindowFlags_NoBackground;
 | 
				
			||||||
    if (no_bring_to_front)  window_flags |= ImGuiWindowFlags_NoBringToFrontOnFocus;
 | 
					    if (no_bring_to_front)  window_flags |= ImGuiWindowFlags_NoBringToFrontOnFocus;
 | 
				
			||||||
    if (no_close)           p_open = NULL; // Don't pass our bool* to Begin
 | 
					    if (no_close)           p_open = NULL; // Don't pass our bool* to Begin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -374,6 +376,7 @@ void ImGui::ShowDemoWindow(bool* p_open)
 | 
				
			|||||||
        ImGui::Checkbox("No collapse", &no_collapse);
 | 
					        ImGui::Checkbox("No collapse", &no_collapse);
 | 
				
			||||||
        ImGui::Checkbox("No close", &no_close); ImGui::SameLine(150);
 | 
					        ImGui::Checkbox("No close", &no_close); ImGui::SameLine(150);
 | 
				
			||||||
        ImGui::Checkbox("No nav", &no_nav); ImGui::SameLine(300);
 | 
					        ImGui::Checkbox("No nav", &no_nav); ImGui::SameLine(300);
 | 
				
			||||||
 | 
					        ImGui::Checkbox("No background", &no_background);
 | 
				
			||||||
        ImGui::Checkbox("No bring to front", &no_bring_to_front);
 | 
					        ImGui::Checkbox("No bring to front", &no_bring_to_front);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1889,6 +1892,21 @@ void ImGui::ShowDemoWindow(bool* p_open)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if (ImGui::CollapsingHeader("Popups & Modal windows"))
 | 
					    if (ImGui::CollapsingHeader("Popups & Modal windows"))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        // Popups are windows with a few special properties:
 | 
				
			||||||
 | 
					        // - They block normal mouse hovering detection outside them. (*)
 | 
				
			||||||
 | 
					        // - Unless modal, they can be closed by clicking anywhere outside them, or by pressing ESCAPE.
 | 
				
			||||||
 | 
					        // - Their visibility state (~bool) is held internally by imgui instead of being held by the programmer as we are used to with regular Begin() calls.
 | 
				
			||||||
 | 
					        // (*) One can use IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup) to bypass it and detect hovering even when normally blocked by a popup.
 | 
				
			||||||
 | 
					        // Those three properties are intimately connected. The library needs to hold their visibility state because it can close popups at any time.
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        // Typical use for regular windows:
 | 
				
			||||||
 | 
					        //   bool my_tool_is_active = false; if (ImGui::Button("Open")) my_tool_is_active = true; [...] if (my_tool_is_active) Begin("My Tool", &my_tool_is_active) { [...] } End();
 | 
				
			||||||
 | 
					        // Typical use for popups:
 | 
				
			||||||
 | 
					        //   if (ImGui::Button("Open")) ImGui::OpenPopup("MyPopup"); if (ImGui::BeginPopup("MyPopup") { [...] EndPopup(); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // With popups we have to go through a library call (here OpenPopup) to manipulate the visibility state.
 | 
				
			||||||
 | 
					        // This may be a bit confusing at first but it should quickly make sense. Follow on the examples below. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (ImGui::TreeNode("Popups"))
 | 
					        if (ImGui::TreeNode("Popups"))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            ImGui::TextWrapped("When a popup is active, it inhibits interacting with windows that are behind the popup. Clicking outside the popup closes it.");
 | 
					            ImGui::TextWrapped("When a popup is active, it inhibits interacting with windows that are behind the popup. Clicking outside the popup closes it.");
 | 
				
			||||||
@@ -1900,10 +1918,10 @@ void ImGui::ShowDemoWindow(bool* p_open)
 | 
				
			|||||||
            // Simple selection popup
 | 
					            // Simple selection popup
 | 
				
			||||||
            // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label)
 | 
					            // (If you want to show the current selection inside the Button itself, you may want to build a string using the "###" operator to preserve a constant ID with a variable label)
 | 
				
			||||||
            if (ImGui::Button("Select.."))
 | 
					            if (ImGui::Button("Select.."))
 | 
				
			||||||
                ImGui::OpenPopup("select");
 | 
					                ImGui::OpenPopup("my_select_popup");
 | 
				
			||||||
            ImGui::SameLine();
 | 
					            ImGui::SameLine();
 | 
				
			||||||
            ImGui::TextUnformatted(selected_fish == -1 ? "<None>" : names[selected_fish]);
 | 
					            ImGui::TextUnformatted(selected_fish == -1 ? "<None>" : names[selected_fish]);
 | 
				
			||||||
            if (ImGui::BeginPopup("select"))
 | 
					            if (ImGui::BeginPopup("my_select_popup"))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                ImGui::Text("Aquarium");
 | 
					                ImGui::Text("Aquarium");
 | 
				
			||||||
                ImGui::Separator();
 | 
					                ImGui::Separator();
 | 
				
			||||||
@@ -1915,8 +1933,8 @@ void ImGui::ShowDemoWindow(bool* p_open)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            // Showing a menu with toggles
 | 
					            // Showing a menu with toggles
 | 
				
			||||||
            if (ImGui::Button("Toggle.."))
 | 
					            if (ImGui::Button("Toggle.."))
 | 
				
			||||||
                ImGui::OpenPopup("toggle");
 | 
					                ImGui::OpenPopup("my_toggle_popup");
 | 
				
			||||||
            if (ImGui::BeginPopup("toggle"))
 | 
					            if (ImGui::BeginPopup("my_toggle_popup"))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                for (int i = 0; i < IM_ARRAYSIZE(names); i++)
 | 
					                for (int i = 0; i < IM_ARRAYSIZE(names); i++)
 | 
				
			||||||
                    ImGui::MenuItem(names[i], "", &toggles[i]);
 | 
					                    ImGui::MenuItem(names[i], "", &toggles[i]);
 | 
				
			||||||
@@ -1947,9 +1965,10 @@ void ImGui::ShowDemoWindow(bool* p_open)
 | 
				
			|||||||
                ImGui::EndPopup();
 | 
					                ImGui::EndPopup();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (ImGui::Button("Popup Menu.."))
 | 
					            // Call the more complete ShowExampleMenuFile which we use in various places of this demo
 | 
				
			||||||
                ImGui::OpenPopup("FilePopup");
 | 
					            if (ImGui::Button("File Menu.."))
 | 
				
			||||||
            if (ImGui::BeginPopup("FilePopup"))
 | 
					                ImGui::OpenPopup("my_file_popup");
 | 
				
			||||||
 | 
					            if (ImGui::BeginPopup("my_file_popup"))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                ShowExampleMenuFile();
 | 
					                ShowExampleMenuFile();
 | 
				
			||||||
                ImGui::EndPopup();
 | 
					                ImGui::EndPopup();
 | 
				
			||||||
@@ -1961,7 +1980,7 @@ void ImGui::ShowDemoWindow(bool* p_open)
 | 
				
			|||||||
        if (ImGui::TreeNode("Context menus"))
 | 
					        if (ImGui::TreeNode("Context menus"))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing:
 | 
					            // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing:
 | 
				
			||||||
            //    if (IsItemHovered() && IsMouseClicked(0))
 | 
					            //    if (IsItemHovered() && IsMouseReleased(0))
 | 
				
			||||||
            //       OpenPopup(id);
 | 
					            //       OpenPopup(id);
 | 
				
			||||||
            //    return BeginPopup(id);
 | 
					            //    return BeginPopup(id);
 | 
				
			||||||
            // For more advanced uses you may want to replicate and cuztomize this code. This the comments inside BeginPopupContextItem() implementation.
 | 
					            // For more advanced uses you may want to replicate and cuztomize this code. This the comments inside BeginPopupContextItem() implementation.
 | 
				
			||||||
@@ -1977,10 +1996,18 @@ void ImGui::ShowDemoWindow(bool* p_open)
 | 
				
			|||||||
                ImGui::EndPopup();
 | 
					                ImGui::EndPopup();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // We can also use OpenPopupOnItemClick() which is the same as BeginPopupContextItem() but without the Begin call.
 | 
				
			||||||
 | 
					            // So here we will make it that clicking on the text field with the right mouse button (1) will toggle the visibility of the popup above.
 | 
				
			||||||
 | 
					            ImGui::Text("(You can also right-click me to the same popup as above.)");
 | 
				
			||||||
 | 
					            ImGui::OpenPopupOnItemClick("item context menu", 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // When used after an item that has an ID (here the Button), we can skip providing an ID to BeginPopupContextItem(). 
 | 
				
			||||||
 | 
					            // BeginPopupContextItem() will use the last item ID as the popup ID.
 | 
				
			||||||
 | 
					            // In addition here, we want to include your editable label inside the button label. We use the ### operator to override the ID (read FAQ about ID for details)
 | 
				
			||||||
            static char name[32] = "Label1";
 | 
					            static char name[32] = "Label1";
 | 
				
			||||||
            char buf[64]; sprintf(buf, "Button: %s###Button", name); // ### operator override ID ignoring the preceding label
 | 
					            char buf[64]; sprintf(buf, "Button: %s###Button", name); // ### operator override ID ignoring the preceding label
 | 
				
			||||||
            ImGui::Button(buf);
 | 
					            ImGui::Button(buf);
 | 
				
			||||||
            if (ImGui::BeginPopupContextItem()) // When used after an item that has an ID (here the Button), we can skip providing an ID to BeginPopupContextItem().
 | 
					            if (ImGui::BeginPopupContextItem())
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                ImGui::Text("Edit name:");
 | 
					                ImGui::Text("Edit name:");
 | 
				
			||||||
                ImGui::InputText("##edit", name, IM_ARRAYSIZE(name));
 | 
					                ImGui::InputText("##edit", name, IM_ARRAYSIZE(name));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1395,7 +1395,7 @@ ImFontAtlas::ImFontAtlas()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    Locked = false;
 | 
					    Locked = false;
 | 
				
			||||||
    Flags = ImFontAtlasFlags_None;
 | 
					    Flags = ImFontAtlasFlags_None;
 | 
				
			||||||
    TexID = NULL;
 | 
					    TexID = (ImTextureID)NULL;
 | 
				
			||||||
    TexDesiredWidth = 0;
 | 
					    TexDesiredWidth = 0;
 | 
				
			||||||
    TexGlyphPadding = 1;
 | 
					    TexGlyphPadding = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1711,7 +1711,7 @@ bool    ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    ImFontAtlasBuildRegisterDefaultCustomRects(atlas);
 | 
					    ImFontAtlasBuildRegisterDefaultCustomRects(atlas);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    atlas->TexID = NULL;
 | 
					    atlas->TexID = (ImTextureID)NULL;
 | 
				
			||||||
    atlas->TexWidth = atlas->TexHeight = 0;
 | 
					    atlas->TexWidth = atlas->TexHeight = 0;
 | 
				
			||||||
    atlas->TexUvScale = ImVec2(0.0f, 0.0f);
 | 
					    atlas->TexUvScale = ImVec2(0.0f, 0.0f);
 | 
				
			||||||
    atlas->TexUvWhitePixel = ImVec2(0.0f, 0.0f);
 | 
					    atlas->TexUvWhitePixel = ImVec2(0.0f, 0.0f);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3402,7 +3402,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                // Filter pasted buffer
 | 
					                // Filter pasted buffer
 | 
				
			||||||
                const int clipboard_len = (int)strlen(clipboard);
 | 
					                const int clipboard_len = (int)strlen(clipboard);
 | 
				
			||||||
                ImWchar* clipboard_filtered = (ImWchar*)ImGui::MemAlloc((clipboard_len+1) * sizeof(ImWchar));
 | 
					                ImWchar* clipboard_filtered = (ImWchar*)MemAlloc((clipboard_len+1) * sizeof(ImWchar));
 | 
				
			||||||
                int clipboard_filtered_len = 0;
 | 
					                int clipboard_filtered_len = 0;
 | 
				
			||||||
                for (const char* s = clipboard; *s; )
 | 
					                for (const char* s = clipboard; *s; )
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
@@ -3420,7 +3420,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
 | 
				
			|||||||
                    stb_textedit_paste(&edit_state, &edit_state.StbState, clipboard_filtered, clipboard_filtered_len);
 | 
					                    stb_textedit_paste(&edit_state, &edit_state.StbState, clipboard_filtered, clipboard_filtered_len);
 | 
				
			||||||
                    edit_state.CursorFollow = true;
 | 
					                    edit_state.CursorFollow = true;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                ImGui::MemFree(clipboard_filtered);
 | 
					                MemFree(clipboard_filtered);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -4533,38 +4533,38 @@ void ImGui::ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags fl
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    bool allow_opt_picker = !(flags & ImGuiColorEditFlags__PickerMask);
 | 
					    bool allow_opt_picker = !(flags & ImGuiColorEditFlags__PickerMask);
 | 
				
			||||||
    bool allow_opt_alpha_bar = !(flags & ImGuiColorEditFlags_NoAlpha) && !(flags & ImGuiColorEditFlags_AlphaBar);
 | 
					    bool allow_opt_alpha_bar = !(flags & ImGuiColorEditFlags_NoAlpha) && !(flags & ImGuiColorEditFlags_AlphaBar);
 | 
				
			||||||
    if ((!allow_opt_picker && !allow_opt_alpha_bar) || !ImGui::BeginPopup("context"))
 | 
					    if ((!allow_opt_picker && !allow_opt_alpha_bar) || !BeginPopup("context"))
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
    if (allow_opt_picker)
 | 
					    if (allow_opt_picker)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ImVec2 picker_size(g.FontSize * 8, ImMax(g.FontSize * 8 - (ImGui::GetFrameHeight() + g.Style.ItemInnerSpacing.x), 1.0f)); // FIXME: Picker size copied from main picker function
 | 
					        ImVec2 picker_size(g.FontSize * 8, ImMax(g.FontSize * 8 - (GetFrameHeight() + g.Style.ItemInnerSpacing.x), 1.0f)); // FIXME: Picker size copied from main picker function
 | 
				
			||||||
        ImGui::PushItemWidth(picker_size.x);
 | 
					        PushItemWidth(picker_size.x);
 | 
				
			||||||
        for (int picker_type = 0; picker_type < 2; picker_type++)
 | 
					        for (int picker_type = 0; picker_type < 2; picker_type++)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // Draw small/thumbnail version of each picker type (over an invisible button for selection)
 | 
					            // Draw small/thumbnail version of each picker type (over an invisible button for selection)
 | 
				
			||||||
            if (picker_type > 0) ImGui::Separator();
 | 
					            if (picker_type > 0) Separator();
 | 
				
			||||||
            ImGui::PushID(picker_type);
 | 
					            PushID(picker_type);
 | 
				
			||||||
            ImGuiColorEditFlags picker_flags = ImGuiColorEditFlags_NoInputs|ImGuiColorEditFlags_NoOptions|ImGuiColorEditFlags_NoLabel|ImGuiColorEditFlags_NoSidePreview|(flags & ImGuiColorEditFlags_NoAlpha);
 | 
					            ImGuiColorEditFlags picker_flags = ImGuiColorEditFlags_NoInputs|ImGuiColorEditFlags_NoOptions|ImGuiColorEditFlags_NoLabel|ImGuiColorEditFlags_NoSidePreview|(flags & ImGuiColorEditFlags_NoAlpha);
 | 
				
			||||||
            if (picker_type == 0) picker_flags |= ImGuiColorEditFlags_PickerHueBar;
 | 
					            if (picker_type == 0) picker_flags |= ImGuiColorEditFlags_PickerHueBar;
 | 
				
			||||||
            if (picker_type == 1) picker_flags |= ImGuiColorEditFlags_PickerHueWheel;
 | 
					            if (picker_type == 1) picker_flags |= ImGuiColorEditFlags_PickerHueWheel;
 | 
				
			||||||
            ImVec2 backup_pos = ImGui::GetCursorScreenPos();
 | 
					            ImVec2 backup_pos = GetCursorScreenPos();
 | 
				
			||||||
            if (ImGui::Selectable("##selectable", false, 0, picker_size)) // By default, Selectable() is closing popup
 | 
					            if (Selectable("##selectable", false, 0, picker_size)) // By default, Selectable() is closing popup
 | 
				
			||||||
                g.ColorEditOptions = (g.ColorEditOptions & ~ImGuiColorEditFlags__PickerMask) | (picker_flags & ImGuiColorEditFlags__PickerMask);
 | 
					                g.ColorEditOptions = (g.ColorEditOptions & ~ImGuiColorEditFlags__PickerMask) | (picker_flags & ImGuiColorEditFlags__PickerMask);
 | 
				
			||||||
            ImGui::SetCursorScreenPos(backup_pos);
 | 
					            SetCursorScreenPos(backup_pos);
 | 
				
			||||||
            ImVec4 dummy_ref_col;
 | 
					            ImVec4 dummy_ref_col;
 | 
				
			||||||
            memcpy(&dummy_ref_col.x, ref_col, sizeof(float) * (picker_flags & ImGuiColorEditFlags_NoAlpha ? 3 : 4));
 | 
					            memcpy(&dummy_ref_col.x, ref_col, sizeof(float) * (picker_flags & ImGuiColorEditFlags_NoAlpha ? 3 : 4));
 | 
				
			||||||
            ImGui::ColorPicker4("##dummypicker", &dummy_ref_col.x, picker_flags);
 | 
					            ColorPicker4("##dummypicker", &dummy_ref_col.x, picker_flags);
 | 
				
			||||||
            ImGui::PopID();
 | 
					            PopID();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        ImGui::PopItemWidth();
 | 
					        PopItemWidth();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (allow_opt_alpha_bar)
 | 
					    if (allow_opt_alpha_bar)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (allow_opt_picker) ImGui::Separator();
 | 
					        if (allow_opt_picker) Separator();
 | 
				
			||||||
        ImGui::CheckboxFlags("Alpha Bar", (unsigned int*)&g.ColorEditOptions, ImGuiColorEditFlags_AlphaBar);
 | 
					        CheckboxFlags("Alpha Bar", (unsigned int*)&g.ColorEditOptions, ImGuiColorEditFlags_AlphaBar);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    ImGui::EndPopup();
 | 
					    EndPopup();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//-------------------------------------------------------------------------
 | 
					//-------------------------------------------------------------------------
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ misc/freetype/
 | 
				
			|||||||
  Font atlas builder/rasterizer using FreeType instead of stb_truetype.
 | 
					  Font atlas builder/rasterizer using FreeType instead of stb_truetype.
 | 
				
			||||||
  Benefit from better FreeType rasterization, in particular for small fonts.
 | 
					  Benefit from better FreeType rasterization, in particular for small fonts.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
misc/natnis/
 | 
					misc/natvis/
 | 
				
			||||||
  Natvis file to describe dear imgui types in the Visual Studio debugger. 
 | 
					  Natvis file to describe dear imgui types in the Visual Studio debugger. 
 | 
				
			||||||
  With this, types like ImVector<> will be displayed nicely in the debugger. 
 | 
					  With this, types like ImVector<> will be displayed nicely in the debugger. 
 | 
				
			||||||
  You can include this file a Visual Studio project file, or install it in Visual Studio folder.
 | 
					  You can include this file a Visual Studio project file, or install it in Visual Studio folder.
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user