From e3f66ea81a984ee69e80f3bbc21207e349e2fe63 Mon Sep 17 00:00:00 2001 From: parker Date: Tue, 15 Jul 2025 01:04:07 +0100 Subject: [PATCH] feat: fix socket hover --- src/Gui/Network/Network.cpp | 20 +++++++++++++++----- src/Gui/Network/Network.h | 1 + src/Gui/Network/SocketGraphic.cpp | 12 +++++++++++- src/Gui/Network/SocketGraphic.h | 2 ++ 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/Gui/Network/Network.cpp b/src/Gui/Network/Network.cpp index bc231b2..5e07f06 100644 --- a/src/Gui/Network/Network.cpp +++ b/src/Gui/Network/Network.cpp @@ -190,6 +190,16 @@ void Network::mouseMoved(QMouseEvent *event) QList hoverItems = view_->items(event->pos()); + // handle previous items + for(QGraphicsItem* item : prevHoverItems_) + { + if(isType(item)) + { + static_cast(item)->setHover(false); + } + } + prevHoverItems_.clear(); + if(state_==State::MOVING_NODE) { moveNodes(view_->mapToScene(event->pos())+nodeMoveDelta_); @@ -241,7 +251,11 @@ void Network::mouseMoved(QMouseEvent *event) std::cout << "unhighlighting\n"; highlightEdge(prevHoverItem, false); } - + if(auto hoverSocket = closestItemOfType(hoverItems, view_->mapToScene(event->pos()))) + { + static_cast(hoverSocket)->setHover(true); + prevHoverItems_.insert(hoverSocket); + } } void Network::moveNodes(QPointF pos) @@ -331,14 +345,10 @@ void Network::highlightEdge(QGraphicsItem* edge, bool state) { static_cast(edge)->setDeleteHighlight(true); prevHoverItem_=edge; - // NOTE: sloppy fix for color not updating - view_->update(); } else { static_cast(edge)->setDeleteHighlight(false); - // NOTE: sloppy fix for color not updating - view_->update(); } } diff --git a/src/Gui/Network/Network.h b/src/Gui/Network/Network.h index 82e853d..041dcaa 100644 --- a/src/Gui/Network/Network.h +++ b/src/Gui/Network/Network.h @@ -43,6 +43,7 @@ private: SocketGraphic* startSocket_=nullptr; QGraphicsItem* prevHoverItem_=nullptr; + std::unordered_set prevHoverItems_; // nodes currently being moved std::vector moveNodeBuffer; QPointF nodeMoveDelta_; diff --git a/src/Gui/Network/SocketGraphic.cpp b/src/Gui/Network/SocketGraphic.cpp index 5916fe3..3c4d586 100644 --- a/src/Gui/Network/SocketGraphic.cpp +++ b/src/Gui/Network/SocketGraphic.cpp @@ -10,7 +10,6 @@ SocketGraphic::SocketGraphic(enzo::nt::SocketIOType type, enzo::nt::OpId opId, u brushActive_ = QBrush("white"); brushInactive_ = QBrush("#9f9f9f"); socketSize_ = 3; - setAcceptHoverEvents(true); initBoundingBox(); } @@ -102,6 +101,17 @@ void SocketGraphic::paint(QPainter *painter, const QStyleOptionGraphicsItem *opt } +void SocketGraphic::setHover(bool state) +{ + bool prevState = hovered_; + + hovered_ = state; + if(state!=prevState) + { + update(); + } +} + void SocketGraphic::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { hovered_ = true; diff --git a/src/Gui/Network/SocketGraphic.h b/src/Gui/Network/SocketGraphic.h index 7458c8e..6997716 100644 --- a/src/Gui/Network/SocketGraphic.h +++ b/src/Gui/Network/SocketGraphic.h @@ -25,6 +25,7 @@ public: enzo::nt::OpId getOpId() const; unsigned int getIndex() const; + void setHover(bool state); private: int socketSize_ = 1; @@ -37,6 +38,7 @@ private: qreal paddingScale_=20; QRectF boundRect_; enzo::nt::OpId opId_; + bool isHover_ = false; void initBoundingBox(); protected: