1 /** 2 * @file lv_obj_event.h 3 * 4 */ 5 6 #ifndef LV_OBJ_EVENT_H 7 #define LV_OBJ_EVENT_H 8 9 #ifdef __cplusplus 10 extern "C" { 11 #endif 12 13 /********************* 14 * INCLUDES 15 *********************/ 16 #include "../misc/lv_types.h" 17 #include "../misc/lv_event.h" 18 #include "../indev/lv_indev.h" 19 20 /********************* 21 * DEFINES 22 *********************/ 23 24 /********************** 25 * TYPEDEFS 26 **********************/ 27 28 /** Cover check results.*/ 29 typedef enum { 30 LV_COVER_RES_COVER = 0, 31 LV_COVER_RES_NOT_COVER = 1, 32 LV_COVER_RES_MASKED = 2, 33 } lv_cover_res_t; 34 35 /********************** 36 * GLOBAL PROTOTYPES 37 **********************/ 38 39 /** 40 * Send an event to the object 41 * @param obj pointer to an object 42 * @param event_code the type of the event from `lv_event_t` 43 * @param param arbitrary data depending on the widget type and the event. (Usually `NULL`) 44 * @return LV_RESULT_OK: `obj` was not deleted in the event; LV_RESULT_INVALID: `obj` was deleted in the event_code 45 */ 46 lv_result_t lv_obj_send_event(lv_obj_t * obj, lv_event_code_t event_code, void * param); 47 48 /** 49 * Used by the widgets internally to call the ancestor widget types's event handler 50 * @param class_p pointer to the class of the widget (NOT the ancestor class) 51 * @param e pointer to the event descriptor 52 * @return LV_RESULT_OK: the target object was not deleted in the event; LV_RESULT_INVALID: it was deleted in the event_code 53 */ 54 lv_result_t lv_obj_event_base(const lv_obj_class_t * class_p, lv_event_t * e); 55 56 /** 57 * Get the current target of the event. It's the object which event handler being called. 58 * If the event is not bubbled it's the same as "original" target. 59 * @param e pointer to the event descriptor 60 * @return the target of the event_code 61 */ 62 lv_obj_t * lv_event_get_current_target_obj(lv_event_t * e); 63 64 /** 65 * Get the object originally targeted by the event. It's the same even if the event is bubbled. 66 * @param e pointer to the event descriptor 67 * @return pointer to the original target of the event_code 68 */ 69 lv_obj_t * lv_event_get_target_obj(lv_event_t * e); 70 71 /** 72 * Add an event handler function for an object. 73 * Used by the user to react on event which happens with the object. 74 * An object can have multiple event handler. They will be called in the same order as they were added. 75 * @param obj pointer to an object 76 * @param filter an event code (e.g. `LV_EVENT_CLICKED`) on which the event should be called. `LV_EVENT_ALL` can be used to receive all the events. 77 * @param event_cb the new event function 78 * @param user_data custom data will be available in `event_cb` 79 * @return handler to the event. It can be used in `lv_obj_remove_event_dsc`. 80 */ 81 lv_event_dsc_t * lv_obj_add_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb, lv_event_code_t filter, void * user_data); 82 83 uint32_t lv_obj_get_event_count(lv_obj_t * obj); 84 85 lv_event_dsc_t * lv_obj_get_event_dsc(lv_obj_t * obj, uint32_t index); 86 87 bool lv_obj_remove_event(lv_obj_t * obj, uint32_t index); 88 89 bool lv_obj_remove_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb); 90 91 bool lv_obj_remove_event_dsc(lv_obj_t * obj, lv_event_dsc_t * dsc); 92 93 /** 94 * Remove an event_cb with user_data 95 * @param obj pointer to a obj 96 * @param event_cb the event_cb of the event to remove 97 * @param user_data user_data 98 * @return the count of the event removed 99 */ 100 uint32_t lv_obj_remove_event_cb_with_user_data(lv_obj_t * obj, lv_event_cb_t event_cb, void * user_data); 101 102 /** 103 * Get the input device passed as parameter to indev related events. 104 * @param e pointer to an event 105 * @return the indev that triggered the event or NULL if called on a not indev related event 106 */ 107 lv_indev_t * lv_event_get_indev(lv_event_t * e); 108 109 /** 110 * Get the draw context which should be the first parameter of the draw functions. 111 * Namely: `LV_EVENT_DRAW_MAIN/POST`, `LV_EVENT_DRAW_MAIN/POST_BEGIN`, `LV_EVENT_DRAW_MAIN/POST_END` 112 * @param e pointer to an event 113 * @return pointer to a draw context or NULL if called on an unrelated event 114 */ 115 lv_layer_t * lv_event_get_layer(lv_event_t * e); 116 117 /** 118 * Get the old area of the object before its size was changed. Can be used in `LV_EVENT_SIZE_CHANGED` 119 * @param e pointer to an event 120 * @return the old absolute area of the object or NULL if called on an unrelated event 121 */ 122 const lv_area_t * lv_event_get_old_size(lv_event_t * e); 123 124 /** 125 * Get the key passed as parameter to an event. Can be used in `LV_EVENT_KEY` 126 * @param e pointer to an event 127 * @return the triggering key or NULL if called on an unrelated event 128 */ 129 uint32_t lv_event_get_key(lv_event_t * e); 130 131 /** 132 * Get the signed rotary encoder diff. passed as parameter to an event. Can be used in `LV_EVENT_ROTARY` 133 * @param e pointer to an event 134 * @return the triggering key or NULL if called on an unrelated event 135 */ 136 int32_t lv_event_get_rotary_diff(lv_event_t * e); 137 138 /** 139 * Get the animation descriptor of a scrolling. Can be used in `LV_EVENT_SCROLL_BEGIN` 140 * @param e pointer to an event 141 * @return the animation that will scroll the object. (can be modified as required) 142 */ 143 lv_anim_t * lv_event_get_scroll_anim(lv_event_t * e); 144 145 /** 146 * Set the new extra draw size. Can be used in `LV_EVENT_REFR_EXT_DRAW_SIZE` 147 * @param e pointer to an event 148 * @param size The new extra draw size 149 */ 150 void lv_event_set_ext_draw_size(lv_event_t * e, int32_t size); 151 152 /** 153 * Get a pointer to an `lv_point_t` variable in which the self size should be saved (width in `point->x` and height `point->y`). 154 * Can be used in `LV_EVENT_GET_SELF_SIZE` 155 * @param e pointer to an event 156 * @return pointer to `lv_point_t` or NULL if called on an unrelated event 157 */ 158 lv_point_t * lv_event_get_self_size_info(lv_event_t * e); 159 160 /** 161 * Get a pointer to an `lv_hit_test_info_t` variable in which the hit test result should be saved. Can be used in `LV_EVENT_HIT_TEST` 162 * @param e pointer to an event 163 * @return pointer to `lv_hit_test_info_t` or NULL if called on an unrelated event 164 */ 165 lv_hit_test_info_t * lv_event_get_hit_test_info(lv_event_t * e); 166 167 /** 168 * Get a pointer to an area which should be examined whether the object fully covers it or not. 169 * Can be used in `LV_EVENT_HIT_TEST` 170 * @param e pointer to an event 171 * @return an area with absolute coordinates to check 172 */ 173 const lv_area_t * lv_event_get_cover_area(lv_event_t * e); 174 175 /** 176 * Set the result of cover checking. Can be used in `LV_EVENT_COVER_CHECK` 177 * @param e pointer to an event 178 * @param res an element of ::lv_cover_check_info_t 179 */ 180 void lv_event_set_cover_res(lv_event_t * e, lv_cover_res_t res); 181 182 /** 183 * Get the draw task which was just added. 184 * Can be used in `LV_EVENT_DRAW_TASK_ADDED event` 185 * @param e pointer to an event 186 * @return the added draw task 187 */ 188 lv_draw_task_t * lv_event_get_draw_task(lv_event_t * e); 189 190 /********************** 191 * MACROS 192 **********************/ 193 194 #ifdef __cplusplus 195 } /*extern "C"*/ 196 #endif 197 198 #endif /*LV_OBJ_EVENT_H*/ 199