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

デスクトッププロパティ

多重起動防止をどうするか調べていている。
どうやら atom を使う方法があるようだ、ということで

gtk.gdk.atom_intern

とかでググりまくっていたらこんなのを見つけた。

Extended Window Manager Hints

んーということならデスクトップのプロパティは

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import gtk

# デスクトップ取得
w = gtk.gdk.get_default_root_window()
# 得られるプロパティのリスト取得
p = gtk.gdk.atom_intern("_NET_SUPPORTED")
a = w.property_get(p)[2]
# ループで丸ごと表示
for r in a:
    p = gtk.gdk.atom_intern(r)
    print r
    print w.property_get(p)

とすればどのキーワードでどのプロパティが取れるか全部表示できて解りやすい。
とりあえず出力されるタプルの3番目がリストか文字列になっている。
None でないのを展開、又は文字列ならそのまま表示させれば情報が手に入る。
freedesktop.org だから KDE でも問題無いと思う、試していないけど。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import gtk

# デスクトップ取得
w = gtk.gdk.get_default_root_window()

# ディスプレイサイズ
p = gtk.gdk.atom_intern("_NET_DESKTOP_GEOMETRY")
print "ディスプレイ幅",w.property_get(p)[2][0]
print "ディスプレイ高さ",w.property_get(p)[2][1]

# ワークエリア
p = gtk.gdk.atom_intern("_NET_WORKAREA")
area = w.property_get(p)
print "ワークエリア:Left",w.property_get(p)[2][0]
print "ワークエリア:Top",w.property_get(p)[2][1]
print "ワークエリア:Width",w.property_get(p)[2][2]
print "ワークエリア:Height",w.property_get(p)[2][3]

# 仮想デスクトップの数
p = gtk.gdk.atom_intern("_NET_NUMBER_OF_DESKTOPS")
print "仮想デスクトップの数",w.property_get(p)[2][0]

# 現在の仮想デスクトップ位置
p = gtk.gdk.atom_intern("_NET_CURRENT_DESKTOP")
print "現在の仮想デスクトップ位置",w.property_get(p)[2][0]

# 現在の仮想デスクトップ名
p = gtk.gdk.atom_intern("_NET_DESKTOP_NAMES")
print "現在の仮想デスクトップ名",w.property_get(p)[2],"\n"

_NET_CLIENT_LIST で表示されているウインドウ ID
_NET_ACTIVE_WINDOW でアクティブウインドウ ID

が得られるんだがコレを上手く使えないかな?いまココ

リサイズ処理はなんとかなった

動画のオリジナルサイズを得る

でリサイズはなんとかなったぞと。
コレでイケたのか、なんて遠回りをしたものだ。
でも勉強にはなったのでヨシとしよう。

次はリサイズするためのメニュー作りだ。

PyGTK + Gladeのアプリケーションにおけるハンドラ関数について(後半) – 試験運用中なLinux備忘録

ユーザーデータがやはり Glade からは使えないみたい。
menuitem 毎にハンドラ作成ではコードが美しく無いんだが…
綺麗に書かなきゃ Python じゃないし。
○uby 屋は他人が読みにくいコードを書くのを好(以下略

しかもラジオボタンのグループにすると何故かグループ全部シグナル吐くし…
まだイマイチ理解していないだけだと思うけど、後は明日だ。

他人のプレイヤー

morphin – Google Code

なんて Python 製プレイヤーを見つけた。
でもインストールしないと起動できないみたい…

まあ思いっきり作りかけのようだけど参考にさせてもらおう。
同じ処理にならないように考えながら。
リサイズ処理は未実装だなぁと思ったけど…他の所にこんなのが。

rc = widget.get_allocation()

で GdkRectangle が取れる!この方法があったか。
rc.width で FILL でも幅が解る、これでリサイズはなんとかなりそうだ。
なんだよ、GetWindowRect() 相当が Gtk+ にもあったんだ。

self.player.get_property(“stream-info-value-array”)

で GstStreamInfo のリストが取れるようだ。
stream-info だけでは gobject.GPointer が返ってくるだけだもん。
のでどうにもできなかった、使うなと書いてあるし。
しかしコレをどう展開すればいいのかな?いまココ。

しかし…

meopera

たいしてカスタマイズしていない Opera だが毎日無茶な使い方をしている。

指定サイズでドンズマリ!

昨日とりあえずボリューム調節関連だけアップロードして追記しようと考えた。
とにかく後はリサイズだわ、それさえ済めばアルファ版として成立すると思う。

とりあえずこんなのを定義して

self.video = {  "width": 0,
                "height": 0,
                "videocrop": None}

ほとんど海外某所のコピペだがこーんなのを定義しておいて

# サイズ取り出しの処理
# 何かシンクロさせるものを作らないといけないので videocrop でも
# ちなみにコレの left とかのプロパティを弄くればクリッピングできる
bin = gst.Bin('video-sink')
self.video["videocrop"] = gst.element_factory_make('videocrop')
bin.add(self.video["videocrop"])
pad = self.video["videocrop"].get_pad("sink")
bin.add_pad(gst.GhostPad("sink", pad))
videosink = gst.element_factory_make('autovideosink')
bin.add(videosink)
gst.element_link_many(self.video["videocrop"], videosink)
self.player.set_property("video-sink", bin)
pad.connect("notify::caps", self.gst_on_notify_caps)

コネクトするハンドラをば

def gst_on_notify_caps(self, pad, pcaps):
    caps = pad.get_negotiated_caps()
    if caps != None:
        if "video" in caps.to_string():
            x = caps[0]["width"]
            y = caps[0]["height"]
            self.new_size(x, y)

元サイズはコレでなんとか取れるようになった。
(もっといい方法は無いのかなぁ?)
後は指定倍率にリサイズする関数を作ればいい。

def new_size(self, x, y):
    if x == self.video["width"] and y == self.video["height"]:
        return
    self.video["width"] = x
    self.video["height"] = y
    # で…あれ??????

今のレイアウトではいったいどうやったらこのサイズにできる?
うわあぁ丸ごとソース変更になりそうな悪寒。

そのまま

結局そのままいった。

GDK イベントの取得とリサイズ

チラツキは後でなんとかすればいいや!
地味に小ネタを入れておいたからゆるしてくれ。
って待っている人なんかいないと思うけど。

てゆーか給付金を早く配ってくれよ政治家さん。

テレビニュースの捏造っぷりは最近やりたい放題だよね。
「給付金は無駄」だと言っている奴なんかいるはずがないのによくもまあ。
誘導尋問のインタビューとご都合主義の編集とスタッフのさくらはもうウンザリだ。

その捏造をネタに国会をやる民主党は更に…俺がこんなことを書いてもしゃーないが。
そろそろ朝はおはスタしか見る番組がない現実をなんとかしてくれよ。