From 2a53c80ab7157c390ca03d7862be694547dcd017 Mon Sep 17 00:00:00 2001 From: temportalflux Date: Sat, 6 Jun 2026 19:10:26 -0400 Subject: [PATCH] move layout update into InputState --- crates/gpui_elements/src/input/paint.rs | 10 +--------- crates/gpui_elements/src/input/state.rs | 14 +++++++++++++- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/crates/gpui_elements/src/input/paint.rs b/crates/gpui_elements/src/input/paint.rs index 28ca4846a2..e9f0c09523 100644 --- a/crates/gpui_elements/src/input/paint.rs +++ b/crates/gpui_elements/src/input/paint.rs @@ -89,9 +89,6 @@ impl Element for Input { }; self.input.update(cx, |input, _cx| { - let dirty = input.layout_data.dirty - || input.layout_data.wrap_width != wrap_width - || input.layout_data.text_style != layout_state.text_style; let layout_data = InputLayoutData { text_style: layout_state.text_style.clone(), line_height, @@ -99,12 +96,7 @@ impl Element for Input { available_size: bounds.size, dirty: false, }; - input.layout_data = layout_data; - if dirty { - input.logical_lines = - InputState::build_logical_lines(input.content(), window, &input.layout_data); - input.scroll_to_cursor(); - } + input.apply_layout_update(layout_data, window); }); let hitbox = self.interactivity.prepaint( diff --git a/crates/gpui_elements/src/input/state.rs b/crates/gpui_elements/src/input/state.rs index d3346d4da4..84f9481ce7 100644 --- a/crates/gpui_elements/src/input/state.rs +++ b/crates/gpui_elements/src/input/state.rs @@ -1047,10 +1047,22 @@ impl InputState { } } + pub(super) fn apply_layout_update(&mut self, layout_data: InputLayoutData, window: &Window) { + let dirty = self.layout_data.dirty + || self.layout_data.wrap_width != layout_data.wrap_width + || self.layout_data.text_style != layout_data.text_style; + self.layout_data = layout_data; + if dirty { + self.logical_lines = + InputState::build_logical_lines(&self.content, window, &self.layout_data); + self.scroll_to_cursor(); + } + } + /// Called internally during window prepaint to layout the content into logical lines based on viewport bounds wrapping. pub(super) fn build_logical_lines( content: &str, - window: &mut Window, + window: &Window, layout_data: &InputLayoutData, ) -> Vec { let text_style = &layout_data.text_style;