From 1a5fb067cdc77282881eda324876801913d68425 Mon Sep 17 00:00:00 2001 From: alitvinov Date: Mon, 4 Dec 2017 17:38:55 +0000 Subject: [PATCH] 8181659: Create an alternative fix for JDK-8167102, whose fix was backed out Reviewed-by: prr, serb --- .../classes/sun/print/RasterPrinterJob.java | 41 +++++++++++++++++-- .../PageFormat/WrongPaperPrintingTest.java | 3 +- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/share/classes/sun/print/RasterPrinterJob.java b/src/share/classes/sun/print/RasterPrinterJob.java index b38cb68e6..394a56cbe 100644 --- a/src/share/classes/sun/print/RasterPrinterJob.java +++ b/src/share/classes/sun/print/RasterPrinterJob.java @@ -843,12 +843,45 @@ public abstract class RasterPrinterJob extends PrinterJob { } } - protected PageFormat getPageFormatFromAttributes() { - if (attributes == null || attributes.isEmpty()) { + protected PageFormat getPageFormatFromAttributes() { + if (attributes == null || attributes.isEmpty()) { return null; } - return attributeToPageFormat(getPrintService(), this.attributes); - } + + PageFormat newPf = attributeToPageFormat( + getPrintService(), attributes); + PageFormat oldPf = null; + Pageable pageable = getPageable(); + if ((pageable != null) && + (pageable instanceof OpenBook) && + ((oldPf = pageable.getPageFormat(0)) != null)) { + // If orientation, media, imageable area attributes are not in + // "attributes" set, then use respective values of the existing + // page format "oldPf". + if (attributes.get(OrientationRequested.class) == null) { + newPf.setOrientation(oldPf.getOrientation()); + } + + Paper newPaper = newPf.getPaper(); + Paper oldPaper = oldPf.getPaper(); + boolean oldPaperValWasSet = false; + if (attributes.get(MediaSizeName.class) == null) { + newPaper.setSize(oldPaper.getWidth(), oldPaper.getHeight()); + oldPaperValWasSet = true; + } + if (attributes.get(MediaPrintableArea.class) == null) { + newPaper.setImageableArea( + oldPaper.getImageableX(), oldPaper.getImageableY(), + oldPaper.getImageableWidth(), + oldPaper.getImageableHeight()); + oldPaperValWasSet = true; + } + if (oldPaperValWasSet) { + newPf.setPaper(newPaper); + } + } + return newPf; + } /** diff --git a/test/java/awt/print/PageFormat/WrongPaperPrintingTest.java b/test/java/awt/print/PageFormat/WrongPaperPrintingTest.java index 2299015b2..77b460314 100644 --- a/test/java/awt/print/PageFormat/WrongPaperPrintingTest.java +++ b/test/java/awt/print/PageFormat/WrongPaperPrintingTest.java @@ -22,9 +22,8 @@ */ /* @test - @bug 8167102 + @bug 8167102 8181659 @summary PrintRequestAttributeSet breaks page size set using PageFormat - @ignore Exclude the test until 8167102 is resolved by a new reassessed fix @run main/manual WrongPaperPrintingTest */ -- GitLab