| 14749 | } |
| 14750 | |
| 14751 | static void ImGui::DockContextRemoveNode(ImGuiContext* ctx, ImGuiDockNode* node, bool merge_sibling_into_parent_node) |
| 14752 | { |
| 14753 | ImGuiContext& g = *ctx; |
| 14754 | ImGuiDockContext* dc = &ctx->DockContext; |
| 14755 | |
| 14756 | IMGUI_DEBUG_LOG_DOCKING("[docking] DockContextRemoveNode 0x%08X\n", node->ID); |
| 14757 | IM_ASSERT(DockContextFindNodeByID(ctx, node->ID) == node); |
| 14758 | IM_ASSERT(node->ChildNodes[0] == NULL && node->ChildNodes[1] == NULL); |
| 14759 | IM_ASSERT(node->Windows.Size == 0); |
| 14760 | |
| 14761 | if (node->HostWindow) |
| 14762 | node->HostWindow->DockNodeAsHost = NULL; |
| 14763 | |
| 14764 | ImGuiDockNode* parent_node = node->ParentNode; |
| 14765 | const bool merge = (merge_sibling_into_parent_node && parent_node != NULL); |
| 14766 | if (merge) |
| 14767 | { |
| 14768 | IM_ASSERT(parent_node->ChildNodes[0] == node || parent_node->ChildNodes[1] == node); |
| 14769 | ImGuiDockNode* sibling_node = (parent_node->ChildNodes[0] == node ? parent_node->ChildNodes[1] : parent_node->ChildNodes[0]); |
| 14770 | DockNodeTreeMerge(&g, parent_node, sibling_node); |
| 14771 | } |
| 14772 | else |
| 14773 | { |
| 14774 | for (int n = 0; parent_node && n < IM_ARRAYSIZE(parent_node->ChildNodes); n++) |
| 14775 | if (parent_node->ChildNodes[n] == node) |
| 14776 | node->ParentNode->ChildNodes[n] = NULL; |
| 14777 | dc->Nodes.SetVoidPtr(node->ID, NULL); |
| 14778 | IM_DELETE(node); |
| 14779 | } |
| 14780 | } |
| 14781 | |
| 14782 | static int IMGUI_CDECL DockNodeComparerDepthMostFirst(const void* lhs, const void* rhs) |
| 14783 | { |
nothing calls this directly
no test coverage detected