Class UIScale

java.lang.Object
org.omegat.util.gui.UIScale

public final class UIScale extends Object
This class handles scaling in Swing UIs. It computes a user scaling factor based on font size and provides methods to scale integer, float, Dimension and Insets. This class is look and feel independent.

Two scaling modes are supported for HiDPI displays:

1) system scaling mode

This mode is supported since Java 9 on all platforms and in some Java 8 VMs (e.g. Apple and JetBrains). The JRE determines the scale factor per-display and adds a scaling transformation to the graphics object. E.g. invokes java.awt.Graphics2D.scale( 1.5, 1.5 ) for 150%. So the JRE does the scaling itself. E.g. when you draw a 10px line, a 15px line is drawn on screen. The scale factor may be different for each connected display. The scale factor may change for a window when moving the window from one display to another one.

2) user scaling mode

This mode is mainly for Java 8 compatibility, but is also used on Linux or if the default font is changed. The user scale factor is computed based on the used font. The JRE does not scale anything. So we have to invoke scale(float) where necessary. There is only one user scale factor for all displays. The user scale factor may change if the active LaF, "defaultFont" or "Label.font" has changed. If system scaling mode is available, the user scale factor is usually 1, but may be larger on Linux or if the default font is changed.

Note: This class is derived from the FlatLaf library licensed by Apache-2.0.

  • Method Details

    • addPropertyChangeListener

      public static void addPropertyChangeListener(PropertyChangeListener listener)
    • removePropertyChangeListener

      public static void removePropertyChangeListener(PropertyChangeListener listener)
    • getSystemScaleFactor

      public static double getSystemScaleFactor(Graphics2D g)
      Returns the system scale factor for the given graphics context.
    • getSystemScaleFactor

      public static double getSystemScaleFactor(GraphicsConfiguration gc)
      Returns the system scale factor for the given graphics configuration.
    • getScaleFactor

      public static float getScaleFactor()
      Get scale factor.
      Returns:
      float number.
    • scale

      public static float scale(float value)
      Multiplies the given value by the user scale factor.
    • scale

      public static int scale(int value)
      Multiplies the given value by the user scale factor and rounds the result.
    • scaleGraphics

      public static void scaleGraphics(Graphics2D g)
      If a user scale factor is not 1, scale the given graphics context by invoking Graphics2D.scale(double, double) with a user scale factor.
    • scale

      public static Dimension scale(Dimension dimension)
      Scales the given dimension with the user scale factor.

      If a user scale factor is 1, then the given dimension is simply returned. Otherwise, a new instance of Dimension or DimensionUIResource is returned, depending on whether the passed dimension implements UIResource.

    • scale

      public static Insets scale(Insets insets)
      Scales the given insets with the user scale factor.

      If a user scale factor is 1, then the given insets are simply returned. Otherwise, a new instance of Insets or InsetsUIResource is returned, depending on whether the passed dimension implements UIResource.

    • isSystemScaling

      public static boolean isSystemScaling()
      Returns true if the JRE scales, which is the case if: - environment variable GDK_SCALE is set and running on Java 9 or later - running on JetBrains Runtime 11 or later, and scaling is enabled in system Settings