mirror of
https://github.com/rbreu/beeref.git
synced 2026-03-11 08:54:28 +00:00
Fix rotate and scale pushing undo command when no movement
This commit is contained in:
parent
5fde9f35a7
commit
1de1e2eec9
2 changed files with 40 additions and 12 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue