2009-12-11 9 views
5

Ich experimentiere mit Xlib, um ein tieferes Verständnis dafür zu bekommen, wie Linux GUI-Programme funktionieren. Ich habe ein einfaches Programm geschrieben, das "Hello, world" in einem Fenster anzeigt, aber es sieht eher anachronistisch aus, da der Text nicht anti-aliased ist.Anti-Alias-Text in X11

Was ist der beste Weg, Anti-Alias-Text in X11 anzuzeigen? Wie wird Anti-Aliasing in GTK, Qt und anderen Toolkits implementiert?

Antwort

5

Die Text-Rendering-Funktionen des X-Protokolls unterstützen kein Anti-Aliasing und werden heutzutage kaum noch verwendet. (Ich denke, der Grund ist, dass das X-Font-Protokoll keinen Platz für einen Alpha-Kanal hat.)

GTK und Qt rendern Text im Client mit der FreeType-Bibliothek, wodurch eine Pixmap mit einem Alpha-Kanal als Ergebnis erhalten wird . Wenn der X-Server die RENDER-Erweiterung unterstützt, kann der Client diese Pixmap an den Server senden, damit sie über den Alpha-Kanal mit dem Display verbunden wird. Wenn der X-Server RENDER nicht unterstützt, muss der Client den Bereich des Bildschirms abrufen, in dem der Text angezeigt werden soll (im Prinzip einen kleinen Screenshot), die Client-Seite mit dem Alpha-Blending ausführen und die resultierende undurchsichtige Pixmap senden zurück zum X-Server, der angezeigt werden soll.

+0

Kennzeichnung akzeptiert, da dies beschreibt, was tatsächlich auf einem niedrigen Niveau passiert. Es überrascht mich, dass das Fonthandling jetzt auf der Seite des Kunden ist. –

+0

Es klingt, als wäre es weniger effizient, aber nach dem, was ich gelesen habe, gibt es eigentlich keinen großen Unterschied. Ja, der Client muss jetzt gerenderte Text-Pixmaps an den Server senden, aber er muss den Server nicht mehr nach allen Font-Metrik-Daten abfragen, die er beim Text-Layout benötigt. Es bedeutet auch keine hässlichen XLFD Saiten mehr. :-) – Wyzard

4

FreeType. GTK + verwendet Pango, und Qt hat eine eigene Textlayout-Bibliothek, aber beide verwenden FreeType am Ende, und mehrere Apps (zum Beispiel XTerm mit aktivierten Antialias-Schriften) verwenden FreeType über die untere Bibliothek libXft, die mit Xorg ausgeliefert wird.

6

FreeType ist auf der falschen Ebene des Stapels. Es erlaubt Ihnen nur, Glyphen an bestimmten Stellen zu zeichnen. In der Regel benötigen Sie mindestens einen Font-Auswahlmechanismus (Fontconfig) und eine Shaping-Engine (Pango oder Qt).

Sowohl Pango als auch Qt verwenden eine gegabelte Version einer nicht freigegebenen FreeType-Layout-Engine, die jedoch in das Projekt HarfBuzz übernommen wird.

Siehe auch diesen Beitrag von Behdad Esfahbod: Pango vs HarfBuzz, und dieses längere und umfassendere Dokument: State of Text Rendering.

+0

Der State of Text Rendern Artikel war eine interessante Lektüre. Vielen Dank. –