-
Notifications
You must be signed in to change notification settings - Fork 549
8372415: Stage size should match visual window bounds #1982
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
|
/reviewers 2 |
|
👋 Welcome back mstrauss! A progress list of the required criteria for merging this PR into |
|
❗ This change is not yet ready to be integrated. |
Webrevs
|
|
I haven't uncovered any problems so far but it took me a while to get my bearings. You're working with two coordinate systems, the one used by JavaFX which doesn't include the invisible border and the one used by Windows which does. The naming convention is confusing since the "extended" rectangle is actually the smaller of the two. It would also be good to see some comments clarifying that |
I don’t think it’s quite "two coordinate systems" (JavaFX vs Windows). |
|
I was thinking that JavaFX and Windows have different ideas of where the window origin (0, 0) lies; Windows thinks it's at the top left of drop shadow area and JavaFX thinks it's at the top left of the title bar (in this PR). But you're right, what's relevant is that there are two rectangles of different sizes. I still think it could be clearer that, say, |
|
I've added a comment to clarify that |
On Windows, the
Stage.widthandStage.heightcorrespond to the window size as returned byGetWindowRect.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
GetWindowRectreturns the window size including these invisible borders, the location and size of aStageisn't exactly what we'd expect.For example, if we place a

StageatsetX(0)andsetY(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):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:

The implementation is quite simple: instead of
GetWindowRect, we useDwmGetWindowAttribute(DWMA_EXTENDED_FRAME_BOUNDS). This gives us the bounds of the visual window borders. If this function fails, we fall back toGetWindowRect(now, I don't know whyDwmGetWindowAttribute(DWMA_EXTENDED_FRAME_BOUNDS)would ever fail... maybe an old Windows version in a remote desktop scenario?).Progress
Issue
Reviewing
Using
gitCheckout this PR locally:
$ git fetch https://git.openjdk.org/jfx.git pull/1982/head:pull/1982$ git checkout pull/1982Update a local copy of the PR:
$ git checkout pull/1982$ git pull https://git.openjdk.org/jfx.git pull/1982/headUsing Skara CLI tools
Checkout this PR locally:
$ git pr checkout 1982View PR using the GUI difftool:
$ git pr show -t 1982Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jfx/pull/1982.diff
Using Webrev
Link to Webrev Comment