From 8e9b111ae330f5ec91652d0817f1ba71ec2f4c40 Mon Sep 17 00:00:00 2001 From: RickyRister Date: Thu, 26 Dec 2024 02:45:06 -0800 Subject: [PATCH] track cards in rect so far and toggle isSelected on change --- cockatrice/src/game/zones/select_zone.cpp | 13 ++++++++++++- cockatrice/src/game/zones/select_zone.h | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/cockatrice/src/game/zones/select_zone.cpp b/cockatrice/src/game/zones/select_zone.cpp index 12df952f4..4cf3f349f 100644 --- a/cockatrice/src/game/zones/select_zone.cpp +++ b/cockatrice/src/game/zones/select_zone.cpp @@ -62,7 +62,17 @@ void SelectZone::mouseMoveEvent(QGraphicsSceneMouseEvent *event) if (card->getAttachedTo() && card->getAttachedTo()->getZone() != this) { continue; } - card->setSelected(selectionRect.intersects(card->mapRectToParent(card->boundingRect()))); + + bool inRect = selectionRect.intersects(card->mapRectToParent(card->boundingRect())); + if (inRect && !cardsInSelectionRect.contains(card)) { + // selection has just expanded to cover the card + cardsInSelectionRect.insert(card); + card->setSelected(!card->isSelected()); + } else if (!inRect && cardsInSelectionRect.contains(card)) { + // selection has just shrunk to no longer cover the card + cardsInSelectionRect.remove(card); + card->setSelected(!card->isSelected()); + } } static_cast(scene())->resizeRubberBand( deviceTransform(static_cast(scene())->getViewportTransform()).map(pos)); @@ -85,6 +95,7 @@ void SelectZone::mousePressEvent(QGraphicsSceneMouseEvent *event) void SelectZone::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { selectionOrigin = QPoint(); + cardsInSelectionRect.clear(); static_cast(scene())->stopRubberBand(); event->accept(); } diff --git a/cockatrice/src/game/zones/select_zone.h b/cockatrice/src/game/zones/select_zone.h index ff0c12182..4ee6d3b1b 100644 --- a/cockatrice/src/game/zones/select_zone.h +++ b/cockatrice/src/game/zones/select_zone.h @@ -11,6 +11,7 @@ class SelectZone : public CardZone Q_OBJECT private: QPointF selectionOrigin; + QSet cardsInSelectionRect; protected: void mouseMoveEvent(QGraphicsSceneMouseEvent *event);