On Thu, 24 Sep 2020 18:57:13 GMT, Frederic Thevenet <ftheve...@openjdk.org> wrote:
> This PR aims to fix the blurriness to sometimes affects some controls (such > as TextArea) in a scene when rendered with > a scaling factor that is not an integer (typically when viewed on a HiDPI > screen with a 125%, 150% or 175% output > scaling). Please note that regardless of what the JBS issue (and therefore > the title of this PR) states, this does not > appear to be a Windows only issue as I have observed the same issue on Linux > (Ubuntu 20.04). > The following conditions are necessary for the blurriness to appear, but do > not guarantee that it will: > > - The node, or one of its parents, must have set `Node::cacheProperty` to > `true` > > - The scaling factor (as detected automatically or explicitly set via > glass.win/gtk.uiScale) must be a non integer number > (e.g. 1.25, 1.5, 175) > > - The effective layout X or Y coordinates for the cached node must be != 0; > > Under these conditions, the translate coordinates for the transform used when > the cached image for a node is rendered > to the screen may be non integer numbers, which is the cause for the > blurriness. > Based on these observations, this PR fixes the issue by simply rounding the > translate coordinates (using `Math.round`) > before the transform is applied in `renderCacheToScreen()` and as far as I > can tell, it fixes the blurriness in all the > previously affected applications (both trivial test cases or with complex > scenegraphs) and does not appear to introduce > other noticeable visual artifacts. Still, there might be a better place > somewhere else higher up in the call chain > where this should be addressed as it could maybe be the root cause for other > rendering glitches, though I'm not yet > familiar enough with the code to see if it is really the case. Also, I don't really have an idea on how this could be tested other than visually, so I'm open to suggestions. ------------- PR: https://git.openjdk.java.net/jfx/pull/308