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

62 lines
1.7 KiB
C++

#pragma once
#ifndef NOMINMAX
#define NOMINMAX
#endif
#include <windows.h>
#include "Product/Core/Environment/EditorRuntimePaths.h"
#include <chrono>
#include <filesystem>
#include <memory>
namespace XCEngine::Debug {
class ILogSink;
}
namespace XCEngine::UI::Editor::App {
class EditorCompositionRoot;
}
namespace XCEngine::UI::Editor {
class Application final {
public:
Application();
~Application();
Application(const Application&) = delete;
Application& operator=(const Application&) = delete;
Application(Application&&) = delete;
Application& operator=(Application&&) = delete;
int Run(HINSTANCE hInstance, int nCmdShow);
private:
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
bool Initialize(HINSTANCE hInstance, int nCmdShow);
void Shutdown();
bool RegisterWindowClass();
static App::EditorRuntimePaths ResolveRuntimePaths(
const std::filesystem::path& executableDirectory);
static LONG WINAPI HandleUnhandledException(EXCEPTION_POINTERS* exceptionInfo);
HINSTANCE m_hInstance = nullptr;
ATOM m_windowClassAtom = 0;
std::chrono::steady_clock::time_point m_smokeTestStartTime = {};
std::chrono::milliseconds m_smokeTestDuration = std::chrono::milliseconds::zero();
std::unique_ptr<App::EditorCompositionRoot> m_compositionRoot = {};
XCEngine::Debug::ILogSink* m_runtimeTraceLogSink = nullptr;
int m_smokeTestFrameLimit = 0;
int m_smokeTestRenderedFrameCount = 0;
bool m_smokeTestEnabled = false;
bool m_smokeTestCloseRequested = false;
};
int RunXCEditor(HINSTANCE hInstance, int nCmdShow);
} // namespace XCEngine::UI::Editor