DPI Detection support

Windows only for now.
Many builds may break (older visual studio, mingw32)
This commit is contained in:
Juan Linietsky
2016-05-29 13:40:00 -03:00
parent d31696e3db
commit 4f100f92d8
7 changed files with 39 additions and 7 deletions

View File

@ -57,6 +57,13 @@
#include <regstr.h>
#include <process.h>
#if (_MSC_VER >= 1700)
#define HIDPI_SUPPORT
#endif
#ifdef HIDPI_SUPPORT
#include <ShellScalingAPI.h>
#endif
static const WORD MAX_CONSOLE_LINES = 1500;
extern "C" {
@ -854,7 +861,13 @@ BOOL CALLBACK OS_Windows::MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPR
minfo.rect.pos.y=lprcMonitor->top;
minfo.rect.size.x=lprcMonitor->right - lprcMonitor->left;
minfo.rect.size.y=lprcMonitor->bottom - lprcMonitor->top;
#ifdef HIDPI_SUPPORT
UINT dpix,dpiy;
GetDpiForMonitor(hMonitor,MDT_EFFECTIVE_DPI,&dpix,&dpiy);
minfo.dpi=(dpix + dpiy)/2;
#else
minfo.dpi=72;
#endif
self->monitor_info.push_back(minfo);
return TRUE;
@ -1365,6 +1378,14 @@ Size2 OS_Windows::get_screen_size(int p_screen) const{
ERR_FAIL_INDEX_V(p_screen,monitor_info.size(),Point2());
return Vector2( monitor_info[p_screen].rect.size );
}
int OS_Windows::get_screen_dpi(int p_screen) const {
ERR_FAIL_INDEX_V(p_screen,monitor_info.size(),72);
UINT dpix,dpiy;
return monitor_info[p_screen].dpi;
}
Point2 OS_Windows::get_window_position() const{