working render

This commit is contained in:
2024-09-21 20:55:59 +02:00
parent 239f748a28
commit 81c9a677e3
3 changed files with 42 additions and 13 deletions
+40 -10
View File
@@ -35,6 +35,11 @@ impl<T: Component> ComponentWrapper<T> {
pub fn run(&mut self) -> String {
self.component.run(self.x, self.y)
}
pub fn render(&self, frame: &mut Vec<String>) {
for (i, line) in self.component.render().split("\n").enumerate() {
frame[self.y + i] = _render_line(frame[self.y + i].clone(), line.to_string(), self.x);
}
}
}
pub fn clear() {
@@ -46,20 +51,13 @@ pub fn flush() {
io::stdout().flush().unwrap();
}
pub fn render_frame<T: Component>(components: Vec<ComponentWrapper<T>>) {
pub fn create_frame() -> Vec<String> {
clear();
let (w, h) = terminal::size().unwrap();
let mut frame: Vec<String> = vec![" ".repeat(w as usize); h as usize - 1];
for c in components {
for (i, line) in c.component.render().split("\n").enumerate() {
frame[c.y + i] = render_line(frame[c.y + i].clone(), line.to_string(), c.x);
}
}
print!("{}", frame.join("\n"));
flush();
vec![" ".repeat(w as usize); h as usize - 1]
}
fn render_line(frame_line: String, line: String, x: usize) -> String {
fn _render_line(frame_line: String, line: String, x: usize) -> String {
let mut result = String::new();
if x >= frame_line.len() {
return result;
@@ -91,3 +89,35 @@ pub fn read_key() -> String {
disable_raw_mode().unwrap();
return res;
}
#[macro_export]
macro_rules! render_frame {
($first:expr) => {{
let mut frame = osui::create_frame();
$first.render(&mut frame);
print!("{}", frame.join("\n"));
frame
}};
($first:expr, $($rest:expr),+) => {{
let mut frame = osui::create_frame();
$first.render(&mut frame);
$( $rest.render(&mut frame); )+
print!("{}", frame.join("\n"));
frame
}};
}
#[macro_export]
macro_rules! srender_frame {
($first:expr) => {{
let mut frame = create_frame();
$first.render(&mut frame);
frame
}};
($first:expr, $($rest:expr),+) => {{
let mut frame = create_frame();
$first.render(&mut frame);
$( $rest.render(&mut frame); )+
frame
}};
}