Refine editor window architecture

This commit is contained in:
2026-04-25 17:51:37 +08:00
parent ef41c44464
commit 41b912933d
24 changed files with 741 additions and 53 deletions

View File

@@ -67,9 +67,27 @@ EditorWindowHostRuntime::~EditorWindowHostRuntime() = default;
EditorWindow* EditorWindowHostRuntime::CreateEditorWindow(
std::unique_ptr<EditorWindowContentController> contentController,
const CreateParams& params) {
if (contentController == nullptr) {
LogRuntimeTrace("window", "window creation failed: content controller is null");
return nullptr;
}
const EditorWindowContentCapabilities capabilities =
contentController->GetCapabilities();
if (params.category == EditorWindowCategory::Workspace && !capabilities.workspace) {
LogRuntimeTrace("window", "workspace window creation rejected: content is not workspace");
return nullptr;
}
if (params.category == EditorWindowCategory::Utility && !capabilities.utilityPanel) {
LogRuntimeTrace("window", "utility window creation rejected: content is not utility");
return nullptr;
}
auto windowPtr = std::make_unique<EditorWindow>(
params.windowId,
params.title.empty() ? std::wstring(L"XCEngine Editor") : params.title,
params.category,
params.chromePolicy,
params.primary,
std::move(contentController));
EditorWindow* const rawWindow = windowPtr.get();
@@ -88,11 +106,14 @@ EditorWindow* EditorWindowHostRuntime::CreateEditorWindow(
};
m_pendingCreateWindow = rawWindow;
const DWORD windowStyle = params.nativeStylePolicy.useHostWindowStyle
? m_hostConfig.windowStyle
: params.nativeStylePolicy.windowStyle;
const HWND hwnd = CreateWindowExW(
WS_EX_APPWINDOW,
params.nativeStylePolicy.extendedWindowStyle,
m_hostConfig.windowClassName,
rawWindow->GetTitle().c_str(),
m_hostConfig.windowStyle,
windowStyle,
params.initialX,
params.initialY,
params.initialWidth,