|
@@ -430,6 +430,9 @@ CODE
|
|
|
When you are not sure about an old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files.
|
|
|
You can read releases logs https://github.com/ocornut/imgui/releases for more details.
|
|
|
|
|
|
+ - 2024/06/21 (1.90.9) - BeginChild: added ImGuiChildFlags_NavFlattened as a replacement for the window flag ImGuiWindowFlags_NavFlattened: the feature only ever made sense for BeginChild() anyhow.
|
|
|
+ - old: BeginChild("Name", size, 0, ImGuiWindowFlags_NavFlattened);
|
|
|
+ - new: BeginChild("Name", size, ImGuiChildFlags_NavFlattened, 0);
|
|
|
- 2024/06/21 (1.90.9) - io: ClearInputKeys() (first exposed in 1.89.8) doesn't clear mouse data, newly added ClearInputMouse() does.
|
|
|
- 2024/06/20 (1.90.9) - renamed ImGuiDragDropFlags_SourceAutoExpirePayload to ImGuiDragDropFlags_PayloadAutoExpire.
|
|
|
- 2024/06/18 (1.90.9) - style: renamed ImGuiCol_TabActive -> ImGuiCol_TabSelected, ImGuiCol_TabUnfocused -> ImGuiCol_TabDimmed, ImGuiCol_TabUnfocusedActive -> ImGuiCol_TabDimmedSelected.
|
|
@@ -5533,7 +5536,7 @@ bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, I
|
|
|
IM_ASSERT(id != 0);
|
|
|
|
|
|
// Sanity check as it is likely that some user will accidentally pass ImGuiWindowFlags into the ImGuiChildFlags argument.
|
|
|
- const ImGuiChildFlags ImGuiChildFlags_SupportedMask_ = ImGuiChildFlags_Border | ImGuiChildFlags_AlwaysUseWindowPadding | ImGuiChildFlags_ResizeX | ImGuiChildFlags_ResizeY | ImGuiChildFlags_AutoResizeX | ImGuiChildFlags_AutoResizeY | ImGuiChildFlags_AlwaysAutoResize | ImGuiChildFlags_FrameStyle;
|
|
|
+ const ImGuiChildFlags ImGuiChildFlags_SupportedMask_ = ImGuiChildFlags_Border | ImGuiChildFlags_AlwaysUseWindowPadding | ImGuiChildFlags_ResizeX | ImGuiChildFlags_ResizeY | ImGuiChildFlags_AutoResizeX | ImGuiChildFlags_AutoResizeY | ImGuiChildFlags_AlwaysAutoResize | ImGuiChildFlags_FrameStyle | ImGuiChildFlags_NavFlattened;
|
|
|
IM_UNUSED(ImGuiChildFlags_SupportedMask_);
|
|
|
IM_ASSERT((child_flags & ~ImGuiChildFlags_SupportedMask_) == 0 && "Illegal ImGuiChildFlags value. Did you pass ImGuiWindowFlags values instead of ImGuiChildFlags?");
|
|
|
IM_ASSERT((window_flags & ImGuiWindowFlags_AlwaysAutoResize) == 0 && "Cannot specify ImGuiWindowFlags_AlwaysAutoResize for BeginChild(). Use ImGuiChildFlags_AlwaysAutoResize!");
|
|
@@ -5545,6 +5548,8 @@ bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, I
|
|
|
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
|
|
if (window_flags & ImGuiWindowFlags_AlwaysUseWindowPadding)
|
|
|
child_flags |= ImGuiChildFlags_AlwaysUseWindowPadding;
|
|
|
+ if (window_flags & ImGuiWindowFlags_NavFlattened)
|
|
|
+ child_flags |= ImGuiChildFlags_NavFlattened;
|
|
|
#endif
|
|
|
if (child_flags & ImGuiChildFlags_AutoResizeX)
|
|
|
child_flags &= ~ImGuiChildFlags_ResizeX;
|
|
@@ -5623,7 +5628,7 @@ bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, I
|
|
|
const ImGuiID temp_id_for_activation = ImHashStr("##Child", 0, id);
|
|
|
if (g.ActiveId == temp_id_for_activation)
|
|
|
ClearActiveID();
|
|
|
- if (g.NavActivateId == id && !(window_flags & ImGuiWindowFlags_NavFlattened) && (child_window->DC.NavLayersActiveMask != 0 || child_window->DC.NavWindowHasScrollY))
|
|
|
+ if (g.NavActivateId == id && !(child_flags & ImGuiChildFlags_NavFlattened) && (child_window->DC.NavLayersActiveMask != 0 || child_window->DC.NavWindowHasScrollY))
|
|
|
{
|
|
|
FocusWindow(child_window);
|
|
|
NavInitWindow(child_window, false);
|
|
@@ -5649,7 +5654,8 @@ void ImGui::EndChild()
|
|
|
ImGuiWindow* parent_window = g.CurrentWindow;
|
|
|
ImRect bb(parent_window->DC.CursorPos, parent_window->DC.CursorPos + child_size);
|
|
|
ItemSize(child_size);
|
|
|
- if ((child_window->DC.NavLayersActiveMask != 0 || child_window->DC.NavWindowHasScrollY) && !(child_window->Flags & ImGuiWindowFlags_NavFlattened))
|
|
|
+ const bool nav_flattened = (child_window->ChildFlags & ImGuiChildFlags_NavFlattened) != 0;
|
|
|
+ if ((child_window->DC.NavLayersActiveMask != 0 || child_window->DC.NavWindowHasScrollY) && !nav_flattened)
|
|
|
{
|
|
|
ItemAdd(bb, child_window->ChildId);
|
|
|
RenderNavHighlight(bb, child_window->ChildId);
|
|
@@ -5666,7 +5672,7 @@ void ImGui::EndChild()
|
|
|
ItemAdd(bb, child_window->ChildId, NULL, ImGuiItemFlags_NoNav);
|
|
|
|
|
|
// But when flattened we directly reach items, adjust active layer mask accordingly
|
|
|
- if (child_window->Flags & ImGuiWindowFlags_NavFlattened)
|
|
|
+ if (nav_flattened)
|
|
|
parent_window->DC.NavLayersActiveMaskNext |= child_window->DC.NavLayersActiveMaskNext;
|
|
|
}
|
|
|
if (g.HoveredWindow == child_window)
|
|
@@ -6440,7 +6446,7 @@ void ImGui::UpdateWindowParentAndRootLinks(ImGuiWindow* window, ImGuiWindowFlags
|
|
|
window->RootWindowPopupTree = parent_window->RootWindowPopupTree;
|
|
|
if (parent_window && !(flags & ImGuiWindowFlags_Modal) && (flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup)))
|
|
|
window->RootWindowForTitleBarHighlight = parent_window->RootWindowForTitleBarHighlight;
|
|
|
- while (window->RootWindowForNav->Flags & ImGuiWindowFlags_NavFlattened)
|
|
|
+ while (window->RootWindowForNav->ChildFlags & ImGuiChildFlags_NavFlattened)
|
|
|
{
|
|
|
IM_ASSERT(window->RootWindowForNav->ParentWindow != NULL);
|
|
|
window->RootWindowForNav = window->RootWindowForNav->ParentWindow;
|
|
@@ -6536,9 +6542,6 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|
|
if ((flags & ImGuiWindowFlags_NoInputs) == ImGuiWindowFlags_NoInputs)
|
|
|
flags |= ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize;
|
|
|
|
|
|
- if (flags & ImGuiWindowFlags_NavFlattened)
|
|
|
- IM_ASSERT(flags & ImGuiWindowFlags_ChildWindow);
|
|
|
-
|
|
|
const int current_frame = g.FrameCount;
|
|
|
const bool first_begin_of_the_frame = (window->LastFrameActive != current_frame);
|
|
|
window->IsFallbackWindow = (g.CurrentWindowStack.Size == 0 && g.WithinFrameScopeWithImplicitWindow);
|
|
@@ -6603,7 +6606,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|
|
}
|
|
|
|
|
|
// Add to focus scope stack
|
|
|
- PushFocusScope((flags & ImGuiWindowFlags_NavFlattened) ? g.CurrentFocusScopeId : window->ID);
|
|
|
+ PushFocusScope((window->ChildFlags & ImGuiChildFlags_NavFlattened) ? g.CurrentFocusScopeId : window->ID);
|
|
|
window->NavRootFocusScopeId = g.CurrentFocusScopeId;
|
|
|
|
|
|
// Add to popup stacks: update OpenPopupStack[] data, push to BeginPopupStack[]
|
|
@@ -7199,7 +7202,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|
|
// 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 them because they have no title bar).
|
|
|
IM_ASSERT((flags & ImGuiWindowFlags_NoTitleBar) != 0);
|
|
|
- const bool nav_request = (flags & ImGuiWindowFlags_NavFlattened) && (g.NavAnyRequest && g.NavWindow && g.NavWindow->RootWindowForNav == window->RootWindowForNav);
|
|
|
+ const bool nav_request = (window->ChildFlags & ImGuiChildFlags_NavFlattened) && (g.NavAnyRequest && g.NavWindow && g.NavWindow->RootWindowForNav == window->RootWindowForNav);
|
|
|
if (!g.LogEnabled && !nav_request)
|
|
|
if (window->OuterRectClipped.Min.x >= window->OuterRectClipped.Max.x || window->OuterRectClipped.Min.y >= window->OuterRectClipped.Max.y)
|
|
|
{
|
|
@@ -10189,7 +10192,7 @@ bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg, ImGu
|
|
|
window->DC.NavLayersActiveMaskNext |= (1 << window->DC.NavLayerCurrent);
|
|
|
if (g.NavId == id || g.NavAnyRequest)
|
|
|
if (g.NavWindow->RootWindowForNav == window->RootWindowForNav)
|
|
|
- if (window == g.NavWindow || ((window->Flags | g.NavWindow->Flags) & ImGuiWindowFlags_NavFlattened))
|
|
|
+ if (window == g.NavWindow || ((window->ChildFlags | g.NavWindow->ChildFlags) & ImGuiChildFlags_NavFlattened))
|
|
|
NavProcessItem();
|
|
|
}
|
|
|
|
|
@@ -11678,7 +11681,7 @@ static bool ImGui::NavScoreItem(ImGuiNavItemData* result)
|
|
|
// When entering through a NavFlattened border, we consider child window items as fully clipped for scoring
|
|
|
if (window->ParentWindow == g.NavWindow)
|
|
|
{
|
|
|
- IM_ASSERT((window->Flags | g.NavWindow->Flags) & ImGuiWindowFlags_NavFlattened);
|
|
|
+ IM_ASSERT((window->ChildFlags | g.NavWindow->ChildFlags) & ImGuiChildFlags_NavFlattened);
|
|
|
if (!window->ClipRect.Overlaps(cand))
|
|
|
return false;
|
|
|
cand.ClipWithFull(window->ClipRect); // This allows the scored item to not overlap other candidates in the parent window
|