feat: add delete edge gradient

This commit is contained in:
parker
2025-06-24 01:28:49 +01:00
parent 4472d9c172
commit c8ead6e7b2
3 changed files with 58 additions and 24 deletions

View File

@@ -87,7 +87,8 @@ void Network::deleteEdge(QGraphicsItem* edge)
// view_->update(); // view_->update();
// NOTE: deleting edge kept giving me segmentation faults // NOTE: deleting edge kept giving me segmentation faults
// I coundn't figure it out so I'm just leaving it for now // I coundn't figure it out so I'm just leaving it for now
delete edge; // delete edge;
static_cast<NodeEdgeGraphic*>(edge)->cleanUp();
std::cout << "finished deleting edge\n----\n"; std::cout << "finished deleting edge\n----\n";
} }
@@ -268,14 +269,14 @@ void Network::highlightEdge(QGraphicsItem* edge, bool state)
if(!edge || !isType<NodeEdgeGraphic>(edge)) return; if(!edge || !isType<NodeEdgeGraphic>(edge)) return;
if(state) if(state)
{ {
static_cast<NodeEdgeGraphic*>(edge)->setColor(QColor("red")); static_cast<NodeEdgeGraphic*>(edge)->setDeleteHighlight(true);
prevHoverItem_=edge; prevHoverItem_=edge;
// NOTE: sloppy fix for color not updating // NOTE: sloppy fix for color not updating
view_->update(); view_->update();
} }
else else
{ {
static_cast<NodeEdgeGraphic*>(edge)->useDefaultColor(); static_cast<NodeEdgeGraphic*>(edge)->setDeleteHighlight(false);
// NOTE: sloppy fix for color not updating // NOTE: sloppy fix for color not updating
view_->update(); view_->update();
} }

View File

@@ -6,15 +6,32 @@
#include <QGraphicsScene> #include <QGraphicsScene>
NodeEdgeGraphic::NodeEdgeGraphic(SocketGraphic* socket1, SocketGraphic* socket2, QGraphicsItem *parent) NodeEdgeGraphic::NodeEdgeGraphic(SocketGraphic* socket1, SocketGraphic* socket2, QGraphicsItem *parent)
: QGraphicsItem(parent), socket1_{socket1}, socket2_{socket2}, defaultColor_{QColor("white")}, pen_{QPen(QColor("white"))} : QGraphicsItem(parent), socket1_{socket1}, socket2_{socket2}, defaultColor_{QColor("white")}
{ {
setZValue(-1); setZValue(-1);
color_=defaultColor_; color_=defaultColor_;
defaultPen_=QPen(defaultColor_);
defaultPen_.setCapStyle(Qt::RoundCap);
deleteHighlightPen_.setCapStyle(Qt::RoundCap);
deleteHighlightPen_.setWidth(1);
updateDeleteHighlightPen();
socket1_->addEdge(this); socket1_->addEdge(this);
socket2_->addEdge(this); socket2_->addEdge(this);
} }
void NodeEdgeGraphic::updateDeleteHighlightPen()
{
QLinearGradient gradient(pos1_, pos2_);
gradient.setColorAt(0.0, QColor(255, 0, 0, 200));
gradient.setColorAt(0.5, QColor(255, 0, 0, 50));
gradient.setColorAt(1.0, QColor(255, 0, 0, 200));
deleteHighlightPen_.setBrush(QBrush(gradient));
}
NodeEdgeGraphic::~NodeEdgeGraphic() NodeEdgeGraphic::~NodeEdgeGraphic()
{ {
std::cout << "edge destructor\n"; std::cout << "edge destructor\n";
@@ -28,29 +45,36 @@ void NodeEdgeGraphic::updatePath()
path_.clear(); path_.clear();
path_.moveTo(pos1_); path_.moveTo(pos1_);
path_.cubicTo(pos1_-QPoint(0,cubicStrength), pos2_+QPoint(0,cubicStrength), pos2_); path_.cubicTo(pos1_-QPoint(0,cubicStrength), pos2_+QPoint(0,cubicStrength), pos2_);
updateDeleteHighlightPen();
update(); update();
} }
void NodeEdgeGraphic::setPos(QPointF pos1, QPointF pos2) void NodeEdgeGraphic::setPos(QPointF pos1, QPointF pos2)
{ {
prepareGeometryChange();
pos1_ = pos1; pos1_ = pos1;
pos2_ = pos2; pos2_ = pos2;
prepareGeometryChange();
updatePath(); updatePath();
} }
void NodeEdgeGraphic::setDeleteHighlight(bool enable)
{
deleteHighlight_=enable;
update();
}
void NodeEdgeGraphic::setStartPos(QPointF pos) void NodeEdgeGraphic::setStartPos(QPointF pos)
{ {
pos1_ = pos;
prepareGeometryChange(); prepareGeometryChange();
pos1_ = pos;
updatePath(); updatePath();
} }
void NodeEdgeGraphic::setEndPos(QPointF pos) void NodeEdgeGraphic::setEndPos(QPointF pos)
{ {
pos2_ = pos;
prepareGeometryChange(); prepareGeometryChange();
pos2_ = pos;
updatePath(); updatePath();
} }
@@ -72,30 +96,34 @@ QPainterPath NodeEdgeGraphic::shape() const{
return stroker.createStroke(path_); return stroker.createStroke(path_);
} }
void NodeEdgeGraphic::setColor(QColor color) // void NodeEdgeGraphic::setColor(QColor color)
{ // {
std::cout << "color set to: " << color.name().toStdString() << "\n"; // std::cout << "color set to: " << color.name().toStdString() << "\n";
color_ = color; // color_ = color;
pen_.setColor(color_); // pen_.setColor(color_);
update(); // update();
} // }
void NodeEdgeGraphic::useDefaultColor() // void NodeEdgeGraphic::useDefaultColor()
{ // {
setColor(defaultColor_); // setColor(defaultColor_);
} // }
void NodeEdgeGraphic::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) void NodeEdgeGraphic::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{ {
// std::cout << "painting\n"; // std::cout << "painting\n";
pen_.setCapStyle(Qt::RoundCap); painter->setPen(deleteHighlight_ ? deleteHighlightPen_ : defaultPen_);
painter->setPen(pen_);
painter->drawPath(path_); painter->drawPath(path_);
} }
void NodeEdgeGraphic::cleanUp() void NodeEdgeGraphic::cleanUp()
{ {
// these probably aren't necessary but i'm trying to fix a bug
prepareGeometryChange();
update();
scene()->update();
scene()->removeItem(this); scene()->removeItem(this);
socket1_->removeEdge(this); socket1_->removeEdge(this);
socket2_->removeEdge(this); socket2_->removeEdge(this);

View File

@@ -14,18 +14,24 @@ public:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
QPainterPath shape() const override; QPainterPath shape() const override;
void setColor(QColor color); // void setColor(QColor color);
void useDefaultColor(); // void useDefaultColor();
void updateDeleteHighlightPen();
void setPos(QPointF pos1, QPointF pos2); void setPos(QPointF pos1, QPointF pos2);
void setStartPos(QPointF pos); void setStartPos(QPointF pos);
void setEndPos(QPointF pos); void setEndPos(QPointF pos);
void cleanUp();
void setDeleteHighlight(bool enable);
QPen deleteHighlightPen_;
QPen defaultPen_;
bool deleteHighlight_=false;
private: private:
SocketGraphic* socket1_; SocketGraphic* socket1_;
SocketGraphic* socket2_; SocketGraphic* socket2_;
QColor color_; QColor color_;
QColor defaultColor_; QColor defaultColor_;
QPen pen_;
QPointF pos1_; QPointF pos1_;
QPointF pos2_; QPointF pos2_;
QPainterPath path_; QPainterPath path_;
@@ -33,6 +39,5 @@ private:
qreal padding_=40; qreal padding_=40;
void updatePath(); void updatePath();
void cleanUp();
}; };