mirror of
https://github.com/Ryujinx/Opentk.git
synced 2024-12-23 19:15:36 +00:00
DPI-scaling should affect resolution
The correct resolution will now be reported depending on whether the application is DPI-aware.
This commit is contained in:
parent
d215075bff
commit
c480911843
|
@ -1625,6 +1625,7 @@ namespace OpenTK.Platform.Windows
|
||||||
internal const byte PFD_UNDERLAY_PLANE = unchecked((byte)-1);
|
internal const byte PFD_UNDERLAY_PLANE = unchecked((byte)-1);
|
||||||
|
|
||||||
// Device mode types (found in wingdi.h)
|
// Device mode types (found in wingdi.h)
|
||||||
|
internal const int DM_LOGPIXELS = 0x00020000;
|
||||||
internal const int DM_BITSPERPEL = 0x00040000;
|
internal const int DM_BITSPERPEL = 0x00040000;
|
||||||
internal const int DM_PELSWIDTH = 0x00080000;
|
internal const int DM_PELSWIDTH = 0x00080000;
|
||||||
internal const int DM_PELSHEIGHT = 0x00100000;
|
internal const int DM_PELSHEIGHT = 0x00100000;
|
||||||
|
|
|
@ -124,10 +124,12 @@ namespace OpenTK.Platform.Windows
|
||||||
{
|
{
|
||||||
VerifyMode(dev1, monitor_mode);
|
VerifyMode(dev1, monitor_mode);
|
||||||
|
|
||||||
|
float scale = GetScale(ref monitor_mode);
|
||||||
opentk_dev_current_res = new DisplayResolution(
|
opentk_dev_current_res = new DisplayResolution(
|
||||||
monitor_mode.Position.X, monitor_mode.Position.Y,
|
(int)(monitor_mode.Position.X / scale), (int)(monitor_mode.Position.Y / scale),
|
||||||
monitor_mode.PelsWidth, monitor_mode.PelsHeight,
|
(int)(monitor_mode.PelsWidth / scale), (int)(monitor_mode.PelsHeight / scale),
|
||||||
monitor_mode.BitsPerPel, monitor_mode.DisplayFrequency);
|
monitor_mode.BitsPerPel, monitor_mode.DisplayFrequency);
|
||||||
|
|
||||||
opentk_dev_primary =
|
opentk_dev_primary =
|
||||||
(dev1.StateFlags & DisplayDeviceStateFlags.PrimaryDevice) != DisplayDeviceStateFlags.None;
|
(dev1.StateFlags & DisplayDeviceStateFlags.PrimaryDevice) != DisplayDeviceStateFlags.None;
|
||||||
}
|
}
|
||||||
|
@ -138,9 +140,10 @@ namespace OpenTK.Platform.Windows
|
||||||
{
|
{
|
||||||
VerifyMode(dev1, monitor_mode);
|
VerifyMode(dev1, monitor_mode);
|
||||||
|
|
||||||
|
float scale = GetScale(ref monitor_mode);
|
||||||
DisplayResolution res = new DisplayResolution(
|
DisplayResolution res = new DisplayResolution(
|
||||||
monitor_mode.Position.X, monitor_mode.Position.Y,
|
(int)(monitor_mode.Position.X / scale), (int)(monitor_mode.Position.Y / scale),
|
||||||
monitor_mode.PelsWidth, monitor_mode.PelsHeight,
|
(int)(monitor_mode.PelsWidth / scale), (int)(monitor_mode.PelsHeight / scale),
|
||||||
monitor_mode.BitsPerPel, monitor_mode.DisplayFrequency);
|
monitor_mode.BitsPerPel, monitor_mode.DisplayFrequency);
|
||||||
|
|
||||||
opentk_dev_available_res.Add(res);
|
opentk_dev_available_res.Add(res);
|
||||||
|
@ -167,6 +170,15 @@ namespace OpenTK.Platform.Windows
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private float GetScale(ref DeviceMode monitor_mode)
|
||||||
|
{
|
||||||
|
float scale = 1.0f;
|
||||||
|
if ((monitor_mode.Fields & Constants.DM_LOGPIXELS) != 0)
|
||||||
|
{
|
||||||
|
scale = monitor_mode.LogPixels / 96.0f;
|
||||||
|
}
|
||||||
|
return scale;
|
||||||
|
}
|
||||||
|
|
||||||
static void VerifyMode(WindowsDisplayDevice device, DeviceMode mode)
|
static void VerifyMode(WindowsDisplayDevice device, DeviceMode mode)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue