Skip to content

fix(engine): honor start_at/end_at visibility windows and wire timeline steps#27

Merged
LeadcodeDev merged 1 commit into
mainfrom
fix/engine-timing-semantics
Jul 18, 2026
Merged

fix(engine): honor start_at/end_at visibility windows and wire timeline steps#27
LeadcodeDev merged 1 commit into
mainfrom
fix/engine-timing-semantics

Conversation

@LeadcodeDev

Copy link
Copy Markdown
Owner

Closes #5. Closes #6. Closes #7.

Goal: the timing schema stops lying — start_at/end_at gate painting for every component, timeline steps actually trigger animations, Caption/Positioned join the dispatch.

  • BoxNode gains a PaintWindow (from as_timed()); paint_node returns early outside [start_at, end_at) — subtree included, no hits recorded — while the node keeps its layout space (CSS visibility semantics, matching legacy counter behavior; siblings must not jump)
  • timeline: [{at, animation[]}] resolves as the step's animations with delay += at, merged after style.animation (AnimationEffect::shift_delay; glow/wiggle/orbit/motion-blur have no delay concept and are documented no-ops)
  • Caption gets a flattened TimingConfig; Positioned gets timing + timeline + animation support; both wired into as_timed/as_animatable
  • Skill rule timeline-sequencing.md rewritten: start_at = visibility, animation delay = motion, timeline = grouped timed phases

Tests: 3 new pixel-level regression tests (start_at hides before window, end_at hides after, timeline fade_in animates in its window) — written red first. 133 total, all green.

Verify: cargo test --workspace ✓ · cargo fmt --check ✓ · clippy 0 warnings ✓

start_at/end_at were silently ignored by the box pipeline (only Particle
was gated, on a legacy path) and timeline was consumed nowhere.

- BoxNode carries a PaintWindow built from as_timed(); paint_node skips
  the node and its subtree outside [start_at, end_at) while keeping its
  layout space (CSS visibility semantics — siblings don't jump)
- timeline steps resolve as their animations with delay += step.at,
  merged after style.animation (new AnimationEffect::shift_delay;
  continuous effects without a delay concept are unaffected)
- Caption gains flattened TimingConfig; Positioned gains timing,
  timeline and animation support; both join the timed/animatable
  dispatch (the last two components excluded from it)
- skill rule timeline-sequencing.md rewritten for the new semantics
@LeadcodeDev
LeadcodeDev merged commit 74111ab into main Jul 18, 2026
@LeadcodeDev
LeadcodeDev deleted the fix/engine-timing-semantics branch July 18, 2026 19:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant