Positioning related methods

This commit is contained in:
Rafael Caricio 2020-04-13 01:49:23 +02:00
parent df8b8b4277
commit f8f84002c6

View file

@ -14,6 +14,79 @@ impl Object {
pub(crate) fn new(raw: ptr::NonNull<lvgl_sys::lv_obj_t>) -> Self { pub(crate) fn new(raw: ptr::NonNull<lvgl_sys::lv_obj_t>) -> Self {
Self { raw } Self { raw }
} }
pub fn set_pos(&mut self, x: i16, y: i16) {
unsafe {
lvgl_sys::lv_obj_set_pos(
self.raw().as_mut(),
x as lvgl_sys::lv_coord_t,
y as lvgl_sys::lv_coord_t,
);
}
}
pub fn set_size(&mut self, w: i16, h: i16) {
unsafe {
lvgl_sys::lv_obj_set_size(
self.raw().as_mut(),
w as lvgl_sys::lv_coord_t,
h as lvgl_sys::lv_coord_t,
);
}
}
pub fn set_width(&mut self, w: u32) {
unsafe {
lvgl_sys::lv_obj_set_width(
self.raw().as_mut(),
w as lvgl_sys::lv_coord_t,
);
}
}
pub fn set_height(&mut self, h: u32) {
unsafe {
lvgl_sys::lv_obj_set_height(
self.raw().as_mut(),
h as lvgl_sys::lv_coord_t,
);
}
}
pub fn set_object_align(&mut self, base: &mut dyn Container, align: ObjectAlign, x_mod: i32, y_mod: i32) {
let align= match align {
ObjectAlign::Center => lvgl_sys::LV_ALIGN_CENTER,
ObjectAlign::InTopLeft => lvgl_sys::LV_ALIGN_IN_TOP_LEFT,
ObjectAlign::InTopMid => lvgl_sys::LV_ALIGN_IN_TOP_MID,
ObjectAlign::InTopRight => lvgl_sys::LV_ALIGN_IN_TOP_RIGHT,
ObjectAlign::InBottomLeft => lvgl_sys::LV_ALIGN_IN_BOTTOM_LEFT,
ObjectAlign::InBottomMid => lvgl_sys::LV_ALIGN_IN_BOTTOM_MID,
ObjectAlign::InBottomRight => lvgl_sys::LV_ALIGN_IN_BOTTOM_RIGHT,
ObjectAlign::InLeftMid => lvgl_sys::LV_ALIGN_IN_LEFT_MID,
ObjectAlign::InRightMid => lvgl_sys::LV_ALIGN_IN_RIGHT_MID,
ObjectAlign::OutTopLeft => lvgl_sys::LV_ALIGN_OUT_TOP_LEFT,
ObjectAlign::OutTopMid => lvgl_sys::LV_ALIGN_OUT_TOP_MID,
ObjectAlign::OutTopRight => lvgl_sys::LV_ALIGN_OUT_TOP_RIGHT,
ObjectAlign::OutBottomLeft => lvgl_sys::LV_ALIGN_OUT_BOTTOM_LEFT,
ObjectAlign::OutBottomMid => lvgl_sys::LV_ALIGN_OUT_BOTTOM_MID,
ObjectAlign::OutBottomRight => lvgl_sys::LV_ALIGN_OUT_BOTTOM_RIGHT,
ObjectAlign::OutLeftTop => lvgl_sys::LV_ALIGN_OUT_LEFT_TOP,
ObjectAlign::OutLeftMid => lvgl_sys::LV_ALIGN_OUT_LEFT_MID,
ObjectAlign::OutLeftBottom => lvgl_sys::LV_ALIGN_OUT_LEFT_BOTTOM,
ObjectAlign::OutRightTop => lvgl_sys::LV_ALIGN_OUT_RIGHT_TOP,
ObjectAlign::OutRightMid => lvgl_sys::LV_ALIGN_OUT_RIGHT_MID,
ObjectAlign::OutRightBottom => lvgl_sys::LV_ALIGN_OUT_RIGHT_BOTTOM,
} as lvgl_sys::lv_align_t;
unsafe {
lvgl_sys::lv_obj_align(
self.raw().as_mut(),
base.raw().as_mut(),
align,
x_mod as lvgl_sys::lv_coord_t,
y_mod as lvgl_sys::lv_coord_t
);
}
}
} }
impl Container for Object { impl Container for Object {
@ -22,6 +95,30 @@ impl Container for Object {
} }
} }
pub enum ObjectAlign {
Center,
InTopLeft,
InTopMid,
InTopRight,
InBottomLeft,
InBottomMid,
InBottomRight,
InLeftMid,
InRightMid,
OutTopLeft,
OutTopMid,
OutTopRight,
OutBottomLeft,
OutBottomMid,
OutBottomRight,
OutLeftTop,
OutLeftMid,
OutLeftBottom,
OutRightTop,
OutRightMid,
OutRightBottom,
}
pub struct Button { pub struct Button {
core: Object, core: Object,
} }
@ -36,24 +133,24 @@ impl Button {
Self { core } Self { core }
} }
pub fn set_pos(&mut self, x: u16, y: u16) { pub fn set_pos(&mut self, x: i16, y: i16) {
unsafe { self.core.set_pos(x, y)
lvgl_sys::lv_obj_set_pos(
self.raw().as_mut(),
x as lvgl_sys::lv_coord_t,
y as lvgl_sys::lv_coord_t,
);
}
} }
pub fn set_size(&mut self, w: u16, h: u16) { pub fn set_size(&mut self, w: i16, h: i16) {
unsafe { self.core.set_size(w, h)
lvgl_sys::lv_obj_set_size( }
self.raw().as_mut(),
w as lvgl_sys::lv_coord_t, pub fn set_width(&mut self, w: u32) {
h as lvgl_sys::lv_coord_t, self.core.set_width(w)
); }
}
pub fn set_height(&mut self, h: u32) {
self.core.set_height(h)
}
pub fn set_object_align(&mut self, base: &mut dyn Container, align: ObjectAlign, x_mod: i32, y_mod: i32) {
self.core.set_object_align(base, align, x_mod, y_mod);
} }
} }
@ -63,6 +160,13 @@ impl Container for Button {
} }
} }
pub enum LabelAlign {
Left,
Center,
Right,
Auto,
}
pub struct Label { pub struct Label {
core: Object, core: Object,
} }
@ -85,6 +189,41 @@ impl Label {
); );
} }
} }
pub fn set_align(&mut self, align: LabelAlign) {
let align = match align {
LabelAlign::Left => lvgl_sys::LV_LABEL_ALIGN_LEFT,
LabelAlign::Center => lvgl_sys::LV_LABEL_ALIGN_CENTER,
LabelAlign::Right => lvgl_sys::LV_LABEL_ALIGN_RIGHT,
LabelAlign::Auto => lvgl_sys::LV_LABEL_ALIGN_AUTO,
} as lvgl_sys::lv_label_align_t;
unsafe {
lvgl_sys::lv_label_set_align(
self.core.raw().as_mut(),
align
);
}
}
pub fn set_pos(&mut self, x: i16, y: i16) {
self.core.set_pos(x, y)
}
pub fn set_size(&mut self, w: i16, h: i16) {
self.core.set_size(w, h)
}
pub fn set_width(&mut self, w: u32) {
self.core.set_width(w)
}
pub fn set_height(&mut self, h: u32) {
self.core.set_height(h)
}
pub fn set_object_align(&mut self, base: &mut dyn Container, align: ObjectAlign, x_mod: i32, y_mod: i32) {
self.core.set_object_align(base, align, x_mod, y_mod);
}
} }
impl Container for Label { impl Container for Label {