Repository navigation
Conversation
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Keep initialized
fromTo()/startAtvalues when a render refresh rewinds across a tween's start between output frames, including very short tweens that have ended inside the 0.001s rewind window. Restore those values in authored order: earlier same-time writers cannot override from-only properties, while later writers still win.For a 30fps composition whose scale tween starts at 0.0995s,
transformOrigin: 0% 0%remains applied from frame 3. Current main loses that origin and exports the box around its center.Why
The exact-start priming merged in #5125 fixes the original reproduction. It misses a start between output frames, and replaying from-state between the two timeline passes permits an earlier writer to override it during the final pass.
Related work
Refs #5122. Follow-up to merged #5125, retaining its keyframe and stagger priming and all its tests. This patch is based on upstream
21d14b25b3b3530da60ccbc9ad58788398b797c0, with only three files changed. The earlier-writer case is explicitly deferred in #5125's description.Uninitialized nested/stagger openings and the existing zero-duration callback guard remain outside this change. This does not claim every GSAP edge case is resolved.
How
Collect already initialized, forward-playing tweens crossed by the artificial rewind, using their local clocks. Temporarily replay cached from-state immediately before each tween's own nonnegative render, preserving writer order without initializing unrelated animations or mutating tween vars.
Restore the original render property descriptor or inherited status, parent metadata, and landing marks in
finally. If a property setter reenters the refresh and changes the tween's rendered time, force interpolation to finish; ordinary renders retain their force flag and repeat-refresh evaluation behavior. No public API, dependency, or render-default changes.Test plan
renderSeekintegration. Cover off-grid starts, short ended tweens, writer order, nested speeds, cached function values, backward seeks, unrelated uninitialized animations, error/descriptor restoration, same-time reentry, and shortrepeatRefreshevaluation.checkpasses nine samples.deterministicFonts-googleSubsets.test.ts, “still embeds a local file when the page has no Google link.” No font files were changed.Decoded white box bounds from the actual off-grid MP4 exports:
21d14b2These are automated encoded-frame measurements. Manual visual/participant validation, yellow-control pixel identity, arbitrary third-party plugins, and exhaustive browser compatibility are not claimed. Documentation changes are not applicable.