mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-25 13:07:01 +00:00
Demo: expose more Combo flags + misc tidying up.
This commit is contained in:
parent
9a5da23553
commit
56f7e853be
30
imgui.cpp
30
imgui.cpp
@ -5452,7 +5452,9 @@ bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, b
|
|||||||
const float backup_border_size = g.Style.ChildBorderSize;
|
const float backup_border_size = g.Style.ChildBorderSize;
|
||||||
if (!border)
|
if (!border)
|
||||||
g.Style.ChildBorderSize = 0.0f;
|
g.Style.ChildBorderSize = 0.0f;
|
||||||
bool ret = Begin(temp_window_name, NULL, flags);
|
|
||||||
|
// Begin into window
|
||||||
|
const bool ret = Begin(temp_window_name, NULL, flags);
|
||||||
g.Style.ChildBorderSize = backup_border_size;
|
g.Style.ChildBorderSize = backup_border_size;
|
||||||
|
|
||||||
ImGuiWindow* child_window = g.CurrentWindow;
|
ImGuiWindow* child_window = g.CurrentWindow;
|
||||||
@ -5464,7 +5466,7 @@ bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, b
|
|||||||
parent_window->DC.CursorPos = child_window->Pos;
|
parent_window->DC.CursorPos = child_window->Pos;
|
||||||
|
|
||||||
// Process navigation-in immediately so NavInit can run on first frame
|
// Process navigation-in immediately so NavInit can run on first frame
|
||||||
// Can enter a child if (A) it has navigatable items or (B) it can be scrolled.
|
// Can enter a child if (A) it has navigable items or (B) it can be scrolled.
|
||||||
const ImGuiID temp_id_for_activation = ImHashStr("##Child", 0, id);
|
const ImGuiID temp_id_for_activation = ImHashStr("##Child", 0, id);
|
||||||
if (g.ActiveId == temp_id_for_activation)
|
if (g.ActiveId == temp_id_for_activation)
|
||||||
ClearActiveID();
|
ClearActiveID();
|
||||||
@ -5481,26 +5483,26 @@ bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, b
|
|||||||
void ImGui::EndChild()
|
void ImGui::EndChild()
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
ImGuiWindow* window = g.CurrentWindow;
|
ImGuiWindow* child_window = g.CurrentWindow;
|
||||||
|
|
||||||
IM_ASSERT(g.WithinEndChild == false);
|
IM_ASSERT(g.WithinEndChild == false);
|
||||||
IM_ASSERT(window->Flags & ImGuiWindowFlags_ChildWindow); // Mismatched BeginChild()/EndChild() calls
|
IM_ASSERT(child_window->Flags & ImGuiWindowFlags_ChildWindow); // Mismatched BeginChild()/EndChild() calls
|
||||||
|
|
||||||
g.WithinEndChild = true;
|
g.WithinEndChild = true;
|
||||||
ImVec2 child_size = window->Size;
|
ImVec2 child_size = child_window->Size;
|
||||||
End();
|
End();
|
||||||
if (window->BeginCount == 1)
|
if (child_window->BeginCount == 1)
|
||||||
{
|
{
|
||||||
ImGuiWindow* parent_window = g.CurrentWindow;
|
ImGuiWindow* parent_window = g.CurrentWindow;
|
||||||
ImRect bb(parent_window->DC.CursorPos, parent_window->DC.CursorPos + child_size);
|
ImRect bb(parent_window->DC.CursorPos, parent_window->DC.CursorPos + child_size);
|
||||||
ItemSize(child_size);
|
ItemSize(child_size);
|
||||||
if ((window->DC.NavLayersActiveMask != 0 || window->DC.NavWindowHasScrollY) && !(window->Flags & ImGuiWindowFlags_NavFlattened))
|
if ((child_window->DC.NavLayersActiveMask != 0 || child_window->DC.NavWindowHasScrollY) && !(child_window->Flags & ImGuiWindowFlags_NavFlattened))
|
||||||
{
|
{
|
||||||
ItemAdd(bb, window->ChildId);
|
ItemAdd(bb, child_window->ChildId);
|
||||||
RenderNavHighlight(bb, window->ChildId);
|
RenderNavHighlight(bb, child_window->ChildId);
|
||||||
|
|
||||||
// When browsing a window that has no activable items (scroll only) we keep a highlight on the child (pass g.NavId to trick into always displaying)
|
// When browsing a window that has no activable items (scroll only) we keep a highlight on the child (pass g.NavId to trick into always displaying)
|
||||||
if (window->DC.NavLayersActiveMask == 0 && window == g.NavWindow)
|
if (child_window->DC.NavLayersActiveMask == 0 && child_window == g.NavWindow)
|
||||||
RenderNavHighlight(ImRect(bb.Min - ImVec2(2, 2), bb.Max + ImVec2(2, 2)), g.NavId, ImGuiNavHighlightFlags_TypeThin);
|
RenderNavHighlight(ImRect(bb.Min - ImVec2(2, 2), bb.Max + ImVec2(2, 2)), g.NavId, ImGuiNavHighlightFlags_TypeThin);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -5509,10 +5511,10 @@ void ImGui::EndChild()
|
|||||||
ItemAdd(bb, 0);
|
ItemAdd(bb, 0);
|
||||||
|
|
||||||
// But when flattened we directly reach items, adjust active layer mask accordingly
|
// But when flattened we directly reach items, adjust active layer mask accordingly
|
||||||
if (window->Flags & ImGuiWindowFlags_NavFlattened)
|
if (child_window->Flags & ImGuiWindowFlags_NavFlattened)
|
||||||
parent_window->DC.NavLayersActiveMaskNext |= window->DC.NavLayersActiveMaskNext;
|
parent_window->DC.NavLayersActiveMaskNext |= child_window->DC.NavLayersActiveMaskNext;
|
||||||
}
|
}
|
||||||
if (g.HoveredWindow == window)
|
if (g.HoveredWindow == child_window)
|
||||||
g.LastItemData.StatusFlags |= ImGuiItemStatusFlags_HoveredWindow;
|
g.LastItemData.StatusFlags |= ImGuiItemStatusFlags_HoveredWindow;
|
||||||
}
|
}
|
||||||
g.WithinEndChild = false;
|
g.WithinEndChild = false;
|
||||||
@ -6314,7 +6316,6 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
window->IDStack.push_back(window->ID);
|
window->IDStack.push_back(window->ID);
|
||||||
|
|
||||||
// Add to stack
|
// Add to stack
|
||||||
// We intentionally set g.CurrentWindow to NULL to prevent usage until when the viewport is set, then will call SetCurrentWindow()
|
|
||||||
g.CurrentWindow = window;
|
g.CurrentWindow = window;
|
||||||
ImGuiWindowStackData window_stack_data;
|
ImGuiWindowStackData window_stack_data;
|
||||||
window_stack_data.Window = window;
|
window_stack_data.Window = window;
|
||||||
@ -6332,6 +6333,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add to focus scope stack
|
// Add to focus scope stack
|
||||||
|
// We intentionally set g.CurrentWindow to NULL to prevent usage until when the viewport is set, then will call SetCurrentWindow()
|
||||||
PushFocusScope(window->ID);
|
PushFocusScope(window->ID);
|
||||||
window->NavRootFocusScopeId = g.CurrentFocusScopeId;
|
window->NavRootFocusScopeId = g.CurrentFocusScopeId;
|
||||||
g.CurrentWindow = NULL;
|
g.CurrentWindow = NULL;
|
||||||
|
@ -1197,6 +1197,14 @@ static void ShowDemoWindowWidgets()
|
|||||||
if (ImGui::CheckboxFlags("ImGuiComboFlags_WidthFitPreview", &flags, ImGuiComboFlags_WidthFitPreview))
|
if (ImGui::CheckboxFlags("ImGuiComboFlags_WidthFitPreview", &flags, ImGuiComboFlags_WidthFitPreview))
|
||||||
flags &= ~ImGuiComboFlags_NoPreview;
|
flags &= ~ImGuiComboFlags_NoPreview;
|
||||||
|
|
||||||
|
// Override default popup height
|
||||||
|
if (ImGui::CheckboxFlags("ImGuiComboFlags_HeightSmall", &flags, ImGuiComboFlags_HeightSmall))
|
||||||
|
flags &= ~(ImGuiComboFlags_HeightMask_ & ~ImGuiComboFlags_HeightSmall);
|
||||||
|
if (ImGui::CheckboxFlags("ImGuiComboFlags_HeightRegular", &flags, ImGuiComboFlags_HeightRegular))
|
||||||
|
flags &= ~(ImGuiComboFlags_HeightMask_ & ~ImGuiComboFlags_HeightRegular);
|
||||||
|
if (ImGui::CheckboxFlags("ImGuiComboFlags_HeightLargest", &flags, ImGuiComboFlags_HeightLargest))
|
||||||
|
flags &= ~(ImGuiComboFlags_HeightMask_ & ~ImGuiComboFlags_HeightLargest);
|
||||||
|
|
||||||
// Using the generic BeginCombo() API, you have full control over how to display the combo contents.
|
// Using the generic BeginCombo() API, you have full control over how to display the combo contents.
|
||||||
// (your selection data could be an index, a pointer to the object, an id for the object, a flag intrusively
|
// (your selection data could be an index, a pointer to the object, an id for the object, a flag intrusively
|
||||||
// stored in the object itself, etc.)
|
// stored in the object itself, etc.)
|
||||||
@ -1218,6 +1226,10 @@ static void ShowDemoWindowWidgets()
|
|||||||
ImGui::EndCombo();
|
ImGui::EndCombo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ImGui::Spacing();
|
||||||
|
ImGui::SeparatorText("One-liner variants");
|
||||||
|
HelpMarker("Flags above don't apply to this section.");
|
||||||
|
|
||||||
// Simplified one-liner Combo() API, using values packed in a single constant string
|
// Simplified one-liner Combo() API, using values packed in a single constant string
|
||||||
// This is a convenience for when the selection set is small and known at compile-time.
|
// This is a convenience for when the selection set is small and known at compile-time.
|
||||||
static int item_current_2 = 0;
|
static int item_current_2 = 0;
|
||||||
@ -6564,7 +6576,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
|||||||
"Right-click to open edit options menu.");
|
"Right-click to open edit options menu.");
|
||||||
|
|
||||||
ImGui::BeginChild("##colors", ImVec2(0, 0), true, ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar | ImGuiWindowFlags_NavFlattened);
|
ImGui::BeginChild("##colors", ImVec2(0, 0), true, ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar | ImGuiWindowFlags_NavFlattened);
|
||||||
ImGui::PushItemWidth(-160);
|
ImGui::PushItemWidth(ImGui::GetFontSize() * -12);
|
||||||
for (int i = 0; i < ImGuiCol_COUNT; i++)
|
for (int i = 0; i < ImGuiCol_COUNT; i++)
|
||||||
{
|
{
|
||||||
const char* name = ImGui::GetStyleColorName(i);
|
const char* name = ImGui::GetStyleColorName(i);
|
||||||
|
@ -1254,9 +1254,9 @@ struct IMGUI_API ImGuiStackSizes
|
|||||||
// Data saved for each window pushed into the stack
|
// Data saved for each window pushed into the stack
|
||||||
struct ImGuiWindowStackData
|
struct ImGuiWindowStackData
|
||||||
{
|
{
|
||||||
ImGuiWindow* Window;
|
ImGuiWindow* Window;
|
||||||
ImGuiLastItemData ParentLastItemDataBackup;
|
ImGuiLastItemData ParentLastItemDataBackup;
|
||||||
ImGuiStackSizes StackSizesOnBegin; // Store size of various stacks for asserting
|
ImGuiStackSizes StackSizesOnBegin; // Store size of various stacks for asserting
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ImGuiShrinkWidthItem
|
struct ImGuiShrinkWidthItem
|
||||||
|
Loading…
Reference in New Issue
Block a user