#pragma once #include "Windowing/Frame/EditorWindowTransferRequests.h" #include #include #include #include #include namespace XCEngine::UI { class UIDrawList; class UIDrawData; struct UIRect; struct UIInputEvent; } // namespace XCEngine::UI namespace XCEngine::UI::Editor { class UIEditorWorkspaceController; struct UIEditorDockHostInteractionState; struct UIEditorShellInteractionFrame; struct UIEditorShellInteractionState; } // namespace XCEngine::UI::Editor namespace XCEngine::UI::Editor::App { class EditorContext; class EditorShellRuntime; class EditorWindowFrameOrchestrator final { public: EditorWindowFrameOrchestrator() = default; ~EditorWindowFrameOrchestrator() = default; EditorWindowFrameOrchestrator(const EditorWindowFrameOrchestrator&) = delete; EditorWindowFrameOrchestrator& operator=(const EditorWindowFrameOrchestrator&) = delete; EditorWindowFrameOrchestrator(EditorWindowFrameOrchestrator&&) = delete; EditorWindowFrameOrchestrator& operator=(EditorWindowFrameOrchestrator&&) = delete; EditorWindowFrameTransferRequests UpdateAndAppend( EditorContext& editorContext, UIEditorWorkspaceController& workspaceController, EditorShellRuntime& shellRuntime, const ::XCEngine::UI::UIRect& workspaceBounds, const std::vector<::XCEngine::UI::UIInputEvent>& frameEvents, const std::optional& cursorScreenPoint, std::string_view captureStatusText, bool primary, bool globalTabDragActive, bool useDetachedTitleBarTabStrip, ::XCEngine::UI::UIDrawData& drawData) const; void AppendInvalidFrame( EditorContext& editorContext, ::XCEngine::UI::UIDrawList& drawList) const; std::string DescribeInputEvents( const std::vector<::XCEngine::UI::UIInputEvent>& events) const; private: void LogInputTrace( EditorContext& editorContext, const UIEditorWorkspaceController& workspaceController, const UIEditorShellInteractionState& shellInteractionState, const std::vector<::XCEngine::UI::UIInputEvent>& frameEvents) const; void LogFrameInteractionTrace( const UIEditorWorkspaceController& workspaceController, const std::vector<::XCEngine::UI::UIInputEvent>& frameEvents, const UIEditorShellInteractionFrame& shellFrame) const; EditorWindowFrameTransferRequests BuildShellTransferRequests( bool globalTabDragActive, const std::optional& cursorScreenPoint, const UIEditorDockHostInteractionState& dockHostInteractionState, const UIEditorShellInteractionFrame& shellFrame) const; }; } // namespace XCEngine::UI::Editor::App