JDK-8113227 : LCD Text shader graphics transform problems.
  • Type: Bug
  • Component: javafx
  • Sub-Component: graphics
  • Affected Version: fx2.0
  • Priority: P3
  • Status: Closed
  • Resolution: Fixed
  • Submitted: 2011-06-13
  • Updated: 2015-06-16
  • Resolved: 2011-12-02
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other
fx2.1Fixed
Related Reports
Blocks :  
Description
* When a scale is applied to a Text node, glyphs are produced in
device space and the drawing to the graphics should not apply
the transform. However it appears this does happen somewhere
in the LCD shader code path. It does not happen in the greyscale
code path.

* the "x,y" parameters in BaseShaderGraphics.drawString()
  are mapped to device space in the function, but the LCD code
  path then uses them as if they are in user space.
  This appears likely to be the cause of incorrectly placed
  text when there's a scaling transform

* The usage of FontStrike.getStringBounds() in the shader code
   path appears to be part of the calculation as to what area
   of the destination to sample. Because these bounds
  are in the font's coordinate system (user space) it needs to
  account for the graphics transform. The calculation also
  mixes the device x,y (see above) with these user space values.
  Its not clear what role this has in the additional application of
  the transform to the glyphs.
Comments
Verified by running TextTest, setting LCD text and scaling.
28-03-2012

Fix as of: changeset: 15041:01ff3f38df8d 2.1-graphics-scrum build #148 Dec1, 2011
02-12-2011

To reproduce turn on LCD text via -Dprism.lcdtext=true Text text = new Text(���Hello LCD Text���); text.setFont(Font.font("Times New Roman", 15.0)); // Ensure LCD font is used text.setScaleY(1.2); // This and any transform, will disable LCD before fix //TODO add to scene
02-12-2011

Because of these issues we are backing off to greyscale, even if its a simple uniform scale.
13-06-2011