Skip to content

Commit

Permalink
Fix pan tool
Browse files Browse the repository at this point in the history
Press middle mouse button to drag canvas.
  • Loading branch information
amolenaar committed Mar 30, 2023
1 parent 7bd98bc commit 5782805
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
2 changes: 2 additions & 0 deletions examples/demo.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
)
from gaphas.tool.itemtool import Segment
from gaphas.tool.rubberband import RubberbandPainter, RubberbandState, rubberband_tool
from gaphas.tool.scroll import pan_tool
from gaphas.util import text_extents, text_underline
from gaphas.view import GtkView

Expand Down Expand Up @@ -123,6 +124,7 @@ def apply_default_tool_set(view):
view.add_controller(item_tool(view))
for tool in zoom_tools(view):
view.add_controller(tool)
view.add_controller(pan_tool(view))
view.add_controller(view_focus_tool(view))

view.add_controller(rubberband_tool(view, rubberband_state(view)))
Expand Down
25 changes: 17 additions & 8 deletions gaphas/tool/scroll.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from gi.repository import Gdk, Gtk

from gaphas.tool.zoom import Zoom
from gaphas.tool.hover import set_cursor
from gaphas.view import GtkView


Expand Down Expand Up @@ -60,7 +61,8 @@ def __init__(self):
self.reset()

def reset(self):
self.pos = None
self.h = 0
self.v = 0


def pan_tool(view: GtkView) -> Gtk.GestureDrag:
Expand All @@ -69,22 +71,29 @@ def pan_tool(view: GtkView) -> Gtk.GestureDrag:
if Gtk.get_major_version() == 3
else Gtk.GestureDrag.new()
)
gesture.set_button(2)
gesture.set_button(Gdk.BUTTON_MIDDLE)
pan_state = PanState()
gesture.connect("drag-begin", on_drag_begin, pan_state)
gesture.connect("drag-update", on_drag_update, pan_state)
gesture.connect("drag-end", on_drag_end)
return gesture


def on_drag_begin(gesture, _start_x, _start_y, pan_state):
def on_drag_begin(gesture, start_x, start_y, pan_state):
view = gesture.get_widget()
m = view.matrix
pan_state.pos = (m[4], m[5])
pan_state.h = view.hadjustment.get_value()
pan_state.v = view.vadjustment.get_value()
set_cursor(view, "move")
gesture.set_state(Gtk.EventSequenceState.CLAIMED)


def on_drag_update(gesture, offset_x, offset_y, pan_state):
view = gesture.get_widget()
m = view.matrix
x0, y0 = pan_state.pos
m.translate(x0 + offset_x - m[4], y0 + offset_y - m[5])
view.hadjustment.set_value(pan_state.h - offset_x)
view.vadjustment.set_value(pan_state.v - offset_y)
set_cursor(view, "move")


def on_drag_end(gesture, _offset_x, _offset_y):
view = gesture.get_widget()
set_cursor(view, "default")

0 comments on commit 5782805

Please sign in to comment.