/
githubmirror
/
panama-vector
Обзор
Документация
Войти
/
githubmirror
/
panama-vector
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
test/jdk/java/awt/print/PrinterJob/ImagePrinting/AlphaPrintingOffsets.java
236 строк
9 KB
vtstydev
8307246: Printing: banded raster path doesn't account for device offset values
19 фев 2024, 16:15
19 фев 2024, 16:15
56c5084
Код
Авторство
О чём код?
/* * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.print.Book; import java.awt.print.PageFormat; import java.awt.print.Paper; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; import javax.print.attribute.standard.Sides; import javax.swing.JFrame; import static java.awt.print.PageFormat.LANDSCAPE; import static java.awt.print.PageFormat.PORTRAIT; import static java.awt.print.PageFormat.REVERSE_LANDSCAPE; /* * @test * @bug 8307246 * @key printer * @library ../../../regtesthelpers * @build PassFailJFrame * @summary Test for comparing offsets of images drawn with opaque * and translucent colors printed in all orientations * @run main/manual AlphaPrintingOffsets */ public class AlphaPrintingOffsets { private static final String INSTRUCTIONS = "Tested bug occurs only on-paper printing " + "so you mustn't use PDF printer\n\n" + "1. Java print dialog should appear.\n" + "2. Press the Print button on the Java Print dialog.\n" + "3. Please check the page margin rectangle are properly " + "drawn and visible on all sides on all pages.\n" + "If so, press PASS, else press FAIL.\n\n" + "Also you may run this test in paper-saving mode. Due " + "to tested bug affects pages printed with transparency " + "in LANDSCAPE and REVERSE_LANDSCAPE orientations there " + "is an option to print only 2 pages affected. " + "To do it pass PaperSavingMode parameter."; private static boolean isPaperSavingMode = false; public static void main(String[] args) throws Exception { if (PrinterJob.lookupPrintServices().length > 0) { String instructionsHeader = "This test prints 6 pages with page " + "margin rectangle and a text message. \n"; if (args.length > 0) { isPaperSavingMode = args[0].equals("PaperSavingMode"); } if (isPaperSavingMode) { instructionsHeader = "This test prints 2 pages with page " + "margin rectangle and a text message. \n"; } PassFailJFrame.builder() .instructions(instructionsHeader + INSTRUCTIONS) .rows(15) .testUI(() -> createTestUI()) .build() .awaitAndCheck(); } else { throw new RuntimeException("Test failed : Printer not configured or available."); } } public static JFrame createTestUI() { JFrame testUI = new JFrame("Print images"); testUI.setSize(1, 1); testUI.addWindowListener(new WindowAdapter() { @Override public void windowOpened(WindowEvent e) { super.windowOpened(e); print(); } @Override public void windowActivated(WindowEvent e) { super.windowActivated(e); testUI.setVisible(false); } }); return testUI; } private static void print() { PrinterJob printerJob = PrinterJob.getPrinterJob(); PageFormat pageFormatP = printerJob.defaultPage(); Paper paper = pageFormatP.getPaper(); paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight()); pageFormatP.setPaper(paper); PageFormat pageFormatL = (PageFormat) pageFormatP.clone(); PageFormat pageFormatRL = (PageFormat) pageFormatP.clone(); pageFormatL.setOrientation(LANDSCAPE); pageFormatRL.setOrientation(REVERSE_LANDSCAPE); Printable printableTransparent = new CustomPrintable(254); if (isPaperSavingMode) { Book bookPageSavingTest = new Book(); bookPageSavingTest.append(printableTransparent, pageFormatL); bookPageSavingTest.append(printableTransparent, pageFormatRL); printerJob.setPageable(bookPageSavingTest); } else { Printable printableOpaque = new CustomPrintable(255); Book bookDefaultTest = new Book(); bookDefaultTest.append(printableOpaque, pageFormatP); bookDefaultTest.append(printableTransparent, pageFormatP); bookDefaultTest.append(printableOpaque, pageFormatL); bookDefaultTest.append(printableTransparent, pageFormatL); bookDefaultTest.append(printableOpaque, pageFormatRL); bookDefaultTest.append(printableTransparent, pageFormatRL); printerJob.setPageable(bookDefaultTest); } PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); aset.add(Sides.ONE_SIDED); if (printerJob.printDialog()) { try { printerJob.print(aset); } catch (PrinterException e) { e.printStackTrace(); throw new RuntimeException("Exception whilst printing."); } } else { throw new RuntimeException("Test failed : " + "User selected 'Cancel' button on the print dialog"); } } static class CustomPrintable implements Printable { private static final int THICKNESS = 10; private static final int MARGIN = 15; private static final int SMALL_RECTANGLE_SIZE = 5; private final int alphaValue; public CustomPrintable(int alpha) { alphaValue = alpha; } private String getOrientStr(int orient) { switch (orient) { case PORTRAIT: return "PORTRAIT"; case LANDSCAPE: return "LANDSCAPE"; case REVERSE_LANDSCAPE: return "REVERSE_LANDSCAPE"; default: return "BAD Orientation"; } } @Override public int print(Graphics g, PageFormat pageFormat, int pageIndex) { if (pageIndex > 5) { return Printable.NO_SUCH_PAGE; } drawRectangle(g, pageFormat.getImageableX(), pageFormat.getImageableY(), pageFormat.getImageableWidth(), pageFormat.getImageableHeight()); drawSmallRectangle(g, pageFormat.getImageableX(), pageFormat.getImageableY(), pageFormat.getImageableWidth(), pageFormat.getImageableHeight()); drawMsg(g, 300, 300, pageFormat.getOrientation()); return Printable.PAGE_EXISTS; } private void drawRectangle(Graphics g, double x, double y, double width, double height) { Graphics2D g2d = (Graphics2D) g; g2d.setStroke(new BasicStroke(THICKNESS)); // Draw rectangle with thick border lines g2d.drawRect((int) x + MARGIN, (int) y + MARGIN, (int) width - MARGIN * 2, (int) height - MARGIN * 2); } private void drawSmallRectangle(Graphics g, double x, double y, double width, double height) { Graphics2D g2d = (Graphics2D) g; Color originalColor = g2d.getColor(); g2d.setColor(new Color(0, 0, 0, alphaValue)); // Calculate the position to center the smaller rectangle double centerX = x + (width - SMALL_RECTANGLE_SIZE) / 2; double centerY = y + (height - SMALL_RECTANGLE_SIZE) / 2; g2d.fillRect((int) centerX, (int) centerY, SMALL_RECTANGLE_SIZE, SMALL_RECTANGLE_SIZE); g2d.setColor(originalColor); } private void drawMsg(Graphics g, int x, int y, int orient) { Graphics2D g2d = (Graphics2D) g; String msg = "Orient= " + getOrientStr(orient); msg += " Color=" + (alphaValue != 255 ? " ALPHA" : " OPAQUE"); g2d.drawString(msg, x, y); } } }