みためは Motif

$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 Motif 類似度向上パッチ

Xaw3d は Xaw - アテナウィジェットに Motif 風な外観を与えるライブラリ ですが、標準のままでは Motif 類似度に若干物足りないものがあるので、 いくつかの機能を追加するパッチを作成しました。

スクロールバーの幅

私が不器用ということなのか、 GTK+ や Motif のデフォルトのスクロールバーの幅はどうも狭すぎるようで、 すぐに操作をしくじります。 Tcl/Tk ぐらいの幅があればちょうどいい感じになるので、 これを調整することにします。


スクロールバーの幅の例 (GTK+)。 左が通常、右がひろげたもの。

Xaw/Xaw3d

リソースで設定します。.Xdefaults ファイルに、

*Scrollbar.thickness: 19

と書きます。

Tcl/Tk

デフォルトのスクロールバー幅で不満はありませんが、 これ以外の値に設定したいときは Xaw3d で設定したものと同じリソースが有効になります。

Motif

リソースで設定しますが、Xaw とは異なります。

*XmScrollBar.width: 19
*XmScrollBar.height: 19

GTK+ 1.2

最初は .gtkrc で設定できると思ったのですが結局よくわからなかったので、 バーの幅を変更する *だけ* のテーマをでっちあげました。

umotif-1.2.tar.gz

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

こちら (GTK+ 2.x Motif 風テーマエンジン) 参照。 まず、上記エンジンをインストールして、 Motif 風の外見を実現します。 次に gtkrc に

GtkRange::slider_width = 15
GtkRange::stepper_size = 15

のように記述します。

KDE3 (Qt)

これも GTK+ と同様です。スクロールバーの幅だけを変更するテーマを ビルトインテーマの MotifPlus からサブクラス化して作成しました。 qt ディレクトリの中で make してできる umotif.so を KDE のプラグイン - スタイルディレクトリ (/usr/local/lib/kde3/plugins/styles など) に インストールし、kcontrol で "Unified Motif" スタイルを選びます。

Emacs 21

デフォルトでは Xaw3d を使います。しかし、 なぜか Xaw のリソース設定が反映されません。 こーゆーのも困りものだと思うのですが、 実は独自のリソース定義で設定できるように なっています。

Emacs.*.scrollBarWidth: 19

スクロールバーを右側にだすには、.emacs で

(set-scroll-bar-mode 'right)

と設定します。

kterm

スクロールバーそのものは Xaw/3d のものが使われるのでよいのですが、 バーが左側にでてきます。スクロールバーの左右もシステムワイドに統一的に 変更できるのなら歓迎ですが、アプリケーション毎に右に行ったり 左に行ったりでは混乱するだけです。 以下のページにある山内さんが作られたパッチを適用すると しっかり右側に表示できるようになります。

http://phe.phyas.aichi-edu.ac.jp/~cyamauch/pl2_kterm_srb.html

Mozilla

Mozilla は 1.2.1 以降、classic テーマを選ぶと、 GTK+ のスクロールバーを表示するようになりました。すばらしい。


Mozilla (1.3a/nightly build)


ウィジェットの色

(作成中)


ウィジェットのフォント

(作成中)


関連リンク

(作成中)


変更履歴