Skip to content

Commit

Permalink
Replace in_bounds with calculation of end_indent
Browse files Browse the repository at this point in the history
Instead of repeatedly checking if it is in_bounds, calculate the
max_indent beforehand and just loop. I added a debug_assert to "prove"
that it never tries drawing out of bounds.
  • Loading branch information
A-Walrus authored and Shekhinah Memmel committed Dec 11, 2022
1 parent fbc6ab6 commit d460285
Showing 1 changed file with 11 additions and 5 deletions.
16 changes: 11 additions & 5 deletions helix-term/src/ui/editor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ use helix_view::{
keyboard::{KeyCode, KeyModifiers},
Document, Editor, Theme, View,
};
use std::{borrow::Cow, path::PathBuf};
use std::{borrow::Cow, cmp::min, path::PathBuf};

use tui::buffer::Buffer as Surface;

Expand Down Expand Up @@ -470,12 +470,18 @@ impl EditorView {
let starting_indent =
(offset.col / tab_width) + config.indent_guides.skip_levels as usize;

for i in starting_indent..(indent_level / tab_width) {
// Don't draw indent guides outside of view
let end_indent = min(
indent_level,
// Add tab_width - 1 to round up, since the first visible
// indent might be a bit after offset.col
offset.col + viewport.width as usize + (tab_width - 1),
) / tab_width;

for i in starting_indent..end_indent {
let x = (viewport.x as usize + (i * tab_width) - offset.col) as u16;
let y = viewport.y + line;
if !surface.in_bounds(x, y) {
break;
}
debug_assert!(surface.in_bounds(x, y));
surface.set_string(x, y, &indent_guide_char, indent_guide_style);
}
};
Expand Down

0 comments on commit d460285

Please sign in to comment.