Oh, I see. Yes, it looks like you are right. Since Windows is the only platform using platformWidth (and platformHeight), it might be possible to refactor it, but only if we can guarantee that (width * platformScaleX) == platformWidth, which would allow the Windows glass code to compute it for each screen (since there is no per-platform subclass of Screen). Alternatively, we could add a comment to the effect that those variables are unused for platforms other than Windows.

-- Kevin


On 6/4/2021 12:43 AM, Johan Vos wrote:
Hi John, Kevin,

Thanks for the replies.
The relation between actual resolution of the Screen and the JavaFX rendering is kept in the renderScale and outputScale, and does not come from platformWidth. The value of platformWidth is never used apart from the 2 methods I pointed out above.

The first reason I started this is because it is already complex with a viewScale, platformScale, renderScale and outputScale, and I don't see where the platformWidth  fits in this picture -- especially since the latter is not used at all on linux/mac.

The second reason is that I am looking into a more generic way to deal with output dimensions that don't match the dimensions of the JavaFX main texture. We currently support linear scaling with those scale factors, but for some local work, I added rotation as well (e.g. to allow rendering on a portrait screen when the source is in landscape coordinates). This works surprisingly well by only manipulating the transformation in ES2SwapChain.prepare (adding the rotation there). I am doing that now conditionally, based on (yet even more) system properties, but it might make sense to add an "orientation" parameter to the Screen. But before adding something, I first try to see if there is something unused that can be removed -- hence my question about platformWidth/Height.

- Johan

On Fri, Jun 4, 2021 at 12:04 AM Kevin Rushforth <kevin.rushfo...@oracle.com <mailto:kevin.rushfo...@oracle.com>> wrote:

    The platformWidth / platformHeight can also be different from the
    width
    / height on Linux with Hi-DPI scaling, at least in theory, since the
    Screen constructor is called using different parameters for the
    platform
    values. Mac is different because of how the retina scaling is
    handled on
    macOS -- even on a retina display, platformWidth/platformHeight ==
    width/height and platformScale{X,Y} == 1.

    -- Kevin


    On 6/3/2021 2:38 PM, John Hendrikx wrote:
    > Perhaps an example will help from my machine.
    >
    > I'm running on a 4k screen at 150% scaling. These are the values:
    >
    > outputScaleX = 1.5
    > outputScaleY = 1.5
    > platformScaleX = 1.5
    > platformScaleY = 1.5
    > width = 2560
    > height = 1440
    > visibleWidth = 2560
    > visibleHeight = 1400
    > platformWidth = 3840
    > platformHeight = 2160
    >
    > So it seems that platform values report the actual resolution of
    the
    > Screen / Monitor. Probably they're what is being reported by
    Windows
    > and stored there by JavaFX to derive the actual width/height it
    should
    > use while taking scaling into account.
    >
    > You didn't ask about the difference between visibleHeight and
    height.
    > But just incase, the visibleHeight is 40 pixels smaller than
    height,
    > as this space is taken up by the task bar.
    >
    > --John
    >
    >
    > On 01/06/2021 13:27, Johan Vos wrote:
    >> Hi,
    >>
    >> com.sun.glass.ui.Screen has 3 width (and height) parameters,
    each with a
    >> getter:
    >> * width
    >> * visibleWidth
    >> * platformWidth
    >>
    >> The latter seems to be used only in the windows build,
    >> via screen.containsPlatformRect and
    screen.portionIntersectsPlatformRect
    >>
    >> I don't really understand what the goal of this
    platformWidth/Height
    >> is. It
    >> seems a bit artificial if this is not used on the other
    platforms, but I
    >> might be missing the bigger purpose of this?
    >>
    >> - Johan
    >>


Reply via email to