Handle pixel-down to last line when no trailing newline

This commit is contained in:
Conrad Irwin
2023-10-20 12:46:14 -06:00
parent 352a554c74
commit 43d682f6b8
+18
View File
@@ -574,6 +574,7 @@ impl DisplaySnapshot {
) -> Line {
let mut styles = Vec::new();
let mut line = String::new();
let mut ended_in_newline = false;
let range = display_row..display_row + 1;
for chunk in self.highlighted_chunks(range, false, editor_style) {
@@ -589,6 +590,7 @@ impl DisplaySnapshot {
} else {
Cow::Borrowed(&editor_style.text)
};
ended_in_newline = chunk.chunk.ends_with("\n");
styles.push((
chunk.chunk.len(),
@@ -600,6 +602,22 @@ impl DisplaySnapshot {
));
}
// our pixel positioning logic assumes each line ends in \n,
// this is almost always true except for the last line which
// may have no trailing newline.
if !ended_in_newline && display_row == self.max_point().row() {
line.push_str("\n");
styles.push((
"\n".len(),
RunStyle {
font_id: editor_style.text.font_id,
color: editor_style.text_color,
underline: editor_style.text.underline,
},
));
}
text_layout_cache.layout_str(&line, editor_style.text.font_size, &styles)
}