GNOME 3.10 で誰でもすぐ気が付くこと。
nautilus, gnome-system-monitor 等のタイトルバーがコンテナに。
今までどおりとタッチパネルの両立を考えると上手い手段だよね。
タッチ操作では常に最大化、なのでタイトルバーにボタンを配置。
双方で別々に UI を作る必要がなくなる、違和感は最初だけだし。
メニューバーと右クリックを排除、アクティブウインドウが一画面。
アプリケーションメニューがスマホやタブレットのメニューボタン。
という考え方で UI を構築していけば勝手にタッチ対応、みたいに。
で、このタイトルバーにするにはどうするのかな。
GtkHeaderBar を作って set_titlebar() だけでいいようだ。
set_custom_title() で中心、pack_start() で左寄せにできる。
同じく GTK+ 3.10 で追加された GtkStack で Notebook みたいに使える。
GtkStackTransitionType にてアニメーションの指定まで可能。
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 | #!/usr/bin/env python3 from gi.repository import Gtk class Win(Gtk.Window): """ Python with GTK+ 3.10 new widget GtkStack, GtkStackSwitcher, GtkHeaderBar """ def __init__( self ): Gtk.Window.__init__( self ) # GtkStack stack = Gtk.Stack() stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT_RIGHT) # GtkStackSwitcher sw = Gtk.StackSwitcher() sw.set_stack(stack) # page1 tv = Gtk.TextView() buf = tv.get_buffer() buf.set_text( "This is a\nGtkTextView" ) stack.add_titled(tv, "view" , "view" ) # page2 label = Gtk.Label( "This is a\nGtkLabel" ) stack.add(label) stack.child_set_property(label, "title" , "label" ) # GtkHeaderBar hbar = Gtk.HeaderBar() hbar.set_custom_title(sw) hbar.set_show_close_button( True ) self .set_titlebar(hbar) self .add(stack) self .resize( 400 , 200 ) self .show_all() def do_delete_event( self , event): Gtk.main_quit() Win() Gtk.main() |
gtk_stack_add_titled() で add と title 指定が一発。
調べると単なる gtk_container_add_with_properties() のラッパーみたい。
なので child_set_property() にて title を変更することもできる。
予想より簡単だったし今後はコレでいこうと思う。
問題は GnomeShell 以外の環境ではどういう見た目になるか…