From 6ba6eb992bc00cbd61afdbe79fb69868e3c04f98 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Thu, 1 Dec 2016 12:53:04 +0300 Subject: [PATCH] EA-76903 - IAE: FontPreferences.getSize --- .../codeInsight/lookup/impl/LookupCellRenderer.java | 5 ++++- .../com/intellij/codeInsight/lookup/impl/LookupImpl.java | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupCellRenderer.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupCellRenderer.java index ba85931e2e8d..c2c31d6debb2 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupCellRenderer.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupCellRenderer.java @@ -26,8 +26,10 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.colors.EditorColorsScheme; import com.intellij.openapi.editor.colors.EditorFontType; +import com.intellij.openapi.editor.colors.FontPreferences; import com.intellij.openapi.editor.ex.util.EditorUIUtil; import com.intellij.openapi.editor.ex.util.EditorUtil; +import com.intellij.openapi.editor.impl.ComplementaryFontsRegistry; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.registry.Registry; @@ -457,8 +459,9 @@ public class LookupCellRenderer implements ListCellRenderer { // assume a single font can display all lookup item chars Set fonts = ContainerUtil.newHashSet(); + FontPreferences fontPreferences = myLookup.getFontPreferences(); for (int i = 0; i < sampleString.length(); i++) { - fonts.add(EditorUtil.fontForChar(sampleString.charAt(i), Font.PLAIN, myLookup.getTopLevelEditor()).getFont()); + fonts.add(ComplementaryFontsRegistry.getFontAbleToDisplay(sampleString.charAt(i), Font.PLAIN, fontPreferences).getFont()); } eachFont: for (Font font : fonts) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java index fc39d201bee8..81cd8bdd3bca 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java @@ -35,6 +35,7 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.*; +import com.intellij.openapi.editor.colors.FontPreferences; import com.intellij.openapi.editor.event.*; import com.intellij.openapi.editor.event.DocumentAdapter; import com.intellij.openapi.project.Project; @@ -106,6 +107,8 @@ public class LookupImpl extends LightweightHint implements LookupEx, Disposable private final List myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); private PrefixChangeListener myPrefixChangeListener = new PrefixChangeListener.Adapter() {}; private final LookupPreview myPreview = new LookupPreview(this); + // keeping our own copy of editor's font preferences, which can be used in non-EDT threads (to avoid race conditions) + private final FontPreferences myFontPreferences = new FontPreferences(); private long myStampShown = 0; private boolean myShown = false; @@ -138,6 +141,7 @@ public class LookupImpl extends LightweightHint implements LookupEx, Disposable myEditor = InjectedLanguageUtil.getTopLevelEditor(editor); myArranger = arranger; myPresentableArranger = arranger; + myEditor.getColorsScheme().getFontPreferences().copyTo(myFontPreferences); DaemonCodeAnalyzer.getInstance(myProject).disableUpdateByTimer(this); @@ -1164,6 +1168,10 @@ public class LookupImpl extends LightweightHint implements LookupEx, Disposable myPrefixChangeListener = listener; } + FontPreferences getFontPreferences() { + return myFontPreferences; + } + public enum FocusDegree { FOCUSED, SEMI_FOCUSED, UNFOCUSED } }