Internals: NextWindow: Using ImGuiCond for consistency.

This commit is contained in:
omar 2018-01-03 12:22:02 +01:00
parent 04b44398eb
commit e339949de1
2 changed files with 15 additions and 18 deletions

View File

@ -3820,8 +3820,7 @@ static inline void ClearSetNextWindowData()
{ {
// FIXME-OPT // FIXME-OPT
ImGuiContext& g = *GImGui; ImGuiContext& g = *GImGui;
g.NextWindow.PosCond = g.NextWindow.SizeCond = g.NextWindow.ContentSizeCond = g.NextWindow.CollapsedCond = 0; g.NextWindow.PosCond = g.NextWindow.SizeCond = g.NextWindow.ContentSizeCond = g.NextWindow.CollapsedCond = g.NextWindow.SizeConstraintCond = g.NextWindow.FocusCond = 0;
g.NextWindow.SizeConstraint = g.NextWindow.Focus = false;
} }
bool ImGui::BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags) bool ImGui::BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags)
@ -4193,7 +4192,7 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFl
static ImVec2 CalcSizeAfterConstraint(ImGuiWindow* window, ImVec2 new_size) static ImVec2 CalcSizeAfterConstraint(ImGuiWindow* window, ImVec2 new_size)
{ {
ImGuiContext& g = *GImGui; ImGuiContext& g = *GImGui;
if (g.NextWindow.SizeConstraint) if (g.NextWindow.SizeConstraintCond != 0)
{ {
// Using -1,-1 on either X/Y axis to preserve the current size. // Using -1,-1 on either X/Y axis to preserve the current size.
ImRect cr = g.NextWindow.SizeConstraintRect; ImRect cr = g.NextWindow.SizeConstraintRect;
@ -4437,10 +4436,10 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
SetWindowCollapsed(window, g.NextWindow.CollapsedVal, g.NextWindow.CollapsedCond); SetWindowCollapsed(window, g.NextWindow.CollapsedVal, g.NextWindow.CollapsedCond);
g.NextWindow.CollapsedCond = 0; g.NextWindow.CollapsedCond = 0;
} }
if (g.NextWindow.Focus) if (g.NextWindow.FocusCond)
{ {
SetWindowFocus(); SetWindowFocus();
g.NextWindow.Focus = false; g.NextWindow.FocusCond = 0;
} }
if (window->Appearing) if (window->Appearing)
SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, false); SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, false);
@ -4940,7 +4939,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
window->WriteAccessed = false; window->WriteAccessed = false;
window->BeginCount++; window->BeginCount++;
g.NextWindow.SizeConstraint = false; g.NextWindow.SizeConstraintCond = 0;
// 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).
@ -5717,7 +5716,7 @@ void ImGui::SetNextWindowSize(const ImVec2& size, ImGuiCond cond)
void ImGui::SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback, void* custom_callback_user_data) void ImGui::SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback, void* custom_callback_user_data)
{ {
ImGuiContext& g = *GImGui; ImGuiContext& g = *GImGui;
g.NextWindow.SizeConstraint = true; g.NextWindow.SizeConstraintCond = ImGuiCond_Always;
g.NextWindow.SizeConstraintRect = ImRect(size_min, size_max); g.NextWindow.SizeConstraintRect = ImRect(size_min, size_max);
g.NextWindow.SizeConstraintCallback = custom_callback; g.NextWindow.SizeConstraintCallback = custom_callback;
g.NextWindow.SizeConstraintCallbackUserData = custom_callback_user_data; g.NextWindow.SizeConstraintCallbackUserData = custom_callback_user_data;
@ -5740,7 +5739,7 @@ void ImGui::SetNextWindowCollapsed(bool collapsed, ImGuiCond cond)
void ImGui::SetNextWindowFocus() void ImGui::SetNextWindowFocus()
{ {
ImGuiContext& g = *GImGui; ImGuiContext& g = *GImGui;
g.NextWindow.Focus = true; g.NextWindow.FocusCond = ImGuiCond_Always;
} }
// In window space (not screen space!) // In window space (not screen space!)
@ -9163,8 +9162,8 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboF
{ {
// Always consume the SetNextWindowSizeConstraint() call in our early return paths // Always consume the SetNextWindowSizeConstraint() call in our early return paths
ImGuiContext& g = *GImGui; ImGuiContext& g = *GImGui;
bool backup_has_next_window_size_constraint = g.NextWindow.SizeConstraint; ImGuiCond backup_next_window_size_constraint = g.NextWindow.SizeConstraintCond;
g.NextWindow.SizeConstraint = false; g.NextWindow.SizeConstraintCond = 0;
ImGuiWindow* window = GetCurrentWindow(); ImGuiWindow* window = GetCurrentWindow();
if (window->SkipItems) if (window->SkipItems)
@ -9204,9 +9203,9 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboF
if (!popup_open) if (!popup_open)
return false; return false;
if (backup_has_next_window_size_constraint) if (backup_next_window_size_constraint)
{ {
g.NextWindow.SizeConstraint = true; g.NextWindow.SizeConstraintCond = backup_next_window_size_constraint;
g.NextWindow.SizeConstraintRect.Min.x = ImMax(g.NextWindow.SizeConstraintRect.Min.x, w); g.NextWindow.SizeConstraintRect.Min.x = ImMax(g.NextWindow.SizeConstraintRect.Min.x, w);
} }
else else
@ -9269,7 +9268,7 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi
items_getter(data, *current_item, &preview_text); items_getter(data, *current_item, &preview_text);
// The old Combo() API exposed "popup_max_height_in_items", however the new more general BeginCombo() API doesn't, so we emulate it here. // The old Combo() API exposed "popup_max_height_in_items", however the new more general BeginCombo() API doesn't, so we emulate it here.
if (popup_max_height_in_items != -1 && !g.NextWindow.SizeConstraint) if (popup_max_height_in_items != -1 && !g.NextWindow.SizeConstraintCond)
{ {
float popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items); float popup_max_height = CalcMaxPopupHeightFromItemCount(popup_max_height_in_items);
SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, popup_max_height)); SetNextWindowSizeConstraints(ImVec2(0,0), ImVec2(FLT_MAX, popup_max_height));

View File

@ -466,6 +466,8 @@ struct ImGuiNextWindowData
ImGuiCond SizeCond; ImGuiCond SizeCond;
ImGuiCond ContentSizeCond; ImGuiCond ContentSizeCond;
ImGuiCond CollapsedCond; ImGuiCond CollapsedCond;
ImGuiCond SizeConstraintCond;
ImGuiCond FocusCond;
ImVec2 PosVal; ImVec2 PosVal;
ImVec2 PosPivotVal; ImVec2 PosPivotVal;
ImVec2 SizeVal; ImVec2 SizeVal;
@ -474,20 +476,16 @@ struct ImGuiNextWindowData
ImRect SizeConstraintRect; // Valid if 'SetNextWindowSizeConstraint' is true ImRect SizeConstraintRect; // Valid if 'SetNextWindowSizeConstraint' is true
ImGuiSizeConstraintCallback SizeConstraintCallback; ImGuiSizeConstraintCallback SizeConstraintCallback;
void* SizeConstraintCallbackUserData; void* SizeConstraintCallbackUserData;
bool SizeConstraint;
bool Focus;
ImGuiNextWindowData() ImGuiNextWindowData()
{ {
PosCond = SizeCond = ContentSizeCond = CollapsedCond = 0; PosCond = SizeCond = ContentSizeCond = CollapsedCond = SizeConstraintCond = FocusCond = 0;
PosVal = PosPivotVal = SizeVal = ImVec2(0.0f, 0.0f); PosVal = PosPivotVal = SizeVal = ImVec2(0.0f, 0.0f);
ContentSizeVal = ImVec2(0.0f, 0.0f); ContentSizeVal = ImVec2(0.0f, 0.0f);
CollapsedVal = false; CollapsedVal = false;
SizeConstraintRect = ImRect(); SizeConstraintRect = ImRect();
SizeConstraintCallback = NULL; SizeConstraintCallback = NULL;
SizeConstraintCallbackUserData = NULL; SizeConstraintCallbackUserData = NULL;
SizeConstraint = false;
Focus = false;
} }
}; };