GTK4 では GtkHeaderBar の set_title が無くなった。
というよりタイトル表示部が Widget に固定されてしまった。
いや set_title 関数は自分で定義すればいい。
後は Widget として GtkLabel を入れれば今までのようにはできる。
とはいえそれじゃ普通のラベルだから Bold 化とかしなきゃいけないな。
サブタイトルは薄く小さくしなきゃだし、CSS でやるのかな?
そういえばサブタイトルは gnome-text-editor が実装している。
どうやっているのかソースを覗いてみよう、GPL っていいですね。
src/editor-window.ui ? main ? GNOME / gnome-text-editor ? GitLab
コレを真似すればいいんだけど、attributes って何だ?
それを解っていないと定義も糞もないコピペアプリにしかならない。
調べると Pango 関連らしい、よしコードで同じになるように書いてみよう。
#!/usr/bin/env python3 from gi.repository import Gtk, Pango class ComipoliHeaderBar(Gtk.HeaderBar): def __init__(self): Gtk.HeaderBar.__init__(self) # LR Button self.lr_button = Gtk.ToggleButton(label='L<-R', can_focus=False, focus_on_click=False) self.pack_start(self.lr_button) # Grid Button self.grid_button = Gtk.Button(icon_name='view-grid-symbolic', can_focus=False, focus_on_click=False) self.pack_start(self.grid_button) # Main Title bold = Pango.attr_weight_new(Pango.Weight.BOLD) alistm = Pango.AttrList() alistm.insert(bold) self.title = Gtk.Label(label='', single_line_mode=True, ellipsize=Pango.EllipsizeMode.END, attributes=alistm) # Sub Title subs = Pango.attr_scale_new(0.8222) suba = Pango.attr_foreground_alpha_new(32767) alists = Pango.AttrList() alists.insert(subs) alists.insert(suba) self.subtitle = Gtk.Label(label='--', single_line_mode=True, ellipsize=Pango.EllipsizeMode.END, attributes=alists) # Title pack box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, valign=Gtk.Align.CENTER) box.append(self.title) box.append(self.subtitle) self.set_title_widget(box) # Menu Button pack @ after Window.__init__ def set_title(self, text): self.title.set_label(text) def set_subtitle(self, text): self.subtitle.set_label(text)
まったく同じになろうようにしてみた、滅茶苦茶面倒だった。
GtkBuilder はあんな単純表記を読んでコレをやっているのか、凄いんだな。
とにかく、attributes の指定は Pango の関数と値の省略表記ですね。
gnome-text-editor は GtkCenterBox を挟んでいるけどさ。
アレは別の用途なのでこういう場合はいらない。
そういえばタイトルが長い場合に収めるためウインドウが大きくされるのも防がないと。
ellipsize プロパティを定義すると自動でやってくれるみたい、なるほど。
後はウインドウが非アクティブになった時にタイトルを薄くすればオケ。
残りの GTK4 化は今までに書いたことの応用でイケそうだ。
何か見つけたら書いていきます。
ただ、矢印だけのカーソルは無くなってしまったようで。
とはいえ、そもそも作った本人はマウスでページめくりをしたことが無い。
ということで GTK4 版はマウスカーソルの変更は無しにする予定。
えっ夏鳥?昨日も今日もオケラでションボリしてます。