more accurate initial FontRenderContext, notably on macOS, Windows, or Linux with "env GDK_SCALE=2";
authorwenzelm
Fri, 15 Nov 2024 16:01:41 +0100
changeset 81450 0c29878ae48f
parent 81449 d92d754b5dd9
child 81451 cc9fc6f375b2
more accurate initial FontRenderContext, notably on macOS, Windows, or Linux with "env GDK_SCALE=2";
src/Tools/jEdit/src/jedit_lib.scala
src/Tools/jEdit/src/pretty_text_area.scala
--- a/src/Tools/jEdit/src/jedit_lib.scala	Fri Nov 15 15:18:48 2024 +0100
+++ b/src/Tools/jEdit/src/jedit_lib.scala	Fri Nov 15 16:01:41 2024 +0100
@@ -12,6 +12,7 @@
 import java.io.{File => JFile}
 import java.awt.{Component, Container, GraphicsEnvironment, Point, Rectangle, Dimension, Toolkit}
 import java.awt.event.{InputEvent, KeyEvent, KeyListener}
+import java.awt.font.FontRenderContext
 import javax.swing.{Icon, ImageIcon, JScrollBar, JWindow, SwingUtilities}
 
 import scala.util.parsing.input.CharSequenceReader
@@ -22,7 +23,7 @@
 import org.gjt.sp.jedit.io.{FileVFS, VFSManager}
 import org.gjt.sp.jedit.gui.{KeyEventWorkaround, KeyEventTranslator}
 import org.gjt.sp.jedit.buffer.{JEditBuffer, LineManager}
-import org.gjt.sp.jedit.textarea.{JEditTextArea, TextArea, TextAreaPainter, Selection}
+import org.gjt.sp.jedit.textarea.{JEditTextArea, TextArea, TextAreaPainter, Selection, AntiAlias}
 
 
 object JEdit_Lib {
@@ -296,6 +297,15 @@
 
   /* graphics range */
 
+  def init_font_context(view: View, painter: TextAreaPainter): Unit = {
+    painter.setAntiAlias(new AntiAlias(jEdit.getProperty("view.antiAlias")))
+    painter.setFractionalFontMetricsEnabled(jEdit.getBooleanProperty("view.fracFontMetrics"))
+    val old = painter.getFontRenderContext
+    Untyped.set[FontRenderContext](painter, "fontRenderContext",
+      new FontRenderContext(view.getGraphicsConfiguration.getDefaultTransform,
+        old.getAntiAliasingHint, old.getFractionalMetricsHint))
+  }
+
   def font_metric(painter: TextAreaPainter): Font_Metric =
     new Font_Metric(
       font = painter.getFont,
--- a/src/Tools/jEdit/src/pretty_text_area.scala	Fri Nov 15 15:18:48 2024 +0100
+++ b/src/Tools/jEdit/src/pretty_text_area.scala	Fri Nov 15 16:01:41 2024 +0100
@@ -21,7 +21,7 @@
 
 import org.gjt.sp.jedit.{jEdit, View, Registers, JEditBeanShellAction}
 import org.gjt.sp.jedit.input.{DefaultInputHandlerProvider, TextAreaInputHandler}
-import org.gjt.sp.jedit.textarea.{AntiAlias, JEditEmbeddedTextArea}
+import org.gjt.sp.jedit.textarea.JEditEmbeddedTextArea
 import org.gjt.sp.jedit.syntax.SyntaxStyle
 import org.gjt.sp.jedit.gui.KeyEventTranslator
 import org.gjt.sp.util.{SyntaxUtilities, Log}
@@ -63,10 +63,8 @@
   def refresh(): Unit = {
     GUI_Thread.require {}
 
-    val font = current_font_info.font
-    getPainter.setFont(font)
-    getPainter.setAntiAlias(new AntiAlias(jEdit.getProperty("view.antiAlias")))
-    getPainter.setFractionalFontMetricsEnabled(jEdit.getBooleanProperty("view.fracFontMetrics"))
+    getPainter.setFont(current_font_info.font)
+    JEdit_Lib.init_font_context(view, getPainter)
     getPainter.setStyles(
       SyntaxUtilities.loadStyles(current_font_info.family, current_font_info.size.round))
     getPainter.setLineExtraSpacing(jEdit.getIntegerProperty("options.textarea.lineSpacing", 0))