aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src/ui
diff options
context:
space:
mode:
authorDoug Kelkhoff2022-11-08 12:19:59 +0000
committerGitHub2022-11-08 12:19:59 +0000
commit7ed9e9cf2567ee5e23cd8694ffccb4b38602c02a (patch)
treed815469c54dc42dc66e57fa85e389325e8b7a3a6 /helix-term/src/ui
parentc94feed83d746e71fb030639d740af85162b0763 (diff)
Dynamically resize line number gutter width (#3469)
* dynamically resize line number gutter width * removing digits lower-bound, permitting spacer * removing max line num char limit; adding notes; qualified successors; notes * updating tests to use new line number width when testing views * linenr width based on document line count * using min width of 2 so line numbers relative is useful * lint rolling; removing unnecessary type parameter lifetime * merge change resolution * reformat code * rename row_styler to style; add int_log resource * adding spacer to gutters default; updating book config entry * adding view.inner_height(), swap for loop for iterator * reverting change of current! to view! now that doc is not needed
Diffstat (limited to 'helix-term/src/ui')
-rw-r--r--helix-term/src/ui/editor.rs17
1 files changed, 9 insertions, 8 deletions
diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs
index 2cd2ad05..f2a588e3 100644
--- a/helix-term/src/ui/editor.rs
+++ b/helix-term/src/ui/editor.rs
@@ -79,7 +79,7 @@ impl EditorView {
surface: &mut Surface,
is_focused: bool,
) {
- let inner = view.inner_area();
+ let inner = view.inner_area(doc);
let area = view.area;
let theme = &editor.theme;
@@ -736,9 +736,10 @@ impl EditorView {
// avoid lots of small allocations by reusing a text buffer for each line
let mut text = String::with_capacity(8);
- for (constructor, width) in view.gutters() {
- let gutter = constructor(editor, doc, view, theme, is_focused, *width);
- text.reserve(*width); // ensure there's enough space for the gutter
+ for gutter_type in view.gutters() {
+ let gutter = gutter_type.style(editor, doc, view, theme, is_focused);
+ let width = gutter_type.width(view, doc);
+ text.reserve(width); // ensure there's enough space for the gutter
for (i, line) in (view.offset.row..(last_line + 1)).enumerate() {
let selected = cursors.contains(&line);
let x = viewport.x + offset;
@@ -751,13 +752,13 @@ impl EditorView {
};
if let Some(style) = gutter(line, selected, &mut text) {
- surface.set_stringn(x, y, &text, *width, gutter_style.patch(style));
+ surface.set_stringn(x, y, &text, width, gutter_style.patch(style));
} else {
surface.set_style(
Rect {
x,
y,
- width: *width as u16,
+ width: width as u16,
height: 1,
},
gutter_style,
@@ -766,7 +767,7 @@ impl EditorView {
text.clear();
}
- offset += *width as u16;
+ offset += width as u16;
}
}
@@ -882,7 +883,7 @@ impl EditorView {
.or_else(|| theme.try_get_exact("ui.cursorcolumn"))
.unwrap_or_else(|| theme.get("ui.cursorline.secondary"));
- let inner_area = view.inner_area();
+ let inner_area = view.inner_area(doc);
let offset = view.offset.col;
let selection = doc.selection(view.id);