Skip to content
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

Fix/pane grid continuity #2628

Merged
merged 7 commits into from
Oct 24, 2024
Merged

Conversation

tarkah
Copy link
Member

@tarkah tarkah commented Oct 4, 2024

Fixes issues w/ pane grid continuity of widget state when adding / removing panes, drag / dropping panes, or maximize / restoring panes. I've tested this fix with halloy and can confirm that scrollable offsets within each pane are perfectly retained when doing all the above operations. Previously the states would have gotten shuffled around relative to the panes which would cause the wrong scrollable offsets to get used for each pane (jump around).

For maximize / restore, we still need to build view for the hidden panes so diff'ing them doesn't break. This can be optimized to avoid calling diff on those hidden panes, allowing us to skip viewing them, but this adds additional complexity I didn't want to try and tackle here. The current approach allows us to naively zip all content, layout & state and then just applying a filter to return the maximized pane within each widget operation.

tarkah and others added 5 commits October 24, 2024 13:05
This ensures continuity in how panes are iterated on
when building widget state
We can associate each state with a `Pane` and compare
that against the new panes to remove states w/ respective
panes which no longer exist.

Because we always increment `Pane`, new states are always
added to the end, so this retain + add new state approach
will ensure continuity when panes are added & removed
State continuity is dependent on keeping a node associated
to it's original `Pane` id. When splitting -> swapping
nodes, we need to assign it back to the original `Pane`
to enforce continuity.
Copy link
Member

@hecrj hecrj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome! 🎉

I fixed some duplicated state and renamed some stuff. The changes also exposed a pesky bug in the responsive widget.

Let's merge!

@hecrj hecrj merged commit 17b35df into iced-rs:master Oct 24, 2024
15 checks passed
@hecrj hecrj added this to the 0.14 milestone Oct 24, 2024
@hecrj hecrj added bug Something isn't working improvement An internal improvement feature New feature or request widget addition fix labels Oct 24, 2024
@tarkah
Copy link
Member Author

tarkah commented Oct 24, 2024

Looks great, thanks!

@tarkah tarkah deleted the fix/pane-grid-continuity branch October 24, 2024 13:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
addition bug Something isn't working feature New feature or request fix improvement An internal improvement widget
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants