Use `get_fonts()`, add `show_txt` flag to gap annots

Switch `.tsp._annotate.markup_gaps()` to use new
`.ui._style.get_fonts()` API for font size calc on client side and add
optional `show_txt: bool` flag to toggle gap duration labels (with
default `False`).

Also,
- replace `sgn` checks with named bools: `up_gap`, `down_gap`
- use `small_font.px_size - 1` for gap label font sizing
- wrap text creation in `if show_txt:` block
- update IPC handler to use `get_fonts()` vs direct `_font` import

(this commit msg was generated in some part by [`claude-code`][claude-code-gh])
[claude-code-gh]: https://github.com/anthropics/claude-code
multiaddrs
Gud Boi 2026-01-28 16:30:41 -05:00
parent 88732a67d5
commit 3a515afccd
2 changed files with 37 additions and 26 deletions

View File

@ -30,7 +30,7 @@ import tractor
from piker.data._formatters import BGM from piker.data._formatters import BGM
from piker.storage import log from piker.storage import log
# from piker.ui._style import _font from piker.ui._style import get_fonts
if TYPE_CHECKING: if TYPE_CHECKING:
from piker.ui._remote_ctl import AnnotCtl from piker.ui._remote_ctl import AnnotCtl
@ -88,6 +88,10 @@ async def markup_gaps(
wdts: pl.DataFrame, wdts: pl.DataFrame,
gaps: pl.DataFrame, gaps: pl.DataFrame,
# XXX, switch on to see txt showing a "humanized" label of each
# gap's duration.
show_txt: bool = False,
) -> dict[int, dict]: ) -> dict[int, dict]:
''' '''
Remote annotate time-gaps in a dt-fielded ts (normally OHLC) Remote annotate time-gaps in a dt-fielded ts (normally OHLC)
@ -202,6 +206,10 @@ async def markup_gaps(
diff: float = cls - opn diff: float = cls - opn
sgn: float = copysign(1, diff) sgn: float = copysign(1, diff)
up_gap: bool = sgn == -1
down_gap: bool = sgn == 1
flat: bool = sgn == 0
color: str = 'dad_blue' color: str = 'dad_blue'
# TODO? mks more sense to have up/down coloring? # TODO? mks more sense to have up/down coloring?
# color: str = { # color: str = {
@ -233,7 +241,7 @@ async def markup_gaps(
assert aid assert aid
aids[aid] = rect_kwargs aids[aid] = rect_kwargs
direction: str = ( direction: str = (
'down' if sgn == 1 'down' if down_gap
else 'up' else 'up'
) )
# TODO! mk this a `msgspec.Struct` which we deserialize # TODO! mk this a `msgspec.Struct` which we deserialize
@ -261,31 +269,33 @@ async def markup_gaps(
) )
# add duration label to RHS of arrow # add duration label to RHS of arrow
if sgn == -1: # up-gap if up_gap:
anchor = (0, 0) # XXX, i dun get dese dims.. XD anchor = (0, 0)
else: # down-gap # ^XXX? i dun get dese dims.. XD
elif down_gap:
anchor = (0, 1) # XXX y, x? anchor = (0, 1) # XXX y, x?
else: # no-gap?
assert flat
anchor = (0, 0) # up from bottom
# ?TODO? why returning -1 !? # use a slightly smaller font for gap label txt.
# [ ] use conf.toml value instead! font, small_font = get_fonts()
# font_size: int = small_font.px_size - 1
# font_size: int = _font.font.pixelSize() - 10 assert isinstance(font_size, int)
# await tractor.pause()
# assert isinstance(font_size, int)
font_size = None
text_aid: int = await actl.add_text( if show_txt:
fqme=fqme, text_aid: int = await actl.add_text(
timeframe=timeframe, fqme=fqme,
text=gap_label, timeframe=timeframe,
x=iend + 1, # fallback if timestamp lookup fails text=gap_label,
y=cls, x=iend + 1, # fallback if timestamp lookup fails
time=gap_time, # server-side index lookup y=cls,
color=color, time=gap_time, # server-side index lookup
anchor=anchor, color=color,
font_size=font_size, anchor=anchor,
) font_size=font_size,
aids[text_aid] = {'text': gap_label} )
aids[text_aid] = {'text': gap_label}
# tell chart to redraw all its # tell chart to redraw all its
# graphics view layers Bo # graphics view layers Bo

View File

@ -407,8 +407,9 @@ async def serve_rc_annots(
# apply font size (default to DpiAwareFont if not # apply font size (default to DpiAwareFont if not
# provided) # provided)
if font_size is None: if font_size is None:
from ._style import _font from ._style import get_fonts
font_size = _font.font.pixelSize() - 3 font, font_small = get_fonts()
font_size = font_small.px_size - 1
qfont: QFont = text_item.textItem.font() qfont: QFont = text_item.textItem.font()
qfont.setPixelSize(font_size) qfont.setPixelSize(font_size)