ここに置かれているパッチ類は大半が時代遅れです。($Date: 2006/04/29 06:33:22 $)
ここに置かれているパッチ類は大半が時代遅れです。($Date: 2006/04/29 06:33:22 $)
X11環境で複数のツールキットの見た目を (多少強引ながらも) なんとか揃えようという、一見枝葉末節のようではあるが、 実は UNIX デスクトップを一般に普及させる上で意外に重要な事柄ではないかと私が考えている小技の記録です。
X Window System はその名の通りウィンドウシステムであり、それ自体はユーザーインターフェイスのポリシーを規定しません。この考え方の上に、GUI ツールキットも(参照実装としての Athena はありますが)、現実に広く使われているものだけで、Motif, GTK+, Qt, Tcl/Tk 等多数のライブラリが百花繚乱に咲き乱れています。
しかし、ここで立ち止まって考えてみますと、 近代的な GUI システムの役割の一つとして、「アプリケーションによらず統一された操作体系を供給する」 という理念があったはずです。ところが、このような多数のツールキットの上に構築された アプリケーションが混在している X の世界では、ウィジェット一つとってもアプリケーションによってバラバラで操作はおろか見た目の統一感すらとれていないのが現状です。
もちろんこのような問題意識の上に Gnome や KDE などの 統合デスクトップ環境が台頭してきているのはご存知の通りですが、 現実に我々が日常使っているアプリケーションである emacs や kterm は Xaw ベースで作られていますし、 Motif ベースのアプリケーションで日常不可欠なアプリケーションを 持っている方も少なくないでしょう。
そこで、ここではあまり大げさにならない範囲で設定やパッチを駆使して主要ツールキット間のlook and feelをそろえることを試みます。また、おおざっぱな方針としてMotif Toolkitの外見を再現することを目標とします。
スクリーンショット。Xaw (emacs, kterm), Motif (xpdf 2.0), Tcl/Tk, GTK+ (gimp) が混在した画面で、すべてのウィンドウのスクロールバーがおおむね同一の見栄になっています。
Xaw3d は Xaw - アテナウィジェットに Motif 風な外観を与えるライブラリ ですが、標準のままでは Motif 類似度に若干物足りないものがあるので、いくつかの機能を追加するパッチを作成しました。
私が不器用ということなのか、 GTK+ や Motif のデフォルトのスクロールバーの幅はどうも狭すぎるようで、 すぐに操作をしくじります。 Tcl/Tk ぐらいの幅があればちょうどいい感じになるので、 これを調整することにします。
スクロールバーの幅の例 (GTK+)。 左が通常、右がひろげたもの。
リソースで設定します。.Xdefaults ファイルに、
*Scrollbar.thickness: 19
と書きます。
デフォルトのスクロールバー幅で不満はありませんが、これ以外の値に設定したいときは Xaw3d で設定したものと同じリソースが有効になります。
リソースで設定しますが、Xaw とは異なります。
*XmScrollBar.width: 19 *XmScrollBar.height: 19
最初は .gtkrc で設定できると思ったのですが結局よくわからなかったので、 バーの幅を変更する *だけ* のテーマをでっちあげました。
GTK+ 1.2 、FreeBSD 用です。後述する KDE3 のテーマも同梱してあります。autotools とか gtk-config とか使ってないので、お使いの環境に合わせて Makefile の中のパスとかオプションとか修正してコンパイルしてください。gtk ディレクトリの中で make してできる libumotif.so というモジュールをテーマエンジンディレクトリにインストー ルしたら、.gtkrc の中に
style "default" { (中略) engine "umotif" { } } (中略) widget_class "*" style "default"
のように記述します。 これでデフォルトのテーマのスクロールバーの幅が上記の Xaw やMotif と 同じになります。また、~/.Xdefaults を参照して、 Xaw 用に設定した *Scrollbar.thickness: という行を見つけたらその値を反映します。(てきとーに作ってます。)
GTK+ 2.x Motif風テーマエンジンを作成しました。まず、上記エンジンをインストールして、 Motif 風の外見を実現します。 次に gtkrc に
GtkRange::slider_width = 15 GtkRange::stepper_size = 15
のように記述します。
これも GTK+ と同様です。スクロールバーの幅だけを変更するテーマをビルトインテーマの MotifPlus からサブクラス化して作成しました。 qt ディレクトリの中で make してできる umotif.so を KDE のプラグイン - スタイルディレクトリ (/usr/local/lib/kde3/plugins/styles など) に インストールし、kcontrol で "Unified Motif" スタイルを選びます。
デフォルトでは Xaw3d を使います。しかし、 なぜか Xaw のリソース設定が反映されません。こーゆーのも困りものだと思うのですが、 実は独自のリソース定義で設定できるようになっています。
Emacs.*.scrollBarWidth: 19
スクロールバーを右側にだすには、.emacs で
(set-scroll-bar-mode 'right)
と設定します。設定の結果は以下のとおり。
スクロールバーそのものは Xaw/3d のものが使われるのでよいのですが、バーが左側にでてきます。スクロールバーの左右もシステムワイドに統一的に変更できるのなら歓迎ですが、アプリケーション毎に右に行ったり 左に行ったりでは混乱するだけです。以下のページにある山内さんが作られたパッチを適用すると しっかり右側に表示できるようになります。
Mozilla は 1.2.1 以降、classic テーマを選ぶと、GTK+ のスクロールバーを表示するようになりました。すばらしい。
Mozilla (1.3a/nightly build)