diff --git a/beeref/selection.py b/beeref/selection.py index 32bb680..aa7613c 100644 --- a/beeref/selection.py +++ b/beeref/selection.py @@ -474,23 +474,25 @@ class SelectableMixin(BaseItemMixin): just_selected = self.just_selected self.just_selected = False if self.scale_active: - self.scene().undo_stack.push( - commands.ScaleItemsBy( - self.selection_action_items(), - self.get_scale_factor(event), - self.event_anchor, - ignore_first_redo=True)) + if self.get_scale_factor(event) != 1: + self.scene().undo_stack.push( + commands.ScaleItemsBy( + self.selection_action_items(), + self.get_scale_factor(event), + self.event_anchor, + ignore_first_redo=True)) event.accept() self.reset_actions() return elif self.rotate_active: self.scene().on_selection_change() - self.scene().undo_stack.push( - commands.RotateItemsBy( - self.selection_action_items(), - self.get_rotate_delta(event.scenePos()), - self.event_anchor, - ignore_first_redo=True)) + if self.get_rotate_delta(event.scenePos()) != 0: + self.scene().undo_stack.push( + commands.RotateItemsBy( + self.selection_action_items(), + self.get_rotate_delta(event.scenePos()), + self.event_anchor, + ignore_first_redo=True)) event.accept() self.reset_actions() return diff --git a/tests/test_selection.py b/tests/test_selection.py index 1289a49..13d9e3d 100644 --- a/tests/test_selection.py +++ b/tests/test_selection.py @@ -827,6 +827,19 @@ class SelectableMixinMouseEventsTestCase(SelectableMixinBaseTestCase): assert cmd.ignore_first_redo is True assert self.item.scale_active is False + def test_mouse_release_event_when_scale_action_zero(self): + self.event.scenePos = MagicMock(return_value=QtCore.QPointF(20, 90)) + self.item.scale_active = True + self.item.event_direction = QtCore.QPointF(1, 1) / math.sqrt(2) + self.item.event_anchor = QtCore.QPointF(100, 80) + self.item.event_start = QtCore.QPointF(20, 90) + self.item.scale_orig_factor = 1 + self.scene.undo_stack = MagicMock(push=MagicMock()) + + self.item.mouseReleaseEvent(self.event) + self.scene.undo_stack.push.assert_not_called() + assert self.item.scale_active is False + def test_mouse_release_event_when_rotate_action(self): self.event.scenePos = MagicMock(return_value=QtCore.QPointF(15, 25)) self.item.rotate_active = True @@ -836,6 +849,7 @@ class SelectableMixinMouseEventsTestCase(SelectableMixinBaseTestCase): self.scene.undo_stack = MagicMock(push=MagicMock()) self.item.mouseReleaseEvent(self.event) + self.scene.undo_stack.push.assert_called_once() args = self.scene.undo_stack.push.call_args_list[0][0] cmd = args[0] isinstance(cmd, commands.RotateItemsBy) @@ -845,6 +859,18 @@ class SelectableMixinMouseEventsTestCase(SelectableMixinBaseTestCase): assert cmd.ignore_first_redo is True assert self.item.rotate_active is False + def test_mouse_release_event_when_rotate_action_zero(self): + self.event.scenePos = MagicMock(return_value=QtCore.QPointF(15, 25)) + self.item.rotate_active = True + self.item.rotate_orig_degrees = 0 + self.item.rotate_start_angle = -45 + self.item.event_anchor = QtCore.QPointF(10, 20) + self.scene.undo_stack = MagicMock(push=MagicMock()) + + self.item.mouseReleaseEvent(self.event) + self.scene.undo_stack.push.assert_not_called() + assert self.item.rotate_active is False + def test_mouse_release_event_when_flip_action(self): self.event.pos = MagicMock(return_value=QtCore.QPointF(0, 40)) self.item.flip_active = True