601{
602
603
604 if (qMax(start, end) - qMin(start, end) < 1)
605 return;
606
607 painter.save();
608 painter.translate(
d->offset,
d->ruler->height() / 2);
609 painter.setPen(QPen(
d->ruler->palette().color(QPalette::Text), 0));
610 painter.setBrush(
d->ruler->palette().color(QPalette::Text));
611
612 QLineF line(QPointF(
d->viewConverter->documentToViewX(start), 0),
613 QPointF(
d->viewConverter->documentToViewX(end), 0));
614 QPointF midPoint = line.pointAt(0.5);
615
616
617 const QFont font = QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont);
618 const QFontMetrics fontMetrics(font);
619 QString label =
d->unit.toUserStringValue(
620 d->viewConverter->viewToDocumentX(line.length())) +
' ' +
d->unit.symbol();
621 QPointF labelPosition = QPointF(midPoint.x() - fontMetrics.horizontalAdvance(label)/2,
622 midPoint.y() + fontMetrics.ascent()/2);
623 painter.setFont(font);
624 painter.drawText(labelPosition, label);
625
626
627 qreal arrowLength = (line.length() - fontMetrics.horizontalAdvance(label)) / 2 - 2;
628 arrowLength = qMax(qreal(0.0), arrowLength);
629 QLineF startArrow(line.p1(), line.pointAt(arrowLength / line.length()));
630 QLineF endArrow(line.p2(), line.pointAt(1.0 - arrowLength / line.length()));
631 painter.drawLine(startArrow);
632 painter.drawLine(endArrow);
633
634
635 QPolygonF arrowHead;
636 arrowHead << line.p1() << QPointF(line.x1()+3, line.y1()-3)
637 << QPointF(line.x1()+3, line.y1()+3);
638 painter.drawPolygon(arrowHead);
639 arrowHead.clear();
640 arrowHead << line.p2() << QPointF(line.x2()-3, line.y2()-3)
641 << QPointF(line.x2()-3, line.y2()+3);
642 painter.drawPolygon(arrowHead);
643
644 painter.restore();
645}