1use core::ffi::c_char;
2
3pub use lvgl_rust_sys::*;
4
5use crate::Point;
6
7pub const LV_SIZE_CONTENT: i32 = (LV_COORD_MAX | LV_COORD_TYPE_SPEC) as i32;
8
9pub unsafe fn lv_obj_set_style_pad_all(
21 object: *mut lv_obj_t,
22 padding: i32,
23 selector: lv_style_selector_t,
24) {
25 unsafe {
26 lv_obj_set_style_pad_top(object, padding, selector);
27 lv_obj_set_style_pad_bottom(object, padding, selector);
28 lv_obj_set_style_pad_left(object, padding, selector);
29 lv_obj_set_style_pad_right(object, padding, selector);
30 }
31}
32
33pub unsafe fn lv_obj_move_foreground(object: *mut lv_obj_t) {
46 unsafe {
47 lv_obj_move_to_index(object, -1);
48 }
49}
50
51pub unsafe fn lv_obj_get_size(object: *mut lv_obj_t) -> Point {
60 unsafe {
61 let width = lv_obj_get_width(object) as i16;
62 let height = lv_obj_get_height(object) as i16;
63
64 Point::new(width, height)
65 }
66}
67
68pub unsafe fn lv_tabview_add_tab(tabview: *mut lv_obj_t, name: *const c_char) -> *mut lv_obj_t {
79 unsafe {
80 let page = lvgl_rust_sys::lv_tabview_add_tab(tabview, name);
81
82 let bar = lv_tabview_get_tab_bar(tabview);
83
84 lv_obj_set_size(bar, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
85
86 let tab_count = lv_obj_get_child_count(bar);
88 let button = lv_obj_get_child(bar, (tab_count - 1) as _);
89
90 lv_obj_set_flex_grow(button, 0);
92 lv_obj_set_size(button, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
93
94 page
95 }
96}
97
98unsafe extern "C" fn radio_event_handler(event: *mut lv_event_t) {
99 unsafe {
100 let code = lvgl_rust_sys::lv_event_get_code(event);
101 let target = lvgl_rust_sys::lv_event_get_target(event) as *mut lv_obj_t;
102 let user_data = lvgl_rust_sys::lv_event_get_user_data(event) as *mut lv_obj_t;
103
104 if code == lv_event_code_t_LV_EVENT_CLICKED {
105 let parent = user_data as *mut lv_obj_t;
106 let child_count = lvgl_rust_sys::lv_obj_get_child_count(parent);
107
108 for i in 0..child_count {
109 let child = lvgl_rust_sys::lv_obj_get_child(parent, i as _);
110 if child != target {
111 lvgl_rust_sys::lv_obj_remove_state(child, lvgl_rust_sys::LV_STATE_CHECKED as _);
112 }
113 }
114
115 lvgl_rust_sys::lv_obj_add_state(target, lvgl_rust_sys::LV_STATE_CHECKED as _);
116 }
117 }
118}
119
120pub unsafe fn lv_radiobox_create(parent: *mut lv_obj_t) -> *mut lv_obj_t {
129 unsafe {
130 let checkbox = lvgl_rust_sys::lv_checkbox_create(parent);
131
132 lvgl_rust_sys::lv_obj_add_event_cb(
133 checkbox,
134 Some(radio_event_handler),
135 lvgl_rust_sys::lv_event_code_t_LV_EVENT_CLICKED,
136 parent as _,
137 );
138
139 checkbox
140 }
141}