1
0
mirror of https://github.com/emilk/egui.git synced 2026-08-29 04:40:03 -04:00

Fix(egui): improve underline drawing

This commit is contained in:
umajho
2026-04-08 17:49:37 +08:00
parent b55bd5c19f
commit 97ef386b7f

View File

@@ -151,20 +151,53 @@ pub fn paint_ime_preedit_text_visuals(
color: active_underline_stroke.color.linear_multiply(0.5), color: active_underline_stroke.color.linear_multiply(0.5),
}; };
paint_underlines( if let Some(relative_active_range) = &relative_active_range
pos, && !relative_active_range.is_empty()
painter, {
galley, if relative_active_range.start.index > 0 {
galley.layout_from_cursor(preedit_range.start), paint_underlines(
galley.layout_from_cursor(preedit_range.end), pos,
inactive_underline_stroke, painter,
); galley,
galley.layout_from_cursor(preedit_range.start),
galley.layout_from_cursor(preedit_range.start + relative_active_range.start.index),
inactive_underline_stroke,
);
}
let Some(relative_active_range) = relative_active_range else { paint_underlines(
return; pos,
}; painter,
galley,
galley.layout_from_cursor(preedit_range.start + relative_active_range.start.index),
galley.layout_from_cursor(preedit_range.start + relative_active_range.end.index),
active_underline_stroke,
);
if relative_active_range.is_empty() { if relative_active_range.end < preedit_range.end - preedit_range.start.index {
paint_underlines(
pos,
painter,
galley,
galley.layout_from_cursor(preedit_range.start + relative_active_range.end.index),
galley.layout_from_cursor(preedit_range.end),
inactive_underline_stroke,
);
}
} else {
paint_underlines(
pos,
painter,
galley,
galley.layout_from_cursor(preedit_range.start),
galley.layout_from_cursor(preedit_range.end),
inactive_underline_stroke,
);
}
if let Some(relative_active_range) = relative_active_range
&& relative_active_range.is_empty()
{
let active_cursor = preedit_range.start + relative_active_range.start.index; let active_cursor = preedit_range.start + relative_active_range.start.index;
let cursor_rect = cursor_rect(galley, &active_cursor, row_height); let cursor_rect = cursor_rect(galley, &active_cursor, row_height);
@@ -174,15 +207,6 @@ pub fn paint_ime_preedit_text_visuals(
cursor_rect.translate(pos.to_vec2()), cursor_rect.translate(pos.to_vec2()),
time_since_last_interaction, time_since_last_interaction,
); );
} else {
paint_underlines(
pos,
painter,
galley,
galley.layout_from_cursor(preedit_range.start + relative_active_range.start.index),
galley.layout_from_cursor(preedit_range.start + relative_active_range.end.index),
inactive_underline_stroke,
);
} }
} }