RFR: 8346281: [Windows] RenderScale doesn't update to HiDPI changes
Jose Pereda
jpereda at openjdk.org
Thu Nov 6 19:01:30 UTC 2025
On Thu, 6 Nov 2025 17:04:52 GMT, Andy Goryachev <angorya at openjdk.org> wrote:
>> This PR adds the missing native implementation for Windows, `GlassWindow::HandleDPIEvent`, to notify the (Java) window when there is a DPI change event, which can happen when the user changes the resolution of the screen (via Settings -> System -> Display -> scale), while the JavaFX application is running, in a similar way as Java Desktop [handles](https://github.com/openjdk/jdk/blob/master/src/java.desktop/windows/native/libawt/windows/awt_Window.cpp#L1418) this DPI event.
>>
>> When such `WM_DPICHANGED` event happens, `GlassWindow::HandleDPIEvent` notifies the (Java) window, which changes its platform scale via `Window::notifyScaleChanged`, and `GlassScreen::HandleDisplayChange();` is needed too, to update the platform scale of the screen where the window is at as well.
>>
>> The change in `Screen:: notifySettingsChanged` is needed in order to prevent disposing screens that are not referenced by windows, and only do it when the screen instance of a given window does change.
>>
>> There are no tests added to this PR, since these would require manual intervention to change the resolution of the display. In any case, the test case added to the [issue](https://bugs.openjdk.org/browse/JDK-8346281) runs fine now when the app runs on a given screen and the user changes its resolution. It has also been tested that it doesn't have any side effect on macOS.
>>
>> For the case when the app runs on a different display that the one that was changed, see https://bugs.openjdk.org/browse/JDK-8371302 and a possible fix with https://github.com/openjdk/jfx/pull/1963.
>
> modules/javafx.graphics/src/main/native-glass/win/GlassWindow.cpp line 824:
>
>> 822: {
>> 823: JNIEnv* env = GetEnv();
>> 824: float scale = (float) LOWORD(wParam) / (float) USER_DEFAULT_SCREEN_DPI;
>
> could we simply declare `USER_DEFAULT_SCREEN_DPI` to be a `float`?
No need, I've removed the casting, it wasn't needed.
-------------
PR Review Comment: https://git.openjdk.org/jfx/pull/1964#discussion_r2500423818
More information about the openjfx-dev
mailing list