void NodePainter:: drawFilledConnectionPoints(QPainter* painter, NodeGeometry const& geom, NodeState const& state) { painter->setPen(Qt::cyan); painter->setBrush(Qt::cyan); auto diameter = geom.connectionPointDiameter(); auto drawPoints = [&](PortType portType) { size_t n = state.getEntries(portType).size(); for (size_t i = 0; i < n; ++i) { QPointF p = geom.connectionPointScenePosition(i, portType); if (!state.connectionID(portType, i).isNull()) { painter->drawEllipse(p, diameter * 0.4, diameter * 0.4); } } }; drawPoints(PortType::OUT); drawPoints(PortType::IN); }
void NodePainter:: drawConnectionPoints(QPainter* painter, NodeGeometry const& geom, NodeState const& state) { painter->setBrush(QColor(Qt::darkGray)); auto diameter = geom.connectionPointDiameter(); auto reducedDiameter = diameter * 0.6; auto drawPoints = [&](PortType portType) { size_t n = state.getEntries(portType).size(); for (size_t i = 0; i < n; ++i) { QPointF p = geom.connectionPointScenePosition(i, portType); double r = 1.0; if (state.isReacting() && state.getEntries(portType)[i].isNull()) { auto diff = geom.draggingPos() - p; double dist = std::sqrt(QPointF::dotProduct(diff, diff)); double const thres = 40.0; r = (dist < thres) ? (2.0 - dist / thres ) : 1.0; } painter->drawEllipse(p, reducedDiameter * r, reducedDiameter * r); } }; drawPoints(PortType::OUT); drawPoints(PortType::IN); }
void NodePainter:: drawNodeRect(QPainter* painter, NodeGeometry const& geom) { if (geom.hovered()) { QPen p(Qt::white, 2.0); painter->setPen(p); } else { QPen p(Qt::white, 1.5); painter->setPen(p); } QLinearGradient gradient(QPointF(0.0, 0.0), QPointF(2.0, geom.height())); QColor darkGray1 = QColor(Qt::gray).darker(200); QColor darkGray2 = QColor(Qt::gray).darker(250); gradient.setColorAt(0.0, Qt::darkGray); gradient.setColorAt(0.03, darkGray1); gradient.setColorAt(0.97, darkGray2); gradient.setColorAt(1.0, darkGray2.darker(110)); painter->setBrush(gradient); unsigned int diam = geom.connectionPointDiameter(); QRectF boundary(0.0, 0.0, geom.width(), geom.height()); QMargins m(diam, diam, diam, diam); double const radius = 3.0; painter->drawRoundedRect(boundary.marginsAdded(m), radius, radius); }