From: Chikara T. <c_t...@yb...> - 2005-03-05 16:56:58
|
高松です。 丁寧な解説ありがとうございます。 > >サンプルがボタン一つだったからウインドウと同じ動きをしたと >思いますが、例えば、複雑なレイアウトウィジェット上の1つの子ウィジェット >を指定すると、もっとわかりやすいかもしれませんね。その場合は、ウインドウ >自体は動かないかもしれません。 > >1つ例を出しましょう。 > >------------------ >require 'gtk2' > >Gtk.init > >geometry = Gdk::Geometry.new >geometry.set_min_width(100) >geometry.set_min_height(100) > >button1 = Gtk::Button.new("OK") >button2 = Gtk::Button.new("Cancel") >window = Gtk::Window.new >window.add(Gtk::HPaned.new.add(button1).add(button2)) > >#window.set_geometry_hints(window, geometry, #(1) >window.set_geometry_hints(button2, geometry, #(2) > Gdk::Window::HINT_MIN_SIZE) > >window.show_all >Gtk.main >------------------ > >高松さんは(1)の可能性のみに言及されていると思いますが >上のサンプルで(1),(2)を両方動かしてみて動きの違いを >見てください。 >(1)の方ではWindow全体の最小値を指定していて、 >(2)の方はCancelボタンの最小値を指定しているので >(2)の方がウインドウ全体として見ると小さくなりません。 > これで色々試してみたのですが(2)の場合の使う場面がよくわかりません。 例えばbutton1にジオメトリヒントを設定するとなんだか予想と一致しない結果 になりますし button2の仕切りをドラッグすると最小以下になります(最小指定のメソッドが ありますが)。 button1とbutton2に同時にジオメトリヒントを設定することもできませんでした。 ウィジェット別に、ウィンドウがリサイズした場合の挙動を変更できるのかと 思ったのですが…。 > >Gdk::Geometryの各デフォルト値はどうするべきでしょうか? >例えば、min_sizeにとってmin_size.max_sizeの結果は0でしょうか。 >それとも-1? >#今は特に初期化していなくて不定なので、変な値が返りますね。 >#実用上は問題ないですけど、これは直さないといけないかな。 > > >>geometry = min_size | max_size | resize_inc # or min_size + max_size + >>resize_inc > > >そして、この計算をしたときに、それらのデフォルト値は >どう計算するのでしょうか? > >そういう、曖昧な部分をなくすためにもmaskがあるのは >有効だと思います。まぁ、ポリシーの違いと言えばそれまでですが。 > >また、maskを使えば、1つのGdk::Geometryで複数の表現を >することができます。 >#その使い方を推奨するわけではありませんが。 ええと、自分の考えでは不完全なGdk::Geometryをでっち上げて 既存ウィンドウが使っていたであろうGdk::Geometryに上書きするイメージでした。 まずGeometry.newで各デフォルト値をfalseとして初期化し、|や+を どちらかが真→真の値にする 共に偽→偽のまま どちらも真→変数の種類によって採る値を分ける (min_sizeなら1以上の小さい方の値、max_sizeなら1以上の大きい方の値...) とします。 そしてGdk::Geometryに偽でなければ上書きするインスタンスメソッドを作って set_geometry_hints内で window_geometry.merge(user_geometry) こんな感じに呼ぶと。 元となるウィンドウのジオメトリが曖昧さをカバーする…ハズです(自信無し)。 利点はもしGdk::Geometryに何か変数が増えた場合にも 変更がクラス内だけで済むだろうということ そして、ユーザーがmaskを考えなくてもいい(適当にGeometryを設定して渡せば いい) ということです。 普通変更する部分しか設定しないでしょうから…。 何度もしつこくてすいません。 # 何だか自分がどんどん間違っていってる気もする -- Chikara Takamatsu <c_t...@yb...> |