8181659: Create an alternative fix for JDK-8167102, whose fix was backed out
Reviewed-by: prr, serb
diff --git a/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java b/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java
index 018ac51..0decaca 100644
--- a/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java
+++ b/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java
@@ -886,12 +886,45 @@
}
}
- 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/jdk/java/awt/print/PageFormat/WrongPaperPrintingTest.java b/test/jdk/java/awt/print/PageFormat/WrongPaperPrintingTest.java
index 2299015..77b4603 100644
--- a/test/jdk/java/awt/print/PageFormat/WrongPaperPrintingTest.java
+++ b/test/jdk/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
*/