Fix sizing bug in `TextEdit::singleline` (#5640)
This PR reverts a change introduced in PR https://github.com/emilk/egui/pull/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`.  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 https://github.com/emilk/egui/issues/5500 * Closes https://github.com/emilk/egui/issues/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.  Therefore, I believe the code added in PR #3660 is no longer necessary and only creates more problems. * Closes https://github.com/emilk/egui/issues/5500 * Closes https://github.com/emilk/egui/issues/5597 * [x] I have followed the instructions in the PR template
This commit is contained in:
parent
4589cbb0fe
commit
e995c4c5b4
|
|
@ -730,14 +730,17 @@ impl TextEdit<'_> {
|
|||
}
|
||||
}
|
||||
|
||||
// Allocate additional space if edits were made this frame that changed the size. This is important so that,
|
||||
// if there's a ScrollArea, it can properly scroll to the cursor.
|
||||
let extra_size = galley.size() - rect.size();
|
||||
if extra_size.x > 0.0 || extra_size.y > 0.0 {
|
||||
ui.allocate_rect(
|
||||
Rect::from_min_size(outer_rect.max, extra_size),
|
||||
Sense::hover(),
|
||||
);
|
||||
if !clip_text {
|
||||
// Allocate additional space if edits were made this frame that changed the size. This is important so that,
|
||||
// if there's a ScrollArea, it can properly scroll to the cursor.
|
||||
// Condition `!clip_text` is important to avoid breaking layout for `TextEdit::singleline` (PR #5640)
|
||||
let extra_size = galley.size() - rect.size();
|
||||
if extra_size.x > 0.0 || extra_size.y > 0.0 {
|
||||
ui.allocate_rect(
|
||||
Rect::from_min_size(outer_rect.max, extra_size),
|
||||
Sense::hover(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
painter.galley(galley_pos, galley.clone(), text_color);
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:322a50c522ba4ac67206332e1d251e121c8c3d5538ca7961880623b20f4933e5
|
||||
size 81732
|
||||
oid sha256:0466198f14d15f011e16d16efcc28aeaaf80978ea4e46b5d9a1282304c192c4c
|
||||
size 80907
|
||||
|
|
|
|||
Loading…
Reference in New Issue