Bumping this. With the impending release of Ableton 10 and HiDPI mode, this is now more important.
Windows introduced a per display DPI setting some years ago already (I think with Windows 8.1), but this needs support from applications — i.e. they have to respond to WM_DPICHANGED messsages. This is not supported by JUCE.
I tried to patch JUCE a while ago, and dynamically changing the desktop scaling factor of a window seems to work well, however I didn’t figure out how to change this scale factor and at the same time move the window to the suggested position.
No, that’s not true!
We do fetch the DPI for each display when building the list.
I’m referring to automatically changing the DPI setting on a window when moving between screens. That is reported with a
WM_DPICHANGED message. Juce isn’t doing much in response to that message, see juce_win32_Windowing.cpp.
Windows Scaled Display and OpenGL in Studio One
JUCE is currently system DPI aware on Windows meaning that the DPI of the primary monitor is used to scale all windows on all monitors and it doesn’t receive
WM_DPICHANGED messages. I’ve had a quick look at changing this to be per-monitor DPI aware meaning that we get the
WM_DPICHANGED messages, but figuring out how to respond to them correctly and resize/rescale everything is a big task. I’ll add it to our backlog.
Assuming someone is working on this at Roli, please be aware of the following:
In order to accurately test this, you need to set Windows global scaling to something besides 100%. The most common setting for 4K monitors is 125%. This results in a mismatch between what the app (either Studio One 3 or Live 10 < b7) thinks the DPI is and what the DPI actually is.
The net result is different in the two apps, but it is bordering on comically problematic in Studio One 3.
As far as I am aware, Studio One 3 is the only currently available truly HiDpi host on Windows. Bitwig purports to be, but they just do pixel doubling like Live 10, so the net result is a plugin that is just drawing at 96dpi but upscaled. This is the method Ableton went with for the public beta of Live 10, and considering the massive problems they were having, I don’t expect a change any time soon.