|
@@ -3051,20 +3051,19 @@ bool ImGui::BeginChild(const char* str_id, const ImVec2& size_arg, bool border,
|
|
|
ImGuiWindow* window = GetCurrentWindow();
|
|
|
ImGuiWindowFlags flags = ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_ChildWindow;
|
|
|
|
|
|
- const ImVec2 content_max = window->Pos + ImGui::GetContentRegionMax();
|
|
|
- const ImVec2 cursor_pos = window->Pos + ImGui::GetCursorPos();
|
|
|
+ const ImVec2 content_avail = ImGui::GetContentRegionAvail();
|
|
|
ImVec2 size = size_arg;
|
|
|
if (size.x <= 0.0f)
|
|
|
{
|
|
|
if (size.x == 0.0f)
|
|
|
flags |= ImGuiWindowFlags_ChildWindowAutoFitX;
|
|
|
- size.x = ImMax(content_max.x - cursor_pos.x, 4.0f) - fabsf(size.x); // Arbitrary minimum zeroish child size of 4.0f
|
|
|
+ size.x = ImMax(content_avail.x, 4.0f) - fabsf(size.x); // Arbitrary minimum zero-ish child size of 4.0f (0.0f causing too much issues)
|
|
|
}
|
|
|
if (size.y <= 0.0f)
|
|
|
{
|
|
|
if (size.y == 0.0f)
|
|
|
flags |= ImGuiWindowFlags_ChildWindowAutoFitY;
|
|
|
- size.y = ImMax(content_max.y - cursor_pos.y, 4.0f) - fabsf(size.y);
|
|
|
+ size.y = ImMax(content_avail.y, 4.0f) - fabsf(size.y);
|
|
|
}
|
|
|
if (border)
|
|
|
flags |= ImGuiWindowFlags_ShowBorders;
|
|
@@ -3969,7 +3968,7 @@ float ImGui::CalcItemWidth()
|
|
|
{
|
|
|
// Align to a right-side limit. We include 1 frame padding in the calculation because this is how the width is always used (we add 2 frame padding to it), but we could move that responsibility to the widget as well.
|
|
|
ImGuiState& g = *GImGui;
|
|
|
- float width_to_right_edge = window->Pos.x + ImGui::GetContentRegionMax().x - window->DC.CursorPos.x;
|
|
|
+ float width_to_right_edge = ImGui::GetContentRegionAvail().x;
|
|
|
w = ImMax(1.0f, width_to_right_edge + w - g.Style.FramePadding.x * 2.0f);
|
|
|
}
|
|
|
w = (float)(int)w;
|
|
@@ -4398,6 +4397,7 @@ void ImGui::SetNextWindowFocus()
|
|
|
g.SetNextWindowFocus = true;
|
|
|
}
|
|
|
|
|
|
+// In window space (not screen space!)
|
|
|
ImVec2 ImGui::GetContentRegionMax()
|
|
|
{
|
|
|
ImGuiWindow* window = GetCurrentWindow();
|
|
@@ -4409,6 +4409,13 @@ ImVec2 ImGui::GetContentRegionMax()
|
|
|
return mx;
|
|
|
}
|
|
|
|
|
|
+inline ImVec2 ImGui::GetContentRegionAvail()
|
|
|
+{
|
|
|
+ ImGuiWindow* window = GetCurrentWindow();
|
|
|
+ return GetContentRegionMax() - (window->DC.CursorPos - window->Pos);
|
|
|
+}
|
|
|
+
|
|
|
+// In window space (not screen space!)
|
|
|
ImVec2 ImGui::GetWindowContentRegionMin()
|
|
|
{
|
|
|
ImGuiWindow* window = GetCurrentWindow();
|
|
@@ -7730,11 +7737,11 @@ bool ImGui::MenuItem(const char* label, const char* shortcut, bool selected, boo
|
|
|
return false;
|
|
|
|
|
|
ImGuiState& g = *GImGui;
|
|
|
- ImVec2 pos = ImGui::GetCursorScreenPos();
|
|
|
+ ImVec2 pos = window->DC.CursorPos;
|
|
|
ImVec2 label_size = CalcTextSize(label, NULL, true);
|
|
|
ImVec2 shortcut_size = shortcut ? CalcTextSize(shortcut, NULL) : ImVec2(0.0f, 0.0f);
|
|
|
float w = window->MenuColumns.DeclColumns(label_size.x, shortcut_size.x, (float)(int)(g.FontSize * 1.20f)); // Feedback for next frame
|
|
|
- float extra_w = ImMax(0.0f, window->Pos.x + ImGui::GetContentRegionMax().x - pos.x - w);
|
|
|
+ float extra_w = ImMax(0.0f, ImGui::GetContentRegionAvail().x - w);
|
|
|
|
|
|
bool pressed = ImGui::Selectable(label, false, ImGuiSelectableFlags_MenuItem | ImGuiSelectableFlags_DrawFillAvailWidth | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(w, 0.0f));
|
|
|
if (shortcut_size.x > 0.0f)
|
|
@@ -7858,7 +7865,7 @@ bool ImGui::BeginMenu(const char* label, bool enabled)
|
|
|
{
|
|
|
popup_pos = ImVec2(pos.x, pos.y - style.WindowPadding.y);
|
|
|
float w = window->MenuColumns.DeclColumns(label_size.x, 0.0f, (float)(int)(g.FontSize * 1.20f)); // Feedback to next frame
|
|
|
- float extra_w = ImMax(0.0f, window->Pos.x + ImGui::GetContentRegionMax().x - pos.x - w);
|
|
|
+ float extra_w = ImMax(0.0f, ImGui::GetContentRegionAvail().x - w);
|
|
|
pressed = ImGui::Selectable(label, opened, ImGuiSelectableFlags_Menu | ImGuiSelectableFlags_DontClosePopups | ImGuiSelectableFlags_DrawFillAvailWidth | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(w, 0.0f));
|
|
|
if (!enabled) ImGui::PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]);
|
|
|
RenderCollapseTriangle(pos + ImVec2(window->MenuColumns.Pos[2] + extra_w + g.FontSize * 0.20f, 0.0f), false);
|