1

一部のWMでは、ボタンの背景の色など、ウィンドウの表示方法に影響を与えるテーマを選択できます。

裸のXlib呼び出しを使用してウィンドウを描画する場合、これらのテーマの影響を受ける設定に準拠するにはどうすればよいですか?つまり、考えられるすべてのWMに対して特定のコードを作成することになっていますか?それは一般的にどのように解決されますか?

4

1 に答える 1

1

いくつかのテーマタイプがあり、それらは一緒に再生されることもありますが、混同しないでください。

  • ウィンドウマネージャー/境界線のテーマは、コンテンツではなく、各ウィンドウの装飾を説明します
  • UIツールキットのテーマ/ウィジェットのテーマは、ウィンドウ内でボタンやテキストフィールドなどがどのように描画されるかを記述します
  • アイコンテーマは、使用されるアイコンを説明し、アプリケーションアイコン、ファイルアイコン、アクションアイコン、ツールバーアイコンなどをカバーします。
  • カラーテーマは、他のテーマのフレームワーク内で使用される色のパレットを定義します
  • ポインタテーマは、マウスポインタアイコンのセットを定義します

一部のデスクトップ環境では、これらすべてのテーマが「デスクトップ」テーマにバンドルされているか、少なくともすべてを選択するためのフロントエンドが提供されています。ただし、これらのテーマはデスクトップ環境からも互いに独立しています。設定ファイルを使用して設定することができます。

アプリケーションをユーザーの好みに合わせるには、まず、アイコンテーマを順守する必要があります。ポインターテーマは、ストックマウスアイコンのみを使用し、独自のアイコンをXサーバーにアップロードしない限り、Xサーバーによって処理されます。

2番目に明らかなのはカラーテーマですが、残念ながらカラーテーマの標準はありません。Gtk+とQtの両方のフレームワークがこの機能を独立して提供します(デスクトップテーマの構成者は両方を理解して操作し、一貫性を提供します)。ユーザーがGtk+カラーとQtカラーのどちらを好むか(たとえば、GnomeまたはKDEを実行している)を見つけるために魔法をかけ、そこから色をいくらか抽出することができます。

ただし、最も難しいのは、ユーザーが選択したUIツールキットのテーマに忠実なUI要素のルックアンドフィールを提供することです。まず、Gtk +とQtのどちらかを再度決定する必要があります(テーマ化可能な他のツールキットも存在しますが、通常、ユーザーやEnlightenmentのようなニッチなプレーヤーはテーマを設定しません)。次に、同じ機能を再実装する必要があります。興味深いことに、多くのテーマにはGtk +に独自のテーマエンジンが付属しており、テーマエンジンに作業を任せることができます。すでにいくつかの関係者によって取り上げられたアプローチ。例:

  • Java Swingは、Gtk +テーマAPIを実装し、Gtk +テーマエンジンに作業を任せることで、Gtk +アプリケーションの模倣をサポートし、いくつかの不整合を処理します。
  • XULを使用するFirefoxやその他のMozillaアプリもこれを行いますが、デフォルトのフォントサイズから始めて、常に厄介な違いがあります。
  • Qt自体には互換性のあるGtk+テーマがあり、基本的に同じです。これはかなりうまく機能します。

私の提案は、車輪の再発明ではなく、基本的な描画操作を超えるGUI要素にQt(または必要に応じてGtk +)を使用することです。私の経験から、プリミティブな描画でさえ、通常、XlibよりもQtの方が優れていることに注意してください。ユーザーは(見た目だけでなく)期待するルックアンドフィールを手に入れ、インターフェイスはリッチで安定しており、これらすべてを書く時間を大幅に節約できます。

于 2012-11-30T18:34:18.267 に答える