Domanda

sto sperimentando Xlib di acquisire una più profonda comprensione di come i programmi Linux GUI funzionano. Ho scritto un semplice programma che visualizza "Ciao, mondo" in una finestra, ma sembra piuttosto anacronistico in quanto il testo non è anti-alias.

Qual è il modo migliore per visualizzare il testo anti-aliasing in X11? Come anti-aliasing realizzato in GTK, Qt, e altri toolkit?

È stato utile?

Soluzione

servizi di testo di rendering del protocollo X non supportano l'anti-aliasing e non vengono utilizzati molto in questi giorni. (Penso che il motivo è che il protocollo di carattere X non ha alcun posto per un canale alfa.)

GTK e Qt stampare testo nel client utilizzando la libreria FreeType, ottenendo una pixmap con un canale alfa come il risultato. Se il server X supporta l'estensione RENDER, il cliente può inviare che pixmap al server di averlo mescolato sul display utilizzando il suo canale alfa. Se il server X non supporta RENDER, il cliente deve recuperare la regione dello schermo in cui il testo deve essere visualizzato (prendendo un piccolo screenshot, in fondo), fare l'alpha blending sul lato client, e inviare il pixmap opaco risultante al server X da visualizzare.

Altri suggerimenti

FreeType è al livello corretto della risma. E 'solo consentirà di disegnare glifi in certi luoghi. In genere è necessario almeno un meccanismo di selezione dei font (forniti da Fontconfig ) e un motore di formatura (fornito da Pango o Qt).

Sia Pango e Qt usano una versione a forcella di un motore di layout FreeType abbandonato, ma questo è stato riconciliati nella HarfBuzz progetto.

Si veda anche questo post di Behdad Esfahbod: Pango vs HarfBuzz , e questo documento più a lungo e più completa:. Stato di testo rendering

FreeType . GTK + usa Pango, e Qt ha una propria libreria di layout del testo, ma entrambi utilizzare FreeType alla fine, e diverse applicazioni (ad esempio XTerm con font con antialias attivato) usa FreeType attraverso la libreria libXft di livello inferiore che viene fornito con Xorg.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top