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:: drawEntryLabels(QPainter* painter, NodeGeometry const& geom, NodeState const& state, std::unique_ptr<NodeDataModel> const & model) { QFontMetrics const & metrics = painter->fontMetrics(); auto drawPoints = [&](PortType portType) { auto& entries = state.getEntries(portType); size_t n = entries.size(); for (size_t i = 0; i < n; ++i) { QPointF p = geom.connectionPointScenePosition(i, portType); if (entries[i].isNull()) painter->setPen(Qt::darkGray); else painter->setPen(QColor(Qt::lightGray).lighter()); QString s = model->data(portType, i)->name(); auto rect = metrics.boundingRect(s); p.setY(p.y() + rect.height() / 4.0); if (portType == PortType::IN) p.setX(5.0); else p.setX(geom.width() - 5.0 - rect.width()); painter->drawText(p, s); } }; 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); }