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)
それと残りに GtkGestureStylus なんてのがあるけど。
どう考えてもスタイラスペン用途だよなって。
持っていないし GNOME てか Linux での使い道も思いつかない。
クリスタが Linux 対応するはずがないし、適材適所だよ。
なので無視でいいかなって。
ところでコレはファイルマネージャからのドロップではない。
GTK4 は drag_dest_add_uri_targets が使えないね。
Drag & dropping files with GTK4 – Platform – GNOME Discourse
こんなのを見つけたけど同じ所でクラッシュする。
うーん、今日もゲンナリするくらい進まない。