small structure changes

This commit is contained in:
2024-11-18 04:00:50 +01:00
parent aa9d68f16f
commit 15fb611870
8 changed files with 275 additions and 185 deletions
+7 -14
View File
@@ -1,24 +1,18 @@
use crossterm::terminal::{disable_raw_mode, enable_raw_mode};
use crate::{
utils::{clear, create_frame, flush, get_term_size, hide_cursor, render_to_frame, show_cursor}, Element,
State, StateChanger,
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> {
element: &'a mut Box<dyn Element>,
}
struct ElementWrapper<'a>(&'a mut Element);
impl<'a> ElementWrapper<'a> {
pub fn new(element: &'a mut Box<dyn Element>) -> *mut c_void {
Box::into_raw(Box::new(ElementWrapper { element })) as *mut c_void
}
pub unsafe fn from_raw(ptr: *mut c_void) -> &'a mut Box<dyn Element> {
pub unsafe fn from_raw(ptr: *mut c_void) -> &'a mut Element {
assert!(!ptr.is_null(), "Pointer to ElementWrapper is null");
let wrapper = ptr as *mut ElementWrapper;
(*wrapper).element
(*wrapper).0
}
}
@@ -56,13 +50,12 @@ pub extern "C" fn init_event(ptr: *mut c_void, state: *mut u32) {
element.event(event, &StateChanger(state));
}
pub fn run(data: &mut Box<dyn Element>) -> bool {
pub fn run(element: &mut Element) -> bool {
hide_cursor();
enable_raw_mode().unwrap();
clear();
unsafe {
let element_ptr = ElementWrapper::new(data);
let c = c_run(element_ptr);
let c = c_run(&mut ElementWrapper(element) as *mut ElementWrapper as *mut c_void);
show_cursor();
disable_raw_mode().unwrap();
clear();