From 306f12db9e942706887b21c0ea6820c088ccdb6b Mon Sep 17 00:00:00 2001 From: Omair Majid Date: Tue, 14 Sep 2010 10:45:38 -0400 Subject: [PATCH] 6979979: Rounding error in font sizes selected by the GTK Look and Feel Use floating point font sizes Reviewed-by: prr --- .../com/sun/java/swing/plaf/gtk/PangoFonts.java | 16 ++++++++-------- .../share/classes/sun/font/FontUtilities.java | 3 +-- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java index 0c76686ebc98c..1a60d277757c5 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java @@ -150,11 +150,6 @@ static Font lookupFont(String pangoName) { * case for it to be a problem the values would have to be different. * It also seems unlikely to arise except when a user explicitly * deletes the X resource database entry. - * 3) Because of rounding errors sizes may differ very slightly - * between JDK and GTK. To fix that would at the very least require - * Swing to specify floating pt font sizes. - * Eg "10 pts" for GTK at 96 dpi to get the same size at Java 2D's - * 72 dpi you'd need to specify exactly 13.33. * There also some other issues to be aware of for the future: * GTK specifies the Xft.dpi value as server-wide which when used * on systems with 2 distinct X screens with different physical DPI @@ -197,11 +192,16 @@ static Font lookupFont(String pangoName) { String fcFamilyLC = family.toLowerCase(); if (FontUtilities.mapFcName(fcFamilyLC) != null) { /* family is a Fc/Pango logical font which we need to expand. */ - return FontUtilities.getFontConfigFUIR(fcFamilyLC, style, size); + Font font = FontUtilities.getFontConfigFUIR(fcFamilyLC, style, size); + font = font.deriveFont(style, (float)dsize); + return new FontUIResource(font); } else { /* It's a physical font which we will create with a fallback */ - Font font = new FontUIResource(family, style, size); - return FontUtilities.getCompositeFontUIResource(font); + Font font = new Font(family, style, size); + /* a roundabout way to set the font size in floating points */ + font = font.deriveFont(style, (float)dsize); + FontUIResource fuir = new FontUIResource(font); + return FontUtilities.getCompositeFontUIResource(fuir); } } diff --git a/jdk/src/share/classes/sun/font/FontUtilities.java b/jdk/src/share/classes/sun/font/FontUtilities.java index 57286ec63a826..4438cc6aeeea8 100644 --- a/jdk/src/share/classes/sun/font/FontUtilities.java +++ b/jdk/src/share/classes/sun/font/FontUtilities.java @@ -373,8 +373,7 @@ public static boolean fontSupportsDefaultEncoding(Font font) { */ public static FontUIResource getCompositeFontUIResource(Font font) { - FontUIResource fuir = - new FontUIResource(font.getName(),font.getStyle(),font.getSize()); + FontUIResource fuir = new FontUIResource(font); Font2D font2D = FontUtilities.getFont2D(font); if (!(font2D instanceof PhysicalFont)) {