diff --git a/pyPhotoAlbum/mixins/mouse_interaction.py b/pyPhotoAlbum/mixins/mouse_interaction.py index a8af0b8..eeb69a8 100644 --- a/pyPhotoAlbum/mixins/mouse_interaction.py +++ b/pyPhotoAlbum/mixins/mouse_interaction.py @@ -310,10 +310,18 @@ class MouseInteractionMixin: if hasattr(main_window, "update_scrollbars"): main_window.update_scrollbars() else: - # Regular wheel: Vertical scroll - scroll_amount = delta * 0.5 + # Regular wheel: Two-finger scroll (vertical and horizontal) + delta_x = event.angleDelta().x() + delta_y = event.angleDelta().y() + + scroll_amount_x = delta_x * 0.5 + scroll_amount_y = delta_y * 0.5 + + old_pan_x = self.pan_offset[0] old_pan_y = self.pan_offset[1] - self.pan_offset[1] += scroll_amount + + self.pan_offset[0] += scroll_amount_x + self.pan_offset[1] += scroll_amount_y # Clamp pan offset to content bounds if hasattr(self, "clamp_pan_offset"): @@ -321,8 +329,9 @@ class MouseInteractionMixin: # If dragging, adjust drag_start_pos to account for pan_offset change if self.is_dragging and self.drag_start_pos: + pan_delta_x = self.pan_offset[0] - old_pan_x pan_delta_y = self.pan_offset[1] - old_pan_y - self.drag_start_pos = (self.drag_start_pos[0], self.drag_start_pos[1] + pan_delta_y) + self.drag_start_pos = (self.drag_start_pos[0] + pan_delta_x, self.drag_start_pos[1] + pan_delta_y) self.update() diff --git a/tests/test_mouse_interaction_mixin.py b/tests/test_mouse_interaction_mixin.py index 7632eab..81973bc 100755 --- a/tests/test_mouse_interaction_mixin.py +++ b/tests/test_mouse_interaction_mixin.py @@ -448,7 +448,7 @@ class TestWheelEvent: initial_pan = widget.pan_offset[1] event = Mock() - event.angleDelta = Mock(return_value=Mock(y=Mock(return_value=-120))) # Scroll down + event.angleDelta = Mock(return_value=Mock(x=Mock(return_value=0), y=Mock(return_value=-120))) # Scroll down event.modifiers = Mock(return_value=Qt.KeyboardModifier.NoModifier) widget.wheelEvent(event) @@ -489,7 +489,7 @@ class TestWheelEvent: initial_pan = widget.pan_offset[1] event = Mock() - event.angleDelta = Mock(return_value=Mock(y=Mock(return_value=120))) # Scroll up + event.angleDelta = Mock(return_value=Mock(x=Mock(return_value=0), y=Mock(return_value=120))) # Scroll up event.modifiers = Mock(return_value=Qt.KeyboardModifier.NoModifier) widget.wheelEvent(event) @@ -510,7 +510,7 @@ class TestWheelEvent: initial_pan = widget.pan_offset[1] event = Mock() - event.angleDelta = Mock(return_value=Mock(y=Mock(return_value=-120))) # Scroll down + event.angleDelta = Mock(return_value=Mock(x=Mock(return_value=0), y=Mock(return_value=-120))) # Scroll down event.modifiers = Mock(return_value=Qt.KeyboardModifier.NoModifier) widget.wheelEvent(event) @@ -890,7 +890,7 @@ class TestWheelEventWhileDragging: initial_drag_y = widget.drag_start_pos[1] event = Mock() - event.angleDelta = Mock(return_value=Mock(y=Mock(return_value=120))) # Scroll up + event.angleDelta = Mock(return_value=Mock(x=Mock(return_value=0), y=Mock(return_value=120))) # Scroll up event.modifiers = Mock(return_value=Qt.KeyboardModifier.NoModifier) widget.wheelEvent(event)