Remove code duplication
This commit is contained in:
parent
5015711141
commit
469fdf2508
5 changed files with 32 additions and 70 deletions
|
@ -110,24 +110,36 @@ impl Default for GenericObject {
|
|||
}
|
||||
|
||||
macro_rules! define_object {
|
||||
($item:ident) => {
|
||||
define_object!($item, event = (), part = $crate::Part);
|
||||
($item:ident, $create_fn:ident) => {
|
||||
define_object!($item, $create_fn, event = (), part = $crate::Part);
|
||||
};
|
||||
($item:ident, event = $event_type:ty) => {
|
||||
define_object!($item, event = $event_type, part = $crate::Part);
|
||||
($item:ident, $create_fn:ident, event = $event_type:ty) => {
|
||||
define_object!($item, $create_fn, event = $event_type, part = $crate::Part);
|
||||
};
|
||||
($item:ident, part = $part_type:ty) => {
|
||||
define_object!($item, event = (), part = $part_type);
|
||||
($item:ident, $create_fn:ident, part = $part_type:ty) => {
|
||||
define_object!($item, $create_fn, event = (), part = $part_type);
|
||||
};
|
||||
($item:ident, part = $part_type:ty, event = $event_type:ty) => {
|
||||
define_object!($item, event = $event_type, part = $part_type);
|
||||
($item:ident, $create_fn:ident, part = $part_type:ty, event = $event_type:ty) => {
|
||||
define_object!($item, $create_fn, event = $event_type, part = $part_type);
|
||||
};
|
||||
($item:ident, event = $event_type:ty, part = $part_type:ty) => {
|
||||
($item:ident, $create_fn:ident, event = $event_type:ty, part = $part_type:ty) => {
|
||||
pub struct $item {
|
||||
core: $crate::GenericObject,
|
||||
}
|
||||
|
||||
impl $item {
|
||||
pub fn new<C>(parent: &mut C) -> Self
|
||||
where
|
||||
C: NativeObject,
|
||||
{
|
||||
unsafe {
|
||||
let ptr = lvgl_sys::$create_fn(parent.raw().as_mut(), ptr::null_mut());
|
||||
let raw = ptr::NonNull::new_unchecked(ptr);
|
||||
let core = GenericObject::from_raw(raw);
|
||||
Self { core }
|
||||
}
|
||||
}
|
||||
|
||||
pub fn on_event<F>(&mut self, f: F)
|
||||
where
|
||||
F: FnMut(Self, $crate::support::Event<<Self as $crate::Object>::SpecialEvent>),
|
||||
|
|
|
@ -2,21 +2,9 @@ use crate::support::Animation;
|
|||
use crate::{GenericObject, NativeObject, Object};
|
||||
use core::ptr;
|
||||
|
||||
define_object!(Bar, part = BarPart);
|
||||
define_object!(Bar, lv_bar_create, part = BarPart);
|
||||
|
||||
impl Bar {
|
||||
pub fn new<C>(parent: &mut C) -> Self
|
||||
where
|
||||
C: NativeObject,
|
||||
{
|
||||
unsafe {
|
||||
let ptr = lvgl_sys::lv_bar_create(parent.raw().as_mut(), ptr::null_mut());
|
||||
let raw = ptr::NonNull::new_unchecked(ptr);
|
||||
let core = GenericObject::from_raw(raw);
|
||||
Self { core }
|
||||
}
|
||||
}
|
||||
|
||||
/// Set minimum and the maximum values of the bar
|
||||
pub fn set_range(&mut self, min: i16, max: i16) {
|
||||
unsafe {
|
||||
|
|
|
@ -1,18 +1,4 @@
|
|||
use crate::{GenericObject, NativeObject, Object};
|
||||
use core::ptr;
|
||||
|
||||
define_object!(Button);
|
||||
|
||||
impl Button {
|
||||
pub fn new<C>(parent: &mut C) -> Self
|
||||
where
|
||||
C: NativeObject,
|
||||
{
|
||||
unsafe {
|
||||
let ptr = lvgl_sys::lv_btn_create(parent.raw().as_mut(), ptr::null_mut());
|
||||
let raw = ptr::NonNull::new_unchecked(ptr);
|
||||
let core = GenericObject::from_raw(raw);
|
||||
Self { core }
|
||||
}
|
||||
}
|
||||
}
|
||||
define_object!(Button, lv_btn_create);
|
||||
|
|
|
@ -1,21 +1,9 @@
|
|||
use crate::{GenericObject, NativeObject, Object};
|
||||
use core::ptr;
|
||||
|
||||
define_object!(Gauge, part = GaugePart);
|
||||
define_object!(Gauge, lv_gauge_create, part = GaugePart);
|
||||
|
||||
impl Gauge {
|
||||
pub fn new<C>(parent: &mut C) -> Self
|
||||
where
|
||||
C: NativeObject,
|
||||
{
|
||||
unsafe {
|
||||
let ptr = lvgl_sys::lv_gauge_create(parent.raw().as_mut(), ptr::null_mut());
|
||||
let raw = ptr::NonNull::new_unchecked(ptr);
|
||||
let core = GenericObject::from_raw(raw);
|
||||
Self { core }
|
||||
}
|
||||
}
|
||||
|
||||
/// Set a new value on the gauge
|
||||
pub fn set_value(&mut self, needle_id: u8, value: i32) {
|
||||
unsafe {
|
||||
|
|
|
@ -2,28 +2,9 @@ use crate::{GenericObject, NativeObject, Object};
|
|||
use core::ptr;
|
||||
use cstr_core::CString;
|
||||
|
||||
pub enum LabelAlign {
|
||||
Left,
|
||||
Center,
|
||||
Right,
|
||||
Auto,
|
||||
}
|
||||
|
||||
define_object!(Label);
|
||||
define_object!(Label, lv_label_create);
|
||||
|
||||
impl Label {
|
||||
pub fn new<C>(parent: &mut C) -> Self
|
||||
where
|
||||
C: NativeObject,
|
||||
{
|
||||
unsafe {
|
||||
let ptr = lvgl_sys::lv_label_create(parent.raw().as_mut(), ptr::null_mut());
|
||||
let raw = ptr::NonNull::new_unchecked(ptr);
|
||||
let core = GenericObject::from_raw(raw);
|
||||
Self { core }
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_text(&mut self, text: &str) {
|
||||
let text = CString::new(text).unwrap();
|
||||
unsafe {
|
||||
|
@ -49,3 +30,10 @@ impl Label {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub enum LabelAlign {
|
||||
Left,
|
||||
Center,
|
||||
Right,
|
||||
Auto,
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue