83 lines
2.3 KiB
C++
83 lines
2.3 KiB
C++
#pragma once
|
|
|
|
#ifndef NOMINMAX
|
|
#define NOMINMAX
|
|
#endif
|
|
|
|
#include <windows.h>
|
|
|
|
#include "Product/Core/Environment/EditorRuntimePaths.h"
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
namespace XCEngine::UI::Editor {
|
|
|
|
namespace Host {
|
|
class D3D12EditorWindowRenderRuntimeFactory;
|
|
class EditorHostResourceService;
|
|
}
|
|
|
|
namespace System {
|
|
class SystemInteractionService;
|
|
}
|
|
|
|
class EditorWindowSystem;
|
|
|
|
namespace App {
|
|
|
|
class EngineEditorComposition;
|
|
class EditorProductRuntime;
|
|
class EditorWindowManager;
|
|
class EditorWindowHostRuntime;
|
|
|
|
struct EditorCompositionRootInitializeParams {
|
|
HINSTANCE hInstance = nullptr;
|
|
int showCommand = SW_SHOWNORMAL;
|
|
const wchar_t* windowClassName = nullptr;
|
|
DWORD windowStyle = 0;
|
|
const wchar_t* primaryWindowTitle = nullptr;
|
|
void* windowUserData = nullptr;
|
|
EditorRuntimePaths runtimePaths = {};
|
|
std::unique_ptr<Host::EditorHostResourceService> resourceService = {};
|
|
};
|
|
|
|
class EditorCompositionRoot final {
|
|
public:
|
|
EditorCompositionRoot();
|
|
~EditorCompositionRoot();
|
|
|
|
EditorCompositionRoot(const EditorCompositionRoot&) = delete;
|
|
EditorCompositionRoot& operator=(const EditorCompositionRoot&) = delete;
|
|
EditorCompositionRoot(EditorCompositionRoot&&) = delete;
|
|
EditorCompositionRoot& operator=(EditorCompositionRoot&&) = delete;
|
|
|
|
bool Initialize(EditorCompositionRootInitializeParams params);
|
|
void Shutdown();
|
|
|
|
const std::string& GetValidationMessage() const;
|
|
void HandlePendingNativeWindowCreated(HWND hwnd);
|
|
bool TryDispatchWindowMessage(
|
|
HWND hwnd,
|
|
UINT message,
|
|
WPARAM wParam,
|
|
LPARAM lParam,
|
|
LRESULT& outResult);
|
|
bool TickFrame();
|
|
bool RequestPrimaryWindowClose();
|
|
|
|
private:
|
|
std::unique_ptr<EditorProductRuntime> m_productRuntime = {};
|
|
std::unique_ptr<EngineEditorComposition> m_engineComposition = {};
|
|
std::unique_ptr<EditorWindowSystem> m_windowSystem = {};
|
|
std::unique_ptr<EditorWindowHostRuntime> m_windowHostRuntime = {};
|
|
std::unique_ptr<Host::D3D12EditorWindowRenderRuntimeFactory> m_renderRuntimeFactory = {};
|
|
std::unique_ptr<Host::EditorHostResourceService> m_resourceService = {};
|
|
std::unique_ptr<System::SystemInteractionService> m_systemInteractionHost = {};
|
|
std::unique_ptr<EditorWindowManager> m_windowManager = {};
|
|
std::string m_validationMessage = {};
|
|
};
|
|
|
|
} // namespace App
|
|
} // namespace XCEngine::UI::Editor
|