diff --git a/src/core/lv_obj.c b/src/core/lv_obj.c index 0f3a7894a..c27f67bb9 100644 --- a/src/core/lv_obj.c +++ b/src/core/lv_obj.c @@ -174,7 +174,7 @@ void lv_deinit(void) lv_obj_t * lv_obj_create(lv_obj_t * parent) { - return lv_obj_class_create_obj(&lv_obj_class, parent); + return lv_obj_class_create_obj(&lv_obj_class, parent, NULL); } /*===================== diff --git a/src/core/lv_obj_class.c b/src/core/lv_obj_class.c index a8bf93f81..df4b86600 100644 --- a/src/core/lv_obj_class.c +++ b/src/core/lv_obj_class.c @@ -40,7 +40,7 @@ static uint32_t get_instance_size(const lv_obj_class_t * class_p); * GLOBAL FUNCTIONS **********************/ -lv_obj_t * lv_obj_class_create_obj(const lv_obj_class_t * class_p, lv_obj_t * parent) +lv_obj_t * lv_obj_class_create_obj(const lv_obj_class_t * class_p, lv_obj_t * parent, void * user_data) { LV_TRACE_OBJ_CREATE("Creating object with %p class on %p parent", class_p, parent); uint32_t s = get_instance_size(class_p); @@ -49,6 +49,9 @@ lv_obj_t * lv_obj_class_create_obj(const lv_obj_class_t * class_p, lv_obj_t * pa lv_memset_00(obj, s); obj->class_p = class_p; obj->parent = parent; +#if LV_USE_USER_DATA + obj->user_data = user_data; +#endif /*Create a screen*/ if(parent == NULL) { diff --git a/src/core/lv_obj_class.h b/src/core/lv_obj_class.h index 64c987eaf..7b42b7b40 100644 --- a/src/core/lv_obj_class.h +++ b/src/core/lv_obj_class.h @@ -68,11 +68,13 @@ typedef struct _lv_obj_class_t { /** * Create an object form a class descriptor - * @param class_p pointer to a class - * @param parent pointer to an object where the new object should be created - * @return pointer to the created object + * @param class_p pointer to a class + * @param parent pointer to an object where the new object should be created + * @param user_data a custom user_data to set in `obj->user_data` in creation time. Requires `LV_USE_USER_DATA 1` + * As some event fire during creation it's useful make user_data available for those events too. + * @return pointer to the created object */ -struct _lv_obj_t * lv_obj_class_create_obj(const struct _lv_obj_class_t * class_p, struct _lv_obj_t * parent); +struct _lv_obj_t * lv_obj_class_create_obj(const struct _lv_obj_class_t * class_p, struct _lv_obj_t * parent, void * user_data); void _lv_obj_destructor(struct _lv_obj_t * obj); diff --git a/src/extra/widgets/calendar/lv_calendar.c b/src/extra/widgets/calendar/lv_calendar.c index d52605497..f7ddc8e68 100644 --- a/src/extra/widgets/calendar/lv_calendar.c +++ b/src/extra/widgets/calendar/lv_calendar.c @@ -56,7 +56,7 @@ static const char * day_names_def[7] = LV_CALENDAR_DEFAULT_DAY_NAMES; lv_obj_t * lv_calendar_create(lv_obj_t * parent) { - lv_obj_t * obj = lv_obj_class_create_obj(&lv_calendar_class, parent); + lv_obj_t * obj = lv_obj_class_create_obj(&lv_calendar_class, parent, NULL); return obj; } diff --git a/src/extra/widgets/chart/lv_chart.c b/src/extra/widgets/chart/lv_chart.c index e6ca877b1..b4d94935e 100644 --- a/src/extra/widgets/chart/lv_chart.c +++ b/src/extra/widgets/chart/lv_chart.c @@ -65,7 +65,7 @@ const lv_obj_class_t lv_chart_class = { lv_obj_t * lv_chart_create(lv_obj_t * parent) { LV_LOG_INFO("begin") - return lv_obj_class_create_obj(&lv_chart_class, parent); + return lv_obj_class_create_obj(&lv_chart_class, parent, NULL); } void lv_chart_set_type(lv_obj_t * obj, lv_chart_type_t type) diff --git a/src/extra/widgets/colorwheel/lv_colorwheel.c b/src/extra/widgets/colorwheel/lv_colorwheel.c index 14bcdf3c5..cfb90696f 100644 --- a/src/extra/widgets/colorwheel/lv_colorwheel.c +++ b/src/extra/widgets/colorwheel/lv_colorwheel.c @@ -75,7 +75,7 @@ static bool create_knob_recolor; lv_obj_t * lv_colorwheel_create(lv_obj_t * parent, bool knob_recolor) { create_knob_recolor = knob_recolor; - return lv_obj_class_create_obj(&lv_colorwheel_class, parent); + return lv_obj_class_create_obj(&lv_colorwheel_class, parent, NULL); } /*===================== diff --git a/src/extra/widgets/imgbtn/lv_imgbtn.c b/src/extra/widgets/imgbtn/lv_imgbtn.c index e38396bfa..99e47d732 100644 --- a/src/extra/widgets/imgbtn/lv_imgbtn.c +++ b/src/extra/widgets/imgbtn/lv_imgbtn.c @@ -55,7 +55,7 @@ const lv_obj_class_t lv_imgbtn_class = { */ lv_obj_t * lv_imgbtn_create(lv_obj_t * parent) { - return lv_obj_class_create_obj(&lv_imgbtn_class, parent); + return lv_obj_class_create_obj(&lv_imgbtn_class, parent, NULL); } /*===================== diff --git a/src/extra/widgets/keyboard/lv_keyboard.c b/src/extra/widgets/keyboard/lv_keyboard.c index 7137e3b2a..513fc43b1 100644 --- a/src/extra/widgets/keyboard/lv_keyboard.c +++ b/src/extra/widgets/keyboard/lv_keyboard.c @@ -121,7 +121,7 @@ static const lv_btnmatrix_ctrl_t * kb_ctrl[5] = { */ lv_obj_t * lv_keyboard_create(lv_obj_t * parent) { - return lv_obj_class_create_obj(&lv_keyboard_class, parent); + return lv_obj_class_create_obj(&lv_keyboard_class, parent, NULL); } /*===================== diff --git a/src/extra/widgets/led/lv_led.c b/src/extra/widgets/led/lv_led.c index 8dbe81372..2f858d3b1 100644 --- a/src/extra/widgets/led/lv_led.c +++ b/src/extra/widgets/led/lv_led.c @@ -59,7 +59,7 @@ const lv_obj_class_t lv_led_class = { */ lv_obj_t * lv_led_create(lv_obj_t * parent) { - return lv_obj_class_create_obj(&lv_led_class, parent); + return lv_obj_class_create_obj(&lv_led_class, parent, NULL); } /*===================== diff --git a/src/extra/widgets/list/lv_list.c b/src/extra/widgets/list/lv_list.c index e83caf3cb..b401eecc3 100644 --- a/src/extra/widgets/list/lv_list.c +++ b/src/extra/widgets/list/lv_list.c @@ -55,7 +55,7 @@ const lv_obj_class_t lv_list_text_class = { lv_obj_t * lv_list_create(lv_obj_t * parent) { - lv_obj_t * list = lv_obj_class_create_obj(&lv_list_class, parent); + lv_obj_t * list = lv_obj_class_create_obj(&lv_list_class, parent, NULL); lv_obj_set_flex_flow(list, LV_FLEX_FLOW_COLUMN); return list; @@ -63,7 +63,7 @@ lv_obj_t * lv_list_create(lv_obj_t * parent) lv_obj_t * lv_list_add_text(lv_obj_t * list, const char * txt) { - lv_obj_t * label = lv_obj_class_create_obj(&lv_list_text_class, list); + lv_obj_t * label = lv_obj_class_create_obj(&lv_list_text_class, list, NULL); lv_label_set_text(label, txt); lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR); lv_obj_set_width(label, LV_PCT(100)); @@ -72,7 +72,7 @@ lv_obj_t * lv_list_add_text(lv_obj_t * list, const char * txt) lv_obj_t * lv_list_add_btn(lv_obj_t * list, const char * icon, const char * txt, lv_event_cb_t event_cb) { - lv_obj_t * btn = lv_obj_class_create_obj(&lv_list_btn_class, list); + lv_obj_t * btn = lv_obj_class_create_obj(&lv_list_btn_class, list, NULL); lv_obj_set_size(btn, LV_PCT(100), LV_SIZE_CONTENT); if(event_cb) { lv_obj_add_event_cb(btn, event_cb, LV_EVENT_ALL, NULL); diff --git a/src/extra/widgets/meter/lv_meter.c b/src/extra/widgets/meter/lv_meter.c index 0b482ed83..d42ed3dc5 100644 --- a/src/extra/widgets/meter/lv_meter.c +++ b/src/extra/widgets/meter/lv_meter.c @@ -52,7 +52,7 @@ const lv_obj_class_t lv_meter_class = { lv_obj_t * lv_meter_create(lv_obj_t * parent) { LV_LOG_INFO("begin") - return lv_obj_class_create_obj(&lv_meter_class, parent); + return lv_obj_class_create_obj(&lv_meter_class, parent, NULL); } /*===================== diff --git a/src/extra/widgets/msgbox/lv_msgbox.c b/src/extra/widgets/msgbox/lv_msgbox.c index cc434803f..cf4cca091 100644 --- a/src/extra/widgets/msgbox/lv_msgbox.c +++ b/src/extra/widgets/msgbox/lv_msgbox.c @@ -49,7 +49,7 @@ lv_obj_t * lv_msgbox_create(lv_obj_t * parent, const char * title, const char * lv_obj_set_size(parent, LV_PCT(100), LV_PCT(100)); } - lv_obj_t * mbox = lv_obj_class_create_obj(&lv_msgbox_class, parent); + lv_obj_t * mbox = lv_obj_class_create_obj(&lv_msgbox_class, parent, NULL); LV_ASSERT_MALLOC(mbox); if(mbox == NULL) return NULL; diff --git a/src/extra/widgets/spinbox/lv_spinbox.c b/src/extra/widgets/spinbox/lv_spinbox.c index bee89450c..e4dbe2b5a 100644 --- a/src/extra/widgets/spinbox/lv_spinbox.c +++ b/src/extra/widgets/spinbox/lv_spinbox.c @@ -46,7 +46,7 @@ const lv_obj_class_t lv_spinbox_class = { lv_obj_t * lv_spinbox_create(lv_obj_t * parent) { - return lv_obj_class_create_obj(&lv_spinbox_class, parent); + return lv_obj_class_create_obj(&lv_spinbox_class, parent, NULL); } /*===================== diff --git a/src/extra/widgets/tabview/lv_tabview.c b/src/extra/widgets/tabview/lv_tabview.c index 54ab915e1..27c36317c 100644 --- a/src/extra/widgets/tabview/lv_tabview.c +++ b/src/extra/widgets/tabview/lv_tabview.c @@ -51,7 +51,7 @@ lv_obj_t * lv_tabview_create(lv_obj_t * parent, lv_dir_t tab_pos, lv_coord_t tab { tabpos_create = tab_pos; tabsize_create = tab_size; - return lv_obj_class_create_obj(&lv_tabview_class, parent); + return lv_obj_class_create_obj(&lv_tabview_class, parent, NULL); } lv_obj_t * lv_tabview_add_tab(lv_obj_t * obj, const char * name) diff --git a/src/extra/widgets/tileview/lv_tileview.c b/src/extra/widgets/tileview/lv_tileview.c index e68be5956..3c651d0fa 100644 --- a/src/extra/widgets/tileview/lv_tileview.c +++ b/src/extra/widgets/tileview/lv_tileview.c @@ -50,7 +50,7 @@ static uint32_t create_row_id; lv_obj_t * lv_tileview_create(lv_obj_t * parent) { - return lv_obj_class_create_obj(&lv_tileview_class, parent); + return lv_obj_class_create_obj(&lv_tileview_class, parent, NULL); } /*====================== @@ -62,7 +62,7 @@ lv_obj_t * lv_tileview_add_tile(lv_obj_t * tv, uint8_t col_id, uint8_t row_id, l create_dir = dir; create_col_id = col_id; create_row_id = row_id; - return lv_obj_class_create_obj(&lv_tileview_tile_class, tv); + return lv_obj_class_create_obj(&lv_tileview_tile_class, tv, NULL); } void lv_obj_set_tile(lv_obj_t * tv, lv_obj_t * tile_obj, lv_anim_enable_t anim_en) diff --git a/src/extra/widgets/win/lv_win.c b/src/extra/widgets/win/lv_win.c index 36fe4415f..6afdc165f 100644 --- a/src/extra/widgets/win/lv_win.c +++ b/src/extra/widgets/win/lv_win.c @@ -45,7 +45,7 @@ static lv_coord_t create_header_height; lv_obj_t * lv_win_create(lv_obj_t * parent, lv_coord_t header_height) { create_header_height = header_height; - return lv_obj_class_create_obj(&lv_win_class, parent); + return lv_obj_class_create_obj(&lv_win_class, parent, NULL); } lv_obj_t * lv_win_add_title(lv_obj_t * win, const char * txt) diff --git a/src/widgets/lv_arc.c b/src/widgets/lv_arc.c index 885e8c0e8..87703ca1c 100644 --- a/src/widgets/lv_arc.c +++ b/src/widgets/lv_arc.c @@ -65,7 +65,7 @@ const lv_obj_class_t lv_arc_class = { lv_obj_t * lv_arc_create(lv_obj_t * parent) { LV_LOG_INFO("begin") - return lv_obj_class_create_obj(&lv_arc_class, parent); + return lv_obj_class_create_obj(&lv_arc_class, parent, NULL); } /*====================== diff --git a/src/widgets/lv_bar.c b/src/widgets/lv_bar.c index 9c4fa1b25..54a905490 100644 --- a/src/widgets/lv_bar.c +++ b/src/widgets/lv_bar.c @@ -78,7 +78,7 @@ const lv_obj_class_t lv_bar_class = { lv_obj_t * lv_bar_create(lv_obj_t * parent) { LV_LOG_INFO("begin") - return lv_obj_class_create_obj(&lv_bar_class, parent); + return lv_obj_class_create_obj(&lv_bar_class, parent, NULL); } /*===================== diff --git a/src/widgets/lv_btn.c b/src/widgets/lv_btn.c index 005687c7f..f6ac48d90 100644 --- a/src/widgets/lv_btn.c +++ b/src/widgets/lv_btn.c @@ -48,7 +48,7 @@ const lv_obj_class_t lv_btn_class = { lv_obj_t * lv_btn_create(lv_obj_t * parent) { LV_LOG_INFO("begin") - return lv_obj_class_create_obj(&lv_btn_class, parent); + return lv_obj_class_create_obj(&lv_btn_class, parent, NULL); } /********************** diff --git a/src/widgets/lv_btnmatrix.c b/src/widgets/lv_btnmatrix.c index 0436bb284..1f8ba1121 100644 --- a/src/widgets/lv_btnmatrix.c +++ b/src/widgets/lv_btnmatrix.c @@ -79,7 +79,7 @@ const lv_obj_class_t lv_btnmatrix_class = { lv_obj_t * lv_btnmatrix_create(lv_obj_t * parent) { LV_LOG_INFO("begin") - return lv_obj_class_create_obj(&lv_btnmatrix_class, parent); + return lv_obj_class_create_obj(&lv_btnmatrix_class, parent, NULL); } /*===================== diff --git a/src/widgets/lv_canvas.c b/src/widgets/lv_canvas.c index f5465f099..fc45cf046 100644 --- a/src/widgets/lv_canvas.c +++ b/src/widgets/lv_canvas.c @@ -67,7 +67,7 @@ const lv_obj_class_t lv_canvas_class = { lv_obj_t * lv_canvas_create(lv_obj_t * parent) { LV_LOG_INFO("begin") - return lv_obj_class_create_obj(&lv_canvas_class, parent); + return lv_obj_class_create_obj(&lv_canvas_class, parent, NULL); } /*===================== diff --git a/src/widgets/lv_checkbox.c b/src/widgets/lv_checkbox.c index 59d306044..a8a57738b 100644 --- a/src/widgets/lv_checkbox.c +++ b/src/widgets/lv_checkbox.c @@ -56,7 +56,7 @@ const lv_obj_class_t lv_checkbox_class = { lv_obj_t * lv_checkbox_create(lv_obj_t * parent) { LV_LOG_INFO("begin") - return lv_obj_class_create_obj(&lv_checkbox_class, parent); + return lv_obj_class_create_obj(&lv_checkbox_class, parent, NULL); } /*===================== diff --git a/src/widgets/lv_dropdown.c b/src/widgets/lv_dropdown.c index 066519d68..177c7d5ae 100644 --- a/src/widgets/lv_dropdown.c +++ b/src/widgets/lv_dropdown.c @@ -90,7 +90,7 @@ const lv_obj_class_t lv_dropdownlist_class = { lv_obj_t * lv_dropdown_create(lv_obj_t * parent) { LV_LOG_INFO("begin") - return lv_obj_class_create_obj(&lv_dropdown_class, parent); + return lv_obj_class_create_obj(&lv_dropdown_class, parent, NULL); } /*===================== @@ -535,7 +535,7 @@ void lv_dropdown_close(lv_obj_t * obj) static lv_obj_t * lv_dropdown_list_create(lv_obj_t * parent) { - return lv_obj_class_create_obj(&lv_dropdownlist_class, parent); + return lv_obj_class_create_obj(&lv_dropdownlist_class, parent, NULL); } static void lv_dropdown_constructor(const lv_obj_class_t * class_p, lv_obj_t * obj) diff --git a/src/widgets/lv_img.c b/src/widgets/lv_img.c index 8a3be8b1a..abf995018 100644 --- a/src/widgets/lv_img.c +++ b/src/widgets/lv_img.c @@ -57,7 +57,7 @@ const lv_obj_class_t lv_img_class = { lv_obj_t * lv_img_create(lv_obj_t * parent) { LV_LOG_INFO("begin") - return lv_obj_class_create_obj(&lv_img_class, parent); + return lv_obj_class_create_obj(&lv_img_class, parent, NULL); } /*===================== diff --git a/src/widgets/lv_label.c b/src/widgets/lv_label.c index ae9301b18..be0e7c1f6 100644 --- a/src/widgets/lv_label.c +++ b/src/widgets/lv_label.c @@ -74,7 +74,7 @@ const lv_obj_class_t lv_label_class = { lv_obj_t * lv_label_create(lv_obj_t * parent) { LV_LOG_INFO("begin") - return lv_obj_class_create_obj(&lv_label_class, parent); + return lv_obj_class_create_obj(&lv_label_class, parent, NULL); } /*===================== diff --git a/src/widgets/lv_line.c b/src/widgets/lv_line.c index ee8170d13..5e941fa77 100644 --- a/src/widgets/lv_line.c +++ b/src/widgets/lv_line.c @@ -54,7 +54,7 @@ const lv_obj_class_t lv_line_class = { lv_obj_t * lv_line_create(lv_obj_t * parent) { LV_LOG_INFO("begin") - return lv_obj_class_create_obj(&lv_line_class, parent); + return lv_obj_class_create_obj(&lv_line_class, parent, NULL); } /*===================== diff --git a/src/widgets/lv_roller.c b/src/widgets/lv_roller.c index a3454d802..d36d875cd 100644 --- a/src/widgets/lv_roller.c +++ b/src/widgets/lv_roller.c @@ -77,7 +77,7 @@ const lv_obj_class_t lv_roller_label_class = { lv_obj_t * lv_roller_create(lv_obj_t * parent) { LV_LOG_INFO("begin") - return lv_obj_class_create_obj(&lv_roller_class, parent); + return lv_obj_class_create_obj(&lv_roller_class, parent, NULL); } /*===================== @@ -297,7 +297,7 @@ static void lv_roller_constructor(const lv_obj_class_t * class_p, lv_obj_t * obj lv_obj_clear_flag(obj, LV_OBJ_FLAG_SCROLLABLE); lv_obj_clear_flag(obj, LV_OBJ_FLAG_SCROLL_CHAIN); - lv_obj_class_create_obj(&lv_roller_label_class, obj); + lv_obj_class_create_obj(&lv_roller_label_class, obj, NULL); lv_roller_set_options(obj, "Option 1\nOption 2\nOption 3\nOption 4\nOption 5", LV_ROLLER_MODE_NORMAL); LV_LOG_TRACE("finshed"); diff --git a/src/widgets/lv_slider.c b/src/widgets/lv_slider.c index f21a264a9..2203691eb 100644 --- a/src/widgets/lv_slider.c +++ b/src/widgets/lv_slider.c @@ -59,7 +59,7 @@ const lv_obj_class_t lv_slider_class = { lv_obj_t * lv_slider_create(lv_obj_t * parent) { LV_LOG_INFO("begin") - return lv_obj_class_create_obj(&lv_slider_class, parent); + return lv_obj_class_create_obj(&lv_slider_class, parent, NULL); } bool lv_slider_is_dragged(const lv_obj_t * obj) diff --git a/src/widgets/lv_switch.c b/src/widgets/lv_switch.c index 2f797a3e9..62d0a07e1 100644 --- a/src/widgets/lv_switch.c +++ b/src/widgets/lv_switch.c @@ -61,7 +61,7 @@ const lv_obj_class_t lv_switch_class = { lv_obj_t * lv_switch_create(lv_obj_t * parent) { LV_LOG_INFO("begin") - return lv_obj_class_create_obj(&lv_switch_class, parent); + return lv_obj_class_create_obj(&lv_switch_class, parent, NULL); } /********************** diff --git a/src/widgets/lv_table.c b/src/widgets/lv_table.c index 1f2756adf..af6998f02 100644 --- a/src/widgets/lv_table.c +++ b/src/widgets/lv_table.c @@ -64,7 +64,7 @@ const lv_obj_class_t lv_table_class = { lv_obj_t * lv_table_create(lv_obj_t * parent) { LV_LOG_INFO("begin") - return lv_obj_class_create_obj(&lv_table_class, parent); + return lv_obj_class_create_obj(&lv_table_class, parent, NULL); } /*===================== diff --git a/src/widgets/lv_textarea.c b/src/widgets/lv_textarea.c index cba0763c4..7ed2e5be7 100644 --- a/src/widgets/lv_textarea.c +++ b/src/widgets/lv_textarea.c @@ -84,7 +84,7 @@ static const char * ta_insert_replace; lv_obj_t * lv_textarea_create(lv_obj_t * parent) { LV_LOG_INFO("begin") - return lv_obj_class_create_obj(&lv_textarea_class, parent); + return lv_obj_class_create_obj(&lv_textarea_class, parent, NULL); } /*======================