Harden editor app windowing boundary
This commit is contained in:
@@ -4,31 +4,11 @@
|
||||
#include "Windowing/Presentation/EditorWindowPresentationPolicy.h"
|
||||
#include "Windowing/System/EditorWindowSystem.h"
|
||||
#include <XCEditor/Workspace/UIEditorDetachedWindowPolicy.h>
|
||||
#include <XCEditor/Workspace/UIEditorWorkspaceLayoutPersistence.h>
|
||||
|
||||
namespace XCEngine::UI::Editor::App {
|
||||
|
||||
namespace {
|
||||
|
||||
UIEditorWorkspaceController BuildWorkspaceControllerForWindowState(
|
||||
const UIEditorPanelRegistry& panelRegistry,
|
||||
const UIEditorWindowWorkspaceState& windowState) {
|
||||
return UIEditorWorkspaceController(
|
||||
panelRegistry,
|
||||
windowState.workspace,
|
||||
windowState.session);
|
||||
}
|
||||
|
||||
UIEditorWindowWorkspaceState BuildWindowStateFromController(
|
||||
std::string_view windowId,
|
||||
const UIEditorWorkspaceController& workspaceController) {
|
||||
UIEditorWindowWorkspaceState windowState = {};
|
||||
windowState.windowId = std::string(windowId);
|
||||
windowState.workspace = workspaceController.GetWorkspace();
|
||||
windowState.session = workspaceController.GetSession();
|
||||
return windowState;
|
||||
}
|
||||
|
||||
EditorWindowContentCursorKind ToContentCursorKind(ProjectPanel::CursorKind cursorKind) {
|
||||
switch (cursorKind) {
|
||||
case ProjectPanel::CursorKind::ResizeEW:
|
||||
@@ -118,17 +98,10 @@ void EditorWorkspaceWindowContentController::RefreshWorkspaceProjection(
|
||||
}
|
||||
|
||||
bool EditorWorkspaceWindowContentController::TryBuildAuthoritativeWorkspaceController(
|
||||
UIEditorWorkspaceController& outController) const {
|
||||
const UIEditorWindowWorkspaceState* windowState =
|
||||
m_windowSystem.FindWindowState(m_windowId);
|
||||
if (windowState == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
outController = BuildWorkspaceControllerForWindowState(
|
||||
m_windowSystem.GetPanelRegistry(),
|
||||
*windowState);
|
||||
return true;
|
||||
UIEditorWorkspaceController& outController) {
|
||||
return m_windowSystem.TryBuildLiveWindowWorkspaceController(
|
||||
m_windowId,
|
||||
outController);
|
||||
}
|
||||
|
||||
void EditorWorkspaceWindowContentController::Initialize(
|
||||
@@ -161,10 +134,7 @@ EditorWindowFrameTransferRequests EditorWorkspaceWindowContentController::Update
|
||||
return {};
|
||||
}
|
||||
|
||||
const auto beforeSnapshot = BuildUIEditorWorkspaceLayoutSnapshot(
|
||||
workspaceController.GetWorkspace(),
|
||||
workspaceController.GetSession());
|
||||
EditorWindowFrameTransferRequests transferRequests = m_frameOrchestrator.UpdateAndAppend(
|
||||
return m_frameOrchestrator.UpdateAndAppend(
|
||||
context.editorContext,
|
||||
workspaceController,
|
||||
m_shellRuntime,
|
||||
@@ -176,15 +146,6 @@ EditorWindowFrameTransferRequests EditorWorkspaceWindowContentController::Update
|
||||
context.globalTabDragActive,
|
||||
context.useDetachedTitleBarTabStrip,
|
||||
drawData);
|
||||
const auto afterSnapshot = BuildUIEditorWorkspaceLayoutSnapshot(
|
||||
workspaceController.GetWorkspace(),
|
||||
workspaceController.GetSession());
|
||||
if (!AreUIEditorWorkspaceLayoutSnapshotsEquivalent(beforeSnapshot, afterSnapshot)) {
|
||||
transferRequests.workspace.workspaceMutation = EditorWindowWorkspaceMutationRequest{
|
||||
.windowState = BuildWindowStateFromController(m_windowId, workspaceController),
|
||||
};
|
||||
}
|
||||
return transferRequests;
|
||||
}
|
||||
|
||||
void EditorWorkspaceWindowContentController::RenderRequestedViewports(
|
||||
|
||||
Reference in New Issue
Block a user