Refactor editor windowing boundaries

This commit is contained in:
2026-04-25 19:25:49 +08:00
parent f7ddd58f78
commit 9ab1beb2c4
23 changed files with 396 additions and 304 deletions

View File

@@ -1,6 +1,7 @@
#include "Platform/Win32/Windowing/EditorWindowManager.h"
#include "Platform/Win32/Windowing/EditorWindow.h"
#include "Windowing/Content/EditorWindowContentFactory.h"
#include "Windowing/Content/EditorWindowContentController.h"
#include "Platform/Win32/Windowing/EditorWindowHostRuntime.h"
#include "Platform/Win32/Windowing/EditorWindowLifecycleCoordinator.h"
@@ -8,6 +9,8 @@
#include "Platform/Win32/Windowing/EditorWindowMessageDispatcher.h"
#include "Platform/Win32/Windowing/EditorWindowWorkspaceCoordinator.h"
#include <XCEditor/Workspace/UIEditorWorkspaceController.h>
#include <utility>
namespace XCEngine::UI::Editor::App {
@@ -16,10 +19,12 @@ EditorWindowManager::EditorWindowManager(
EditorWindowHostConfig hostConfig,
std::filesystem::path repoRoot,
EditorContext& editorContext)
: m_hostRuntime(std::make_unique<EditorWindowHostRuntime>(
: m_contentFactory(CreateDefaultEditorWindowContentFactory())
, m_hostRuntime(std::make_unique<EditorWindowHostRuntime>(
hostConfig,
std::move(repoRoot),
editorContext)) {
editorContext,
*m_contentFactory)) {
m_workspaceCoordinator =
std::make_unique<EditorWindowWorkspaceCoordinator>(*m_hostRuntime);
m_utilityCoordinator =
@@ -45,6 +50,27 @@ EditorWindow* EditorWindowManager::CreateEditorWindow(
return window;
}
EditorWindow* EditorWindowManager::CreateWorkspaceWindow(
UIEditorWorkspaceController workspaceController,
const CreateParams& params) {
EditorWindow* const window =
m_hostRuntime->CreateWorkspaceWindow(std::move(workspaceController), params);
if (window != nullptr) {
m_workspaceCoordinator->RegisterExistingWindow(*window);
}
return window;
}
EditorWindow* EditorWindowManager::CreateUtilityWindow(
const EditorUtilityWindowDescriptor& descriptor,
const CreateParams& params) {
EditorWindow* const window = m_hostRuntime->CreateUtilityWindow(descriptor, params);
if (window != nullptr) {
m_workspaceCoordinator->RegisterExistingWindow(*window);
}
return window;
}
void EditorWindowManager::HandlePendingNativeWindowCreated(HWND hwnd) {
m_hostRuntime->HandlePendingNativeWindowCreated(hwnd);
}