Checkpoint current new editor host iteration
This commit is contained in:
@@ -36,33 +36,62 @@ void ApplyViewportFrameToPresentation(
|
||||
presentation.viewportShellModel.frame.statusText = viewportFrame.statusText;
|
||||
}
|
||||
|
||||
std::vector<UIEditorWorkspacePanelPresentationModel> BuildWorkspacePresentations(
|
||||
const UIEditorShellInteractionDefinition& definition,
|
||||
const UIEditorShellInteractionRequest& shellRequest,
|
||||
ProductViewportHostService& viewportHostService) {
|
||||
std::vector<UIEditorWorkspacePanelPresentationModel> presentations =
|
||||
definition.workspacePresentations;
|
||||
for (UIEditorWorkspacePanelPresentationModel& presentation : presentations) {
|
||||
if (presentation.kind != UIEditorPanelPresentationKind::ViewportShell ||
|
||||
!IsProductViewportPanel(presentation.panelId)) {
|
||||
continue;
|
||||
}
|
||||
void ApplyViewportFrameToShellModel(
|
||||
const ProductViewportFrame& viewportFrame,
|
||||
UIEditorViewportShellModel& shellModel) {
|
||||
shellModel.frame.texture = viewportFrame.texture;
|
||||
shellModel.frame.requestedSize = viewportFrame.requestedSize;
|
||||
shellModel.frame.presentedSize = viewportFrame.renderSize;
|
||||
shellModel.frame.hasTexture = viewportFrame.hasTexture;
|
||||
shellModel.frame.statusText = viewportFrame.statusText;
|
||||
}
|
||||
|
||||
const UIEditorWorkspaceViewportComposeRequest* viewportRequest =
|
||||
FindUIEditorWorkspaceViewportPresentationRequest(
|
||||
shellRequest.shellRequest.workspaceRequest,
|
||||
presentation.panelId);
|
||||
const ::XCEngine::UI::UISize requestedSize =
|
||||
viewportRequest != nullptr
|
||||
? viewportRequest->viewportShellRequest.requestedViewportSize
|
||||
: ::XCEngine::UI::UISize();
|
||||
ApplyViewportFrameToPresentation(
|
||||
viewportHostService.RequestViewport(
|
||||
ResolveProductViewportKind(presentation.panelId),
|
||||
requestedSize),
|
||||
presentation);
|
||||
UIEditorWorkspacePanelPresentationModel* FindMutableWorkspacePresentation(
|
||||
std::vector<UIEditorWorkspacePanelPresentationModel>& presentations,
|
||||
std::string_view panelId) {
|
||||
for (UIEditorWorkspacePanelPresentationModel& presentation : presentations) {
|
||||
if (presentation.panelId == panelId) {
|
||||
return &presentation;
|
||||
}
|
||||
}
|
||||
return presentations;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void ApplyViewportFramesToShellFrame(
|
||||
UIEditorShellInteractionFrame& shellFrame,
|
||||
ProductViewportHostService& viewportHostService) {
|
||||
auto applyToViewportFrames =
|
||||
[&](std::vector<UIEditorWorkspaceViewportComposeFrame>& viewportFrames) {
|
||||
for (UIEditorWorkspaceViewportComposeFrame& viewportComposeFrame : viewportFrames) {
|
||||
if (!IsProductViewportPanel(viewportComposeFrame.panelId)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const ProductViewportFrame viewportFrame =
|
||||
viewportHostService.RequestViewport(
|
||||
ResolveProductViewportKind(viewportComposeFrame.panelId),
|
||||
viewportComposeFrame.viewportShellFrame.requestedViewportSize);
|
||||
ApplyViewportFrameToShellModel(
|
||||
viewportFrame,
|
||||
viewportComposeFrame.viewportShellModel);
|
||||
if (UIEditorWorkspacePanelPresentationModel* presentation =
|
||||
FindMutableWorkspacePresentation(
|
||||
shellFrame.model.workspacePresentations,
|
||||
viewportComposeFrame.panelId);
|
||||
presentation != nullptr) {
|
||||
ApplyViewportFrameToPresentation(viewportFrame, *presentation);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
applyToViewportFrames(shellFrame.workspaceInteractionFrame.composeFrame.viewportFrames);
|
||||
applyToViewportFrames(shellFrame.shellFrame.workspaceFrame.viewportFrames);
|
||||
}
|
||||
|
||||
std::vector<UIEditorWorkspacePanelPresentationModel> BuildWorkspacePresentations(
|
||||
const UIEditorShellInteractionDefinition& definition) {
|
||||
return definition.workspacePresentations;
|
||||
}
|
||||
|
||||
UIEditorShellComposeModel BuildShellComposeModelFromFrame(
|
||||
@@ -168,18 +197,7 @@ void ProductEditorWorkspace::Update(
|
||||
UIEditorShellInteractionDefinition definition =
|
||||
context.BuildShellDefinition(captureText);
|
||||
m_viewportHostService.BeginFrame();
|
||||
const UIEditorShellInteractionRequest shellRequest =
|
||||
ResolveUIEditorShellInteractionRequest(
|
||||
bounds,
|
||||
context.GetWorkspaceController(),
|
||||
definition,
|
||||
m_shellInteractionState,
|
||||
metrics,
|
||||
context.GetShellServices());
|
||||
definition.workspacePresentations = BuildWorkspacePresentations(
|
||||
definition,
|
||||
shellRequest,
|
||||
m_viewportHostService);
|
||||
definition.workspacePresentations = BuildWorkspacePresentations(definition);
|
||||
const std::vector<UIInputEvent> hostedContentEvents = inputEvents;
|
||||
const std::vector<UIInputEvent> shellEvents =
|
||||
HasHostedContentCapture()
|
||||
@@ -194,6 +212,7 @@ void ProductEditorWorkspace::Update(
|
||||
shellEvents,
|
||||
context.GetShellServices(),
|
||||
metrics);
|
||||
ApplyViewportFramesToShellFrame(m_shellFrame, m_viewportHostService);
|
||||
context.SyncSessionFromWorkspace();
|
||||
context.UpdateStatusFromShellResult(m_shellFrame.result);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user