Align SRP boundaries and editor windowing
This commit is contained in:
@@ -4,9 +4,8 @@
|
||||
#include "Platform/Win32/Chrome/EditorWindowChromeController.h"
|
||||
#include "Platform/Win32/Windowing/EditorFloatingWindowPlacement.h"
|
||||
#include "Platform/Win32/Windowing/EditorWindow.h"
|
||||
#include "Windowing/Content/EditorWindowContentController.h"
|
||||
#include "Windowing/Host/EditorWindowHostCoordinator.h"
|
||||
#include "Platform/Win32/Runtime/EditorWindowFrameDriver.h"
|
||||
#include "Windowing/Runtime/EditorWindowRuntimeController.h"
|
||||
|
||||
#include <XCEditor/Foundation/UIEditorRuntimeTrace.h>
|
||||
|
||||
@@ -63,15 +62,15 @@ EditorWindowHostRuntime::EditorWindowHostRuntime(
|
||||
EditorWindowHostRuntime::~EditorWindowHostRuntime() = default;
|
||||
|
||||
EditorWindow* EditorWindowHostRuntime::CreateHostWindow(
|
||||
std::unique_ptr<EditorWindowContentController> contentController,
|
||||
std::unique_ptr<EditorWindowRuntimeController> runtimeController,
|
||||
const EditorWindowCreateParams& params) {
|
||||
if (contentController == nullptr) {
|
||||
LogRuntimeTrace("window", "window creation failed: content controller is null");
|
||||
if (runtimeController == nullptr) {
|
||||
LogRuntimeTrace("window", "window creation failed: runtime controller is null");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const EditorWindowContentCapabilities capabilities =
|
||||
contentController->GetCapabilities();
|
||||
runtimeController->GetCapabilities();
|
||||
if (params.category == EditorWindowCategory::Workspace && !capabilities.workspace) {
|
||||
LogRuntimeTrace("window", "workspace window creation rejected: content is not workspace");
|
||||
return nullptr;
|
||||
@@ -87,7 +86,7 @@ EditorWindow* EditorWindowHostRuntime::CreateHostWindow(
|
||||
params.category,
|
||||
params.chromePolicy,
|
||||
params.primary,
|
||||
std::move(contentController));
|
||||
std::move(runtimeController));
|
||||
EditorWindow* const rawWindow = windowPtr.get();
|
||||
m_windows.push_back(std::move(windowPtr));
|
||||
|
||||
@@ -177,11 +176,13 @@ EditorWindow* EditorWindowHostRuntime::CreateHostWindow(
|
||||
return failWindowInitialization("managed window initialization failed: coordinator missing");
|
||||
}
|
||||
|
||||
if (!rawWindow->Initialize(
|
||||
m_repoRoot,
|
||||
m_hostCoordinator->GetEditorContext(),
|
||||
m_captureRoot,
|
||||
params.autoCaptureOnStartup)) {
|
||||
if (!m_hostCoordinator->InitializeHostWindow(
|
||||
*rawWindow,
|
||||
EditorHostWindowRuntimeInitializationParams{
|
||||
.repoRoot = m_repoRoot,
|
||||
.captureRoot = m_captureRoot,
|
||||
.autoCaptureOnStartup = params.autoCaptureOnStartup,
|
||||
})) {
|
||||
return failWindowInitialization("managed window initialization failed");
|
||||
}
|
||||
|
||||
@@ -313,60 +314,6 @@ std::string EditorWindowHostRuntime::DescribeWindows() const {
|
||||
return DescribeHostWindows(m_windows);
|
||||
}
|
||||
|
||||
void EditorWindowHostRuntime::RenderAllWindows() {
|
||||
if (m_hostCoordinator == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
struct WindowFrameTransferBatch {
|
||||
EditorWindow* sourceWindow = nullptr;
|
||||
EditorWindowFrameTransferRequests requests = {};
|
||||
};
|
||||
|
||||
std::vector<WindowFrameTransferBatch> transferBatches = {};
|
||||
transferBatches.reserve(m_windows.size());
|
||||
|
||||
for (const std::unique_ptr<EditorWindow>& window : m_windows) {
|
||||
if (window == nullptr ||
|
||||
!window->HasLiveHostWindow() ||
|
||||
window->GetLifecycleState() != EditorWindowLifecycleState::Running) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (window->ConsumeSkipNextSteadyStateFrame()) {
|
||||
m_hostCoordinator->RefreshWindowPresentation(*window);
|
||||
continue;
|
||||
}
|
||||
|
||||
EditorWindowFrameTransferRequests transferRequests =
|
||||
EditorWindowFrameDriver::DriveFrame(
|
||||
*window,
|
||||
m_hostCoordinator->GetEditorContext(),
|
||||
m_hostCoordinator->IsGlobalTabDragActive());
|
||||
m_hostCoordinator->RefreshWindowPresentation(*window);
|
||||
if (!transferRequests.HasPendingRequests()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
transferBatches.push_back(WindowFrameTransferBatch{
|
||||
window.get(),
|
||||
std::move(transferRequests),
|
||||
});
|
||||
}
|
||||
|
||||
for (WindowFrameTransferBatch& batch : transferBatches) {
|
||||
if (batch.sourceWindow == nullptr ||
|
||||
!batch.sourceWindow->HasLiveHostWindow() ||
|
||||
batch.sourceWindow->GetLifecycleState() != EditorWindowLifecycleState::Running) {
|
||||
continue;
|
||||
}
|
||||
|
||||
m_hostCoordinator->DispatchWindowFrameTransferRequests(
|
||||
*batch.sourceWindow,
|
||||
batch.requests);
|
||||
}
|
||||
}
|
||||
|
||||
EditorWindow* EditorWindowHostRuntime::FindWindow(HWND hwnd) {
|
||||
if (hwnd == nullptr) {
|
||||
return nullptr;
|
||||
|
||||
Reference in New Issue
Block a user