From 65908526da9426cc0b4101fce30f87e3f9df3634 Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Thu, 12 Mar 2026 18:12:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DHierarchyPanel=EF=BC=9A?= =?UTF-8?q?=E7=A9=BA=E7=99=BD=E5=8C=BA=E5=9F=9F=E5=8F=B3=E9=94=AE=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E5=92=8C=E6=8B=96=E6=8B=BD=E5=88=B0=E6=A0=B9=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将右键菜单移到Child窗口内部,修复空白区域右键不弹出菜单的问题 - 添加InvisibleButton作为拖放目标,支持将实体拖到根级别 --- ui/src/panels/HierarchyPanel.cpp | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/ui/src/panels/HierarchyPanel.cpp b/ui/src/panels/HierarchyPanel.cpp index 5cb2b05d..9cd41c74 100644 --- a/ui/src/panels/HierarchyPanel.cpp +++ b/ui/src/panels/HierarchyPanel.cpp @@ -28,11 +28,6 @@ void HierarchyPanel::Render() { std::string filter = m_searchBuffer; - if (ImGui::BeginPopupContextWindow("HierarchyContextMenu", ImGuiPopupFlags_MouseButtonRight | ImGuiPopupFlags_NoOpenOverItems)) { - RenderCreateMenu(INVALID_ENTITY); - ImGui::EndPopup(); - } - ImGui::BeginChild("EntityList"); for (EntityID id : SceneManager::Get().GetRootEntities()) { @@ -45,6 +40,25 @@ void HierarchyPanel::Render() { } } + if (ImGui::BeginPopupContextWindow("HierarchyContextMenu", ImGuiPopupFlags_MouseButtonRight | ImGuiPopupFlags_NoOpenOverItems)) { + RenderCreateMenu(INVALID_ENTITY); + ImGui::EndPopup(); + } + + ImGui::InvisibleButton("##DragTarget", ImVec2(-1, -1)); + if (ImGui::BeginDragDropTarget()) { + if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("ENTITY_ID")) { + EntityID sourceId = *(const EntityID*)payload->Data; + if (sourceId != INVALID_ENTITY) { + const Entity* sourceEntity = SceneManager::Get().GetEntity(sourceId); + if (sourceEntity && sourceEntity->parent != INVALID_ENTITY) { + SceneManager::Get().MoveEntity(sourceId, INVALID_ENTITY); + } + } + } + ImGui::EndDragDropTarget(); + } + ImGui::EndChild(); ImGui::End();