-
Notifications
You must be signed in to change notification settings - Fork 1.7k
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 regression in TextEdit::singleline layout #5640
base: master
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
Preview available at https://egui-pr-preview.github.io/pr/5640-master |
There are some clippy failures that need fixing |
Done. There's still a warning left at |
@juancampa you may wanna have a look at this too |
The only thing I'm seeing that could be a regression is the frame delay that appears in the video (bottom border disappears for one frame) but I'll test locally to double check |
Ok so the border disappearing is because of the TextArea is animating the scroll, which is expected. However, I can still repro the original issue when scroll animation is disabled (using Screenshot.2025-01-27.at.14.13.01.mp4Since This is what I used: 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.
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(),
);
}
} |
So, the root cause of the original issue is |
Anyway, we need to decide what to do here. If you're both sure that the root cause of the original issue is a flaw in TextEdit, then I can use @juancampa's code in the next commit, if he doesn't object. |
The original issue was a bug in When scroll animation is enabled, it works fine, because |
Okay, that makes sense. I tried to figure out where the calculation goes wrong, but egui is just too complex and complicated for me. My only suspicion is The solution from @juancampa does work, but to me, it feels more like a workaround. I'll revert to their code and add an if statement for |
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 inTextEdit
insideScrollArea
, but it did so by adding unnecessary size allocation toTextEdit
, which breaks the layout whenTextEdit::singleline
is used outside ofScrollArea
.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:Furthermore, I was unable to reproduce the original bug from PR #3660 in the current version of egui using the following code:
This code attempts to recreate the layout shown in the video from PR #3660, using a
ScrollArea
with limited height and aTextEdit
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.