void TrafficGraphWidget::paintEvent(QPaintEvent *) { QPainter painter(this); painter.fillRect(rect(), Qt::black); if(fMax <= 0.0f) return; QColor axisCol(Qt::gray); int h = height() - YMARGIN * 2; painter.setPen(axisCol); painter.drawLine(XMARGIN, YMARGIN + h, width() - XMARGIN, YMARGIN + h); // decide what order of magnitude we are int base = floor(log10(fMax)); float val = pow(10.0f, base); const QString units = tr("KB/s"); const float yMarginText = 2.0; // draw lines painter.setPen(axisCol); painter.drawText(XMARGIN, YMARGIN + h - h * val / fMax-yMarginText, QString("%1 %2").arg(val).arg(units)); for(float y = val; y < fMax; y += val) { int yy = YMARGIN + h - h * y / fMax; painter.drawLine(XMARGIN, yy, width() - XMARGIN, yy); } // if we drew 3 or fewer lines, break them up at the next lower order of magnitude if(fMax / val <= 3.0f) { axisCol = axisCol.darker(); val = pow(10.0f, base - 1); painter.setPen(axisCol); painter.drawText(XMARGIN, YMARGIN + h - h * val / fMax-yMarginText, QString("%1 %2").arg(val).arg(units)); int count = 1; for(float y = val; y < fMax; y += val, count++) { // don't overwrite lines drawn above if(count % 10 == 0) continue; int yy = YMARGIN + h - h * y / fMax; painter.drawLine(XMARGIN, yy, width() - XMARGIN, yy); } } if(!vSamplesIn.empty()) { QPainterPath p; paintPath(p, vSamplesIn); painter.fillPath(p, QColor(0, 255, 0, 128)); painter.setPen(Qt::green); painter.drawPath(p); } if(!vSamplesOut.empty()) { QPainterPath p; paintPath(p, vSamplesOut); painter.fillPath(p, QColor(255, 0, 0, 128)); painter.setPen(Qt::red); painter.drawPath(p); } }
void WPdfImage::drawPath(const WPainterPath& path) { if (path.isEmpty()) return; drawPlainPath(path); paintPath(); }
void KoCreatePathTool::paint(QPainter &painter, const KoViewConverter &converter) { Q_D(KoCreatePathTool); if (pathStarted()) { KoShapeStroke *stroke(createStroke()); if (stroke) { d->shape->setStroke(stroke); } painter.save(); paintPath(*(d->shape), painter, converter); painter.restore(); painter.save(); painter.setTransform(d->shape->absoluteTransformation(&converter) * painter.transform()); KoShape::applyConversion(painter, converter); painter.setPen(QPen(Qt::blue, 0)); painter.setBrush(Qt::white); //TODO make configurable const bool firstPoint = (d->firstPoint == d->activePoint); if (d->pointIsDragged || firstPoint) { const bool onlyPaintActivePoints = false; KoPathPoint::PointTypes paintFlags = KoPathPoint::ControlPoint2; if (d->activePoint->activeControlPoint1()) paintFlags |= KoPathPoint::ControlPoint1; d->activePoint->paint(painter, d->handleRadius, paintFlags, onlyPaintActivePoints); } // check if we have to color the first point if (d->mouseOverFirstPoint) painter.setBrush(Qt::red); //TODO make configurable else painter.setBrush(Qt::white); //TODO make configurable d->firstPoint->paint(painter, d->handleRadius, KoPathPoint::Node); painter.restore(); } if (d->hoveredPoint) { painter.save(); painter.setTransform(d->hoveredPoint->parent()->absoluteTransformation(&converter), true); KoShape::applyConversion(painter, converter); painter.setPen(QPen(Qt::blue, 0)); painter.setBrush(Qt::white); //TODO make configurable d->hoveredPoint->paint(painter, d->handleRadius, KoPathPoint::Node); painter.restore(); } painter.save(); KoShape::applyConversion(painter, converter); canvas()->snapGuide()->paint(painter, converter); painter.restore(); }
void WPdfImage::drawArc(const WRectF& rect, double startAngle, double spanAngle) { HPDF_Page_GSave(page_); HPDF_Page_Concat(page_, 1, 0, 0, rect.height() / rect.width(), rect.center().x(), rect.center().y()); double start = startAngle; double end = start + spanAngle; if (end < start) std::swap(start, end); HPDF_Page_Arc(page_, 0, 0, rect.width()/1, start + 90, end + 90); paintPath(); HPDF_Page_GRestore(page_); }
void TrafficGraphWidget::paintEvent(QPaintEvent *) { QPainter painter(this); painter.fillRect(rect(), Qt::black); if(fMax <= 0.0f) return; QColor axisCol(Qt::gray); QColor axisCol2; int h = height() - YMARGIN * 2; painter.setPen(axisCol); painter.drawLine(XMARGIN, YMARGIN + h, width() - XMARGIN, YMARGIN + h); // decide what order of magnitude we are int base = floor(log10(fMax)); float val = pow(10.0f, base); float val2; const QString units = tr("KB/s"); const float yMarginText = 2.0; // draw lines painter.setPen(axisCol); for(float y = val; y < fMax; y += val) { int yy = YMARGIN + h - h * y / fMax; painter.drawLine(XMARGIN, yy, width() - XMARGIN, yy); } // if we drew 3 or fewer lines, break them up at the next lower order of magnitude if(fMax / val <= 3.0f) { axisCol2 = axisCol.darker(); val2 = pow(10.0f, base - 1); painter.setPen(axisCol2); int count = 1; for(float y = val2; y < fMax; y += val2, count++) { // don't overwrite lines drawn above if(count % 10 == 0) continue; int yy = YMARGIN + h - h * y / fMax; painter.drawLine(XMARGIN, yy, width() - XMARGIN, yy); } } const TrafficGraphData::SampleQueue& queue = trafficGraphData.getCurrentRangeQueueWithAverageBandwidth(); if(!queue.empty()) { QPainterPath pIn; paintPath(pIn, queue, boost::bind(chooseIn,_1)); painter.fillPath(pIn, QColor(0, 255, 0, 128)); painter.setPen(Qt::green); painter.drawPath(pIn); QPainterPath pOut; paintPath(pOut, queue, boost::bind(chooseOut,_1)); painter.fillPath(pOut, QColor(255, 0, 0, 128)); painter.setPen(Qt::red); painter.drawPath(pOut); } // draw text on top of everything else QRect textRect = painter.boundingRect(QRect(XMARGIN, YMARGIN + h - (h * val / fMax) - yMarginText, 0, 0), Qt::AlignLeft, QString("%1 %2").arg(val).arg(units)); textRect.translate(0, -textRect.height()); painter.fillRect(textRect, Qt::black); painter.setPen(axisCol); painter.drawText(textRect, Qt::AlignLeft, QString("%1 %2").arg(val).arg(units)); if(fMax / val <= 3.0f) { QRect textRect2 = painter.boundingRect(QRect(XMARGIN, YMARGIN + h - (h * val2 / fMax) - yMarginText, 0, 0), Qt::AlignLeft, QString("%1 %2").arg(val2).arg(units)); textRect2.translate(0, -textRect2.height()); painter.fillRect(textRect2, Qt::black); painter.setPen(axisCol2); painter.drawText(textRect2, Qt::AlignLeft, QString("%1 %2").arg(val2).arg(units)); } }
void WPdfImage::drawPath(const WPainterPath& path) { drawPlainPath(path); paintPath(); }