1 /* 2 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * @test RotatedFontMetricsTest 26 * @bug 8139178 27 * @summary This test verifies that rotation does not affect font metrics. 28 * @run main RotatedFontMetricsTest 29 */ 30 31 import java.awt.Font; 32 import java.awt.FontMetrics; 33 import java.awt.Graphics2D; 34 import java.awt.image.BufferedImage; 35 36 public class RotatedFontMetricsTest { 37 static final int FONT_SIZE = Integer.getInteger("font.size", 20); 38 39 public static void main(String ... args) { 40 Font font = new Font(Font.DIALOG, Font.PLAIN, FONT_SIZE); 41 Graphics2D g2d = createGraphics(); 42 43 FontMetrics ref = null; 44 RuntimeException failure = null; 45 for (int a = 0; a < 360; a += 15) { 46 Graphics2D g = (Graphics2D)g2d.create(); 47 g.rotate(Math.toRadians(a)); 48 FontMetrics m = g.getFontMetrics(font); 49 g.dispose(); 50 51 boolean status = true; 52 if (ref == null) { 53 ref = m; 54 } else { 55 status = ref.getAscent() == m.getAscent() && 56 ref.getDescent() == m.getDescent() && 57 ref.getLeading() == m.getLeading() && 58 ref.getMaxAdvance() == m.getMaxAdvance(); 59 } 60 61 System.out.printf("Metrics a%d, d%d, l%d, m%d (%d) %s\n", 62 m.getAscent(), m.getDescent(), m.getLeading(), m.getMaxAdvance(), 63 (int)a, status ? "OK" : "FAIL"); 64 65 if (!status && failure == null) { 66 failure = new RuntimeException("Font metrics differ for angle " + a); 67 } 68 } 69 if (failure != null) { 70 throw failure; 71 } 72 System.out.println("done"); 73 } 74 75 private static Graphics2D createGraphics() { 76 BufferedImage dst = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB); 77 return dst.createGraphics(); 78 } 79 }