Refine editor window architecture
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user