3.12 High-DPI-Unterstützung (hochauflösende Displays)

RapaGUI bietet volle Unterstützung für High-DPI-Displays. Normalerweise erledigt RapaGUI alles automatisch für Sie, so dass Ihr Programm unabhängig von der DPI-Einstellung des Monitors gleich aussehen sollte. Dies wird erreicht, indem alle Positions- und Größenwerte in geräteunabhängige Pixel berechnet werden, wodurch RapaGUI-Programme gut auf verschiedene Monitor-DPI-Einstellungen skaliert werden können. Darüber hinaus skaliert RapaGUI automatisch alle Rastergrafiken, z.B. Schaltflächenbilder, die mit Button.Icon eingestellt wurden, um sie an die DPI-Einstellung des Monitors anzupassen.

Beachten Sie, dass die automatische Skalierung von Rastergrafiken durch RapaGUI dazu führen kann, dass Bilder auf Monitoren mit hohen DPI-Werten unscharf werden. Sie können dies ändern, indem Sie entweder mehrere Bilder für verschiedene DPI-Einstellungen bereitstellen, anstatt nur ein einziges Bild zu verwenden, oder indem Sie Vektorgrafiken verwenden, die ohne Qualitätsverluste auf jede Größe skaliert werden können.

Angenommen, Sie möchten Ihrer Schaltfläche ein 32x32px-Icon hinzufügen, indem Sie das Attribut Button.Icon verwenden. Wenn Sie Button.Icon auf einen Rasterpinsel setzen und der Monitor des Benutzers eine DPI-Skalierung von 200% aktiviert hat, skaliert RapaGUI das Bild auf 64x64px, was unscharf aussieht. Sie können also entweder Button.Icon auf den Identifikator eines Vektorpinsels setzen oder ein Hollywood-Icon erstellen, 32x32px und 64x64px (und möglicherweise mehr) Bilder hinzufügen und dann dieses Icon an Button.Icon übergeben.

Beachten Sie, dass Sie in diesem Fall auch das Attribut Button.IconType auf Icon setzen müssen, um RapaGUI mitzuteilen, dass Sie den Identifikator eines Icons anstelle eines Pinsels übergeben haben, was der Standardtyp für Button.Icon ist. In diesem Fall verwendet RapaGUI das 32x32px-Bild im Icon, falls auf dem Monitor keine DPI-Skalierung aktiviert ist oder das 64x64px-Bild, wenn der Monitor eine DPI-Skalierung von 200% aktiviert hat. Wenn die DPI-Skalierung zwischen 100% und 200% liegt, skaliert RapaGUI das Bild innerhalb des Icons, dessen Größe der gewünschten Zielgröße am nächsten kommt.

Standardmäßig erwarten alle Widgets, die Bilder unterstützen, dass Sie Hollywood-Pinsel übergeben. Wenn Sie stattdessen immer Hollywood-Icons übergeben möchten, können Sie auch das globale Attribut Application.UseIcons auf True setzen. Dadurch wird die Voreinstellung aller Tags, die Bilder von Hollywood-Pinseln akzeptieren, in Hollywood-Icons geändert.

Wie oben beschrieben, skaliert RapaGUI bei der Übergabe von Hollywood-Pinseln an RapaGUI, die Rasterdaten enthalten, diese Rasterpinsel automatisch, um sie an die DPI-Einstellungen des aktuellen Monitors anzupassen. Wenn Sie das nicht möchten, können Sie den Tag ScaleGUI auf False setzen, wenn Sie das RapaGUI-Plugin mit der Präprozessor-Anweisung @REQUIRE deklarieren. Siehe Initialisierung von RapaGUI für Details. Die bilineare Interpolation während der Skalierung kann ausgeschaltet werden, indem der Tag InterpolateGUI bei @REQUIRE auf False gesetzt wird. Alternativ kann die automatische Bildskalierung auch für jedes einzelne Widget konfiguriert werden. Bei Schaltflächenbildern können Sie beispielsweise die automatische Bildskalierung steuern, indem Sie den Tag Button.IconScale setzen.

Außerdem werden alle Hollywood-Widgets automatisch skaliert, um sie an die DPI-Einstellungen des aktuellen Monitors anzupassen. Wenn Sie das nicht möchten, können Sie den Tag ScaleHollywood auf False setzen, wenn Sie das RapaGUI-Plugin mit @REQUIRE deklarieren. Siehe Initialisierung von RapaGUI für Details. Hier kann die bilineare Interpolation während der Skalierung aktiviert werden, indem der Tag InterpolateHollywood bei @REQUIRE auf True gesetzt wird.

Mit der Scrollcanvas-Klasse sind die Abmessungen, die Sie in Scrollcanvas.VirtWidth und Scrollcanvas.VirtHeight angeben, standardmäßig in geräteunabhängigen Pixeln und RapaGUI wendet automatisch den Skalierungsfaktor des Systems auf den vom Befehl Scrollcanvas.Paint gezeichneten Inhalt an. Wenn Sie eine fein abgestimmte Kontrolle wünschen, können Sie das Attribut Scrollcanvas.AutoScale auf False setzen. In diesem Fall werden Scrollcanvas.VirtWidth und Scrollcanvas.VirtHeight als physikalische Pixel interpretiert und es erfolgt keine automatische Skalierung, damit Ihre Malfunktion hochauflösende Grafiken ohne Qualitätsverlust durch Skalierung zeichnen kann.

Denken Sie schließlich daran, dass Sie den DPI-bewahr Modus unter Windows explizit aktivieren müssen, wenn Ihre Programme nativ High-DPI-Modi unterstützen soll. Dies kann durch Setzen des Tags DPIAware in der Präprozessor-Anweisung @OPTIONS auf True erfolgen, z.B:

 
@OPTIONS {DPIAware = True}

Wenn Sie dies nicht tun, ist Ihr Programm nicht DPI-fähig, was bedeutet, dass Windows es in einem speziellen Kompatibilitätsmodus ausführt. In diesem Kompatibilitätsmodus skaliert Windows Ihr Programm entsprechend der DPI-Einstellung des Monitors, dies führt jedoch zu einem unscharfen Erscheinungsbild. Aus diesem Grund wird empfohlen, wie oben bereits aufgeführt, DPIAware auf True zu setzen.

Beachten Sie, dass Sie unter Linux die GTK+ 3 Version von RapaGUI verwenden sollten, wenn Sie High-DPI-Modi unterstützen möchten, da GTK+ 2 High-DPI-Modi nicht sehr gut unterstützt.


Navigation zeigen