Docking: Made spacing between dock nodes not a dropping gap.

features/sdl_renderer3_multiviewports
ocornut ago%!(EXTRA string=3 years)
parent f87e891f18
commit 5370b46c4e
  1. 2
      docs/CHANGELOG.txt
  2. 11
      imgui.cpp

@ -262,6 +262,8 @@ Docking+Viewports Branch:
- Docking: Fixed regression introduced in v1.87 when docked window content not rendered - Docking: Fixed regression introduced in v1.87 when docked window content not rendered
while switching between with CTRL+Tab. [@rokups] while switching between with CTRL+Tab. [@rokups]
- Docking: Fixed amending into an existing tab bar from rendering invisible items. (#5515) - Docking: Fixed amending into an existing tab bar from rendering invisible items. (#5515)
- Docking: Made spacing between dock nodes not a dropping gap. When hovering it only
outer-docking drop markers are visible.
- Docking+Viewports: Fixed undocking window node causing parent viewports to become unresponsive - Docking+Viewports: Fixed undocking window node causing parent viewports to become unresponsive
in certain situation (e.g. hidden tab bar). (#5503) [@rokups] in certain situation (e.g. hidden tab bar). (#5503) [@rokups]
- Backends: SDL: Fixed building backend under non-OSX Apple targets (e.g. iPhone). (#5665) - Backends: SDL: Fixed building backend under non-OSX Apple targets (e.g. iPhone). (#5665)

@ -16600,7 +16600,8 @@ ImGuiDockNode* ImGui::DockNodeTreeFindVisibleNodeByPos(ImGuiDockNode* node, ImVe
if (ImGuiDockNode* hovered_node = DockNodeTreeFindVisibleNodeByPos(node->ChildNodes[1], pos)) if (ImGuiDockNode* hovered_node = DockNodeTreeFindVisibleNodeByPos(node->ChildNodes[1], pos))
return hovered_node; return hovered_node;
return NULL; // This means we are hovering over the splitter/spacing of a parent node
return node;
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -17469,17 +17470,19 @@ void ImGui::BeginDockableDragDropTarget(ImGuiWindow* window)
const bool do_preview = payload->IsPreview() || payload->IsDelivery(); const bool do_preview = payload->IsPreview() || payload->IsDelivery();
if (do_preview && (node != NULL || dock_into_floating_window)) if (do_preview && (node != NULL || dock_into_floating_window))
{ {
// If we have a non-leaf node it means we are hovering the border of a parent node, in which case only outer markers will appear.
ImGuiDockPreviewData split_inner; ImGuiDockPreviewData split_inner;
ImGuiDockPreviewData split_outer; ImGuiDockPreviewData split_outer;
ImGuiDockPreviewData* split_data = &split_inner; ImGuiDockPreviewData* split_data = &split_inner;
if (node && (node->ParentNode || node->IsCentralNode())) if (node && (node->ParentNode || node->IsCentralNode() || !node->IsLeafNode()))
if (ImGuiDockNode* root_node = DockNodeGetRootNode(node)) if (ImGuiDockNode* root_node = DockNodeGetRootNode(node))
{ {
DockNodePreviewDockSetup(window, root_node, payload_window, NULL, &split_outer, is_explicit_target, true); DockNodePreviewDockSetup(window, root_node, payload_window, NULL, &split_outer, is_explicit_target, true);
if (split_outer.IsSplitDirExplicit) if (split_outer.IsSplitDirExplicit)
split_data = &split_outer; split_data = &split_outer;
} }
DockNodePreviewDockSetup(window, node, payload_window, NULL, &split_inner, is_explicit_target, false); if (!node || node->IsLeafNode())
DockNodePreviewDockSetup(window, node, payload_window, NULL, &split_inner, is_explicit_target, false);
if (split_data == &split_outer) if (split_data == &split_outer)
split_inner.IsDropAllowed = false; split_inner.IsDropAllowed = false;
@ -18614,7 +18617,7 @@ void ImGui::DebugNodeDockNode(ImGuiDockNode* node, const char* label)
if (node->Windows.Size > 0) if (node->Windows.Size > 0)
open = TreeNodeEx((void*)(intptr_t)node->ID, tree_node_flags, "%s 0x%04X%s: %d windows (vis: '%s')", label, node->ID, node->IsVisible ? "" : " (hidden)", node->Windows.Size, node->VisibleWindow ? node->VisibleWindow->Name : "NULL"); open = TreeNodeEx((void*)(intptr_t)node->ID, tree_node_flags, "%s 0x%04X%s: %d windows (vis: '%s')", label, node->ID, node->IsVisible ? "" : " (hidden)", node->Windows.Size, node->VisibleWindow ? node->VisibleWindow->Name : "NULL");
else else
open = TreeNodeEx((void*)(intptr_t)node->ID, tree_node_flags, "%s 0x%04X%s: %s split (vis: '%s')", label, node->ID, node->IsVisible ? "" : " (hidden)", (node->SplitAxis == ImGuiAxis_X) ? "horizontal" : (node->SplitAxis == ImGuiAxis_Y) ? "vertical" : "n/a", node->VisibleWindow ? node->VisibleWindow->Name : "NULL"); open = TreeNodeEx((void*)(intptr_t)node->ID, tree_node_flags, "%s 0x%04X%s: %s (vis: '%s')", label, node->ID, node->IsVisible ? "" : " (hidden)", (node->SplitAxis == ImGuiAxis_X) ? "horizontal split" : (node->SplitAxis == ImGuiAxis_Y) ? "vertical split" : "empty", node->VisibleWindow ? node->VisibleWindow->Name : "NULL");
if (!is_alive) { PopStyleColor(); } if (!is_alive) { PopStyleColor(); }
if (is_active && IsItemHovered()) if (is_active && IsItemHovered())
if (ImGuiWindow* window = node->HostWindow ? node->HostWindow : node->VisibleWindow) if (ImGuiWindow* window = node->HostWindow ? node->HostWindow : node->VisibleWindow)

Loading…
Cancel
Save