新規作成  編集  Ruby-GNOME2 Project Website  ページ一覧  検索  更新履歴  編集履歴  RSS  ログイン

gtk2-tut-rc

GTK の rc ファイル

rc ファイルを使うことによって、GTK はアプリケーションデフォルトを扱う独自の方法を持っている。rc ファイルはどのウィジェットに対しても色の設定に使うことができ、あるウィジェットのバックグラウンドにピックスマップを貼るために使うことも可能だ。

rc ファイルを扱うモジュール関数、メソッド

あなたのアプリケーションが起動した時、次の呼び出しを含めておくべきである :

Gtk::RC.parse(filename)

あなたの rc ファイルの filename を渡している。これは GTK にこのファイルを解析させ、定義されたウィジェット型のスタイル設定を使わせる。

もしも他とは違ったスタイルを振舞えるウィジェット、あるいは他のウィジェットの論理的な分割に特別な設定を与えたいならば、この呼び出しを使う :

Gtk::Widget#name=(name)

第 1 引数には新しく生成されたウィジェットを、第 2 引数にはそれに与えたい名前を渡す。これは rc ファイルを通して名前によってこのウィジェットの属性を変更するとを許すものである。

もし我々がこのような何らかの呼出しを使ったなら :

button = Gtk::Button.new("Special Button")
button.name = "special button"

この button は名前 "special button" が与えられて、rc ファイル中から "special button.GtkButton" のように特定されるだろう。[<--- 確認せよ !]

後述の例にある rc ファイルは、メインウィンドウの特性を設定し、"main button" で記述されたスタイルを、継承したメインウィンドウの全ての子に指定する。アプリケーションで使われるコードは :

window = Gtk::Window.new
window.name = "main window"

さらに rc ファイルで定義されたスタイルを使うのは :

widget "main window.*GtkButton*" style "main_button"

これは "main window" 中の全てのボタンウィジェットをこの rc ファイルで定義された "main_buttons" スタイルに設定する。

理解されたように、これはみごとに強力で柔軟なシステムである。この長所を使いこなす最良の方法を考えてみてほしい。

GTK の rc ファイルにおけるフォーマット

GTK ファイルのフォーマットは後述の例で説明する。これは GTK ディストリビューションにある testgtkrc ファイルであるが、私が少し註釈やなにかを加えた。利用者がうまく調整できるように、あなたも自分のアプリケーションにこの説明を加えたいと思うかもしれない。

ウィジェットの属性を変更する様々な指令がある。

  • fg - ウィジェットのフォアグラウンドカラーを設定する。
  • bg - ウィジェットのバックグラウンドカラーを設定する。
  • bg_pixmap - ウィジェットのバックグラウンドに貼るピックスマップを設定する。
  • font - 与えられたウィジェットで使われるフォントを設定する。

これに加えて、ウィジェットには様々な状態があり、実際その状態にすることができる。また各々の状態毎に、異った色、ピックスマップそれにフォントを設定できる。これらの状態は :

  • NORMAL - ウィジェットの標準状態、マウスがこの上には無く、押されていないなど。
  • PRELIGHT - マウスがウィジェットの上にあるとき。この状態で使うために定義された色が実際に使用される。
  • ACTIVE - ウィジェットが押されたかクリックされた時にアクティブとなる。実際に使われるタグによって属性が代入される。
  • INSENSITIVE - ウィジェットがインセンシティブ[感知不能] に設定されていて活動できない時、これらの属性を取る。
  • SELECTED - オブジェクトが選択された時、これらの属性を取る。

ウィジェットの色を設定する "fg" および "bg" を使う場合、そのフォーマットは :

fg[<STATE>] = { Red, Green, Blue }

ここで STATE は上記の状態 (PRELIGHT, ACTIVE など) のどれかで、Red, Green および Blue は 0 - 1.0 の範囲の値であり、{ 1.0, 1.0, 1.0 } は白である。これらは浮動小数点形式でなければならず、さもなければ 0 が記録される。それゆえストレートな "1" は機能せず、これは "1.0" でなければならない。ストレートな "0" がうまくいくのは認識されなくても問題がないからである。認識されなかった値は 0 に設定される。

bg_pixmap は上述の色指定によく似ているが、色がファイル名に置き換えられる点が違う。

pixmap_path は ":" で分けられたパスのリストである。これらのパスはあなたが指定したピックスマップを探すために用いられる。

フォントの指定は単にこうする :

font = "<font name>"

ここで難しい部分はフォント名を表す文字列を理解することだけである。 xfontsel や同じようなユーティリティを使えばそれを助けてくれるはずだ。

"widget_class" はウィジェットのクラスのスタイルを設定する。これらのクラスは「ウィジェット概観」のクラス階層中にリストされている。

"widget" の指示語は特別に命名されたウィジェットの集合に、与えられたスタイルを設定し、与えられたウィジェットクラスにスタイルの設定を上書きする。これらのウィジェットは gtk_widget_set_name() 呼出しを使ってアプリケーション内部で登録される。これはウィジェットクラス全体の属性を設定するかわりに、ウィジェットベースでウィジェットの属性の指定を許すものだ。これらの特別なウィジェットをドキュメント化することを、私は勧める。そうすることで利用者がこれらをカスタマイズすることも可能だからだ。

キーワード parent が属性として使われた場合、そのウィジェットはアプリケーション中の親の属性をそのまま利用する。

スタイルを定義する時、以前定義したスタイルの属性を新しいものに代入するかもしれない。

style "main_button" = "button"
{
  font = "-adobe-helvetica-medium-r-normal--*-100-*-*-*-*-*-*"
  bg[PRELIGHT] = { 0.75, 0, 0 }
}

この例は "button" スタイルを取得し、新しく "main_button" スタイルを作成して、単に "button" スタイルのフォントと prelight バックグラウンドカラーを変更するだけである。

もちろん、これらの属性の多くは全てのウィジェットに適用できるものではない。これは本当に一般常識の問題である。適用できるものはどれでも、するべきだ。

rc ファイルの例

# pixmap_path "<dir 1>:<dir 2>:<dir 3>:..."
#
pixmap_path "/usr/include/X11R6/pixmaps:/home/imain/pixmaps"
#
# style <name> [= <name>]
# {
#   <option>
# }
#
# widget <widget_set> style <style_name>
# widget_class <widget_class_set> style <style_name>


# ここにあるのは利用可能な状態全てのリストである。注意したいのは幾つか
# は確定したウィジェットに適応できないことだ。
# Here is a list of all the possible states.  Note that some do not apply to
# certain widgets.
#
# NORMAL - ウィジェットの標準状態、その上にマウスが無く、押されていな
# いなど。
# NORMAL - The normal state of a widget, without the mouse over top of
# it, and not being pressed, etc.
#
# PRELIGHT - マウスがウィジェットの上にある時で、この状態が実際に使う
# 色が定義されている。
#
# ACTIVE - ウィジェットが押されたかクリックされた時にアクティブとなる。
# 実際に使われるタグによって属性が代入される。
#
# INSENSITIVE - ウィジェットがインセンシティブで活動できない時、これら
# の属性を取る。
#
# SELECTED - オブジェクトが選択された時、これらの属性の属性を取る。
#
# 与えられたこれらの状態に、次のような指示語を使うことでこれらの状態そ
# れぞれについてウィジェットの属性を設定することが可能である。
#
# fg - ウィジェットのフォアグラウンドカラーを設定する。
# fg - ウィジェットのバックグラウンドカラーを設定する。
# bg_pixmap - ウィジェットのバックグラウンドに貼るピックスマップを設定する。
# font - 与えられたウィジェットで使われるフォントを設定する。
#
# "button" で呼ばれるスタイルを設定する。実際に名前は重要ではない、本
# 当のウィジェットにはファイルの下端で割当てているからだ。

style "window"
{
  # この window の一帯を指定されたピックスマップで埋める。
  #bg_pixmap[<STATE>] = "<pixmap filename>"
  bg_pixmap[NORMAL] = "warning.xpm"
}

style "scale"
{

  # "NORMAL" 状態におけるフォアグラウンドカラー(フォントカラー)を赤に
  # 設定する。

  fg[NORMAL] = { 1.0, 0, 0 }

  # このウィジェットのバックグラウンドピックスマップをその親のものに設
  # 定する。
  # [訳注: 親とはウィジェット(あるいはオブジェクト)の親のクラスではな
  # く、アプリケーション中の配置関係としての親を指す。]
  bg_pixmap[NORMAL] = "<parent>"
}

style "button"
{
  # これはボタンに対する可能な全ての状態を示している。たった一つ適用さ
  # れないのは SELECTED 状態である。

  fg[PRELIGHT] = { 0, 1.0, 1.0 }
  bg[PRELIGHT] = { 0, 0, 1.0 }
  bg[ACTIVE] = { 1.0, 0, 0 }
  fg[ACTIVE] = { 0, 1.0, 0 }
  bg[NORMAL] = { 1.0, 1.0, 0 }
  fg[NORMAL] = { .99, 0, .99 }
  bg[INSENSITIVE] = { 1.0, 1.0, 1.0 }
  fg[INSENSITIVE] = { 1.0, 0, 1.0 }
}

# この例では、新しい "main_button" スタイルの生成には、"button" スタイ
# ルの属性を継承し、PRELIGHT になったときのフォントとバックグラウンド
# カラーをオーバーライドする。

style "main_button" = "button"
{
  font = "-adobe-helvetica-medium-r-normal--*-100-*-*-*-*-*-*"
  bg[PRELIGHT] = { 0.75, 0, 0 }
}

style "toggle_button" = "button"
{
  fg[NORMAL] = { 1.0, 0, 0 }
  fg[ACTIVE] = { 1.0, 0, 0 }

  # toggle_button のバックグラウンドピックスマップをその (このアプリケー
  # ションで定義された) 親のウィジェットのものに設定する。
  bg_pixmap[NORMAL] = "<parent>"
}

style "text"
{
  bg_pixmap[NORMAL] = "marble.xpm"
  fg[NORMAL] = { 1.0, 1.0, 1.0 }
}

style "ruler"
{
  font = "-adobe-helvetica-medium-r-normal--*-80-*-*-*-*-*-*"
}

# pixmap_path "~/.pixmaps"

# 上で定義されたスタイルを使うウィジェットタイプを設定する。
# ウィジェットタイプはクラス階層にリストされているが、このドキュメント
# では、おそらく利用者の参考のためにちょっとリストしたい気がする。

widget_class "GtkWindow" style "window"
widget_class "GtkDialog" style "window"
widget_class "GtkFileSelection" style "window"
widget_class "*Gtk*Scale" style "scale"
widget_class "*GtkCheckButton*" style "toggle_button"
widget_class "*GtkRadioButton*" style "toggle_button"
widget_class "*GtkButton*" style "button"
widget_class "*Ruler" style "ruler"
widget_class "*GtkText" style "text"

# これは "main window" の子供のボタン全てを main_button スタイルに設定
# するものだ。これらを利用するにはドキュメント化する必要がある。
widget "main window.*GtkButton*" style "main_button"
更新日時:2005/05/23 01:49:38
キーワード:
参照:[gtk2-tut]