Files
XCEngine/editor/app/Bootstrap/EditorCompositionRoot.h

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