[inline-completion] IJPL-174995: support rendering of non-English symbols by fall-backing to other fonts

GitOrigin-RevId: 215bcd48ab8623c0c7860856e9da2863c1eeed6a
This commit is contained in:
Kirill.Karnaukhov
2025-01-16 17:34:23 +00:00
committed by intellij-monorepo-bot
parent 400e3c0974
commit 6170e1d7f6
@@ -11,6 +11,7 @@ import com.intellij.openapi.editor.markup.EffectType
import com.intellij.openapi.editor.markup.TextAttributes
import com.intellij.ui.paint.EffectPainter2D
import com.intellij.ui.paint.RectanglePainter2D
import com.intellij.util.ui.UIUtil
import org.jetbrains.annotations.ApiStatus
import java.awt.*
import java.awt.font.TextLayout
@@ -73,7 +74,7 @@ open class InlineCompletionLineRenderer(
if (block.text.isEmpty()) {
continue
}
g.font = editor.colorsScheme.getFont(EditorFontType.forJavaStyle(block.attributes.fontType))
g.font = getFont(block.attributes, block.text)
val textLayout = TextLayout(block.text, g.font, g.fontRenderContext)
val textWidth = textLayout.advance.toDouble()
val textHeight = targetRegion.height.toDouble()
@@ -127,4 +128,9 @@ open class InlineCompletionLineRenderer(
painter.paint(g, x, y, width, g.fontMetrics.descent.toDouble(), g.font)
}
}
private fun getFont(attributes: TextAttributes, text: String): Font {
val original = editor.colorsScheme.getFont(EditorFontType.forJavaStyle(attributes.fontType))
return UIUtil.getFontWithFallbackIfNeeded(original, text)
}
}