diff --git a/src/render_scope.rs b/src/render_scope.rs index f1c6386..9bade78 100644 --- a/src/render_scope.rs +++ b/src/render_scope.rs @@ -148,9 +148,7 @@ impl RenderScope { let height = height + self.transform.py * 2; if width > 1 && height > 1 { let d = "─".repeat(width as usize - 2); - utils::print_liner( - self.transform.x, - self.transform.y, + utils::print_liner_nopad( &self.transform, &self.parent_transform, &utils::hex_ansi(c), @@ -167,9 +165,7 @@ impl RenderScope { let height = height + self.transform.py * 2; if width > 1 && height > 1 { let d = "─".repeat(width as usize - 2); - utils::print_liner( - self.transform.x, - self.transform.y, + utils::print_liner_nopad( &self.transform, &self.parent_transform, &utils::hex_ansi(c), @@ -181,9 +177,7 @@ impl RenderScope { ); } } - crate::style::Background::Solid(c) => utils::print_liner( - self.transform.x, - self.transform.y, + crate::style::Background::Solid(c) => utils::print_liner_nopad( &self.transform, &self.parent_transform, &hex_ansi_bg(c), diff --git a/src/utils.rs b/src/utils.rs index d6304fe..7c655fe 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -142,13 +142,14 @@ pub(crate) fn print_liner( text: &str, ) { let x = transform.x + transform.px + x; + let y = transform.y + transform.py + y; for (i, line) in text.lines().enumerate() { if parent_transform.offset_y > y + i as u16 { continue; } - let y = transform.y + transform.py + y + i as u16 - parent_transform.offset_y; + let y = y + i as u16 - parent_transform.offset_y; if y >= parent_transform.height + parent_transform.y + parent_transform.py { break; @@ -157,3 +158,24 @@ pub(crate) fn print_liner( flush().unwrap(); } } + +pub(crate) fn print_liner_nopad( + transform: &RawTransform, + parent_transform: &RawTransform, + liner: &str, + text: &str, +) { + for (i, line) in text.lines().enumerate() { + if parent_transform.offset_y > transform.y + i as u16 { + continue; + } + + let y = transform.y + i as u16 - parent_transform.offset_y; + + if y >= parent_transform.height + parent_transform.y + parent_transform.py { + break; + } + print!("\x1b[{};{}H{liner}{line}\x1b[0m", y + 1, transform.x + 1); + flush().unwrap(); + } +}