updated a few things

This commit is contained in:
2024-11-17 17:01:48 +01:00
parent 74767cf961
commit aa9d68f16f
11 changed files with 325 additions and 277 deletions
+25 -4
View File
@@ -1,6 +1,9 @@
use crossterm::terminal::enable_raw_mode;
use crossterm::terminal::{disable_raw_mode, enable_raw_mode};
use crate::{clear, create_frame, flush, get_term_size, render_to_frame, Element, State, StateChanger, Value};
use crate::{
utils::{clear, create_frame, flush, get_term_size, hide_cursor, render_to_frame, show_cursor}, Element,
State, StateChanger,
};
use std::ffi::c_void;
pub struct ElementWrapper<'a> {
@@ -27,7 +30,7 @@ extern "C" {
pub extern "C" fn render(ptr: *mut c_void, state: u32) {
let element = unsafe { ElementWrapper::from_raw(ptr) };
let (width, height) = get_term_size();
let mut frame: Vec<String> = create_frame(Value::new(width), Value::new(height));
let mut frame: Vec<String> = create_frame(width, height);
render_to_frame(State::from_u32(state), width, &mut frame, element);
clear();
print!("{}", frame.join(""));
@@ -38,13 +41,31 @@ pub extern "C" fn render(ptr: *mut c_void, state: u32) {
pub extern "C" fn event(ptr: *mut c_void, state: *mut u32) {
let event = crossterm::event::read().unwrap();
let element = unsafe { ElementWrapper::from_raw(ptr) };
if let crossterm::event::Event::Resize(width, height) = event {
element.update_data(width as usize, height as usize);
}
element.event(event, &StateChanger(state));
}
#[no_mangle]
pub extern "C" fn init_event(ptr: *mut c_void, state: *mut u32) {
let event = crossterm::event::Event::FocusGained;
let element = unsafe { ElementWrapper::from_raw(ptr) };
let (width, height) = get_term_size();
element.update_data(width, height);
element.event(event, &StateChanger(state));
}
pub fn run(data: &mut Box<dyn Element>) -> bool {
hide_cursor();
enable_raw_mode().unwrap();
clear();
unsafe {
let element_ptr = ElementWrapper::new(data);
return c_run(element_ptr);
let c = c_run(element_ptr);
show_cursor();
disable_raw_mode().unwrap();
clear();
return c;
}
}