#pragma once #ifndef NOMINMAX #define NOMINMAX #endif #include "Windowing/Host/EditorWindowHostCoordinator.h" #include "Windowing/Host/EditorWindowHostInterfaces.h" #include "Windowing/Host/EditorWindowHostTypes.h" #include "Windowing/EditorWindowInstance.h" #include #include #include namespace XCEngine::UI::Editor { class EditorWindowSystem; struct UIEditorWindowWorkspaceState; namespace Rendering::Host { class EditorWindowRenderRuntimeFactory; } } // namespace XCEngine::UI::Editor namespace XCEngine::UI::Editor::App { class EditorContext; class EditorWindowContentFactory; class EditorWindowHostRuntimeServices; class EditorWindowLifecycleCoordinator; class EditorUtilityWindowCoordinator; class EditorWindowWorkspaceCoordinator; struct EditorUtilityWindowDescriptor; struct EditorWindowFrameTransferRequests; class EditorWindowManager final : public EditorWindowHostCoordinator { public: EditorWindowManager( EditorContext& editorContext, EditorWindowSystem& windowSystem, Rendering::Host::EditorWindowRenderRuntimeFactory& renderRuntimeFactory, EditorWindowHostRuntimeServices& hostRuntime); ~EditorWindowManager(); EditorWindowManager(const EditorWindowManager&) = delete; EditorWindowManager& operator=(const EditorWindowManager&) = delete; EditorWindowManager(EditorWindowManager&&) = delete; EditorWindowManager& operator=(EditorWindowManager&&) = delete; EditorHostWindow* CreateWorkspaceWindow( const UIEditorWindowWorkspaceState& windowState, const EditorWindowCreateParams& params); EditorHostWindow* CreateUtilityWindow( const EditorUtilityWindowDescriptor& descriptor, const EditorWindowCreateParams& params); void Shutdown(); bool RequestPrimaryWindowClose(); bool HasWindows() const; void DestroyClosedWindows(); void RenderAllWindows(); private: bool InitializeHostWindow( EditorHostWindow& window, const EditorHostWindowRuntimeInitializationParams& params) override; EditorWindowFrameTransferRequests DriveWindowFrame(EditorHostWindow& window) override; EditorWindowFrameTransferRequests DriveImmediateWindowFrame( EditorHostWindow& window) override; bool IsGlobalTabDragActive() const override; bool OwnsActiveGlobalTabDrag(std::string_view windowId) const override; bool HandleGlobalTabDragPointerMove(EditorHostWindow& window) override; bool HandleGlobalTabDragPointerButtonUp(EditorHostWindow& window) override; void EndGlobalTabDragSession() override; void RefreshWindowPresentation(EditorHostWindow& window) override; void DispatchWindowFrameTransferRequests( EditorHostWindow& sourceWindow, const EditorWindowFrameTransferRequests& transferRequests) override; void ExecuteCloseRequest(EditorHostWindow& window) override; void HandleNativeWindowDestroyed(EditorHostWindow& window) override; void AbortUnregisteredWindow(EditorHostWindow& window) override; void ReapDestroyedWindows() override; EditorWindowFrameTransferRequests DriveWindowFrameInternal( EditorHostWindow& window, bool requestSkipNextSteadyStateFrame); EditorContext& m_editorContext; Rendering::Host::EditorWindowRenderRuntimeFactory& m_renderRuntimeFactory; EditorWindowHostRuntimeServices& m_hostRuntime; std::unique_ptr m_contentFactory = {}; std::unique_ptr m_lifecycleCoordinator = {}; std::unique_ptr m_utilityCoordinator = {}; std::unique_ptr m_workspaceCoordinator = {}; std::vector> m_windows = {}; }; } // namespace XCEngine::UI::Editor::App