Skip to content

Commit bc2d370

Browse files
LaVashikklucasmerlin
authored andcommitted
Fix sizing bug in TextEdit::singleline (#5640)
This PR reverts a change introduced in PR #3660 that caused a regression with `TextEdit::singleline`. The original PR attempted to fix an issue with the cursor in `TextEdit` inside `ScrollArea`, but it did so by adding unnecessary size allocation to `TextEdit`, which breaks the layout when `TextEdit::singleline` is used outside of `ScrollArea`. ![Image](https://github.com/user-attachments/assets/78fdf20a-0763-4b5f-b83b-64522f15b35b) The regression introduced by #3660 is more severe, as it completely breaks the layout of applications using `TextEdit::singleline`, as shown in the following issues: * Closes #5500 * Closes #5597 Furthermore, I was unable to reproduce the original bug from PR #3660 in the current version of egui using the following code: ```rust impl eframe::App for MyEguiApp { fn update(&mut self, ctx: &egui::Context, _: &mut eframe::Frame) { ctx.set_debug_on_hover(true); egui::CentralPanel::default().show(ctx, |ui| { ScrollArea::vertical().max_height(100.0).show(ui, |ui| { ui.add(TextEdit::multiline(&mut self.text).hint_text("Enter text here...")) }); }); } } ``` This code attempts to recreate the layout shown in the video from PR #3660, using a `ScrollArea` with limited height and a `TextEdit` inside. However, the cursor hiding issue was not reproducible. ![Video_2025-01-26_17-54-24](https://github.com/user-attachments/assets/ca4750ea-8af8-4ab5-8c10-bdf73a090362) Therefore, I believe the code added in PR #3660 is no longer necessary and only creates more problems. * Closes #5500 * Closes #5597 * [x] I have followed the instructions in the PR template (cherry picked from commit e995c4c)
1 parent a872446 commit bc2d370

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

crates/egui/src/widgets/text_edit/builder.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -729,14 +729,17 @@ impl TextEdit<'_> {
729729
}
730730
}
731731

732-
// Allocate additional space if edits were made this frame that changed the size. This is important so that,
733-
// if there's a ScrollArea, it can properly scroll to the cursor.
734-
let extra_size = galley.size() - rect.size();
735-
if extra_size.x > 0.0 || extra_size.y > 0.0 {
736-
ui.allocate_rect(
737-
Rect::from_min_size(outer_rect.max, extra_size),
738-
Sense::hover(),
739-
);
732+
if !clip_text {
733+
// Allocate additional space if edits were made this frame that changed the size. This is important so that,
734+
// if there's a ScrollArea, it can properly scroll to the cursor.
735+
// Condition `!clip_text` is important to avoid breaking layout for `TextEdit::singleline` (PR #5640)
736+
let extra_size = galley.size() - rect.size();
737+
if extra_size.x > 0.0 || extra_size.y > 0.0 {
738+
ui.allocate_rect(
739+
Rect::from_min_size(outer_rect.max, extra_size),
740+
Sense::hover(),
741+
);
742+
}
740743
}
741744

742745
painter.galley(galley_pos, galley.clone(), text_color);
Lines changed: 2 additions & 2 deletions
Loading

0 commit comments

Comments
 (0)