use core::{ops::Deref, ptr::null_mut};
use oxivgl_sys::*;
use super::{
WidgetError,
obj::{AsLvHandle, Obj},
};
#[derive(Debug)]
pub struct Button<'p> {
obj: Obj<'p>,
}
impl<'p> AsLvHandle for Button<'p> {
fn lv_handle(&self) -> *mut lv_obj_t {
self.obj.lv_handle()
}
}
impl<'p> Deref for Button<'p> {
type Target = Obj<'p>;
fn deref(&self) -> &Obj<'p> {
&self.obj
}
}
impl<'p> Button<'p> {
pub(crate) fn from_raw(ptr: *mut lv_obj_t) -> Self {
Button { obj: Obj::from_raw(ptr) }
}
pub fn new(parent: &impl AsLvHandle) -> Result<Self, WidgetError> {
let parent_ptr = parent.lv_handle();
assert_ne!(parent_ptr, null_mut(), "Parent widget cannot be null");
let handle = unsafe { lv_button_create(parent_ptr) };
if handle.is_null() { Err(WidgetError::LvglNullPointer) } else { Ok(Button { obj: Obj::from_raw(handle) }) }
}
}