Refactor editor windowing boundaries
This commit is contained in:
@@ -10,6 +10,15 @@ 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) {
|
||||
@@ -43,27 +52,18 @@ EditorWindowContentCursorKind ToContentCursorKind(
|
||||
}
|
||||
}
|
||||
|
||||
EditorWorkspaceWindowProjection BuildWorkspaceProjectionFromController(
|
||||
const UIEditorWorkspaceController& workspaceController) {
|
||||
EditorWorkspaceWindowProjection projection = {};
|
||||
projection.minimumOuterSize = ResolveUIEditorDetachedWorkspaceMinimumOuterSize(
|
||||
workspaceController);
|
||||
projection.useDetachedTitleBarTabStrip = HasUIEditorSingleVisibleRootTab(workspaceController);
|
||||
projection.tabStripTitleText = ResolveUIEditorDetachedWorkspaceTitle(workspaceController);
|
||||
projection.detachedWindowTitleText = ResolveUIEditorDetachedWorkspaceTitle(workspaceController);
|
||||
return projection;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
EditorWorkspaceWindowContentController::EditorWorkspaceWindowContentController(
|
||||
std::string windowId,
|
||||
UIEditorWorkspaceController workspaceController,
|
||||
const UIEditorWindowWorkspaceState& windowState,
|
||||
EditorWindowSystem& windowSystem)
|
||||
: m_windowId(std::move(windowId)),
|
||||
m_windowSystem(windowSystem) {
|
||||
RefreshProjectionFromWorkspaceController(workspaceController);
|
||||
}
|
||||
: m_windowId(windowState.windowId)
|
||||
, m_windowSystem(windowSystem)
|
||||
, m_projection(BuildEditorWorkspaceWindowProjection(
|
||||
std::wstring_view{},
|
||||
windowSystem.GetPanelRegistry(),
|
||||
windowState,
|
||||
false)) {}
|
||||
|
||||
EditorWorkspaceWindowContentController::~EditorWorkspaceWindowContentController() = default;
|
||||
|
||||
@@ -131,22 +131,6 @@ bool EditorWorkspaceWindowContentController::TryBuildAuthoritativeWorkspaceContr
|
||||
return true;
|
||||
}
|
||||
|
||||
void EditorWorkspaceWindowContentController::RefreshProjectionFromWorkspaceController(
|
||||
const UIEditorWorkspaceController& workspaceController,
|
||||
bool primary) {
|
||||
const std::wstring preservedWindowTitle = m_projection.windowTitle;
|
||||
m_projection = BuildWorkspaceProjectionFromController(workspaceController);
|
||||
if (!primary) {
|
||||
m_projection.windowTitle = ResolveEditorWindowPresentationTitle(
|
||||
std::wstring_view{},
|
||||
workspaceController.GetPanelRegistry(),
|
||||
BuildWindowStateFromController(m_windowId, workspaceController),
|
||||
false);
|
||||
} else if (!preservedWindowTitle.empty()) {
|
||||
m_projection.windowTitle = preservedWindowTitle;
|
||||
}
|
||||
}
|
||||
|
||||
void EditorWorkspaceWindowContentController::Initialize(
|
||||
const EditorWindowContentInitializationContext& context) {
|
||||
m_shellRuntime.Initialize(context.repoRoot, context.textureHost, context.textMeasurer);
|
||||
@@ -196,18 +180,9 @@ EditorWindowFrameTransferRequests EditorWorkspaceWindowContentController::Update
|
||||
workspaceController.GetWorkspace(),
|
||||
workspaceController.GetSession());
|
||||
if (!AreUIEditorWorkspaceLayoutSnapshotsEquivalent(beforeSnapshot, afterSnapshot)) {
|
||||
std::string error = {};
|
||||
if (!m_windowSystem.CommitLiveWindowMutation(
|
||||
m_windowId,
|
||||
workspaceController,
|
||||
error)) {
|
||||
AppendUIEditorRuntimeTrace(
|
||||
"window",
|
||||
"workspace direct commit rejected for window '" +
|
||||
m_windowId + "': " + error);
|
||||
} else {
|
||||
RefreshProjectionFromWorkspaceController(workspaceController, context.primary);
|
||||
}
|
||||
transferRequests.workspace.workspaceMutation = EditorWindowWorkspaceMutationRequest{
|
||||
.windowState = BuildWindowStateFromController(m_windowId, workspaceController),
|
||||
};
|
||||
}
|
||||
return transferRequests;
|
||||
}
|
||||
@@ -297,12 +272,10 @@ std::string EditorWorkspaceWindowContentController::ResolveDetachedWindowTitleTe
|
||||
}
|
||||
|
||||
std::unique_ptr<EditorWindowContentController> CreateEditorWorkspaceWindowContentController(
|
||||
std::string_view windowId,
|
||||
UIEditorWorkspaceController workspaceController,
|
||||
const UIEditorWindowWorkspaceState& windowState,
|
||||
EditorWindowSystem& windowSystem) {
|
||||
return std::make_unique<EditorWorkspaceWindowContentController>(
|
||||
std::string(windowId),
|
||||
std::move(workspaceController),
|
||||
windowState,
|
||||
windowSystem);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user