IDEA-164566 [set dpi-aware from launcher for non-JBRE]

This commit is contained in:
Anton Tarasov
2016-12-07 19:25:28 +03:00
parent 52ae29c001
commit ed66d9d8c1
@@ -564,6 +564,34 @@ bool LoadJVMLibrary()
return true;
}
bool IsHiDPIJBRE() // JetBrains RE supporting HiDPI
{
if (!env) return false;
jclass cls = env->FindClass("sun/java2d/SunGraphicsEnvironment");
if (!cls) return false;
jmethodID method = env->GetMethodID(cls, "isUIScaleOn", "()Z");
if (!method) return false;
return true;
}
void SetProcessDPIAwareProperty()
{
typedef BOOL (WINAPI SetProcessDPIAwareFunc)(void);
HMODULE hLibUser32Dll = ::LoadLibraryA("user32.dll");
if (hLibUser32Dll != NULL) {
SetProcessDPIAwareFunc *lpSetProcessDPIAware =
(SetProcessDPIAwareFunc*)::GetProcAddress(hLibUser32Dll, "SetProcessDPIAware");
if (lpSetProcessDPIAware != NULL) {
lpSetProcessDPIAware();
}
::FreeLibrary(hLibUser32Dll);
}
}
bool CreateJVM()
{
JavaVMInitArgs initArgs;
@@ -593,6 +621,9 @@ bool CreateJVM()
MessageBoxA(NULL, buf.str().c_str(), error.c_str(), MB_OK);
}
// Set DPI-awareness here or let HiDPI JBRE do that.
if (!IsHiDPIJBRE()) SetProcessDPIAwareProperty();
return result == JNI_OK;
}