diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-11-06 13:11:22 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-11-06 13:11:22 -0500 |
commit | d778408be8b12fcc16a8fcaccde49bef927f22e0 (patch) | |
tree | 0cfbe005a54ca3146d335c98b91203a1e114c392 /src | |
parent | 07ecf81b095cc1f23428f05079d65aa5d1677ca4 (diff) | |
download | vt100-rust-d778408be8b12fcc16a8fcaccde49bef927f22e0.tar.gz vt100-rust-d778408be8b12fcc16a8fcaccde49bef927f22e0.zip |
make row.contents_diff not require the row index
Diffstat (limited to 'src')
-rw-r--r-- | src/grid.rs | 8 | ||||
-rw-r--r-- | src/row.rs | 14 |
2 files changed, 8 insertions, 14 deletions
diff --git a/src/grid.rs b/src/grid.rs index 0e0ff9d..075e604 100644 --- a/src/grid.rs +++ b/src/grid.rs @@ -176,12 +176,10 @@ impl Grid { let mut final_col = prev.pos.col; for (idx, (row, prev_row)) in self.rows().zip(prev.rows()).enumerate() { - let (mut new_contents, new_attrs, new_col) = row.contents_diff( - idx.try_into().unwrap(), - prev_row, - prev_attrs, - ); + let (mut new_contents, new_attrs, new_col) = + row.contents_diff(prev_row, prev_attrs); if !new_contents.is_empty() { + contents.extend(format!("\x1b[{};1H", idx + 1).as_bytes()); final_row = idx.try_into().unwrap(); final_col = new_col; } @@ -125,11 +125,10 @@ impl Row { pub fn contents_diff( &self, - row_idx: u16, prev: &Self, attrs: crate::attrs::Attrs, ) -> (Vec<u8>, crate::attrs::Attrs, u16) { - let mut needs_move = true; + let mut skip = 0; let mut contents = vec![]; let mut prev_attrs = attrs; let mut final_col = 0; @@ -137,14 +136,11 @@ impl Row { self.cells().zip(prev.cells()).enumerate() { if cell == prev_cell { - needs_move = true; + skip += 1; } else { - if needs_move { - contents.extend( - format!("\x1b[{};{}H", row_idx + 1, idx + 1) - .as_bytes(), - ); - needs_move = false; + if skip > 0 { + contents.extend(format!("\x1b[{}C", skip).as_bytes()); + skip = 0; } let attrs = cell.attrs(); |