IDEA-264147 Chosen font variation is ignored in some dialogs

GitOrigin-RevId: 223e4b0eeb7816ced199d03b7819e1dbc1a48896
This commit is contained in:
Dmitry Batrak
2021-03-22 16:13:51 +00:00
committed by intellij-monorepo-bot
parent 23019e06e0
commit 38155b147c
9 changed files with 76 additions and 11 deletions
@@ -5,6 +5,7 @@ import com.intellij.icons.AllIcons;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.editor.colors.EditorFontType;
import com.intellij.psi.PsiClass;
import com.intellij.ui.SimpleColoredComponent;
import com.intellij.ui.SimpleTextAttributes;
@@ -18,7 +19,7 @@ public class FQNameCellRenderer extends SimpleColoredComponent implements ListCe
public FQNameCellRenderer() {
EditorColorsScheme scheme = EditorColorsManager.getInstance().getGlobalScheme();
FONT = new Font(scheme.getEditorFontName(), Font.PLAIN, scheme.getEditorFontSize());
FONT = scheme.getFont(EditorFontType.PLAIN);
setOpaque(true);
}
@@ -1,6 +1,7 @@
// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.openapi.editor.colors;
import org.intellij.lang.annotations.JdkConstants;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -40,4 +41,17 @@ public enum EditorFontType {
public @NotNull Font getGlobalFont() {
return EditorColorsManager.getInstance().getGlobalScheme().getFont(this);
}
public static @NotNull EditorFontType forJavaStyle(@JdkConstants.FontStyle int style) {
switch (style) {
case Font.BOLD:
return BOLD;
case Font.ITALIC:
return ITALIC;
case Font.BOLD | Font.ITALIC :
return BOLD_ITALIC;
default:
return PLAIN;
}
}
}
@@ -9,6 +9,7 @@ import com.intellij.openapi.Disposable
import com.intellij.openapi.editor.Document
import com.intellij.openapi.editor.colors.EditorColorsManager
import com.intellij.openapi.editor.colors.EditorColorsScheme
import com.intellij.openapi.editor.colors.EditorFontType
import com.intellij.openapi.editor.ex.EditorEx
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.ComponentValidator
@@ -47,7 +48,7 @@ internal class ChangeSignaturePopup(
@Nls
private val nextButtonText = RefactoringBundle.message("suggested.refactoring.next.button.text")
private val editorFont = Font(colorsScheme.editorFontName, Font.PLAIN, colorsScheme.editorFontSize)
private val editorFont = colorsScheme.getFont(EditorFontType.PLAIN)
private val signatureChangePage = SignatureChangesPage(signatureChangeModel, editorFont, screenSize, nameOfStuffToUpdate)
@@ -20,6 +20,7 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.*;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.editor.colors.EditorFontType;
import com.intellij.openapi.editor.colors.TextAttributesKey;
import com.intellij.openapi.editor.event.DocumentListener;
import com.intellij.openapi.editor.event.SelectionEvent;
@@ -859,14 +860,17 @@ public final class EditorUtil {
*/
public static Font getEditorFont() {
EditorColorsScheme scheme = EditorColorsManager.getInstance().getGlobalScheme();
int size = UISettings.getInstance().getPresentationMode()
? UISettings.getInstance().getPresentationModeFontSize() - 4 : scheme.getEditorFontSize();
return UIUtil.getFontWithFallback(scheme.getEditorFontName(), Font.PLAIN, size);
Font editorFont = scheme.getFont(EditorFontType.PLAIN);
if (UISettings.getInstance().getPresentationMode()) {
editorFont = editorFont.deriveFont(UISettings.getInstance().getPresentationModeFontSize() - 4f);
}
return UIUtil.getFontWithFallback(editorFont);
}
public static Font getEditorFont(int size) {
EditorColorsScheme scheme = EditorColorsManager.getInstance().getGlobalScheme();
return UIUtil.getFontWithFallback(scheme.getEditorFontName(), Font.PLAIN, size);
Font font = scheme.getFont(EditorFontType.PLAIN).deriveFont((float)size);
return UIUtil.getFontWithFallback(font);
}
public static int getDefaultCaretWidth() {
@@ -7,6 +7,7 @@ import com.intellij.codeInsight.hint.HintManagerImpl;
import com.intellij.openapi.editor.LogicalPosition;
import com.intellij.openapi.editor.colors.EditorColors;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.editor.colors.EditorFontType;
import com.intellij.openapi.editor.ex.EditorGutterComponentEx;
import com.intellij.openapi.editor.ex.RangeHighlighterEx;
import com.intellij.openapi.editor.ex.util.EditorUIUtil;
@@ -240,7 +241,7 @@ class EditorFragmentRenderer {
int h = lineHeight - 2;
EditorColorsScheme colorsScheme = myEditor.getColorsScheme();
Font font = UIUtil.getFontWithFallback(colorsScheme.getEditorFontName(), Font.PLAIN, colorsScheme.getEditorFontSize());
Font font = UIUtil.getFontWithFallback(colorsScheme.getFont(EditorFontType.PLAIN));
g2d.setFont(font.deriveFont(font.getSize() * .8F));
for (RangeHighlighterEx ex : myHighlighters) {
@@ -2004,7 +2004,19 @@ public final class UIUtil {
}
public static @NotNull FontUIResource getFontWithFallback(@NotNull Font font) {
return getFontWithFallback(font.getFamily(), font.getStyle(), font.getSize());
// On macOS font fallback is implemented in JDK by default
// (except for explicitly registered fonts, e.g. the fonts we bundle with IDE, for them we don't have a solution now)
if (!SystemInfo.isMac) {
try {
font = FontUtilitiesAccessor.createFontWithFallback(font);
}
catch (Throwable e) {
getLogger().warn(e);
// this might not give the same result, but if accessing FontUtilities via reflection failed, we have no choice
return getFontWithFallback(font.getFamily(), font.getStyle(), font.getSize());
}
}
return font instanceof FontUIResource ? (FontUIResource)font : new FontUIResource(font);
}
public static @NotNull FontUIResource getFontWithFallback(@Nullable String familyName, @JdkConstants.FontStyle int style, int size) {
@@ -3465,4 +3477,33 @@ public final class UIUtil {
}
return Math.min(result, 255);
}
private static class FontUtilitiesAccessor {
private static final Method fontSupportsDefaultEncodingMethod;
private static final Method getCompositeFontUIResourceMethod;
static {
Method m1 = null;
Method m2 = null;
try {
Class<?> c = Class.forName("sun.font.FontUtilities");
m1 = c.getDeclaredMethod("fontSupportsDefaultEncoding", Font.class);
m2 = c.getDeclaredMethod("getCompositeFontUIResource", Font.class);
}
catch (Throwable e) {
getLogger().warn(e);
}
fontSupportsDefaultEncodingMethod = m1;
getCompositeFontUIResourceMethod = m2;
}
private static Font createFontWithFallback(Font font) throws Exception {
if (fontSupportsDefaultEncodingMethod == null ||
getCompositeFontUIResourceMethod == null ||
Boolean.TRUE.equals(fontSupportsDefaultEncodingMethod.invoke(null, font))) {
return font;
}
return (Font)getCompositeFontUIResourceMethod.invoke(null, font);
}
}
}
@@ -8,6 +8,7 @@ import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorCustomElementRenderer;
import com.intellij.openapi.editor.Inlay;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.editor.colors.EditorFontType;
import com.intellij.openapi.editor.colors.TextAttributesKey;
import com.intellij.openapi.editor.event.EditorMouseEvent;
import com.intellij.openapi.editor.ex.EditorEx;
@@ -99,7 +100,7 @@ public final class InlineDebugRenderer implements EditorCustomElementRenderer {
EditorColorsScheme colorsScheme = editor.getColorsScheme();
TextAttributes attributes = editor.getColorsScheme().getAttributes(DebuggerColors.INLINED_VALUES_EXECUTION_LINE);
int fontStyle = attributes == null ? Font.PLAIN : attributes.getFontType();
return UIUtil.getFontWithFallback(colorsScheme.getEditorFontName(), fontStyle, colorsScheme.getEditorFontSize());
return UIUtil.getFontWithFallback(colorsScheme.getFont(EditorFontType.forJavaStyle(fontStyle)));
}
@@ -5,6 +5,7 @@ import com.intellij.ide.DataManager;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.editor.colors.EditorFontType;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.psi.PsiElement;
import com.intellij.ui.SimpleColoredComponent;
@@ -46,7 +47,7 @@ public class PyImportChooser implements ImportChooser {
CellRenderer() {
EditorColorsScheme scheme = EditorColorsManager.getInstance().getGlobalScheme();
FONT = new Font(scheme.getEditorFontName(), Font.PLAIN, scheme.getEditorFontSize());
FONT = scheme.getFont(EditorFontType.PLAIN);
setOpaque(true);
}
@@ -18,6 +18,7 @@ package com.intellij.codeInsight.daemon.impl.analysis;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.editor.colors.EditorFontType;
import com.intellij.openapi.util.NlsSafe;
import com.intellij.ui.ColoredListCellRenderer;
import com.intellij.ui.SimpleTextAttributes;
@@ -35,7 +36,7 @@ public class XmlNSRenderer extends ColoredListCellRenderer<String> {
public XmlNSRenderer() {
EditorColorsScheme scheme = EditorColorsManager.getInstance().getGlobalScheme();
setFont(new Font(scheme.getEditorFontName(), Font.PLAIN, scheme.getEditorFontSize()));
setFont(scheme.getFont(EditorFontType.PLAIN));
}
@Override