| 20100 | //----------------------------------------------------------------------------- |
| 20101 | |
| 20102 | void 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 | |
| 20146 | void ImGui::DockNodeTreeMerge(ImGuiContext* ctx, ImGuiDockNode* parent_node, ImGuiDockNode* merge_lead_child) |
| 20147 | { |
nothing calls this directly
no test coverage detected