Linux GUIプログラムがどのように機能するかをより深く理解するために、Xlibを試しています。ウィンドウに「Hello、world」を表示する簡単なプログラムを作成しましたが、テキストがアンチエイリアス処理されていないため、かなり時代錯誤に見えます。
X11でアンチエイリアステキストを表示するための最良の方法は何ですか?GTK、Qt、およびその他のツールキットでアンチエイリアシングはどのように実装されていますか?
Linux GUIプログラムがどのように機能するかをより深く理解するために、Xlibを試しています。ウィンドウに「Hello、world」を表示する簡単なプログラムを作成しましたが、テキストがアンチエイリアス処理されていないため、かなり時代錯誤に見えます。
X11でアンチエイリアステキストを表示するための最良の方法は何ですか?GTK、Qt、およびその他のツールキットでアンチエイリアシングはどのように実装されていますか?
Xプロトコルのテキストレンダリング機能はアンチエイリアシングをサポートしておらず、最近はあまり使用されていません。(その理由は、Xフォントプロトコルにアルファチャネルの場所がないためだと思います。)
GTKとQtは、FreeTypeライブラリを使用してクライアントでテキストをレンダリングし、結果としてアルファチャネルを含むピックスマップを取得します。XサーバーがRENDER拡張機能をサポートしている場合、クライアントはそのピックスマップをサーバーに送信して、アルファチャネルを使用してディスプレイにブレンドさせることができます。XサーバーがRENDERをサポートしていない場合、クライアントはテキストが表示される画面の領域を取得し(基本的に小さなスクリーンショットを撮る)、クライアント側でアルファブレンディングを実行し、結果の不透明なピックスマップを送信する必要があります表示するXサーバーに戻ります。
FreeTypeがスタックの間違ったレベルにあります。特定の場所でのみグリフを描画できます。通常、少なくともフォント選択メカニズム(Fontconfigによって提供される)とシェーピングエンジン(PangoまたはQtによって提供される)が必要です。
PangoとQtはどちらも、放棄されたFreeTypeレイアウトエンジンのフォークバージョンを使用していますが、これはHarfBuzzプロジェクトに調整されています。
Behdad Esfahbodによるこの投稿:Pango vs HarfBuzz、およびこの長くてより包括的なドキュメント:State ofTextRenderingも参照してください。
FreeType。GTK +はPangoを使用し、Qtには独自のテキストレイアウトライブラリがありますが、どちらも最終的にFreeTypeを使用し、いくつかのアプリ(たとえば、アンチエイリアスフォントが有効になっているXTerm)は、Xorgに付属する低レベルのlibXftライブラリを介してFreeTypeを使用します。