mirror of
https://github.com/ocornut/imgui.git
synced 2024-12-03 21:59:15 +08:00
Clearing next window data at the end of Begin() more reliably. Misc comments.
This commit is contained in:
parent
a761779b12
commit
0e62b7d68a
18
imgui.cpp
18
imgui.cpp
@ -5657,14 +5657,12 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
{
|
{
|
||||||
SetWindowPos(window, g.NextWindowData.PosVal, g.NextWindowData.PosCond);
|
SetWindowPos(window, g.NextWindowData.PosVal, g.NextWindowData.PosCond);
|
||||||
}
|
}
|
||||||
g.NextWindowData.PosCond = 0;
|
|
||||||
}
|
}
|
||||||
if (g.NextWindowData.SizeCond)
|
if (g.NextWindowData.SizeCond)
|
||||||
{
|
{
|
||||||
window_size_x_set_by_api = (window->SetWindowSizeAllowFlags & g.NextWindowData.SizeCond) != 0 && (g.NextWindowData.SizeVal.x > 0.0f);
|
window_size_x_set_by_api = (window->SetWindowSizeAllowFlags & g.NextWindowData.SizeCond) != 0 && (g.NextWindowData.SizeVal.x > 0.0f);
|
||||||
window_size_y_set_by_api = (window->SetWindowSizeAllowFlags & g.NextWindowData.SizeCond) != 0 && (g.NextWindowData.SizeVal.y > 0.0f);
|
window_size_y_set_by_api = (window->SetWindowSizeAllowFlags & g.NextWindowData.SizeCond) != 0 && (g.NextWindowData.SizeVal.y > 0.0f);
|
||||||
SetWindowSize(window, g.NextWindowData.SizeVal, g.NextWindowData.SizeCond);
|
SetWindowSize(window, g.NextWindowData.SizeVal, g.NextWindowData.SizeCond);
|
||||||
g.NextWindowData.SizeCond = 0;
|
|
||||||
}
|
}
|
||||||
if (g.NextWindowData.ContentSizeCond)
|
if (g.NextWindowData.ContentSizeCond)
|
||||||
{
|
{
|
||||||
@ -5672,22 +5670,15 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
window->SizeContentsExplicit = g.NextWindowData.ContentSizeVal;
|
window->SizeContentsExplicit = g.NextWindowData.ContentSizeVal;
|
||||||
if (window->SizeContentsExplicit.y != 0.0f)
|
if (window->SizeContentsExplicit.y != 0.0f)
|
||||||
window->SizeContentsExplicit.y += window->TitleBarHeight() + window->MenuBarHeight();
|
window->SizeContentsExplicit.y += window->TitleBarHeight() + window->MenuBarHeight();
|
||||||
g.NextWindowData.ContentSizeCond = 0;
|
|
||||||
}
|
}
|
||||||
else if (first_begin_of_the_frame)
|
else if (first_begin_of_the_frame)
|
||||||
{
|
{
|
||||||
window->SizeContentsExplicit = ImVec2(0.0f, 0.0f);
|
window->SizeContentsExplicit = ImVec2(0.0f, 0.0f);
|
||||||
}
|
}
|
||||||
if (g.NextWindowData.CollapsedCond)
|
if (g.NextWindowData.CollapsedCond)
|
||||||
{
|
|
||||||
SetWindowCollapsed(window, g.NextWindowData.CollapsedVal, g.NextWindowData.CollapsedCond);
|
SetWindowCollapsed(window, g.NextWindowData.CollapsedVal, g.NextWindowData.CollapsedCond);
|
||||||
g.NextWindowData.CollapsedCond = 0;
|
|
||||||
}
|
|
||||||
if (g.NextWindowData.FocusCond)
|
if (g.NextWindowData.FocusCond)
|
||||||
{
|
|
||||||
SetWindowFocus();
|
SetWindowFocus();
|
||||||
g.NextWindowData.FocusCond = 0;
|
|
||||||
}
|
|
||||||
if (window->Appearing)
|
if (window->Appearing)
|
||||||
SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, false);
|
SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, false);
|
||||||
|
|
||||||
@ -5714,7 +5705,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
window->LastFrameActive = current_frame;
|
window->LastFrameActive = current_frame;
|
||||||
window->IDStack.resize(1);
|
window->IDStack.resize(1);
|
||||||
|
|
||||||
// Lock window rounding, border size and rounding so that altering the border sizes for children doesn't have side-effects.
|
// Lock window rounding, border size and padding for the frame (so that altering them doesn't cause inconsistencies)
|
||||||
window->WindowRounding = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildRounding : ((flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupRounding : style.WindowRounding;
|
window->WindowRounding = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildRounding : ((flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupRounding : style.WindowRounding;
|
||||||
window->WindowBorderSize = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildBorderSize : ((flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupBorderSize : style.WindowBorderSize;
|
window->WindowBorderSize = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildBorderSize : ((flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupBorderSize : style.WindowBorderSize;
|
||||||
window->WindowPadding = style.WindowPadding;
|
window->WindowPadding = style.WindowPadding;
|
||||||
@ -5948,10 +5939,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
// Window background
|
// Window background
|
||||||
ImU32 bg_col = GetColorU32(GetWindowBgColorIdxFromFlags(flags));
|
ImU32 bg_col = GetColorU32(GetWindowBgColorIdxFromFlags(flags));
|
||||||
if (g.NextWindowData.BgAlphaCond != 0)
|
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);
|
bg_col = (bg_col & ~IM_COL32_A_MASK) | (IM_F32_TO_INT8_SAT(g.NextWindowData.BgAlphaVal) << IM_COL32_A_SHIFT);
|
||||||
g.NextWindowData.BgAlphaCond = 0;
|
|
||||||
}
|
|
||||||
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);
|
||||||
|
|
||||||
// Title bar
|
// Title bar
|
||||||
@ -6090,7 +6078,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
{
|
{
|
||||||
ImGuiID id = window->GetID("#COLLAPSE");
|
ImGuiID id = window->GetID("#COLLAPSE");
|
||||||
ImRect bb(window->Pos + style.FramePadding + ImVec2(1,1), window->Pos + style.FramePadding + ImVec2(g.FontSize,g.FontSize) - ImVec2(1,1));
|
ImRect bb(window->Pos + style.FramePadding + ImVec2(1,1), window->Pos + style.FramePadding + ImVec2(g.FontSize,g.FontSize) - ImVec2(1,1));
|
||||||
ItemAdd(bb, id); // To allow navigation
|
ItemAdd(bb, id);
|
||||||
if (ButtonBehavior(bb, id, NULL, NULL))
|
if (ButtonBehavior(bb, id, NULL, NULL))
|
||||||
window->CollapseToggleWanted = true; // Defer collapsing to next frame as we are too far in the Begin() function
|
window->CollapseToggleWanted = true; // Defer collapsing to next frame as we are too far in the Begin() function
|
||||||
RenderNavHighlight(bb, id);
|
RenderNavHighlight(bb, id);
|
||||||
@ -6166,7 +6154,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
window->WriteAccessed = false;
|
window->WriteAccessed = false;
|
||||||
|
|
||||||
window->BeginCount++;
|
window->BeginCount++;
|
||||||
g.NextWindowData.SizeConstraintCond = 0;
|
g.NextWindowData.Clear();
|
||||||
|
|
||||||
// Child window can be out of sight and have "negative" clip windows.
|
// Child window can be out of sight and have "negative" clip windows.
|
||||||
// Mark them as collapsed so commands are skipped earlier (we can't manually collapse because they have no title bar).
|
// Mark them as collapsed so commands are skipped earlier (we can't manually collapse because they have no title bar).
|
||||||
|
@ -543,7 +543,7 @@ struct ImGuiNextWindowData
|
|||||||
ImVec2 SizeVal;
|
ImVec2 SizeVal;
|
||||||
ImVec2 ContentSizeVal;
|
ImVec2 ContentSizeVal;
|
||||||
bool CollapsedVal;
|
bool CollapsedVal;
|
||||||
ImRect SizeConstraintRect; // Valid if 'SetNextWindowSizeConstraint' is true
|
ImRect SizeConstraintRect;
|
||||||
ImGuiSizeCallback SizeCallback;
|
ImGuiSizeCallback SizeCallback;
|
||||||
void* SizeCallbackUserData;
|
void* SizeCallbackUserData;
|
||||||
float BgAlphaVal;
|
float BgAlphaVal;
|
||||||
@ -940,9 +940,10 @@ struct IMGUI_API ImGuiWindow
|
|||||||
int AutoFitChildAxises;
|
int AutoFitChildAxises;
|
||||||
ImGuiDir AutoPosLastDirection;
|
ImGuiDir AutoPosLastDirection;
|
||||||
int HiddenFrames;
|
int HiddenFrames;
|
||||||
ImGuiCond SetWindowPosAllowFlags; // store condition flags for next SetWindowPos() call.
|
ImGuiCond SetWindowPosAllowFlags; // store accepted condition flags for SetNextWindowPos() use.
|
||||||
ImGuiCond SetWindowSizeAllowFlags; // store condition flags for next SetWindowSize() call.
|
ImGuiCond SetWindowSizeAllowFlags; // store accepted condition flags for SetNextWindowSize() use.
|
||||||
ImGuiCond SetWindowCollapsedAllowFlags; // store condition flags for next SetWindowCollapsed() call.
|
ImGuiCond SetWindowCollapsedAllowFlags; // store accepted condition flags for SetNextWindowCollapsed() use.
|
||||||
|
|
||||||
ImVec2 SetWindowPosVal; // store window position when using a non-zero Pivot (position set needs to be processed when we know the window size)
|
ImVec2 SetWindowPosVal; // store window position when using a non-zero Pivot (position set needs to be processed when we know the window size)
|
||||||
ImVec2 SetWindowPosPivot; // store window pivot for positioning. ImVec2(0,0) when positioning from top-left corner; ImVec2(0.5f,0.5f) for centering; ImVec2(1,1) for bottom right.
|
ImVec2 SetWindowPosPivot; // store window pivot for positioning. ImVec2(0,0) when positioning from top-left corner; ImVec2(0.5f,0.5f) for centering; ImVec2(1,1) for bottom right.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user