72 lines
2.4 KiB
C++
72 lines
2.4 KiB
C++
#pragma once
|
|
|
|
#include "Bootstrap/EditorResources.h"
|
|
#include "Support/ExecutablePath.h"
|
|
|
|
#include <XCEditor/Foundation/UIEditorRuntimeTrace.h>
|
|
|
|
#include <shellscalingapi.h>
|
|
|
|
#include <algorithm>
|
|
#include <filesystem>
|
|
|
|
namespace XCEngine::UI::Editor::BootstrapSupport {
|
|
|
|
inline constexpr const wchar_t* kWindowClassName = L"XCEditorShellHost";
|
|
inline constexpr const wchar_t* kWindowTitle = L"Main Scene * - Main.xx - XCEngine Editor";
|
|
inline constexpr DWORD kBorderlessWindowStyle = WS_POPUP | WS_THICKFRAME;
|
|
|
|
inline void EnableDpiAwareness() {
|
|
const HMODULE user32 = GetModuleHandleW(L"user32.dll");
|
|
if (user32 != nullptr) {
|
|
using SetProcessDpiAwarenessContextFn = BOOL(WINAPI*)(DPI_AWARENESS_CONTEXT);
|
|
const auto setProcessDpiAwarenessContext =
|
|
reinterpret_cast<SetProcessDpiAwarenessContextFn>(
|
|
GetProcAddress(user32, "SetProcessDpiAwarenessContext"));
|
|
if (setProcessDpiAwarenessContext != nullptr) {
|
|
if (setProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2)) {
|
|
return;
|
|
}
|
|
if (GetLastError() == ERROR_ACCESS_DENIED) {
|
|
return;
|
|
}
|
|
if (setProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE)) {
|
|
return;
|
|
}
|
|
if (GetLastError() == ERROR_ACCESS_DENIED) {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
const HMODULE shcore = LoadLibraryW(L"shcore.dll");
|
|
if (shcore != nullptr) {
|
|
using SetProcessDpiAwarenessFn = HRESULT(WINAPI*)(PROCESS_DPI_AWARENESS);
|
|
const auto setProcessDpiAwareness =
|
|
reinterpret_cast<SetProcessDpiAwarenessFn>(
|
|
GetProcAddress(shcore, "SetProcessDpiAwareness"));
|
|
if (setProcessDpiAwareness != nullptr) {
|
|
const HRESULT hr = setProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);
|
|
FreeLibrary(shcore);
|
|
if (SUCCEEDED(hr) || hr == E_ACCESSDENIED) {
|
|
return;
|
|
}
|
|
} else {
|
|
FreeLibrary(shcore);
|
|
}
|
|
}
|
|
|
|
if (user32 != nullptr) {
|
|
using SetProcessDPIAwareFn = BOOL(WINAPI*)();
|
|
const auto setProcessDPIAware =
|
|
reinterpret_cast<SetProcessDPIAwareFn>(GetProcAddress(user32, "SetProcessDPIAware"));
|
|
if (setProcessDPIAware != nullptr) {
|
|
setProcessDPIAware();
|
|
}
|
|
}
|
|
}
|
|
|
|
using Support::GetExecutableDirectory;
|
|
|
|
} // namespace XCEngine::UI::Editor::BootstrapSupport
|