[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-2d-dev
Subject:    [OpenJDK 2D-Dev] RFR: 8262470: Printed GlyphVector outline with low DPI has bad quality on Windows
From:       Alexander Scherbatiy <alexsch () openjdk ! java ! net>
Date:       2021-02-26 19:45:57
Message-ID: SXgjmlvR91f-zY-0Ku7RZ59ucQoT7tltvb1XVb1Hyrk=.88afc47c-e3b1-4836-af1b-e44063efd2be () github ! com
[Download RAW message or body]

Printing text using GlyphVector outline has bad quality on printers with low DPI on \
Windows. The GDI system used for text printing on Windows accepts only integer path \
coordinates. Rounding GlyphVector outline coordinates leads to distorted printed \
text.

The issue had been reported as JDK-8256264 but was reverted because of the regression \
JDK-8259007 "This test printed a blank page".

The fix JDK-8256264 scaled coordinates in wPrinterJob.moveTo()/lineTo()  methods up \
and scaled transforms in wPrinterJob.beginPath()/endPath() down.

The regression was in the WPathGraphics.deviceDrawLine() method which uses \
wPrinterJob.moveTo()/lineTo() methods without surrounding them with \
wPrinterJob.beginPath()/endPath() so the line coordinates were only scaled up.

I tried to put wPrinterJob.beginPath()/endPath()  methods around \
wPrinterJob.moveTo()/lineTo()   in the method WPathGraphics.deviceDrawLine()  but the \
line was not drawn at all even without scaling coordinates up and transform down \
(without JDK-8256264 fix). It looks like GDI treats this case as an empty shape.

The proposed fix applies path coordinates and transform scaling only in \
WPathGraphics.convertToWPath() method. The one more \
PathPrecisionScaleFactorShapeTest.java manual test is added which checks that all \
methods that draw paths in WPathGraphics are used: line in \
WPathGraphics.deviceDrawLine() and SEG_LINETO/SEG_QUADTO/SEG_CUBICTO in \
WPathGraphics.convertToWPath() .

The `java/awt/print` and `java/awt/PrintJob` automatic and manual tests were run on \
Windows 10 Pro with the fix.

There are two failed automated tests which fail without the fix as well:
java/awt/print/PrinterJob/GlyphPositions.java 
java/awt/print/PrinterJob/PSQuestionMark.java

The following manual tests have issues on my system:
- `java/awt/print/Dialog/PrintDlgPageable.java` java.lang.IllegalAccessException: \
class com.sun.javatest.regtest.agent.MainWrapper$MainThread cannot access a member of \
class PrintDlgPageable with modifiers "public static"

- `java/awt/print/PrinterJob/PrintAttributeUpdateTest.java` I select pages radio \
button, press the print button but the test does not finish and I do not see any \
other dialogs with pass/fail buttons.

- `java/awt/PrintJob/PrintCheckboxTest/PrintCheckboxManualTest.java` Tests that there \
is no ClassCastException thrown in printing checkbox and scrollbar with XAWT. Error. \
Can't find HTML file: \
test\jdk\java\awt\PrintJob\PrintCheckboxTest\PrintCheckboxManualTest.html


- `java/awt/print/PrinterJob/SecurityDialogTest.java` A windows with instructions is \
shown but it does not contain  print/pass/fail buttons and it is not possible to \
close the window.

- The tests below fail with "Error. Parse Exception: Arguments to `manual' option not \
supported: yesno" message: java/awt/print/Dialog/DialogOrient.java
java/awt/print/Dialog/DialogType.java
java/awt/print/PrinterJob/ImagePrinting/ClippedImages.java
java/awt/print/PrinterJob/ImagePrinting/ImageTypes.java
java/awt/print/PrinterJob/ImagePrinting/PrintARGBImage.java
java/awt/print/PrinterJob/PageDialogTest.java
java/awt/print/PrinterJob/PageRanges.java
java/awt/print/PrinterJob/PageRangesDlgTest.java
java/awt/print/PrinterJob/PrintGlyphVectorTest.java
java/awt/print/PrinterJob/PrintLatinCJKTest.java
java/awt/print/PrinterJob/PrintTextTest.java
java/awt/print/PrinterJob/SwingUIText.java
java/awt/PrintJob/ConstrainedPrintingTest/ConstrainedPrintingTest.java
java/awt/PrintJob/PageSetupDlgBlockingTest/PageSetupDlgBlockingTest.java
java/awt/PrintJob/SaveDialogTitleTest.java

-------------

Commit messages:
 - 8262470: Printed GlyphVector outline with low DPI has bad quality on Windows

Changes: https://git.openjdk.java.net/jdk/pull/2756/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=2756&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8262470
  Stats: 725 lines in 5 files changed: 722 ins; 0 del; 3 mod
  Patch: https://git.openjdk.java.net/jdk/pull/2756.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/2756/head:pull/2756

PR: https://git.openjdk.java.net/jdk/pull/2756


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic