+
+void Painter::DrawArrowhead(Vector head, Vector tail, double size)
+{
+ if (!painter)
+ return;
+
+ QPolygonF arrow;
+
+ // We draw the arrowhead aligned along the line from tail to head
+ double angle = Vector(head - tail).Angle();
+ double orthoAngle = angle + QTR_TAU;//(PI / 2.0);
+ Vector orthogonal = Vector(cos(orthoAngle), sin(orthoAngle));
+ Vector unit = Vector(head - tail).Unit();
+
+ Point p1 = head - (unit * 9.0 * size);
+ Point p2 = p1 + (orthogonal * 3.0 * size);
+ Point p3 = p1 - (orthogonal * 3.0 * size);
+
+ Point p4 = CartesianToQtCoords(head);
+ Point p5 = CartesianToQtCoords(p2);
+ Point p6 = CartesianToQtCoords(p3);
+
+ arrow << QPointF(p4.x, p4.y) << QPointF(p5.x, p5.y) << QPointF(p6.x, p6.y);
+
+ painter->drawPolygon(arrow);
+}
+
+
+// Point is given in Cartesian coordinates
+void Painter::DrawCrosshair(Vector point)
+{
+ if (!painter)
+ return;
+
+ Vector screenPoint = CartesianToQtCoords(point);
+ painter->drawLine(0, screenPoint.y, Global::screenSize.x, screenPoint.y);
+ painter->drawLine(screenPoint.x, 0, screenPoint.x, Global::screenSize.y);
+}
+
+
+void Painter::DrawInformativeText(QString text)
+{
+ painter->setFont(*Global::font);
+ QRectF bounds = painter->boundingRect(QRectF(), Qt::AlignVCenter, text);
+ bounds.moveTo(17.0, 17.0);
+ QRectF textRect = bounds;
+ textRect.adjust(-7.0, -7.0, 7.0, 7.0);
+
+ QPen pen = QPen(QColor(0x00, 0xFF, 0x00), 1.0, Qt::SolidLine);
+ painter->setPen(pen);
+ painter->setBrush(QBrush(QColor(0x40, 0xFF, 0x40, 0x9F)));
+ painter->drawRoundedRect(textRect, 7.0, 7.0);
+
+ pen = QPen(QColor(0x00, 0x5F, 0xDF));
+ painter->setPen(pen);
+ painter->drawText(bounds, Qt::AlignVCenter, text);
+}
+