gtk.Widget.reparent

いいかげんに Y901x もフルスクリーンでコントローラを出すようにしよう。

方法は色々あるんだが、一番簡単なのは show() hide() だけで済ませる方法。
しかしこれではムービー画面が拡大縮小されてみったくない。
WMP12 や Cinema のように浮き上がらせて表示させる、の方法は解らない…

オーソドックスに下からヒョッコリ出てくる方法にでもとりあえずやっとこう。
これも方法が沢山あるけど別ウインドウを作って被せるのが一番簡単だろう。

とりあえずコントローラ用の gtk.Window を gtk.WINDOW_POPUP 指定で作成。
gtk.Widget の reparent() メソッドで parent の gtk.Box をコッチに変更。
unparent() set_parent() を使うとうまくいかなかった、つか実態が消滅するんだが。

parent を変更すると property が消える、パッキング情報は Box 側が持つんだから当然か。
.NET Framework の WPF なら子オブジェクト側が持っているんだよね、色々あってややこしい。
なので set_child_packing メソッドでパッキング情報を追加するのを忘れずにと。

んでディスプレイサイズを取得して…ってどうやるのだ?

ぱぇぽぃ2 ? Blog Archive ? デスクトッププロパティ

なんだ、自分でやっていたや。
でも Python の勉強を始めたばかりな頃にやったことなんで効率悪すぎる。
wnck を使えば簡単だけど KDE 対応でまた…
ということで、何か他の方法は無いか探したら恐るべきコードを発見。

pygtkだけ でスクリーンショットをとる

何コレ、たったこれだけ(八行)で本当に全画面スクリーンショットアプリが完成!
PyGtk 恐るべし、gnome-screenshot が強力すぎて自分で作ろうとは思わないけど。

つーか画面サイズを調べるのって get_geometry() メソッドを呼ぶだけだったのか。
やはり知識が無いと無駄なコードを書くことを自分で証明した。

とにかくコレでディスプレイサイズがゲットできたので作ってしまえだ。
表示後でないと gtk.Widget.allocation.height が取れないのをどうするか悩む。

ごまかしたらイマイチなコードになっちゃった、けど開発途中なんだからいいや。
後マウスカーソルを消す処理もいれたいけど出したいからこのまんま出してしまえ(ぉい!
具体的なコードは Y901x の common.py の CFullCtrl class を見てくれ。
更新毎に少しずつマトモなコードになる、多分。

ということで Y901x-0.2.3 を公開しました、本サイトからぞうぞ。
listbox 表示状態を記憶せず毎回表示していたのも修正した、今まで何故気がつかない…

だから Linux 用を作ったところで全然金にも人気にもならないなんて解っているよ。
いいじゃないか、作りたいんだから。