Skip to content

Update from airbnb #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1,022 commits into
base: master
Choose a base branch
from
Open

Update from airbnb #1

wants to merge 1,022 commits into from

Conversation

miszmaniac
Copy link
Owner

No description provided.

bodymovin and others added 30 commits June 9, 2023 08:04
Fix transform matrix precalculation when adding effects
fix(package.json) :  support esm
In `searcShapes()`, if we found a matching element for a style in
`this.processedElements()`, we would reset its `closed` property to
`false` always, even if the element is hidden. Instead, set it to the
value of the `hd` property to ensure that hidden styles are not
re-rendered.
feat: added resetSegments to worker_wrapper
fix: set `sideEffects` as false
When calling `SVGShapeElement.reloadShapes()`, `searchShapes()` will
correctly reconciliate modified and added shapes and reuse their
elements. However, it will call `setElementStyles()`, which will add all
styles unconditionally to `this.stylesList`, even if the styles were
already in there.

Modify `setElementStyles()` to check for the existence of a particular
style before adding it.
With efeb109, support for transform effects has been added, which
required introducing another matrix on `TransformElement` to represent
the final transform matrix including the effects. This matrix is denoted
as `localMat`

If there are no transform effects, `localMat` is the same
(referentially) as the existing transform matrix (`mat`). Otherwise,
it's calculated by composing the transform effects and then composing
that with the "old" transform matrix.

Alongside `localMat`, a `_localMatMdf` member is introduced, which
tracks whether the local matrix was modified since its last commit to
the DOM, analogously to `_matMdf`.

Unfortunately, a logic bug introduced by efeb109 meant that, in the
absence of transform effects, `_localMatMdf` was latched to `true`,
i.e. no code path would ever be able to reset it to `false` after it was
once set to `true` (e.g. as a result of the matrix being animated).

This causes a serious performance regression, since all matrices that
once had `_matMdf` set to `true` will keep being updated in the DOM
every frame, causing costly full style recalculations.

Fix by forcing `_matMdf` and `_localMatMdf` to be equivalent in the
case of no transform effects, just as `mat` and `localMat` are
referentially equal. In the case of >0 transform effects, the custom
logic in `renderLocalTransform()` will take over and compute
`_localMatMdf` separately from and based on `_matMdf`.
Ensure `_localMatMdf` is reset to `false`
…lement

Don't re-add existing styles to SVGShapeElement
Update type definition of `AnimationItem.resize`
feat(types): added dpr setting to ts definition
…ient circles

Due to the way `_mdf` (modified) flags are checked in
`SVGElementsRenderer.renderGradient()`, it's possible that the `fx` and
`fy` components of a radial gradient, defining its "inner" circle (used
for highlights via `.h` and `.a` members of a `gf` shape element in the
Lottie JSON), fall out of sync with `cx` and `cy` which define its outer
circle.

In particular, the branch which sets `fx`/`fy` triggers only when the
gradient end point changes, but then sets `fx` and `fy` based on a
calculation that involves both the start and end points. Therefore, if
the start point of a gradient ever changes without a corresponding
change in the end point, the `cx`/`cy` value will be updated but not
the `fx`/`fy` value, causing visual artifacts.
…cle-desync-upstream

fix: Avoid desync between start and end (outer and inner) radial gradient circles
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.