refactor(new_editor): continue architecture closeout
This commit is contained in:
55
new_editor/app/Bootstrap/ApplicationBootstrapInternal.cpp
Normal file
55
new_editor/app/Bootstrap/ApplicationBootstrapInternal.cpp
Normal file
@@ -0,0 +1,55 @@
|
||||
#include "Bootstrap/ApplicationBootstrapInternal.h"
|
||||
|
||||
namespace XCEngine::UI::Editor::BootstrapInternal {
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XCEngine::UI::Editor::BootstrapInternal
|
||||
Reference in New Issue
Block a user