Krita Source Code Documentation
Loading...
Searching...
No Matches
HorizontalDistancesPaintingStrategy Class Reference

#include <KoRuler_p.h>

+ Inheritance diagram for HorizontalDistancesPaintingStrategy:

Public Member Functions

void drawMeasurements (const KoRulerPrivate *ruler, QPainter &painter, const QRectF &rectangle) override
 
 HorizontalDistancesPaintingStrategy ()
 
- Public Member Functions inherited from HorizontalPaintingStrategy
QRectF drawBackground (const KoRulerPrivate *ruler, QPainter &painter) override
 
void drawIndents (const KoRulerPrivate *ruler, QPainter &painter) override
 
void drawMeasurements (const KoRulerPrivate *ruler, QPainter &painter, const QRectF &rectangle) override
 
void drawTabs (const KoRulerPrivate *ruler, QPainter &painter) override
 
 HorizontalPaintingStrategy ()
 
QSize sizeHint () override
 
- Public Member Functions inherited from PaintingStrategy
 PaintingStrategy ()
 constructor
 
virtual ~PaintingStrategy ()
 destructor
 

Private Member Functions

void drawDistanceLine (const KoRulerPrivate *d, QPainter &painter, const qreal start, const qreal end)
 

Detailed Description

Definition at line 101 of file KoRuler_p.h.

Constructor & Destructor Documentation

◆ HorizontalDistancesPaintingStrategy()

HorizontalDistancesPaintingStrategy::HorizontalDistancesPaintingStrategy ( )
inline

Definition at line 104 of file KoRuler_p.h.

104{}

Member Function Documentation

◆ drawDistanceLine()

void HorizontalDistancesPaintingStrategy::drawDistanceLine ( const KoRulerPrivate * d,
QPainter & painter,
const qreal start,
const qreal end )
private

Definition at line 600 of file KoRuler.cpp.

601{
602
603 // Don't draw too short lines
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 // Draw the label text
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 // Draw the arrow lines
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 // Draw the arrow heads
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}

◆ drawMeasurements()

void HorizontalDistancesPaintingStrategy::drawMeasurements ( const KoRulerPrivate * ruler,
QPainter & painter,
const QRectF & rectangle )
overridevirtual

Draw the indicators for the measurements which typically are drawn every [unit].

Parameters
rulerthe ruler to draw on.
painterthe painter we can paint with.
rectangle

Implements PaintingStrategy.

Definition at line 647 of file KoRuler.cpp.

648{
649 QList<qreal> points;
650 points << 0.0;
651 points << d->effectiveActiveRangeStart() + d->paragraphIndent + d->firstLineIndent;
652 points << d->effectiveActiveRangeStart() + d->paragraphIndent;
653 points << d->effectiveActiveRangeEnd() - d->endIndent;
654 points << d->effectiveActiveRangeStart();
655 points << d->effectiveActiveRangeEnd();
656 points << d->rulerLength;
657 std::sort(points.begin(), points.end());
658 QListIterator<qreal> i(points);
659 i.next();
660 while (i.hasNext() && i.hasPrevious()) {
661 drawDistanceLine(d, painter, i.peekPrevious(), i.peekNext());
662 i.next();
663 }
664}
void drawDistanceLine(const KoRulerPrivate *d, QPainter &painter, const qreal start, const qreal end)
Definition KoRuler.cpp:600

References drawDistanceLine().


The documentation for this class was generated from the following files: