Programming」カテゴリーアーカイブ

リサイズは難しい

begin_resize_drag はこの動作には使えなかった…
マウスボタンを離すまで motion_notify_event シグナルが発行されない。
ウインドのリサイズが完了するまで普通の動きになる、あぁ駄目だ。

つーかリサイザにボタンを使うと motion_notify_event シグナルが発行されない。
GtkDrawingArea でも使うとするか。

パッキングの展張を全部「いいえ」にして Windows のように自前計算と考えた。
GtkContainer の check_resize シグナルで width_request プロパティを弄くれば…
それでは当然小さくリサイズすることができなくなってしまう、あぁ駄目だ。
どうでもいいが「展張」なんて日本語は無いヤン!

パッキングのプロパティを動的に変更できれば楽なんだけど…
「フィル」にしたウイジェットの幅が取得できないのでどっちにしても。
size_request() は最小値だし get_size_request() は -1 だし。

def gtk_on_drawingarea2_motion_notify_event(self, widget, event):
    if self.resize_list:
        x = event.x_root - self.resize_x
        if self.resize_list + x > 0:
            # この上に Treeview が乗っている
            self["scrolledwindow1"].set_property("width_request", self.resize_list + x)
            self["y901window"].resize(int(self.cx + x), int(self.cy))
    
def gtk_on_drawingarea2_button_press_event(self, widget, event):
    self.resize_list = self["scrolledwindow1"].get_property("width_request")
    self.resize_x = event.x_root
    self.cx, self.cy = self["y901window"].get_size()
                            
def gtk_on_drawingarea2_button_release_event(self, widget, event):
    self.resize_list = 0

でなんとか希望どおりの動きになったけどチラツキまくる。
ハンドラを抜けるまで描写ロックなんてできないのかな?

GTK 側が意図していない動作をむりやり行うのは苦労するわ。

いつまでたっても更新ができないのでとりあえずこのままいこう。
とも思うけど今のままでは二倍表示とかを実装時に詰まりそうなんですけど…

現状報告

うおぉぉぉ難しい!
リストの右端ボタンを掴んだらリストをリサイズする
を gtk でやるのはこんなに悩むものなのか、あぁココだけで三日も。

Windows SDK では計算で簡単にやれたのになぁ、まあ全然仕組みが違うわけだし。

とりあえずリサイザボタンの Gdk イベントで「ボタン押下」を有効にする。
んで GtkWidget 以下の button-press-event シグナルハンドラを作成。
ハンドラのパラメータは event の None を取り除く。
これでやっと Gdk のイベント受信が可能になるってことまで解った。

def gtk_on_button1_button_press_event(self, widget, event):
    # ここになんか書く
    self["y901window"].begin_resize_drag( gtk.gdk.WINDOW_EDGE_EAST,
                            event.button,
                            int(event.x_root),
                            int(event.y_root),
                            event.time)

でリサイズさせる前にリストだけサイズが変わるようにプロパティセット。
で、なんとかなりそうだ、コレに辿り着くまで何度初期化したやら。

self["vbox_main"].get_property("width_request")

しても -1 が戻ってくるだけだし get_size() なんて無いと怒られるし。
うおぉっ進まない!以上止まっているので現状報告。

seekbar

やっとシークバーの使い方を理解したけどこんな時間だぁ!
三日も掛かったぞ!覚書ページに書き出しは明日!
万が一のためにコッチにバックアップ、以上。

y901x20090107.tar.gz

play.py

/usr/share/gst-python/0.10/examples

以下に play.py なんつーファイルがあった。
うおぉ!これは参考になる、コードをパクってもいいのかな?

でもプレイ状態の把握を自力フラグでやっているなぁ。
本家本元が配布しているファイルが…俺の考えた方法はマズいんかい?

プレイポーズボタン

まあ完成させて使い込めばわかることだ。

正月からプログラミング

正月からプログラミング。
まあ毎年のことだ。

動画プレイヤーを作る

マジで Linux 版動画プレイヤーを作っている。
以外に再生するだけなら簡単だった。
細かい部分を作っていくと多分…

そんときは又軽量プレイヤーだと言ってごまかしちゃえ!

名前は悩んだけど面倒なので Y901x にする予定。
この名前の著作権を持っている…別に申請はしていないが…
法律上そうなってしまうので使わないのももったいないから。

RealMedia が関係無いので抵抗はあるが今となってはどうでもいいだろう。
てか Cinema じゃどこか他国に同じ名前がありそう。

それではみなさん、サイトの Copyright 書き換えを忘れないように。
さっき覚書全ページ PHP 読み込みに書き換えた、メンドクセ!
まあこうしておけば来年からは1つ書き換えればいいだけだ。