MCPcopy Create free account
hub / github.com/Aegel5/SimpleSwitcher / DockNodeTreeSplit

Method DockNodeTreeSplit

imgui_tiny_app/imgui/imgui.cpp:20102–20144  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

20100//-----------------------------------------------------------------------------
20101
20102void ImGui::DockNodeTreeSplit(ImGuiContext* ctx, ImGuiDockNode* parent_node, ImGuiAxis split_axis, int split_inheritor_child_idx, float split_ratio, ImGuiDockNode* new_node)
20103{
20104 ImGuiContext& g = *GImGui;
20105 IM_ASSERT(split_axis != ImGuiAxis_None);
20106
20107 ImGuiDockNode* child_0 = (new_node && split_inheritor_child_idx != 0) ? new_node : DockContextAddNode(ctx, 0);
20108 child_0->ParentNode = parent_node;
20109
20110 ImGuiDockNode* child_1 = (new_node && split_inheritor_child_idx != 1) ? new_node : DockContextAddNode(ctx, 0);
20111 child_1->ParentNode = parent_node;
20112
20113 ImGuiDockNode* child_inheritor = (split_inheritor_child_idx == 0) ? child_0 : child_1;
20114 DockNodeMoveChildNodes(child_inheritor, parent_node);
20115 parent_node->ChildNodes[0] = child_0;
20116 parent_node->ChildNodes[1] = child_1;
20117 parent_node->ChildNodes[split_inheritor_child_idx]->VisibleWindow = parent_node->VisibleWindow;
20118 parent_node->SplitAxis = split_axis;
20119 parent_node->VisibleWindow = NULL;
20120 parent_node->AuthorityForPos = parent_node->AuthorityForSize = ImGuiDataAuthority_DockNode;
20121
20122 float size_avail = (parent_node->Size[split_axis] - g.Style.DockingSeparatorSize);
20123 size_avail = ImMax(size_avail, g.Style.WindowMinSize[split_axis] * 2.0f);
20124 IM_ASSERT(size_avail > 0.0f); // If you created a node manually with DockBuilderAddNode(), you need to also call DockBuilderSetNodeSize() before splitting.
20125 child_0->SizeRef = child_1->SizeRef = parent_node->Size;
20126 child_0->SizeRef[split_axis] = ImTrunc(size_avail * split_ratio);
20127 child_1->SizeRef[split_axis] = ImTrunc(size_avail - child_0->SizeRef[split_axis]);
20128
20129 DockNodeMoveWindows(parent_node->ChildNodes[split_inheritor_child_idx], parent_node);
20130 DockSettingsRenameNodeReferences(parent_node->ID, parent_node->ChildNodes[split_inheritor_child_idx]->ID);
20131 DockNodeUpdateHasCentralNodeChild(DockNodeGetRootNode(parent_node));
20132 DockNodeTreeUpdatePosSize(parent_node, parent_node->Pos, parent_node->Size);
20133
20134 // Flags transfer (e.g. this is where we transfer the ImGuiDockNodeFlags_CentralNode property)
20135 child_0->SharedFlags = parent_node->SharedFlags & ImGuiDockNodeFlags_SharedFlagsInheritMask_;
20136 child_1->SharedFlags = parent_node->SharedFlags & ImGuiDockNodeFlags_SharedFlagsInheritMask_;
20137 child_inheritor->LocalFlags = parent_node->LocalFlags & ImGuiDockNodeFlags_LocalFlagsTransferMask_;
20138 parent_node->LocalFlags &= ~ImGuiDockNodeFlags_LocalFlagsTransferMask_;
20139 child_0->UpdateMergedFlags();
20140 child_1->UpdateMergedFlags();
20141 parent_node->UpdateMergedFlags();
20142 if (child_inheritor->IsCentralNode())
20143 DockNodeGetRootNode(parent_node)->CentralNode = child_inheritor;
20144}
20145
20146void ImGui::DockNodeTreeMerge(ImGuiContext* ctx, ImGuiDockNode* parent_node, ImGuiDockNode* merge_lead_child)
20147{

Callers

nothing calls this directly

Calls 3

ImMaxFunction · 0.85
ImTruncFunction · 0.85
DockNodeGetRootNodeFunction · 0.85

Tested by

no test coverage detected