gimp メニューにアイコン表示

Script-Fu メニューでもアイコン表示

2001/08/23

Script-Fu の GIMP コアへの登録の流れ

懸案だった Script-Fu のメニューへのアイコン表示についても作業してみました. Script-Fu はスクリプトソースからの登録がなされます.次の流れになります.
  1. gimp 起動
  2. Script-Fu ディレクトリ中の *.scm ファイルを走査
  3. Script-Fu 毎の登録関数の呼び出し (script-fu-register)
  4. gimp へ Script-Fu 情報 (メニューパスなど) を通知 (wire)
  5. gimp 側で受けた Script-Fu 情報からメニューを作成
ほとんどプラグインの場合と同じですが,スクリプトソースを動的に解釈し script-fu-register を実行する点が違います(流れの図解).

script-fu-register での登録

script-fu-register の登録には必須引数があります.どこのメニューに登録するかによってもその数は変化しますが,拡張メニューへの登録では「a.登録名」「b.登録パス名」「c.説明文」「d.アバウト文」「e.作者名」「f.日付」「g.画像タイプ」の7つが要求されます.また,残りの引数では SF-IMAGE や SF-COLOR などとしてその Script-Fu スクリプト毎で要求される引数が(ある意味オプショナルに)続きます.

アイコン画像をこの登録に含めるわけですが,その画像情報自体はプラグインの場合と同様に XPM 形式を採用することにして,どのような要素として含めるかが問題となります.プラグインの登録では gimp_install_procedure() が呼び出されるのに対してアイコンに対応した関数を gimp_install_procedure_with_icon() のように _with_icon 付きのものを別に作成しました.そこで,Script-Fu の場合にも script-fu-regisuter-with-icon などとした処理関数を作成することが考えられます.この関数を使った登録では必須の引数の数をひとつ増やし,アイコン画像のデータを含めるわけです.

しかし,このようにするとソースを大幅に書き換える必要があり,引数の数に依存する形態が好ましくないように思われました.ですので,新たに SF-MENUICON という要素の付加引数を設定することにしてみました.通常の SF-IMAGE などは Script-Fu 関数が実行されるときにデータを与えるために使われますが,この SF-MENUICON は登録に使われるという点で異なった性質のものとなっています.

※登録の必須引数の数は登録されるメニュー位置により変化し,「拡張 <ToolBox>/Xtns/Script-Fu/」メニューでは7個,画像の「Script-Fu <Image>/Script-Fu/」メニューでは3つ増えて10個となっています.もし,アイコン画像の情報を必須個数として数えていると依存度が高くなりこれらをそれぞれ変更しなければならなかったはずなので,SF- のほうで付加的にアイコン画像を扱ったことはよかったと思います(ってここの文章の意味わかります?).

SF- の要素は3つで1組となり,「a.SF-タイプ名」「b.説明」「c.初期値」のようになります.これを使って「a.SF-MENUICON」「b._"MenuIcon"」「c.XPM 画像データ文字列のリスト」として記述することにしました.

XPM 形式から .scm ファイルへの登録形式へ変換するスクリプトを用意しました.

※XPM の画像データリストは,現在,プラグインのキャッシュを LISP のリスト形式で読み込みする場合には冒頭に行数を含めています.ですが,Script-Fu の読み込みではリストの要素数をすぐに取得することができたので,この行数の情報は不要となり画像データの文字列のみを並べればいいものとなりました.

生成するアイコン画像はプラグインの場合と同様に行ないました.32 色としたものを 16 色とすることも考えましたが,比較した結果,見栄えからすると 32 色程度は必要となる感じでした.

ロゴのアイコンをどうするか

Script-Fu の標準の取り揃えの中でロゴ作成機能は大きな位置を占めており,どのようなアイコンを用意するかは重要です.また,サンプルでよくあるものはそのロゴ名を文字列として個々のロゴを生成して一覧表示しているものです.しかしこれでは比較ができません.同じ文字列に対して処理を施す必要があります.

さらに,アイコンではそうそう大きな画像にするわけにはいかず,縮小したときにも視認性がいいようにしなければなりません.これを実現するため単一の文字あるいは記号とすることとし,その文字に何を選ぶかを検討しました.まず,お約束で「GIMP」の頭文字の G を取って作業してみました.曲線と直線が混在していることから,ロゴの特徴を表すのにも向いているようです.そこでこれを採用することにしました.

※他の文字としては中央部も占める「E」や縮小する必要がほとんどないであろう「.」を考えましたが,単一の文字としては面白みがなくロゴのサンプルには向かないようでした.

環境設定で表示切り替え

環境設定パネルでメニューへのアイコン表示を切り替えられるようにしました.Script-Fu の場合は再読み込みでメニューの更新が行なえますが,プラグインの場合には GIMP の再起動が必要です.このパッチを適用してコンパイルした場合のデフォルト値は「表示する(TRUE)」です.

スクリーンショット

ここまでどのメニューもアイコンだらけになるとちょっとうるさいですかね?










||gimp-iconmenu ||Programs||Home||

oshiro@mibai.tec.u-ryukyu.ac.jp