Remove code duplication

This commit is contained in:
Rafael Caricio 2020-06-05 22:36:15 +02:00
parent 5015711141
commit 469fdf2508
5 changed files with 32 additions and 70 deletions

View file

@ -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>),

View file

@ -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 {

View file

@ -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);

View file

@ -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 {

View file

@ -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,
}