> On Windows, the `Stage.width` and `Stage.height` correspond to the window > size as returned by `GetWindowRect`. > > Up until Windows 10, the size of a window was identical to its visual > borders. However, since Windows 10 has introduced thin visual window borders, > the window manager adds an invisible border of a few pixels around the window > to make it easier to resize the window. Since `GetWindowRect` returns the > window size _including_ these invisible borders, the location and size of a > `Stage` isn't exactly what we'd expect. > > For example, if we place a `Stage` at `setX(0)` and `setY(0)`, the window > appears with a small distance from the screen edge, and the window size > extends a few pixels beyond its visual borders (in the following images, the > screenshot size corresponds to the window size; note the invisible padding > around the edges): > <img width="300" alt="window-size-1" > src="https://github.com/user-attachments/assets/76ea6861-885f-4bea-aeb7-e8e6464b7199" > /> > > What we actually want is to have the visual borders line up with the edges of > the screen, and have the window size correspond to the visual borders: > <img width="295" alt="window-size-2" > src="https://github.com/user-attachments/assets/ca6bed73-e4e7-4df6-9491-d82792bb0866" > /> > > The implementation is quite simple: instead of `GetWindowRect`, we use > `DwmGetWindowAttribute(DWMA_EXTENDED_FRAME_BOUNDS)`. This gives us the bounds > of the visual window borders. If this function fails, we fall back to > `GetWindowRect` (now, I don't know why > `DwmGetWindowAttribute(DWMA_EXTENDED_FRAME_BOUNDS)` would ever fail... maybe > an old Windows version in a remote desktop scenario?).
Michael Strauß has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains five additional commits since the last revision: - Merge branch 'master' into fixes/window-size - return earlier - handle edge cases - add comments - Stage size should match extended frame bounds ------------- Changes: - all: https://git.openjdk.org/jfx/pull/1982/files - new: https://git.openjdk.org/jfx/pull/1982/files/f7232ce8..8f586174 Webrevs: - full: https://webrevs.openjdk.org/?repo=jfx&pr=1982&range=03 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=1982&range=02-03 Stats: 2036 lines in 67 files changed: 1654 ins; 203 del; 179 mod Patch: https://git.openjdk.org/jfx/pull/1982.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/1982/head:pull/1982 PR: https://git.openjdk.org/jfx/pull/1982
