def paint_event(self, painter: QPainter) -> bool:
if Pane.TRANSFORM_ZOOM in self.pane.shared["transforms"]:
zoom = self.pane.shared["transforms"][Pane.TRANSFORM_ZOOM].m11()
else:
zoom = 1.0
if "conversion" in self.pane.shared:
conversion = self.pane.shared["conversion"]
else:
conversion = 1
target_length = PaneContentScale.PANE_SCALE_LENGTH
length = zoom * PaneContentScale.PANE_SCALE_LENGTH * conversion
display_um = PaneContentScale.PANE_SCALE_LENGTH
um_scale = 1
while(abs(length - target_length) > target_length * 0.5):
if length - target_length > 0:
length /= 2
display_um /= 2
um_scale /= 2
elif length - target_length < 0:
length *= 2
display_um *= 2
um_scale *= 2
else:
break
text = f"{display_um} um"
text_len = painter.fontMetrics().width(text)
height = 10
bg_rect = QRect(0, 0, int(length) + 10, height + 20)
pos = QPointF(painter.device().width() - bg_rect.width() - 1, painter.device().height() - bg_rect.height() - 1)
scale_position = QTransform().translate(pos.x(), pos.y())
bg_color = QColor(0, 0, 0, 128)
painter.save()
painter.setTransform(scale_position)
painter.fillRect(bg_rect, bg_color)
painter.translate(5, 15)
painter.setPen(Qt.white)
painter.drawLine(QPointF(0, 0), QPointF(0, 10))
painter.drawLine(QPointF(0, 5), QPointF(length, 5))
painter.drawLine(QPointF(length, 0), QPointF(length, 10))
painter.drawText(int(length / 2 - text_len / 2), 1, text)
painter.restore()
return False