From d97756ee9fb4bfc9487aa3c69cf93bd8e4bc29f0 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Thu, 2 Jul 2015 13:08:18 +0300 Subject: [PATCH] IDEA-90072 Faux italics used for some fonts with true italics available --- .../impl/ComplementaryFontsRegistry.java | 45 +++++++++++-------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/ComplementaryFontsRegistry.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/ComplementaryFontsRegistry.java index 48e8de5f769b..e1eab3ac56a9 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/ComplementaryFontsRegistry.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/ComplementaryFontsRegistry.java @@ -43,7 +43,13 @@ public class ComplementaryFontsRegistry { private static FontInfo ourSharedDefaultFont; private static final TIntHashSet ourUndisplayableChars = new TIntHashSet(); private static boolean ourOldUseAntialiasing; - + + // This matches style detection in JDK (class sun.font.Font2D) + private static final String[] BOLD_NAMES = {"bold", "demibold", "demi-bold", "demi bold", "negreta", "demi" }; + private static final String[] ITALIC_NAMES = {"italic", "cursiva", "oblique", "inclined"}; + private static final String[] BOLD_ITALIC_NAMES = {"bolditalic", "bold-italic", "bold italic", "boldoblique", "bold-oblique", + "bold oblique", "demibold italic", "negreta cursiva","demi oblique"}; + static { final UISettings settings = UISettings.getInstance(); ourOldUseAntialiasing = settings.ANTIALIASING_IN_EDITOR; @@ -121,35 +127,38 @@ public class ComplementaryFontsRegistry { Font[] allFonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts(); for (Font font : allFonts) { String name = font.getName(); - int style; - if (name.endsWith("-Italic")) { - style = Font.ITALIC; - } - else if (name.endsWith("-Bold")) { - style = Font.BOLD; - } - else if (name.endsWith("-BoldItalic")) { - style = Font.BOLD | Font.ITALIC; - } - else { - style = Font.PLAIN; - } + int style = getFontStyle(name); if (style != Font.PLAIN) { - String baseName = name.substring(0, name.lastIndexOf('-')); - Pair[] entry = ourStyledFontMap.get(baseName); + String familyName = font.getFamily(); + Pair[] entry = ourStyledFontMap.get(familyName); if (entry == null) { //noinspection unchecked entry = new Pair[4]; for (int i = 1; i < 4; i++) { - entry[i] = Pair.create(baseName, i); + entry[i] = Pair.create(familyName, i); } - ourStyledFontMap.put(baseName, entry); + ourStyledFontMap.put(familyName, entry); } entry[style] = Pair.create(name, Font.PLAIN); } } } + @JdkConstants.FontStyle + private static int getFontStyle(String fontName) { + fontName = fontName.toLowerCase(Locale.getDefault()); + for (String name : BOLD_ITALIC_NAMES) { + if (fontName.contains(name)) return Font.BOLD | Font.ITALIC; + } + for (String name : ITALIC_NAMES) { + if (fontName.contains(name)) return Font.ITALIC; + } + for (String name : BOLD_NAMES) { + if (fontName.contains(name)) return Font.BOLD; + } + return Font.PLAIN; + } + private static Pair fontFamily(String familyName, int style) { if (SystemInfo.isMac && style > 0 && style < 4) { Pair[] replacement = ourStyledFontMap.get(familyName);