From cb322a3acee9debf40c48ad1e3fb4458b0f51b7f Mon Sep 17 00:00:00 2001 From: Aleks Kissinger Date: Tue, 28 Feb 2017 14:46:39 +0100 Subject: generic nodes --- tikzit/src/gui/edgeitem.cpp | 89 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 tikzit/src/gui/edgeitem.cpp (limited to 'tikzit/src/gui/edgeitem.cpp') diff --git a/tikzit/src/gui/edgeitem.cpp b/tikzit/src/gui/edgeitem.cpp new file mode 100644 index 0000000..f45493d --- /dev/null +++ b/tikzit/src/gui/edgeitem.cpp @@ -0,0 +1,89 @@ +#include "tikzit.h" +#include "edgeitem.h" + +#include +#include + +EdgeItem::EdgeItem(Edge *edge) +{ + _edge = edge; + setFlag(QGraphicsItem::ItemIsSelectable); + + QPen pen(Qt::black); + pen.setWidth(2); + setPen(pen); + _cp1Item = new QGraphicsEllipseItem(this); + _cp1Item->setParentItem(this); + _cp2Item = new QGraphicsEllipseItem(this); + _cp2Item->setParentItem(this); + syncPos(); +} + +void EdgeItem::syncPos() +{ + _edge->setAttributesFromData(); + _edge->updateControls(); + QPainterPath path; + + path.moveTo (toScreen(_edge->tail())); + path.cubicTo(toScreen(_edge->cp1()), + toScreen(_edge->cp2()), + toScreen(_edge->head())); + setPath(path); + + float r = GLOBAL_SCALEF * 0.05; + //painter->drawEllipse(toScreen(_edge->cp1()), r, r); + //painter->drawEllipse(toScreen(_edge->cp2()), r, r); +} + +void EdgeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + //QGraphicsPathItem::paint(painter, option, widget); + painter->setPen(pen()); + painter->setBrush(Qt::NoBrush); + painter->drawPath(path()); + + + + if (isSelected()) { + QColor draw; + QColor draw1; + QColor fill; + + if (_edge->basicBendMode()) { + draw = Qt::blue; + draw1 = QColor(100,100,255,100); + fill = QColor(200,200,255,50); + } else { + draw = Qt::darkGreen; + draw1 = QColor(0, 150, 0, 50); + fill = QColor(200,255,200,150); + } + + painter->setPen(QPen(draw1)); + + float r = GLOBAL_SCALEF * _edge->cpDist(); + painter->drawEllipse(toScreen(_edge->source()->point()), r, r); + painter->drawEllipse(toScreen(_edge->target()->point()), r, r); + + painter->setPen(QPen(draw)); + painter->setBrush(QBrush(fill)); + + painter->drawLine(toScreen(_edge->tail()), toScreen(_edge->cp1())); + painter->drawLine(toScreen(_edge->head()), toScreen(_edge->cp2())); + + r = GLOBAL_SCALEF * 0.05; + painter->drawEllipse(toScreen(_edge->cp1()), r, r); + painter->drawEllipse(toScreen(_edge->cp2()), r, r); + + painter->setPen(QPen(Qt::black)); + painter->setBrush(QBrush(QColor(255,255,255,200))); + painter->drawEllipse(toScreen(_edge->mid()), r, r); + } +} + +QRectF EdgeItem::boundingRect() const +{ + float r = GLOBAL_SCALEF * (_edge->cpDist() + 0.2); + return QGraphicsPathItem::boundingRect().adjusted(-r,-r,r,r); +} -- cgit v1.2.3