タイトルどおりのモノを作っているので覚書。
実は GtkHeaderBar って Widget を置けるはずがない所に描写している。
なのでこんなことがおこります。
いきなり少し違うけど PyGObject のオーバーライドバグ。
1 2 | def do_size_allocate( self , allocation): pass |
BUG って出るんだね、親切になったもんだ。
connect メソッドなら普通にコネクトできる。
ただ本体の大きさで ClutterActor のサイズを合わせると
1 2 3 4 5 6 7 8 9 | class ClPlayer(Gtk.Window): def __init__( self ): Gtk.Window.__init__( self ) # etc... self .connect( "size-allocate" , self .on_size_allocate) def on_size_allocate( self , widget, allocation): self .actor.set_width(allocation.width) self .actor.set_height(allocation.height) |
外枠とタイトルバーの大きさの二倍が加算されてしまうようです。
Box を噛ませてその Box の大きさに合わせてなら問題ないようだ。
GtkHeaderBar さえ使わなければコレでもいいんですけどね。
それと draw シグナルは絶対に処理してはいけない。
1 2 | def do_draw( self , cr): pass |
GtkHeaderBar が真っ黒なレゴになってしまいます。
描写処理は Clutter で行うようにする。
そんなこんなで色々困ったことが起こったけどなんとかなった。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #!/usr/bin/env python3 import sys, gi gi.require_version( "Gtk" , "3.0" ) gi.require_version( "ClutterGst" , "3.0" ) gi.require_version( "GtkClutter" , "1.0" ) from gi.repository import Gtk, Gdk, ClutterGst, GtkClutter, Clutter # Own Change class ClPlayer(Gtk.Window): def __init__( self ): Gtk.Window.__init__( self ) # Dark Theme settings = Gtk.Settings.get_default() settings.props.gtk_application_prefer_dark_theme = True # GtkHeaderBar self .hbar = Gtk.HeaderBar() self .hbar.set_show_close_button( True ) self .set_titlebar( self .hbar) # Full Screen Button fullbutton = Gtk.Button.new() image_full = Gtk.Image.new_from_icon_name( "view-fullscreen-symbolic" , Gtk.IconSize.MENU) fullbutton.set_image(image_full) self .hbar.pack_end(fullbutton) # new self .actor = Clutter.Actor.new() self .content = ClutterGst.Aspectratio.new() self .player = ClutterGst.Playback.new() # set self .content.set_player( self .player) self .actor.set_content( self .content) # add embed = GtkClutter.Embed() stage = embed.get_stage() stage.add_child( self .actor) # box vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0 ) vbox.pack_start(embed, True , True , 0 ) vbox.connect( "size-allocate" , self .on_vbox_size_allocate) self .add(vbox) # play self .player.set_uri(URI) self .player.set_playing( True ) # show self .show_all() def do_delete_event( self , event): Gtk.main_quit() def on_vbox_size_allocate( self , vbox, allocation): """ Fit a Clutter.Actor """ self .actor.set_width(allocation.width) self .actor.set_height(allocation.height) GtkClutter.init(sys.argv) ClutterGst.init(sys.argv) win = ClPlayer() Gtk.main() |
GtkHeaderBar とダークテーマが実装できた。
次はシークバーだな、また色々出るんだろうな…
だから楽しいんだYO!