Inhaltsverzeichnis

Monitore mit hoher Pixeldichte korrekt berücksichtigen (HiDPI)

Problematik

Jameica und die meisten Plugins verwenden bisher in der Regel Icons mit einer Größe von 16×16 Pixeln. Moderne Monitore haben teilweise jedoch recht hohe Pixeldichten. Insbesondere im Ultrabook-Bereich finden sich Geräte mit 13 Zoll Bildschirmdiagonale und dennoch Auflösungen von 2560×1440 und mehr. Man spricht hier von „HiDPI“-Monitoren. Die hohe Pixelzahl bei verhältnismäßig geringer Fläche bewirkt, dass Icons in der Größe 16×16 so winzig dargestellt werden, dass man sie kaum noch erkennen kann.

Das Größen-Problem betrifft nicht nur die Icons sondern das ganze Fenster eines Programms sowie die Größe der Schrift. Benutzer von HiDPI-Monitoren stellen daher oft das Zoom-Level des gesamten Desktops auf einen Wert über 100%. Das bewirkt, dass alle Elemente des Desktops um den angegebenen Faktor skaliert angezeigt werden.

In Windows kann man das Zoom-Level beispielsweise einstellen, indem man mit der rechten Maustaste auf den Desktop klickt, dort im Kontextmenu „Anzeigeeinstellungen“ wählt und dann im Absatz „Skalierung und Anordnung“ den Wert des Parameters „Größe von Text, Apps und anderen Elementen ändern“ auf einen Wert über 100% setzt.

Moderne Desktops bringen hierzu Icons in verschieden hohen Auflösungen mit - zumindest für die von ihnen selbst genutzten. Für Anwendungen, die noch keinen HiDPI-Support enthalten, werden die existierenden Icons vom Desktop automatisch um den passenden Faktor skaliert. Da die Qualität der Icons hierbei jedoch nicht besser wird, bewirkt dies lediglich, dass die Icons zwar in der korrekten Größe angezeigt werden - dafür aber ziemlich verschwommen.

Lösung

Seit Version 2.8 enthält Jameica HiDPI-Support. Dieser ist wie folgt umgesetzt.

Ermittlung des Zoom-Level

SWT enthält eine Funktion, um das aktuelle Zoom-Level des Desktops zu ermitteln. Für den Fall, dass dies nicht zuverlässig funktioniert (oder zum Testen), kann das Zoom-Level manuell konfiguriert werden. Dies geschieht über das Java-System-Property:

swt.autoScale=<wert>

Beispiel in jameica.sh:

exec java -Djava.net.preferIPv4Stack=true -Dswt.autoScale=200 -jar jameica....

Unter https://www.eclipse.org/eclipse/news/4.6/platform.php#swt-autoscale-tweaks finden sich weitere Informationen und mögliche Werte für diesen Parameter.

Passende Icons für vordefinierte Zoom-Stufen

Für alle nur erdenklichen Zoom-Stufen Icons in der jeweils passenden Größe zu erstellen, wäre ein riesiger Aufwand. Daher existieren in Jameica 4 vordefinierte Zoom-Stufen, welche die meisten Fälle abdecken sollten.

Icon-Größe Kommt zur Anwendung ab Zoom-Level
300 % 250 %
200 % 175 %
150 % 125 %
100 % -

Das heisst, bei einem vom User eingestellten Zoom-Level von beispielsweise „130%“ wählt Jameica automatisch die Icons in der Zoom-Stufe „150%“.

Hierzu musst du lediglich im Ordner „src/img“ deines Plugins Unterordner mit den Namen „300“, „200“ und „150“ anlegen und dort alle Icons mit den gleichen Dateinamen nochmal - jedoch in der entsprechend höheren Auflösung - ablegen. Beispielhaft hier der Ordner von Jameica selbst: https://github.com/willuhn/jameica/tree/master/src/img

Die Icon-Größen sind dabei dann wie folgt zu wählen:

Zoom-Stufe Ordnername Icon-Größe
100 % „src/img“ (wie gehabt) 16×16 Pixel
150 % „src/img/150“ 24×24 Pixel
200 % „src/img/200“ 32×32 Pixel
300 % „src/img/300“ 48×48 Pixel

Die Pixel-Angaben beziehen sich auf ein Icon, welches bei 100% mit 16×16 Pixeln dargestellt werden soll. Wenn du Grafiken verwendest, die auch bereits bei 100% größer sind, musst du die Skalierung natürlich entsprechend anpassen. Beispiel: Eine Grafik, die du bisher in der Größe 140×80 Pixeln verwendet hast, muss sich im Ordner „src/img/150“ in der Größe 210×120 Pixeln befinden (1,5 x so groß). Achte darauf, die Bilder und Icons nicht einfach nur im Bildbearbeitungsprogramm zu vergrößern sondern stattdessen in einer entsprechend besseren Qualität bei höherer Auflösung zu verwenden.

Hinweis zu Wayland

Wenn du Linux verwendest und hierbei nicht Xorg sondern Wayland nutzt, kann es u.U. vorkommen, dass das Skalieren der Schriften nicht funktioniert und die Anwendung auf deinem HiDPI-Monitor mit viel zu kleinem Text dargestellt wird.

Versuche in dem Fall die folgenden beiden Möglichkeiten in jameica.sh:

Entweder („-Dswt.autoScale=false“):

... exec java ... -Dswt.autoScale=false -jar jameica...

oder alternativ („GDK_DPI_SCALE=1.5“):

GDK_DPI_SCALE=1.5 ... exec java ... 

Hinweis zur Schriftgröße befinden sich in der FAQ

support:faq die_schrift_ist_zu_klein_zu_gross