日別アーカイブ: 2021/08/14

GtkPan

困った。
Gtk ? 4.0: Migrating from GTK 3.x to GTK 4

GTK4 Python のページを作っているんだが。
GtkWdget の draw シグナルが廃止されていたのを忘れていた。

つまり枠無しウインドウで背景透過させる手段が無くなった。
これじゃ萌え萌えなデスクトップマスコットが作れないじゃん。
いや作る気は全然無いんだけど。

それと button-press-event 等が GtkGesture を使いなさいに変わった。
GtkGestureClick を試してみたけどダブルクリックの検出ができないみたい。
パンやスワイプが AppKit なんかより簡単に実装できるようになっているけど。

#!/usr/bin/env python3
 
import gi, sys
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk

class Win(Gtk.ApplicationWindow):
    '''
        GtkPan Sample Code
        TouchPanel and Mouse
    '''
    def __init__(self, app):
        Gtk.ApplicationWindow.__init__(self, application=app)
        # var
        self.mem_pan = -1
        # pan
        pan = Gtk.GesturePan(orientation=Gtk.Orientation.VERTICAL)
        pan.connect('pan', self.on_pan)
        self.add_controller(pan)
        # resize
        self.set_default_size(400, 300)

    def on_pan(self, ges, direction, offset):
        '''
            Pan Up on Quit
        '''
        if direction != self.mem_pan:
            self.mem_pan = direction
            if direction == Gtk.PanDirection.UP:
                self.close()

class App(Gtk.Application):
    def __init__(self):
        Gtk.Application.__init__(self)

    def do_startup(self):
        Gtk.Application.do_startup(self)
        Win(self)

    def do_activate(self):
        self.props.active_window.present()

app = App()
app.run(sys.argv)

てか GTK4 はマジでタッチパネル前提ってことですね。
過去のを残すと WindowsForm みたいに誰も WPF を使わない、みたいになるし。
AppKit もネットで見つけたコードは非推奨ばかり、みたいになるし。
GTK4 は正常進化に見えて実は過去をバッサリって感じです。

ついでに、GTK+ のドキュメントはプロパティのデフォルト値を書いていない。
GtkPan::orientation のデフォルトは HORIZONTAL だった。
自分で確かめるしか今は手段が無い、面倒なんですけど。

GTK3 のをそのまま書き換えしようと思っていたけど無理だ。
どういう感じでまとめよう?あぁまた更新が滞る。。。。。