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

List:       openjdk-2d-dev
Subject:    Re: [OpenJDK 2D-Dev] RFR: 8262470: Printed GlyphVector outline with low DPI has bad quality on Windo
From:       Sergey Bylokhov <serb () openjdk ! java ! net>
Date:       2021-03-31 19:59:25
Message-ID: sMgpTYGk8M8S5UMbOHgzVAGf4hnzK4j_IfCjI5epSS0=.a5e73c04-233c-42f1-a00a-e6a9cf8c5761 () github ! com
[Download RAW message or body]

On Thu, 18 Mar 2021 12:29:01 GMT, Alexander Scherbatiy <alexsch@openjdk.org> wrote:

> > 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
> 
> Alexander Scherbatiy has updated the pull request incrementally with two additional \
> commits since the last revision: 
> - Use DASSERT to check SetGraphicsMode and WorldTransform results
> - Change setGraphicsMode() type to void

Marked as reviewed by serb (Reviewer).

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

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