port: the (A) snap RESTARTS the leaves at t=0, not just the shared clock

Measured by the Decoder with the full-quad reader: at the snap frame both sweeps
enter at their DECLARED OPENING alphas -- pteff03 at 255, pteff03a at 0 rising
1,2,3,4,6,11,17 from x=1721. Those are the leaves' own t=0 poses.

My implementation advanced the shared clock and left the leaf phase untouched, so
the sweeps would have sat mid-travel at the right clock value and the wrong
position. A defect visible only in a film -- no still and no clock reading would
show it, because the clock was correct.

The field already existed (leaf_start_units, from the F6 work); it simply was not
being set at the snap.

VERIFIED, pre-registered, via --probe-leaf on a real boot with a real press:
  snap frame  -> leaf_t 0.0, pteff03 x=-639, pteff03a x=1721  (declared t=0)
  next frame  -> leaf_t 0.5, both advanced by 2 px

Their separate note on my snap target: 236.0 survives their challenge -- at the
snap the sweeps are at alpha 255, putting the title clock in [100,238) -- but
their data cannot separate 236 from 200. Recorded as surviving, not confirmed;
the bound in the code comment already says so.
This commit is contained in:
Sylpheed port agent
2026-09-02 21:08:28 +00:00
parent dd1da9b698
commit 94d761ebff

View File

@@ -995,8 +995,20 @@ func _unhandled_input(event: InputEvent) -> void:
if overlay != null and event.is_action_pressed("ui_accept"):
var snap_to := overlay.settle_time()
if snap_to > 0.0 and view.time_units < snap_to:
print(" (A) snaps the title: shared clock %.1f -> %.1f" % [view.time_units, snap_to])
print(" (A) snaps the title: shared clock %.1f -> %.1f, leaves restart at 0"
% [view.time_units, snap_to])
view.time_units = snap_to
# 🔴 THE LEAVES RESTART AT THEIR OWN t=0; the snap is not only a clock
# advance. MEASURED: at the snap frame both sweeps enter at their
# DECLARED OPENING alphas -- `pteff03` at 255, `pteff03a` at 0 rising
# 1,2,3,4,6,11,17 from x=1721
# (`docs/re/f5-verified-with-full-quad-reader.md`).
#
# Advancing the shared clock alone would leave the leaf phase where it
# was, so the sweeps would sit mid-travel at the right clock value and
# the wrong position -- a defect visible only in a film, and one this
# implementation had until this line.
view.leaf_start_units = snap_to
view.queue_redraw()
_overlay_process(0.0)
return