Add screen_get_refresh_rate to DisplayServer
This commit is contained in:
parent
203e261526
commit
54dec44dba
19 changed files with 172 additions and 0 deletions
|
|
@ -323,6 +323,12 @@ typedef struct {
|
|||
Rect2i rect;
|
||||
} EnumRectData;
|
||||
|
||||
typedef struct {
|
||||
int count;
|
||||
int screen;
|
||||
float rate;
|
||||
} EnumRefreshRateData;
|
||||
|
||||
static BOOL CALLBACK _MonitorEnumProcSize(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) {
|
||||
EnumSizeData *data = (EnumSizeData *)dwData;
|
||||
if (data->count == data->screen) {
|
||||
|
|
@ -360,6 +366,26 @@ static BOOL CALLBACK _MonitorEnumProcUsableSize(HMONITOR hMonitor, HDC hdcMonito
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL CALLBACK _MonitorEnumProcRefreshRate(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) {
|
||||
EnumRefreshRateData *data = (EnumRefreshRateData *)dwData;
|
||||
if (data->count == data->screen) {
|
||||
MONITORINFOEXW minfo;
|
||||
memset(&minfo, 0, sizeof(minfo));
|
||||
minfo.cbSize = sizeof(minfo);
|
||||
GetMonitorInfoW(hMonitor, &minfo);
|
||||
|
||||
DEVMODEW dm;
|
||||
memset(&dm, 0, sizeof(dm));
|
||||
dm.dmSize = sizeof(dm);
|
||||
EnumDisplaySettingsW(minfo.szDevice, ENUM_CURRENT_SETTINGS, &dm);
|
||||
|
||||
data->rate = dm.dmDisplayFrequency;
|
||||
}
|
||||
|
||||
data->count++;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
Rect2i DisplayServerWindows::screen_get_usable_rect(int p_screen) const {
|
||||
_THREAD_SAFE_METHOD_
|
||||
|
||||
|
|
@ -443,6 +469,13 @@ int DisplayServerWindows::screen_get_dpi(int p_screen) const {
|
|||
EnumDisplayMonitors(nullptr, nullptr, _MonitorEnumProcDpi, (LPARAM)&data);
|
||||
return data.dpi;
|
||||
}
|
||||
float DisplayServerWindows::screen_get_refresh_rate(int p_screen) const {
|
||||
_THREAD_SAFE_METHOD_
|
||||
|
||||
EnumRefreshRateData data = { 0, p_screen == SCREEN_OF_MAIN_WINDOW ? window_get_current_screen() : p_screen, SCREEN_REFRESH_RATE_FALLBACK };
|
||||
EnumDisplayMonitors(nullptr, nullptr, _MonitorEnumProcRefreshRate, (LPARAM)&data);
|
||||
return data.rate;
|
||||
}
|
||||
|
||||
bool DisplayServerWindows::screen_is_touchscreen(int p_screen) const {
|
||||
#ifndef _MSC_VER
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue