#pragma once #include #include #include namespace XCEngine::UI::Editor { enum class UIEditorShellToolbarGlyph : std::uint8_t { Play = 0, Pause, Step }; struct UIEditorShellToolbarButton { std::string buttonId = {}; UIEditorShellToolbarGlyph glyph = UIEditorShellToolbarGlyph::Play; bool enabled = true; }; struct UIEditorShellToolbarLayout { ::XCEngine::UI::UIRect bounds = {}; ::XCEngine::UI::UIRect groupRect = {}; std::vector<::XCEngine::UI::UIRect> buttonRects = {}; }; struct UIEditorShellToolbarMetrics { float barHeight = 24.0f; float groupPaddingX = 8.0f; float groupPaddingY = 3.0f; float buttonWidth = 20.0f; float buttonHeight = 18.0f; float buttonGap = 5.0f; float groupCornerRounding = 6.0f; float buttonCornerRounding = 4.0f; float borderThickness = 1.0f; float iconThickness = 1.35f; }; struct UIEditorShellToolbarPalette { ::XCEngine::UI::UIColor barColor = ::XCEngine::UI::UIColor(0.13f, 0.13f, 0.13f, 1.0f); ::XCEngine::UI::UIColor groupColor = ::XCEngine::UI::UIColor(0.16f, 0.16f, 0.16f, 1.0f); ::XCEngine::UI::UIColor groupBorderColor = ::XCEngine::UI::UIColor(0.30f, 0.30f, 0.30f, 1.0f); ::XCEngine::UI::UIColor buttonColor = ::XCEngine::UI::UIColor(0.20f, 0.20f, 0.20f, 1.0f); ::XCEngine::UI::UIColor buttonBorderColor = ::XCEngine::UI::UIColor(0.36f, 0.36f, 0.36f, 1.0f); ::XCEngine::UI::UIColor iconColor = ::XCEngine::UI::UIColor(0.84f, 0.84f, 0.84f, 1.0f); }; struct UIEditorShellComposeModel { std::vector menuBarItems = {}; std::vector toolbarButtons = {}; std::vector statusSegments = {}; std::vector workspacePresentations = {}; }; struct UIEditorShellComposeState { Widgets::UIEditorMenuBarState menuBarState = {}; UIEditorWorkspaceComposeState workspaceState = {}; Widgets::UIEditorStatusBarState statusBarState = {}; }; struct UIEditorShellComposeMetrics { float outerPadding = 12.0f; float sectionGap = 8.0f; float surfaceCornerRounding = 10.0f; Widgets::UIEditorMenuBarMetrics menuBarMetrics = {}; UIEditorShellToolbarMetrics toolbarMetrics = {}; Widgets::UIEditorDockHostMetrics dockHostMetrics = {}; Widgets::UIEditorViewportSlotMetrics viewportMetrics = {}; Widgets::UIEditorStatusBarMetrics statusBarMetrics = {}; }; struct UIEditorShellComposePalette { ::XCEngine::UI::UIColor surfaceColor = ::XCEngine::UI::UIColor(0.14f, 0.14f, 0.14f, 1.0f); ::XCEngine::UI::UIColor surfaceBorderColor = ::XCEngine::UI::UIColor(0.27f, 0.27f, 0.27f, 1.0f); Widgets::UIEditorMenuBarPalette menuBarPalette = {}; UIEditorShellToolbarPalette toolbarPalette = {}; Widgets::UIEditorDockHostPalette dockHostPalette = {}; Widgets::UIEditorViewportSlotPalette viewportPalette = {}; Widgets::UIEditorStatusBarPalette statusBarPalette = {}; }; struct UIEditorShellComposeLayout { ::XCEngine::UI::UIRect bounds = {}; ::XCEngine::UI::UIRect contentRect = {}; ::XCEngine::UI::UIRect menuBarRect = {}; ::XCEngine::UI::UIRect toolbarRect = {}; ::XCEngine::UI::UIRect workspaceRect = {}; ::XCEngine::UI::UIRect statusBarRect = {}; Widgets::UIEditorMenuBarLayout menuBarLayout = {}; UIEditorShellToolbarLayout toolbarLayout = {}; Widgets::UIEditorStatusBarLayout statusBarLayout = {}; }; struct UIEditorShellComposeRequest { UIEditorShellComposeLayout layout = {}; UIEditorWorkspaceComposeRequest workspaceRequest = {}; }; struct UIEditorShellComposeFrame { UIEditorShellComposeLayout layout = {}; UIEditorWorkspaceComposeFrame workspaceFrame = {}; }; UIEditorShellComposeLayout BuildUIEditorShellComposeLayout( const ::XCEngine::UI::UIRect& bounds, const std::vector& menuBarItems, const std::vector& toolbarButtons, const std::vector& statusSegments, const UIEditorShellComposeMetrics& metrics = {}); UIEditorShellComposeRequest ResolveUIEditorShellComposeRequest( const ::XCEngine::UI::UIRect& bounds, const UIEditorPanelRegistry& panelRegistry, const UIEditorWorkspaceModel& workspace, const UIEditorWorkspaceSession& session, const UIEditorShellComposeModel& model, const Widgets::UIEditorDockHostState& dockHostState = {}, const UIEditorShellComposeState& state = {}, const UIEditorShellComposeMetrics& metrics = {}); UIEditorShellComposeFrame UpdateUIEditorShellCompose( UIEditorShellComposeState& state, const ::XCEngine::UI::UIRect& bounds, const UIEditorPanelRegistry& panelRegistry, const UIEditorWorkspaceModel& workspace, const UIEditorWorkspaceSession& session, const UIEditorShellComposeModel& model, const std::vector<::XCEngine::UI::UIInputEvent>& inputEvents, const Widgets::UIEditorDockHostState& dockHostState = {}, const UIEditorShellComposeMetrics& metrics = {}); void AppendUIEditorShellCompose( ::XCEngine::UI::UIDrawList& drawList, const UIEditorShellComposeFrame& frame, const UIEditorShellComposeModel& model, const UIEditorShellComposeState& state, const UIEditorShellComposePalette& palette = {}, const UIEditorShellComposeMetrics& metrics = {}); } // namespace XCEngine::UI::Editor