Maintain logical scroll top when splicing List elements

Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
Antonio Scandurra
2021-08-31 16:35:57 +02:00
co-authored by Nathan Sobo
parent d410ff83a7
commit 2db49ce27f
2 changed files with 44 additions and 15 deletions
+19 -11
View File
@@ -160,15 +160,7 @@ impl Presenter {
_ => {}
}
let mut event_cx = EventContext {
rendered_views: &mut self.rendered_views,
dispatched_actions: Default::default(),
font_cache: &self.font_cache,
text_layout_cache: &self.text_layout_cache,
view_stack: Default::default(),
invalidated_views: Default::default(),
app: cx,
};
let mut event_cx = self.build_event_context(cx);
event_cx.dispatch_event(root_view_id, &event);
let invalidated_views = event_cx.invalidated_views;
@@ -183,6 +175,21 @@ impl Presenter {
}
}
pub fn build_event_context<'a>(
&'a mut self,
cx: &'a mut MutableAppContext,
) -> EventContext<'a> {
EventContext {
rendered_views: &mut self.rendered_views,
dispatched_actions: Default::default(),
font_cache: &self.font_cache,
text_layout_cache: &self.text_layout_cache,
view_stack: Default::default(),
invalidated_views: Default::default(),
app: cx,
}
}
pub fn debug_elements(&self, cx: &AppContext) -> Option<json::Value> {
cx.root_view_id(self.window_id)
.and_then(|root_view_id| self.rendered_views.get(&root_view_id))
@@ -274,8 +281,9 @@ impl<'a> EventContext<'a> {
}
pub fn notify(&mut self) {
self.invalidated_views
.insert(*self.view_stack.last().unwrap());
if let Some(view_id) = self.view_stack.last() {
self.invalidated_views.insert(*view_id);
}
}
}