RFR: 8344637: Fix Page8 of manual test java/awt/print/PrinterJob/PrintTextTest.java on Linux and Windows [v7]
Harshitha Onkar
honkar at openjdk.org
Tue Nov 26 23:46:41 UTC 2024
On Wed, 20 Nov 2024 19:07:28 GMT, Daniel Gredler <dgredler at openjdk.org> wrote:
>> This PR fixes the issue identified in JDK-8148334 in screenshots `Page8_landscape.JPG` and `Page8_portrait.JPG`.
>>
>> It does not address `mac_Page1.png` or `mac_Page8.png`, which I'm not even sure are still issues (I have no access to a Mac).
>>
>> The method in question, `PathGraphics.printedSimpleGlyphVector(...)` is quite complex, with many special cases being handled in different ways. In this specific scenario (page 8 of `PrintTextTest`), all special case checks fail, and we fall through all the way to the final handling block, which draws the individual characters one by one. It looks like the problem is that the font transform translation is applied twice, once via the glyph positions, and again by `drawString(...)` via the font. The proposed fix is to provide `drawString(...)` a font without any translation transform.
>>
>> Testing looks good on Linux, but needs to be done on Mac and Windows.
>
> Daniel Gredler has updated the pull request incrementally with one additional commit since the last revision:
>
> Add additional issue ID to PrintTextTest bug list
Tested on windows, Pg#8 looks good. I did not notice any regressions on other pages with the fix.
src/java.desktop/share/classes/sun/print/PathGraphics.java line 962:
> 960: }
> 961: }
> 962:
The fix to PathGraphics.java looks good.
A new font var is used to copy over all the transforms except translation from the original font object and use the newly created font object in drawString(). The translation transform is skipped since the drawString takes care of x and y positions.
src/java.desktop/windows/classes/sun/awt/windows/WPathGraphics.java line 873:
> 871: AffineTransform.getScaleInstance(scaleFactorX, scaleFactorY);
> 872: advanceTransform.rotate(devangle); // radians
> 873: advanceTransform.rotate(iangle * Math.PI / 1800.0); // 1/10 degrees -> radians
Fix to WPathGraphics.java is a little more intricate and certainly requires a more expert review from @prrace.
Was devangle fix added for the landscape issue observed on Pg#8 ?
A earlier comment mentions that device space rotation must not be added.
advanceTransform.rotate(devangle); // radians
advanceTransform.rotate(iangle * Math.PI / 1800.0); // 1/10 degrees -> radians
-------------
PR Review: https://git.openjdk.org/jdk/pull/21980#pullrequestreview-2462961434
PR Review Comment: https://git.openjdk.org/jdk/pull/21980#discussion_r1859398722
PR Review Comment: https://git.openjdk.org/jdk/pull/21980#discussion_r1859413062
More information about the client-libs-dev
mailing list