void NodePainter:: drawNodeRect(QPainter* painter, NodeGeometry const& geom, NodeDataModel const* model, NodeGraphicsObject const & graphicsObject) { NodeStyle const& nodeStyle = model->nodeStyle(); auto color = graphicsObject.isSelected() ? nodeStyle.SelectedBoundaryColor : nodeStyle.NormalBoundaryColor; if (geom.hovered()) { QPen p(color, nodeStyle.HoveredPenWidth); painter->setPen(p); } else { QPen p(color, nodeStyle.PenWidth); painter->setPen(p); } QLinearGradient gradient(QPointF(0.0, 0.0), QPointF(2.0, geom.height())); gradient.setColorAt(0.0, nodeStyle.GradientColor0); gradient.setColorAt(0.03, nodeStyle.GradientColor1); gradient.setColorAt(0.97, nodeStyle.GradientColor2); gradient.setColorAt(1.0, nodeStyle.GradientColor3); painter->setBrush(gradient); float diam = nodeStyle.ConnectionPointDiameter; QRectF boundary( -diam, -diam, 2.0 * diam + geom.width(), 2.0 * diam + geom.height()); double const radius = 3.0; painter->drawRoundedRect(boundary, radius, radius); }
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); }
void NodePainter:: drawValidationRect(QPainter * painter, NodeGeometry const & geom, NodeDataModel const * model, NodeGraphicsObject const & graphicsObject) { auto modelValidationState = model->validationState(); if (modelValidationState != NodeValidationState::Valid) { NodeStyle const& nodeStyle = model->nodeStyle(); auto color = graphicsObject.isSelected() ? nodeStyle.SelectedBoundaryColor : nodeStyle.NormalBoundaryColor; if (geom.hovered()) { QPen p(color, nodeStyle.HoveredPenWidth); painter->setPen(p); } else { QPen p(color, nodeStyle.PenWidth); painter->setPen(p); } //Drawing the validation message background if (modelValidationState == NodeValidationState::Error) { painter->setBrush(nodeStyle.ErrorColor); } else { painter->setBrush(nodeStyle.WarningColor); } double const radius = 3.0; float diam = nodeStyle.ConnectionPointDiameter; QRectF boundary(-diam, -diam + geom.height() - geom.validationHeight(), 2.0 * diam + geom.width(), 2.0 * diam + geom.validationHeight()); painter->drawRoundedRect(boundary, radius, radius); painter->setBrush(Qt::gray); //Drawing the validation message itself QString const &errorMsg = model->validationMessage(); QFont f = painter->font(); QFontMetrics metrics(f); auto rect = metrics.boundingRect(errorMsg); QPointF position((geom.width() - rect.width()) / 2.0, geom.height() - (geom.validationHeight() - diam) / 2.0); painter->setFont(f); painter->setPen(nodeStyle.FontColor); painter->drawText(position, errorMsg); } }