refactor(new_editor): extract shell draw composer
This commit is contained in:
@@ -210,166 +210,25 @@ bool EditorShellRuntime::HasInteractiveCapture() const {
|
||||
|
||||
namespace XCEngine::UI::Editor::App {
|
||||
|
||||
using ::XCEngine::UI::UIDrawList;
|
||||
|
||||
UIEditorShellComposeModel BuildShellComposeModelFromFrame(
|
||||
const UIEditorShellInteractionFrame& frame) {
|
||||
UIEditorShellComposeModel model = {};
|
||||
model.menuBarItems = frame.request.menuBarItems;
|
||||
model.toolbarButtons = frame.model.toolbarButtons;
|
||||
model.statusSegments = frame.model.statusSegments;
|
||||
model.workspacePresentations = frame.model.workspacePresentations;
|
||||
return model;
|
||||
}
|
||||
|
||||
void AppendShellPopups(
|
||||
UIDrawList& drawList,
|
||||
const UIEditorShellInteractionFrame& frame,
|
||||
const UIEditorShellInteractionPalette& palette,
|
||||
const UIEditorShellInteractionMetrics& metrics) {
|
||||
const std::size_t popupCount =
|
||||
(std::min)(frame.request.popupRequests.size(), frame.popupFrames.size());
|
||||
for (std::size_t index = 0; index < popupCount; ++index) {
|
||||
const UIEditorShellInteractionPopupRequest& popupRequest =
|
||||
frame.request.popupRequests[index];
|
||||
const UIEditorShellInteractionPopupFrame& popupFrame =
|
||||
frame.popupFrames[index];
|
||||
Widgets::AppendUIEditorMenuPopupBackground(
|
||||
drawList,
|
||||
popupRequest.layout,
|
||||
popupRequest.widgetItems,
|
||||
popupFrame.popupState,
|
||||
palette.popupPalette,
|
||||
metrics.popupMetrics);
|
||||
Widgets::AppendUIEditorMenuPopupForeground(
|
||||
drawList,
|
||||
popupRequest.layout,
|
||||
popupRequest.widgetItems,
|
||||
popupFrame.popupState,
|
||||
palette.popupPalette,
|
||||
metrics.popupMetrics);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XCEngine::UI::Editor::App
|
||||
|
||||
namespace XCEngine::UI::Editor::App {
|
||||
|
||||
using ::XCEngine::UI::UIDrawList;
|
||||
using ::XCEngine::UI::UIDrawData;
|
||||
|
||||
template<typename AppendFn>
|
||||
void AppendDrawPacket(
|
||||
UIDrawData& drawData,
|
||||
std::string debugName,
|
||||
AppendFn&& appendFn) {
|
||||
UIDrawList drawList(std::move(debugName));
|
||||
appendFn(drawList);
|
||||
if (!drawList.Empty()) {
|
||||
drawData.AddDrawList(std::move(drawList));
|
||||
}
|
||||
}
|
||||
|
||||
void EditorShellRuntime::RenderRequestedViewports(
|
||||
const ::XCEngine::Rendering::RenderContext& renderContext) {
|
||||
m_viewportHostService.RenderRequestedViewports(renderContext);
|
||||
}
|
||||
|
||||
void EditorShellRuntime::Append(UIDrawData& drawData) const {
|
||||
const auto& metrics = ResolveUIEditorShellInteractionMetrics();
|
||||
const auto& palette = ResolveUIEditorShellInteractionPalette();
|
||||
const UIEditorShellComposeModel shellComposeModel =
|
||||
BuildShellComposeModelFromFrame(m_shellFrame);
|
||||
AppendDrawPacket(
|
||||
drawData,
|
||||
"XCEditorShell.Compose.Base",
|
||||
[&](UIDrawList& drawList) {
|
||||
AppendUIEditorShellComposeBase(
|
||||
drawList,
|
||||
m_shellFrame.shellFrame,
|
||||
shellComposeModel,
|
||||
m_shellInteractionState.composeState,
|
||||
palette.shellPalette,
|
||||
metrics.shellMetrics,
|
||||
&m_builtInIcons);
|
||||
});
|
||||
AppendDrawPacket(
|
||||
drawData,
|
||||
"XCEditorShell.Compose.Workspace",
|
||||
[&](UIDrawList& drawList) {
|
||||
AppendUIEditorWorkspaceCompose(
|
||||
drawList,
|
||||
m_shellFrame.workspaceInteractionFrame.composeFrame,
|
||||
palette.shellPalette.dockHostPalette,
|
||||
metrics.shellMetrics.dockHostMetrics,
|
||||
palette.shellPalette.viewportPalette,
|
||||
metrics.shellMetrics.viewportMetrics,
|
||||
UIEditorWorkspaceComposeAppendOptions{
|
||||
true,
|
||||
false
|
||||
});
|
||||
});
|
||||
AppendDrawPacket(
|
||||
drawData,
|
||||
"XCEditorShell.Compose.ViewportTextures",
|
||||
[&](UIDrawList& drawList) {
|
||||
AppendUIEditorWorkspaceComposeViewportTextures(
|
||||
drawList,
|
||||
m_shellFrame.workspaceInteractionFrame.composeFrame,
|
||||
palette.shellPalette.viewportPalette);
|
||||
});
|
||||
AppendDrawPacket(
|
||||
drawData,
|
||||
"XCEditorShell.Compose.StatusBar",
|
||||
[&](UIDrawList& drawList) {
|
||||
AppendUIEditorShellComposeStatusBar(
|
||||
drawList,
|
||||
m_shellFrame.shellFrame,
|
||||
shellComposeModel,
|
||||
m_shellInteractionState.composeState,
|
||||
palette.shellPalette,
|
||||
metrics.shellMetrics);
|
||||
});
|
||||
AppendDrawPacket(
|
||||
drawData,
|
||||
"XCEditorPanel.Console",
|
||||
[&](UIDrawList& drawList) { m_consolePanel.Append(drawList); });
|
||||
AppendDrawPacket(
|
||||
drawData,
|
||||
"XCEditorPanel.ColorPicker",
|
||||
[&](UIDrawList& drawList) { m_colorPickerPanel.Append(drawList); });
|
||||
AppendDrawPacket(
|
||||
drawData,
|
||||
"XCEditorPanel.Hierarchy",
|
||||
[&](UIDrawList& drawList) { m_hierarchyPanel.Append(drawList); });
|
||||
AppendDrawPacket(
|
||||
drawData,
|
||||
"XCEditorPanel.Inspector",
|
||||
[&](UIDrawList& drawList) { m_inspectorPanel.Append(drawList); });
|
||||
AppendDrawPacket(
|
||||
drawData,
|
||||
"XCEditorPanel.Project",
|
||||
[&](UIDrawList& drawList) { m_projectPanel.Append(drawList); });
|
||||
AppendDrawPacket(
|
||||
drawData,
|
||||
"XCEditorPanel.SceneOverlay",
|
||||
[&](UIDrawList& drawList) { m_sceneViewportFeature.Append(drawList); });
|
||||
AppendDrawPacket(
|
||||
drawData,
|
||||
"XCEditorShell.Compose.Overlay",
|
||||
[&](UIDrawList& drawList) {
|
||||
AppendUIEditorShellComposeOverlay(
|
||||
drawList,
|
||||
m_shellFrame.workspaceInteractionFrame.composeFrame,
|
||||
palette.shellPalette,
|
||||
metrics.shellMetrics);
|
||||
});
|
||||
AppendDrawPacket(
|
||||
drawData,
|
||||
"XCEditorShell.Popups",
|
||||
[&](UIDrawList& drawList) {
|
||||
AppendShellPopups(drawList, m_shellFrame, palette, metrics);
|
||||
});
|
||||
void EditorShellRuntime::Append(::XCEngine::UI::UIDrawData& drawData) const {
|
||||
m_drawComposer.Append(
|
||||
EditorShellDrawComposerContext{
|
||||
.shellFrame = m_shellFrame,
|
||||
.shellInteractionState = m_shellInteractionState,
|
||||
.builtInIcons = m_builtInIcons,
|
||||
.consolePanel = m_consolePanel,
|
||||
.colorPickerPanel = m_colorPickerPanel,
|
||||
.hierarchyPanel = m_hierarchyPanel,
|
||||
.inspectorPanel = m_inspectorPanel,
|
||||
.projectPanel = m_projectPanel,
|
||||
.sceneViewportFeature = m_sceneViewportFeature,
|
||||
},
|
||||
drawData);
|
||||
}
|
||||
|
||||
} // namespace XCEngine::UI::Editor::App
|
||||
|
||||
Reference in New Issue
Block a user