From 54d36f26f0954fc29f03cccdf33936365920032b Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Wed, 31 Mar 2021 14:25:17 -0400 Subject: [PATCH] Base anchor contents labels based on dpi-aware font bounding rect --- piker/ui/_graphics/_cursor.py | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/piker/ui/_graphics/_cursor.py b/piker/ui/_graphics/_cursor.py index 4144e3fd..e13ab20b 100644 --- a/piker/ui/_graphics/_cursor.py +++ b/piker/ui/_graphics/_cursor.py @@ -18,6 +18,7 @@ Mouse interaction graphics """ +import math from typing import Optional, Tuple, Set, Dict import inspect @@ -113,10 +114,6 @@ class LineDot(pg.CurvePoint): return False -# TODO: likely will need to tweak this based on dpi... -_y_margin = 5 - - # TODO: change this into our own ``Label`` class ContentsLabel(pg.LabelItem): """Label anchored to a ``ViewBox`` typically for displaying @@ -132,11 +129,11 @@ class ContentsLabel(pg.LabelItem): # XXX: fyi naming here is confusing / opposite to coords _corner_margins = { - ('top', 'left'): (-4, -_y_margin), - ('top', 'right'): (4, -_y_margin), + ('top', 'left'): (-2, lambda font_size: -font_size*0.25), + ('top', 'right'): (2, lambda font_size: -font_size*0.25), - ('bottom', 'left'): (-4, lambda font_size: font_size + 2*_y_margin), - ('bottom', 'right'): (4, lambda font_size: font_size + 2*_y_margin), + ('bottom', 'left'): (-2, lambda font_size: font_size), + ('bottom', 'right'): (2, lambda font_size: font_size), } def __init__( @@ -147,11 +144,21 @@ class ContentsLabel(pg.LabelItem): font_size: Optional[int] = None, ) -> None: font_size = font_size or _font.font.pixelSize() + super().__init__( justify=justify_text, size=f'{str(font_size)}px' ) + if _font._physical_dpi >= 97: + # ad-hoc scale it based on boundingRect + # TODO: need proper fix for this? + typical_br = _font._qfm.boundingRect('Qyp') + anchor_font_size = math.ceil(typical_br.height() * 1.25) + + else: + anchor_font_size = font_size + # anchor to viewbox self.setParentItem(chart._vb) chart.scene().addItem(self) @@ -163,7 +170,9 @@ class ContentsLabel(pg.LabelItem): ydim = margins[1] if inspect.isfunction(margins[1]): - margins = margins[0], ydim(font_size) + margins = margins[0], ydim(anchor_font_size) + + print(f'margins: {margins}') self.anchor(itemPos=index, parentPos=index, offset=margins) @@ -385,13 +394,12 @@ class Cursor(pg.GraphicsObject): if self._y_label_update: self.graphics[self.active_plot]['yl'].update_label( - abs_pos=plot.mapFromView(QPointF(ix, iy + line_offset)), + abs_pos=plot.mapFromView(QPointF(ix, iy)), value=iy ) # only update horizontal xhair line if label is enabled - self.graphics[plot]['hl'].setY(iy + line_offset) - + self.graphics[plot]['hl'].setY(iy) # update all trackers for item in self._trackers: