scope windows: mirror a pin as a range, and restore the tick rebuild
**The blank scope window in trigger mode.** A held event pins the main window to `[-pre, +post]`, and the tick mirrors that pin onto every scope window. It passed `pinned_range().min/max` to `pin_event_window()`, which takes **spans** (`pre, post`): `min` is signed, so `pre` came out negative and the group range became `[+pre, +post]` — an inverted x window. The plotter then had nothing to draw: no trace, no x-axis labels, an empty plot that looked like a broken window. `RowSet::pin_display_range(x0, x1)` states the pin as the range a mirroring view actually has, and the tick uses it; live mode was never affected, which is why the defect only showed under the trigger. Also restores the scope-window `rebuild_if_dirty()` in the tick, which a reproduction experiment had left commented out (`REPRO-TEMP`) and a later commit carried: a window opened empty and filled by a drop kept the figure it was built with. Probe: `[scope-probe] pin_mirror=1 main=[..] scope=[..] x=[..]` pins the main window, reads the scope's pin and plot x range a frame later, and reads `0` for an inverted or mismatched pin. Docs: probe readings and the trigger/pinning invariant (range vs spans).
This commit is contained in:
1 parent
2279e2140a
commit
ecdbf4f0e1
6 files changed
+75
-9
No files matched your search
@@ -570,6 +570,13 @@ class RowSet {
|
||||
/// 0, so nothing outside the pre+post window is visible.
|
||||
void pin_event_window(double pre_s, double post_s);
|
||||
|
||||
/// The same pin, stated as the **range** a second view mirrors: the caller has the display
|
||||
/// range (`x0 < x1`) and not the spans -- a scope window takes `pinned_range()` from the main
|
||||
/// window and hands it on. `pin_event_window()` takes *spans*, and passing it a range's signed
|
||||
/// `min` turned the pin inside out (a scope in Held mode pinned to `[+pre, +post]`: no trace
|
||||
/// and no x labels). A degenerate or inverted range pins nothing.
|
||||
void pin_display_range(double x0, double x1);
|
||||
|
||||
/// Fits every row's y axis to the data it holds, and puts x back on the whole time window --
|
||||
/// `fit_x()`'s x half exactly, so the two cannot drift apart. Like it, **this does not change
|
||||
/// the time window**: the y axes are fitted to their data, x is merely un-zoomed.
|
||||
|
||||
Reference in new issue
Block a user