GtkGestureDrag

GtkGesture ラスト、GtkGestureDrag を。
マウスでドラッグすると文字列が着いてくるサンプルコード。

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

class Win(Gtk.ApplicationWindow):
    '''
        GtkGestureDrag Sample Code
    '''
    def __init__(self, app):
        Gtk.ApplicationWindow.__init__(self, application=app)
        # var
        self.offset_x = 50
        self.offset_y = 50
        self.draw_x = 0
        self.draw_y = 0
        # gesture drag
        drag = Gtk.GestureDrag()
        drag.connect('drag-begin', self.on_gesture_drag_begin)
        drag.connect('drag-update', self.on_gesture_drag_update)
        drag.connect('drag-end', self.on_gesture_drag_end)
        self.add_controller(drag)
        # view
        self.view = Gtk.DrawingArea()
        self.view.set_draw_func(self.view_draw_func)
        self.set_child(self.view)
        # resize
        self.set_default_size(400, 300)

    def view_draw_func(self, da, cr, width, height):
        cr.move_to(self.draw_x + self.offset_x, self.draw_y + self.offset_y)
        cr.set_font_size(36)
        cr.show_text('Drag and Drop')

    def on_gesture_drag_begin(self, ges, offset_x, offset_y):
        pass

    def on_gesture_drag_end(self, ges, offset_x, offset_y):
        self.offset_x += offset_x
        self.offset_y += offset_y

    def on_gesture_drag_update(self, ges, offset_x, offset_y):
        self.draw_x = offset_x
        self.draw_y = offset_y
        self.view.queue_draw()

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)

drag

それと残りに GtkGestureStylus なんてのがあるけど。
どう考えてもスタイラスペン用途だよなって。
持っていないし GNOME てか Linux での使い道も思いつかない。
クリスタが Linux 対応するはずがないし、適材適所だよ。
なので無視でいいかなって。

ところでコレはファイルマネージャからのドロップではない。
GTK4 は drag_dest_add_uri_targets が使えないね。

Drag & dropping files with GTK4 – Platform – GNOME Discourse

こんなのを見つけたけど同じ所でクラッシュする。
うーん、今日もゲンナリするくらい進まない。