mirror of
https://github.com/rbreu/beeref.git
synced 2026-03-11 08:54:28 +00:00
Minor fixes for rubberband selection
Changed item shape so that it doesn't include handles during multi selection. This gives a more accurate behaviour for getting items out of the rubberband selection (except for the last remaining item, oh well).
This commit is contained in:
parent
37a01f80a2
commit
476c061071
4 changed files with 26 additions and 4 deletions
|
|
@ -127,7 +127,9 @@ class BeeGraphicsScene(QtWidgets.QGraphicsScene):
|
|||
|
||||
def mouseReleaseEvent(self, event):
|
||||
if self.rubberband_active:
|
||||
self.removeItem(self.rubberband_item)
|
||||
if self.rubberband_item.scene():
|
||||
logger.debug('Ending rubberband selection')
|
||||
self.removeItem(self.rubberband_item)
|
||||
self.rubberband_active = False
|
||||
if self.move_active and self.has_selection():
|
||||
delta = event.scenePos() - self.event_start
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@ class SelectableMixin(BaseItemMixin):
|
|||
|
||||
def shape(self):
|
||||
shape_ = super().shape()
|
||||
if self.has_selection_outline():
|
||||
if self.has_selection_handles():
|
||||
# Add extra space for scale and rotate interactive areas
|
||||
path = QtGui.QPainterPath()
|
||||
for corner in self.corners:
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ from beeref.scene import BeeGraphicsScene
|
|||
from .base import BeeTestCase
|
||||
|
||||
|
||||
class BeeGraphicsSceneNormalizeTestCase(BeeTestCase):
|
||||
class BeeGraphicsSceneTestCase(BeeTestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.undo_stack = QtGui.QUndoStack()
|
||||
|
|
@ -230,6 +230,7 @@ class BeeGraphicsSceneNormalizeTestCase(BeeTestCase):
|
|||
def test_mouse_release_event_when_rubberband_active(self, mouse_mock):
|
||||
event = MagicMock()
|
||||
self.scene.rubberband_active = True
|
||||
self.scene.addItem(self.scene.rubberband_item)
|
||||
self.scene.removeItem = MagicMock()
|
||||
|
||||
self.scene.mouseReleaseEvent(event)
|
||||
|
|
|
|||
|
|
@ -244,7 +244,7 @@ class SelectableMixinTestCase(SelectableMixinBaseTestCase):
|
|||
assert shape.bottomRight().x() == 100
|
||||
assert shape.bottomRight().y() == 80
|
||||
|
||||
def test_shape_when_selected(self):
|
||||
def test_shape_when_selected_single(self):
|
||||
self.item.SELECT_RESIZE_SIZE = 10
|
||||
self.item.SELECT_ROTATE_SIZE = 10
|
||||
self.view.get_scale = MagicMock(return_value=1)
|
||||
|
|
@ -260,6 +260,25 @@ class SelectableMixinTestCase(SelectableMixinBaseTestCase):
|
|||
assert shape.bottomRight().x() == 115
|
||||
assert shape.bottomRight().y() == 95
|
||||
|
||||
def test_shape_when_selected_multi(self):
|
||||
item2 = BeePixmapItem(QtGui.QImage())
|
||||
self.scene.addItem(item2)
|
||||
item2.setSelected(True)
|
||||
self.item.SELECT_RESIZE_SIZE = 10
|
||||
self.item.SELECT_ROTATE_SIZE = 10
|
||||
self.view.get_scale = MagicMock(return_value=1)
|
||||
self.item.setSelected(True)
|
||||
path = QtGui.QPainterPath()
|
||||
path.addRect(QtCore.QRectF(0, 0, 100, 80))
|
||||
|
||||
with patch('PyQt6.QtWidgets.QGraphicsPixmapItem.shape',
|
||||
return_value=path):
|
||||
shape = self.item.shape().boundingRect()
|
||||
assert shape.topLeft().x() == 0
|
||||
assert shape.topLeft().y() == 0
|
||||
assert shape.bottomRight().x() == 100
|
||||
assert shape.bottomRight().y() == 80
|
||||
|
||||
|
||||
class SelectableMixinScalingTestCase(SelectableMixinBaseTestCase):
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue