working render
This commit is contained in:
@@ -22,8 +22,7 @@ use osui::{self, render_frame, ui};
|
|||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let txt = ui::text("Hello World!");
|
let txt = ui::text("Hello World!");
|
||||||
render_frame(vec![txt.clone()]);
|
render_frame!(txt);
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
+40
-10
@@ -35,6 +35,11 @@ impl<T: Component> ComponentWrapper<T> {
|
|||||||
pub fn run(&mut self) -> String {
|
pub fn run(&mut self) -> String {
|
||||||
self.component.run(self.x, self.y)
|
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() {
|
pub fn clear() {
|
||||||
@@ -46,20 +51,13 @@ pub fn flush() {
|
|||||||
io::stdout().flush().unwrap();
|
io::stdout().flush().unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn render_frame<T: Component>(components: Vec<ComponentWrapper<T>>) {
|
pub fn create_frame() -> Vec<String> {
|
||||||
clear();
|
clear();
|
||||||
let (w, h) = terminal::size().unwrap();
|
let (w, h) = terminal::size().unwrap();
|
||||||
let mut frame: Vec<String> = vec![" ".repeat(w as usize); h as usize - 1];
|
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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
let mut result = String::new();
|
||||||
if x >= frame_line.len() {
|
if x >= frame_line.len() {
|
||||||
return result;
|
return result;
|
||||||
@@ -91,3 +89,35 @@ pub fn read_key() -> String {
|
|||||||
disable_raw_mode().unwrap();
|
disable_raw_mode().unwrap();
|
||||||
return res;
|
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
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|||||||
+1
-1
@@ -2,5 +2,5 @@ use osui::{self, render_frame, ui};
|
|||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let txt = ui::text("Hello World!");
|
let txt = ui::text("Hello World!");
|
||||||
render_frame(vec![txt.clone()]);
|
render_frame!(txt);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user