def mouseReleaseEvent(self, mouse_event: QtGui.QMouseEvent): modifiers = mouse_event.modifiers() self._dragging_move = False if not mouse_event.button() == QtCore.Qt.LeftButton: return if self._rubber_band.isHidden(): if self._last_move_event_pos is None: if self._last_double_click: self._last_double_click = False else: item = self.itemAt(mouse_event.pos()) if item is not None: self._scene.set_selection((item, ), modifiers) return self._rubber_band.hide() potential_items = self.scene().items( self.mapToScene(self._rubber_band.geometry())) if settings.SELECT_ON_COVERED_PARTS.get_value(): self._scene.add_selection(potential_items, modifiers) return cards = [] rubber_band_polygon = QPolygonF( self.mapToScene(self._rubber_band.geometry())) covered_polygon = None for card in potential_items: rect = QRectF(card.boundingRect()) rect.translate(card.pos()) if rubber_band_polygon.intersects( QPolygonF(rect).subtracted(covered_polygon) if covered_polygon is not None else QPolygonF(rect)): cards.append(card) current_cover_area = QPolygonF( QRectF( rect.x() - 1, rect.y() - 1, rect.width() + 2, rect.height() + 2, )) if covered_polygon is None: covered_polygon = current_cover_area else: covered_polygon = covered_polygon.united(current_cover_area) self._scene.add_selection(cards, modifiers)