Files
XCEngine/editor/app/Windowing/Host/EditorWindowHostInterfaces.h

127 lines
5.0 KiB
C++

#pragma once
#include "Windowing/EditorWindowShared.h"
#include "Windowing/Frame/EditorWindowTransferRequests.h"
#include "Windowing/Host/EditorWindowHostTypes.h"
#include "Windowing/Host/EditorWindowPointerCapture.h"
#include "Windowing/Host/EditorWindowTypes.h"
#include <XCEditor/Windowing/Presentation/EditorWorkspaceWindowProjection.h>
#include <memory>
#include <filesystem>
#include <string>
#include <string_view>
#include <vector>
namespace XCEngine::UI {
struct UIPoint;
} // namespace XCEngine::UI
namespace XCEngine::UI::Editor {
struct UIEditorDockHostTabDropTarget;
} // namespace XCEngine::UI::Editor
namespace XCEngine::UI::Editor::App {
class EditorWindowHostCoordinator;
class EditorWindowDockHostBinding;
class EditorWindowRuntimeController;
struct EditorHostWindowRuntimeInitializationParams {
std::filesystem::path repoRoot = {};
std::filesystem::path captureRoot = {};
bool autoCaptureOnStartup = false;
};
class EditorHostWindow {
public:
virtual ~EditorHostWindow() = default;
virtual std::string_view GetWindowId() const = 0;
virtual EditorWindowLifecycleState GetLifecycleState() const = 0;
virtual bool IsPrimary() const = 0;
virtual bool IsWorkspaceWindow() const = 0;
virtual bool IsUtilityWindow() const = 0;
virtual bool IsClosing() const = 0;
virtual bool IsDestroyed() const = 0;
virtual bool HasLiveHostWindow() const = 0;
virtual const std::wstring& GetTitle() const = 0;
virtual const EditorWorkspaceWindowProjection* TryGetWorkspaceProjection() const = 0;
virtual EditorWindowDockHostBinding* TryGetDockHostBinding() = 0;
virtual const EditorWindowDockHostBinding* TryGetDockHostBinding() const = 0;
virtual ::XCEngine::UI::UIPoint ConvertScreenPixelsToClientDips(
const EditorWindowScreenPoint& screenPoint) const = 0;
virtual bool TryResolveDockTabDragHotspot(
std::string_view nodeId,
std::string_view panelId,
const EditorWindowScreenPoint& screenPoint,
EditorWindowScreenPoint& outHotspot) const = 0;
virtual bool TryResolveDockTabDropTarget(
const EditorWindowScreenPoint& screenPoint,
UIEditorDockHostTabDropTarget& outTarget) const = 0;
virtual void InvalidateHostWindow() const = 0;
virtual void SetPrimary(bool primary) = 0;
virtual void SetTitle(std::wstring title) = 0;
virtual void ApplyHostWindowTitle() = 0;
virtual void RefreshWorkspaceProjection(EditorWorkspaceWindowProjection projection) = 0;
virtual void ResetInteractionState() = 0;
virtual void AcquirePointerCapture(EditorWindowPointerCaptureOwner owner) = 0;
virtual void ReleasePointerCapture(EditorWindowPointerCaptureOwner owner) = 0;
virtual void MarkClosing() = 0;
virtual void MarkDestroyed() = 0;
virtual bool IsRenderReady() const = 0;
virtual bool InitializeRuntime(
const EditorHostWindowRuntimeInitializationParams& params) = 0;
virtual EditorWindowFrameTransferRequests RenderHostFrame(
bool globalTabDragActive) = 0;
virtual void ValidateHostFrame() const = 0;
virtual void RequestSkipNextSteadyStateFrame() = 0;
virtual bool ConsumeSkipNextSteadyStateFrame() = 0;
virtual void Shutdown() = 0;
virtual bool TryGetHostScreenRect(EditorWindowScreenRect& outRect) const = 0;
virtual void SetHostScreenPosition(const EditorWindowScreenPoint& screenPoint) = 0;
virtual void FocusHostWindow() = 0;
virtual void PostCloseToHost() = 0;
virtual void DestroyHostWindow() = 0;
};
class EditorWindowHost {
public:
virtual ~EditorWindowHost() = default;
virtual EditorHostWindow* CreateHostWindow(
std::unique_ptr<EditorWindowRuntimeController> runtimeController,
const EditorWindowCreateParams& params) = 0;
virtual EditorHostWindow* FindWindowById(std::string_view windowId) = 0;
virtual const EditorHostWindow* FindWindowById(std::string_view windowId) const = 0;
virtual std::vector<EditorHostWindow*> GetWindows() = 0;
virtual std::vector<const EditorHostWindow*> GetWindows() const = 0;
virtual std::wstring_view GetPrimaryWindowTitle() const = 0;
virtual bool TryGetCursorScreenPoint(EditorWindowScreenPoint& outPoint) const = 0;
virtual EditorWindowScreenRect ResolveFloatingPlacement(
const EditorWindowScreenPoint& screenPoint,
int preferredWidth,
int preferredHeight) const = 0;
virtual EditorHostWindow* FindWindowFromScreenPoint(
const EditorWindowScreenPoint& screenPoint) = 0;
virtual const EditorHostWindow* FindWindowFromScreenPoint(
const EditorWindowScreenPoint& screenPoint) const = 0;
virtual void ReapDestroyedWindows() = 0;
virtual std::string DescribeWindows() const = 0;
virtual void LogRuntimeTrace(std::string_view channel, std::string_view message) const = 0;
};
class EditorWindowHostRuntimeServices : public EditorWindowHost {
public:
virtual ~EditorWindowHostRuntimeServices() = default;
virtual void BindHostCoordinator(EditorWindowHostCoordinator& hostCoordinator) = 0;
};
} // namespace XCEngine::UI::Editor::App