else:
return self.adjdev.width() / 3.5
+ def drawText(self, painter, center, s):
+ r = self.getCenterRadius()
+ painter.save()
+ pen = QPen(Qt.white, r / 150., Qt.SolidLine)
+ brush = QBrush(Qt.white)
+ painter.setBrush(brush)
+ pen.setColor(Qt.black);
+ painter.setPen(pen)
+ font = QFont("Meiryo UI", 0, QFont.Bold)
+ font.setPointSizeF(self.FONT_SIZE * r)
+ painter.setFont(font)
+ path = QPainterPath()
+ for l in s.split("\n"):
+ path.addText(center, font, l)
+ center += QPoint(0, self.FONT_SIZE * r * 1.5)
+ bounding = path.boundingRect()
+ path.translate(-bounding.width() / 2., bounding.height() / 2.)
+ painter.drawPath(path)
+ painter.restore()
+
def drawHorizonRound(self, painter):
"""Draw the horizon for round widget: the sky in blue,
the ground in marron."""
# set font and pen
pen = QPen(Qt.white, r / 100., Qt.SolidLine)
painter.setPen(pen)
- font = QFont("Meiryo UI", 0, QFont.Bold)
- font.setPointSizeF(self.FONT_SIZE * r)
- painter.setFont(font)
# round to nearest angle that is a multiple of step
a = self.pitch / self.PITCH_REFLINES_STEP_ANGLE
if disp_val < -90.:
disp_val = -180. - disp_val
disp_val = str(int(disp_val))
- metrics = painter.fontMetrics()
- sz = metrics.size(Qt.TextSingleLine, disp_val)
- lefttxt = QRect(QPoint(0, 0), sz)
- lefttxt.moveCenter(pt1 - QPoint(0.2 * r, 0))
- # XXX
- #pen.setWidth(1);
- #brush = QBrush(Qt.white)
- #painter.setBrush(brush)
- #pen.setColor(Qt.black);
- #painter.setPen(pen)
- #path = QPainterPath()
- #path.addText(lefttxt.center(), font, disp_val)
- #painter.drawPath(path)
- painter.drawText(lefttxt, Qt.TextSingleLine, disp_val)
+ lefttxt_pt = pt1 - QPoint(0.2 * r, 0)
+ self.drawText(painter, lefttxt_pt, disp_val)
# flip the right text
painter.save()
painter.translate(pt2 + QPoint(0.2 * r, 0))
painter.rotate(180.)
painter.translate(-pt2 - QPoint(0.2 * r, 0))
- righttxt = QRect(QPoint(0, 0), sz)
- righttxt.moveCenter(pt2 + QPoint(0.2 * r, 0))
- #path = QPainterPath()
- #path.addText(righttxt.center(), font, disp_val)
- #painter.drawPath(path)
- painter.drawText(righttxt, Qt.TextSingleLine, disp_val)
+ righttxt_pt = pt2 + QPoint(0.2 * r, 0)
+ self.drawText(painter, righttxt_pt, disp_val)
painter.restore()
painter.restore()
# then draw the text
if disp_text == True:
pt_txt = path.pointAtPercent(0.2)
- font = QFont("Meiryo UI", 0, QFont.Bold)
- font.setPointSizeF(self.FONT_SIZE * r)
- painter.setFont(font)
disp_val = deg
if disp_val > 90:
disp_val = 180. - disp_val
disp_val = str(int(disp_val))
- metrics = painter.fontMetrics()
- sz = metrics.size(Qt.TextSingleLine, disp_val)
- txt = QRect(QPoint(0, 0), sz)
- txt.moveCenter(pt_txt.toPoint())
- painter.drawText(txt, Qt.TextSingleLine, disp_val)
+ self.drawText(painter, pt_txt, disp_val)
def drawRollGraduation(self, painter):
"""Draw the roll graduations."""
r = self.getCenterRadius()
pen = QPen(Qt.red, r / 100., Qt.SolidLine)
painter.setPen(pen)
- font = QFont("Meiryo UI", 0, QFont.Bold)
- font.setPointSizeF(self.FONT_SIZE * r)
- painter.setFont(font)
if self.mode == "round":
y_txt = center.y() + r * 0.6
y1 = center.y() + r * 0.7
if disp_text == False:
continue
disp_val = ["N", "E", "S", "W"][(int(a)/90)%4]
- metrics = painter.fontMetrics()
- sz = metrics.size(Qt.TextSingleLine, disp_val)
- txt = QRect(QPoint(0, 0), sz)
- txt.moveCenter(pt_txt)
- painter.drawText(txt, Qt.TextSingleLine, disp_val)
+ self.drawText(painter, pt_txt, disp_val)
def drawSpeed(self, painter):
center = self.adjdev.center()
r = self.getCenterRadius()
pen = QPen(Qt.red, r / 100., Qt.SolidLine)
painter.setPen(pen)
- font = QFont("Meiryo UI", 0, QFont.Bold)
- font.setPointSizeF(self.FONT_SIZE * r)
- painter.setFont(font)
x1 = center.x() - 1.5 * r
x2 = center.x() - 1.6 * r
pt1 = QPoint(center.x() - 1.45 * r, center.y())
if disp_text == False:
continue
disp_val = str(int(s))
- metrics = painter.fontMetrics()
- sz = metrics.size(Qt.TextSingleLine, disp_val)
- txt = QRect(QPoint(0, 0), sz)
- txt.moveCenter(pt_txt)
- painter.drawText(txt, Qt.TextSingleLine, disp_val)
+ self.drawText(painter, pt_txt, disp_val)
def drawAlt(self, painter):
center = self.adjdev.center()
r = self.getCenterRadius()
pen = QPen(Qt.red, r / 100., Qt.SolidLine)
painter.setPen(pen)
- font = QFont("Meiryo UI", 0, QFont.Bold)
- font.setPointSizeF(self.FONT_SIZE * r)
- painter.setFont(font)
x1 = center.x() + 1.5 * r
x2 = center.x() + 1.6 * r
pt1 = QPoint(center.x() + 1.45 * r, center.y())
if disp_text == False:
continue
disp_val = str(int(a))
- metrics = painter.fontMetrics()
- sz = metrics.size(Qt.TextSingleLine, disp_val)
- txt = QRect(QPoint(0, 0), sz)
- txt.moveCenter(pt_txt)
- painter.drawText(txt, Qt.TextSingleLine, disp_val)
+ self.drawText(painter, pt_txt, disp_val)
def drawReturnToHome(self, painter):
center = self.adjdev.center()
r = self.getCenterRadius()
pen = QPen(Qt.white, r / 100., Qt.SolidLine)
painter.setPen(pen)
- font = QFont("Meiryo UI", 0, QFont.Bold)
- font.setPointSizeF(self.FONT_SIZE * r)
- metrics = painter.fontMetrics()
- sz = metrics.size(Qt.AlignLeft, self.left_txt)
- txt = QRect(QPoint(0, 0), sz)
pt_txt = QPoint(center.x() + dev_r * -0.95,
center.y() + dev_r * -0.95)
- txt.moveTopLeft(pt_txt)
- painter.drawText(txt, Qt.AlignLeft, self.left_txt)
+ self.drawText(painter, pt_txt, self.right_txt)
- sz = metrics.size(Qt.AlignRight, self.right_txt)
- txt = QRect(QPoint(0, 0), sz)
pt_txt = QPoint(center.x() + dev_r * 0.95,
center.y() + dev_r * -0.95)
- txt.moveTopRight(pt_txt)
- painter.drawText(txt, Qt.AlignRight, self.right_txt)
+ self.drawText(painter, pt_txt, self.right_txt)
def setPitch(self, pitch):
"""set the pitch in degrees, between -180 and 180"""