Gate `size_to_values()` on macOS in `_axes.py`

NOTE, this reversion was discovered as needed by @goodboy after
extensively manually testing the new zoom-by-font-size feats introduced
alongside macOS support.

Use class-body `if _friggin_macos:` branching to
conditionally define `size_to_values()` for both
`PriceAxis` and `DynamicDateAxis` — macOS gets the
new `_updateWidth()`/`_updateHeight()` + geometry
recalc path, other platforms fall back to the
original `setWidth()`/`setHeight()` calls.

Deats,
- add `platform` import and module-level
  `_friggin_macos: bool` flag.
- `PriceAxis.size_to_values()`: macOS branch calls
  `_updateWidth()` + `updateGeometry()`; else branch
  uses `self.setWidth(self.typical_br.width())`.
- `DynamicDateAxis.size_to_values()`: macOS branch
  calls `_updateHeight()` + `updateGeometry()`; else
  uses `self.setHeight(self.typical_br.height() + 1)`.
- reorder imports: `platform` before `typing`.

(this commit msg was generated in some part by [`claude-code`][claude-code-gh])
[claude-code-gh]: https://github.com/anthropics/claude-code
axes_w_zoom_refinery
Gud Boi 2026-03-18 15:08:24 -04:00
parent f9979956a0
commit efc98bdf4c
1 changed files with 35 additions and 19 deletions

View File

@ -20,8 +20,9 @@ Chart axes graphics and behavior.
""" """
from __future__ import annotations from __future__ import annotations
from functools import lru_cache from functools import lru_cache
from typing import Callable
from math import floor from math import floor
import platform
from typing import Callable
import polars as pl import polars as pl
import pyqtgraph as pg import pyqtgraph as pg
@ -42,6 +43,7 @@ from ._style import DpiAwareFont, hcolor, _font
from ._interaction import ChartView from ._interaction import ChartView
from ._dataviz import Viz from ._dataviz import Viz
_friggin_macos: bool = platform.system() == 'Darwin'
_axis_pen = pg.mkPen(hcolor('bracket')) _axis_pen = pg.mkPen(hcolor('bracket'))
@ -172,6 +174,7 @@ class Axis(pg.AxisItem):
text_offset = None text_offset = None
if self.orientation in ('bottom',): if self.orientation in ('bottom',):
text_offset = floor(0.25 * font_size) text_offset = floor(0.25 * font_size)
elif self.orientation in ('left', 'right'): elif self.orientation in ('left', 'right'):
text_offset = floor(font_size / 2) text_offset = floor(font_size / 2)
@ -293,15 +296,22 @@ class PriceAxis(Axis):
) -> None: ) -> None:
self._min_tick = size self._min_tick = size
def size_to_values(self) -> None: if _friggin_macos:
# Call PyQtGraph's internal width update mechanism def size_to_values(self) -> None:
# This respects autoExpandTextSpace and updates min/max constraints # Call PyQtGraph's internal width update mechanism
self._updateWidth() # This respects autoExpandTextSpace and updates min/max constraints
# tell Qt our preferred size changed so layout recalculates self._updateWidth()
self.updateGeometry() # tell Qt our preferred size changed so layout recalculates
# force parent plot item to recalculate its layout self.updateGeometry()
if self.pi and hasattr(self.pi, 'updateGeometry'): # force parent plot item to recalculate its layout
self.pi.updateGeometry() if self.pi and hasattr(self.pi, 'updateGeometry'):
self.pi.updateGeometry()
else:
def size_to_values(self) -> None:
# XXX, old code!
self.setWidth(self.typical_br.width())
# XXX: drop for now since it just eats up h space # XXX: drop for now since it just eats up h space
@ -344,15 +354,21 @@ class DynamicDateAxis(Axis):
1: '%H:%M:%S', 1: '%H:%M:%S',
} }
def size_to_values(self) -> None: if _friggin_macos:
# Call PyQtGraph's internal height update mechanism def size_to_values(self) -> None:
# This respects autoExpandTextSpace and updates min/max constraints # Call PyQtGraph's internal height update mechanism
self._updateHeight() # This respects autoExpandTextSpace and updates min/max constraints
# tell Qt our preferred size changed so layout recalculates self._updateHeight()
self.updateGeometry() # tell Qt our preferred size changed so layout recalculates
# force parent plot item to recalculate its layout self.updateGeometry()
if self.pi and hasattr(self.pi, 'updateGeometry'): # force parent plot item to recalculate its layout
self.pi.updateGeometry() if self.pi and hasattr(self.pi, 'updateGeometry'):
self.pi.updateGeometry()
else:
def size_to_values(self) -> None:
# XXX, old code!
self.setHeight(self.typical_br.height() + 1)
def _indexes_to_timestrs( def _indexes_to_timestrs(
self, self,