29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
"""Small right-aligned mathematical annotations shared by Qt plots."""
|
|
try:
|
|
from PySide6.QtCore import QRectF, Qt
|
|
from PySide6.QtGui import QColor
|
|
except ImportError:
|
|
from PySide2.QtCore import QRectF, Qt
|
|
from PySide2.QtGui import QColor
|
|
|
|
|
|
def paint_formulas(painter, rect, entries):
|
|
"""Draw (color, text) entries in the right half, wrapping long formulas."""
|
|
painter.save()
|
|
painter.setClipRect(rect)
|
|
metrics = painter.fontMetrics()
|
|
width = max(1., rect.width() * .48 - 12)
|
|
top = rect.top() + 5
|
|
flags = int(Qt.AlignRight | Qt.AlignTop | Qt.TextWordWrap)
|
|
for color, text in entries:
|
|
box = QRectF(rect.right() - width - 6, top, width, max(1., rect.bottom() - top))
|
|
height = painter.boundingRect(box, flags, text).height()
|
|
box.setHeight(height)
|
|
painter.fillRect(box.adjusted(-3, -1, 3, 1), QColor('#0b1119'))
|
|
painter.setPen(QColor(color))
|
|
painter.drawText(box, flags, text)
|
|
top += height + metrics.height() * .4
|
|
if top >= rect.bottom():
|
|
break
|
|
painter.restore()
|