Fixed tests and flake8 errors. Updated changelog.

This commit is contained in:
Sebastian Parborg 2024-06-09 14:54:00 +02:00
parent 9a6f7c8812
commit e610333f60
4 changed files with 30 additions and 8 deletions

View file

@ -22,6 +22,11 @@ Added
further files will be ignored, as previously. If the first argument
isn't a bee file, all files will be treated as images and inserted
as if opened with "Insert -> Images".
* It is now possible to shift around the crop rectagle by clicking and
dragging. To confirm the crop, you can now either click outside the
crop rectagle or double click inside the crop rectangle. Canceling
the crop operation is now only possible by pressing the escape key.
(by DarkDefender)
Fixed
-----

View file

@ -559,7 +559,7 @@ class BeePixmapItem(BeeItemMixin, QtWidgets.QGraphicsPixmapItem):
def ensure_crop_box_is_inside(self, point):
"""Returns the modified point that ensures that the crop rectangle is
still withint the pixmap.
still within the pixmap.
The point passed is assumed to be the top
left crop rectangle position.
@ -623,7 +623,8 @@ class BeePixmapItem(BeeItemMixin, QtWidgets.QGraphicsPixmapItem):
if self.crop_mode:
diff = event.pos() - self.crop_mode_event_start
if self.crop_mode_move == self.crop_temp:
new = self.ensure_crop_box_is_inside(self.crop_temp.topLeft() + diff)
new = self.ensure_crop_box_is_inside(
self.crop_temp.topLeft() + diff)
self.crop_temp.moveTo(new)
if self.crop_mode_move == self.crop_handle_topleft:
new = self.ensure_point_within_crop_bounds(

View file

@ -734,8 +734,8 @@ def test_mouse_press_event_crop_mode_inside_edge(mouse_mock, qapp, item):
event.accept.assert_called_once_with()
@patch('beeref.selection.SelectableMixin.mousePressEvent')
def test_mouse_press_event_crop_mode_outside_handle_inside_crop(
@patch('PyQt6.QtWidgets.QGraphicsScene.mouseDoubleClickEvent')
def test_mouse_doubleclick_event_crop_mode_outside_handle_inside_crop(
mouse_mock, qapp, item):
item.crop_mode = True
item.crop_temp = QtCore.QRectF(0, 0, 100, 80)
@ -744,7 +744,7 @@ def test_mouse_press_event_crop_mode_outside_handle_inside_crop(
event = MagicMock()
event.pos.return_value = QtCore.QPointF(50, 50)
item.mousePressEvent(event)
item.mouseDoubleClickEvent(event)
assert item.crop_mode_move is None
item.exit_crop_mode.assert_called_once_with(confirm=True)
mouse_mock.assert_not_called()
@ -763,7 +763,7 @@ def test_mouse_press_event_crop_mode_outside_handle_outside_crop(
item.mousePressEvent(event)
assert item.crop_mode_move is None
item.exit_crop_mode.assert_called_once_with(confirm=False)
item.exit_crop_mode.assert_called_once_with(confirm=True)
mouse_mock.assert_not_called()
event.accept.assert_called_once_with()
@ -820,6 +820,21 @@ def test_ensure_point_within_crop_bounds(
assert result == QtCore.QPointF(*expected)
@pytest.mark.parametrize('point,expected',
[((-10, -10), (0, 0)),
((-10, 80), (0, 40)),
((100, 80), (70, 40)),
((100, -10), (70, 0))])
def test_ensure_crop_box_is_inside(
point, expected, qapp, item):
pixmap = MagicMock()
pixmap.size.return_value = QtCore.QRectF(0, 0, 100, 80)
item.pixmap = MagicMock(return_value=pixmap)
item.crop_temp = QtCore.QRectF(10, 20, 30, 40)
result = item.ensure_crop_box_is_inside(QtCore.QPointF(*point))
assert result == QtCore.QPointF(*expected)
@pytest.mark.parametrize(
'start,pos,handle,expected',
[[(10, 10), (5, 5), 'crop_handle_topleft', (5, 15, 35, 45)],
@ -829,7 +844,8 @@ def test_ensure_point_within_crop_bounds(
[(25, 10), (20, 5), 'crop_edge_top', (10, 15, 30, 45)],
[(10, 40), (5, 35), 'crop_edge_left', (5, 20, 35, 40)],
[(35, 25), (30, 20), 'crop_edge_bottom', (10, 20, 30, 35)],
[(40, 40), (35, 35), 'crop_edge_right', (10, 20, 25, 40)]])
[(40, 40), (35, 35), 'crop_edge_right', (10, 20, 25, 40)],
[(15, 30), (5, 10), 'crop_temp', (0, 0, 30, 40)]])
@patch('beeref.selection.SelectableMixin.mouseMoveEvent')
def test_mouse_move_when_crop_mode_inside_handle(
mouse_mock, start, pos, handle, expected, qapp, item):

View file

@ -22,7 +22,7 @@ def test_cancel_crop_mode_when_crop(view, item):
view.scene.crop_item = item
item.exit_crop_mode = MagicMock()
view.scene.cancel_crop_mode()
item.exit_crop_mode.assert_called_once_with(confirm=False)
item.exit_crop_mode.assert_called_once_with(confirm=True)
def test_cancel_crop_mode_when_no_crop(view, item):