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