small structure changes
This commit is contained in:
+7
-14
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user