refactor(new_editor/app): split window manager and editor context hotspots

This commit is contained in:
2026-04-15 08:37:07 +08:00
parent ecb7f24794
commit f049d9d29e
8 changed files with 380 additions and 325 deletions

View File

@@ -2,7 +2,6 @@
#include "Composition/EditorShellAssetBuilder.h"
#include <algorithm>
#include <sstream>
#include <utility>
@@ -11,7 +10,6 @@ namespace XCEngine::UI::Editor::App {
namespace {
using ::XCEngine::UI::Editor::BuildEditorShellShortcutManager;
constexpr std::size_t kMaxConsoleEntries = 256u;
std::string ComposeStatusText(
std::string_view status,
@@ -110,91 +108,6 @@ UIEditorShellInteractionDefinition EditorContext::BuildShellDefinition(
variant);
}
void EditorContext::SetReadyStatus() {
SetStatus("Ready", "Old editor shell baseline loaded.");
}
void EditorContext::SetStatus(
std::string status,
std::string message) {
if (m_lastStatus != status || m_lastMessage != message) {
AppendConsoleEntry(status, message);
}
m_lastStatus = std::move(status);
m_lastMessage = std::move(message);
}
void EditorContext::UpdateStatusFromShellResult(
const UIEditorWorkspaceController& workspaceController,
const UIEditorShellInteractionResult& result) {
if (result.commandDispatched) {
SetStatus(
std::string(GetUIEditorCommandDispatchStatusName(result.commandDispatchResult.status)),
result.commandDispatchResult.message.empty()
? result.commandDispatchResult.displayName
: result.commandDispatchResult.message);
return;
}
if (result.workspaceResult.dockHostResult.layoutChanged) {
SetStatus("Layout", result.workspaceResult.dockHostResult.layoutResult.message);
return;
}
if (result.workspaceResult.dockHostResult.commandExecuted) {
SetStatus("Workspace", result.workspaceResult.dockHostResult.commandResult.message);
return;
}
if (!result.viewportPanelId.empty()) {
std::string message = {};
if (result.viewportInputFrame.captureStarted) {
message = "Viewport capture started.";
} else if (result.viewportInputFrame.captureEnded) {
message = "Viewport capture ended.";
} else if (result.viewportInputFrame.focusGained) {
message = "Viewport focused.";
} else if (result.viewportInputFrame.focusLost) {
message = "Viewport focus lost.";
} else if (result.viewportInputFrame.pointerPressedInside) {
message = "Viewport pointer down.";
} else if (result.viewportInputFrame.pointerReleasedInside) {
message = "Viewport pointer up.";
} else if (result.viewportInputFrame.pointerMoved) {
message = "Viewport pointer move.";
} else if (result.viewportInputFrame.wheelDelta != 0.0f) {
message = "Viewport wheel.";
}
if (!message.empty()) {
SetStatus(result.viewportPanelId, std::move(message));
}
return;
}
if (result.menuMutation.changed) {
if (!result.itemId.empty() && !result.menuMutation.openedPopupId.empty()) {
SetStatus("Menu", result.itemId + " opened child popup.");
} else if (!result.menuId.empty() && !result.menuMutation.openedPopupId.empty()) {
SetStatus("Menu", result.menuId + " opened.");
} else {
SetStatus("Menu", "Popup chain dismissed.");
}
}
}
void EditorContext::AppendConsoleEntry(
std::string channel,
std::string message) {
EditorConsoleEntry entry = {};
entry.channel = std::move(channel);
entry.message = std::move(message);
m_session.consoleEntries.push_back(std::move(entry));
if (m_session.consoleEntries.size() > kMaxConsoleEntries) {
m_session.consoleEntries.erase(m_session.consoleEntries.begin());
}
}
std::string EditorContext::DescribeWorkspaceState(
const UIEditorWorkspaceController& workspaceController,
const UIEditorShellInteractionState& interactionState) const {