Lines Matching refs:indev

73 static void indev_proc_press(lv_indev_t * indev);
74 static void indev_proc_release(lv_indev_t * indev);
75 static lv_result_t indev_proc_short_click(lv_indev_t * indev);
76 static void indev_proc_pointer_diff(lv_indev_t * indev);
78 static void indev_proc_reset_query_handler(lv_indev_t * indev);
79 static void indev_click_focus(lv_indev_t * indev);
80 static void indev_gesture(lv_indev_t * indev);
81 static bool indev_reset_check(lv_indev_t * indev);
82 static void indev_read_core(lv_indev_t * indev, lv_indev_data_t * data);
83 static void indev_reset_core(lv_indev_t * indev, lv_obj_t * obj);
86 static void indev_scroll_throw_anim_start(lv_indev_t * indev);
89 static inline void indev_scroll_throw_anim_reset(lv_indev_t * indev) in indev_scroll_throw_anim_reset() argument
91 if(indev) { in indev_scroll_throw_anim_reset()
92 indev->pointer.scroll_throw_vect.x = 0; in indev_scroll_throw_anim_reset()
93 indev->pointer.scroll_throw_vect.y = 0; in indev_scroll_throw_anim_reset()
94 indev->scroll_throw_anim = NULL; in indev_scroll_throw_anim_reset()
122 lv_indev_t * indev = lv_ll_ins_head(indev_ll_head); in lv_indev_create() local
123 LV_ASSERT_MALLOC(indev); in lv_indev_create()
124 if(indev == NULL) { in lv_indev_create()
128 lv_memzero(indev, sizeof(lv_indev_t)); in lv_indev_create()
129 indev->reset_query = 1; in lv_indev_create()
130 indev->enabled = 1; in lv_indev_create()
132 indev->read_timer = lv_timer_create(lv_indev_read_timer_cb, LV_DEF_REFR_PERIOD, indev); in lv_indev_create()
134 indev->disp = lv_display_get_default(); in lv_indev_create()
135 indev->type = LV_INDEV_TYPE_NONE; in lv_indev_create()
136 indev->mode = LV_INDEV_MODE_TIMER; in lv_indev_create()
137 indev->scroll_limit = LV_INDEV_DEF_SCROLL_LIMIT; in lv_indev_create()
138 indev->scroll_throw = LV_INDEV_DEF_SCROLL_THROW; in lv_indev_create()
139 indev->long_press_time = LV_INDEV_DEF_LONG_PRESS_TIME; in lv_indev_create()
140 indev->long_press_repeat_time = LV_INDEV_DEF_LONG_PRESS_REP_TIME; in lv_indev_create()
141 indev->gesture_limit = LV_INDEV_DEF_GESTURE_LIMIT; in lv_indev_create()
142 indev->gesture_min_velocity = LV_INDEV_DEF_GESTURE_MIN_VELOCITY; in lv_indev_create()
143 indev->rotary_sensitivity = LV_INDEV_DEF_ROTARY_SENSITIVITY; in lv_indev_create()
144 return indev; in lv_indev_create()
147 void lv_indev_delete(lv_indev_t * indev) in lv_indev_delete() argument
149 LV_ASSERT_NULL(indev); in lv_indev_delete()
151 lv_indev_send_event(indev, LV_EVENT_DELETE, NULL); in lv_indev_delete()
152 lv_event_remove_all(&(indev->event_list)); in lv_indev_delete()
155 if(indev->read_timer) lv_timer_delete(indev->read_timer); in lv_indev_delete()
158 lv_ll_remove(indev_ll_head, indev); in lv_indev_delete()
160 lv_free(indev); in lv_indev_delete()
163 lv_indev_t * lv_indev_get_next(lv_indev_t * indev) in lv_indev_get_next() argument
165 if(indev == NULL) in lv_indev_get_next()
168 return lv_ll_get_next(indev_ll_head, indev); in lv_indev_get_next()
171 void indev_read_core(lv_indev_t * indev, lv_indev_data_t * data) in indev_read_core() argument
178 if(indev->type == LV_INDEV_TYPE_POINTER) { in indev_read_core()
179 data->point.x = indev->pointer.last_raw_point.x; in indev_read_core()
180 data->point.y = indev->pointer.last_raw_point.y; in indev_read_core()
183 else if(indev->type == LV_INDEV_TYPE_KEYPAD) { in indev_read_core()
184 data->key = indev->keypad.last_key; in indev_read_core()
187 else if(indev->type == LV_INDEV_TYPE_ENCODER) { in indev_read_core()
191 if(indev->read_cb) { in indev_read_core()
193 indev->read_cb(indev, data); in indev_read_core()
207 void lv_indev_read(lv_indev_t * indev) in lv_indev_read() argument
209 if(indev == NULL) return; in lv_indev_read()
213 indev_act = indev; in lv_indev_read()
216 if(indev->disp == NULL) return; /*Not assigned to any displays*/ in lv_indev_read()
219 indev_proc_reset_query_handler(indev); in lv_indev_read()
221 if(indev->enabled == 0) return; in lv_indev_read()
222 if(indev->disp->prev_scr != NULL) { in lv_indev_read()
234 indev_read_core(indev, &data); in lv_indev_read()
235 continue_reading = indev->mode != LV_INDEV_MODE_EVENT && data.continue_reading; in lv_indev_read()
238 indev_proc_reset_query_handler(indev); in lv_indev_read()
241 indev->state = data.state; in lv_indev_read()
244 if(indev->state == LV_INDEV_STATE_PRESSED) { in lv_indev_read()
245 indev->disp->last_activity_time = lv_tick_get(); in lv_indev_read()
247 else if(indev->type == LV_INDEV_TYPE_ENCODER && data.enc_diff) { in lv_indev_read()
248 indev->disp->last_activity_time = lv_tick_get(); in lv_indev_read()
251 if(indev->type == LV_INDEV_TYPE_POINTER) { in lv_indev_read()
252 indev_pointer_proc(indev, &data); in lv_indev_read()
254 else if(indev->type == LV_INDEV_TYPE_KEYPAD) { in lv_indev_read()
255 indev_keypad_proc(indev, &data); in lv_indev_read()
257 else if(indev->type == LV_INDEV_TYPE_ENCODER) { in lv_indev_read()
258 indev_encoder_proc(indev, &data); in lv_indev_read()
260 else if(indev->type == LV_INDEV_TYPE_BUTTON) { in lv_indev_read()
261 indev_button_proc(indev, &data); in lv_indev_read()
264 indev_proc_reset_query_handler(indev); in lv_indev_read()
275 void lv_indev_enable(lv_indev_t * indev, bool enable) in lv_indev_enable() argument
277 if(indev) { in lv_indev_enable()
278 indev->enabled = (uint8_t) enable; in lv_indev_enable()
294 void lv_indev_set_type(lv_indev_t * indev, lv_indev_type_t indev_type) in lv_indev_set_type() argument
296 if(indev == NULL) return; in lv_indev_set_type()
298 indev->type = indev_type; in lv_indev_set_type()
299 indev->reset_query = 1; in lv_indev_set_type()
302 void lv_indev_set_read_cb(lv_indev_t * indev, lv_indev_read_cb_t read_cb) in lv_indev_set_read_cb() argument
304 if(indev == NULL) return; in lv_indev_set_read_cb()
306 indev->read_cb = read_cb; in lv_indev_set_read_cb()
309 void lv_indev_set_user_data(lv_indev_t * indev, void * user_data) in lv_indev_set_user_data() argument
311 if(indev == NULL) return; in lv_indev_set_user_data()
312 indev->user_data = user_data; in lv_indev_set_user_data()
315 void lv_indev_set_driver_data(lv_indev_t * indev, void * driver_data) in lv_indev_set_driver_data() argument
317 if(indev == NULL) return; in lv_indev_set_driver_data()
318 indev->driver_data = driver_data; in lv_indev_set_driver_data()
321 lv_indev_read_cb_t lv_indev_get_read_cb(lv_indev_t * indev) in lv_indev_get_read_cb() argument
323 if(indev == NULL) { in lv_indev_get_read_cb()
328 return indev->read_cb; in lv_indev_get_read_cb()
331 lv_indev_type_t lv_indev_get_type(const lv_indev_t * indev) in lv_indev_get_type() argument
333 if(indev == NULL) return LV_INDEV_TYPE_NONE; in lv_indev_get_type()
335 return indev->type; in lv_indev_get_type()
338 lv_indev_state_t lv_indev_get_state(const lv_indev_t * indev) in lv_indev_get_state() argument
340 if(indev == NULL) return LV_INDEV_STATE_RELEASED; in lv_indev_get_state()
342 return indev->state; in lv_indev_get_state()
345 lv_group_t * lv_indev_get_group(const lv_indev_t * indev) in lv_indev_get_group() argument
347 if(indev == NULL) return NULL; in lv_indev_get_group()
349 return indev->group; in lv_indev_get_group()
352 lv_display_t * lv_indev_get_display(const lv_indev_t * indev) in lv_indev_get_display() argument
354 if(indev == NULL) return NULL; in lv_indev_get_display()
356 return indev->disp; in lv_indev_get_display()
359 void lv_indev_set_display(lv_indev_t * indev, lv_display_t * disp) in lv_indev_set_display() argument
361 if(indev == NULL) return; in lv_indev_set_display()
363 indev->disp = disp; in lv_indev_set_display()
366 void lv_indev_set_long_press_time(lv_indev_t * indev, uint16_t long_press_time) in lv_indev_set_long_press_time() argument
368 if(indev == NULL) return; in lv_indev_set_long_press_time()
370 indev->long_press_time = long_press_time; in lv_indev_set_long_press_time()
373 void lv_indev_set_long_press_repeat_time(lv_indev_t * indev, uint16_t long_press_repeat_time) in lv_indev_set_long_press_repeat_time() argument
375 if(indev == NULL) return; in lv_indev_set_long_press_repeat_time()
377 indev->long_press_repeat_time = long_press_repeat_time; in lv_indev_set_long_press_repeat_time()
380 void lv_indev_set_scroll_limit(lv_indev_t * indev, uint8_t scroll_limit) in lv_indev_set_scroll_limit() argument
382 if(indev == NULL) return; in lv_indev_set_scroll_limit()
384 indev->scroll_limit = scroll_limit; in lv_indev_set_scroll_limit()
387 void lv_indev_set_scroll_throw(lv_indev_t * indev, uint8_t scroll_throw) in lv_indev_set_scroll_throw() argument
389 if(indev == NULL) return; in lv_indev_set_scroll_throw()
391 indev->scroll_throw = scroll_throw; in lv_indev_set_scroll_throw()
394 void * lv_indev_get_user_data(const lv_indev_t * indev) in lv_indev_get_user_data() argument
396 if(indev == NULL) return NULL; in lv_indev_get_user_data()
397 return indev->user_data; in lv_indev_get_user_data()
400 void * lv_indev_get_driver_data(const lv_indev_t * indev) in lv_indev_get_driver_data() argument
402 if(indev == NULL) return NULL; in lv_indev_get_driver_data()
404 return indev->driver_data; in lv_indev_get_driver_data()
407 bool lv_indev_get_press_moved(const lv_indev_t * indev) in lv_indev_get_press_moved() argument
409 if(indev == NULL) return false; in lv_indev_get_press_moved()
411 return indev->pointer.press_moved; in lv_indev_get_press_moved()
414 void lv_indev_reset(lv_indev_t * indev, lv_obj_t * obj) in lv_indev_reset() argument
416 if(indev) { in lv_indev_reset()
417 indev_reset_core(indev, obj); in lv_indev_reset()
429 void lv_indev_stop_processing(lv_indev_t * indev) in lv_indev_stop_processing() argument
431 if(indev == NULL) return; in lv_indev_stop_processing()
432 indev->stop_processing_query = 1; in lv_indev_stop_processing()
435 void lv_indev_reset_long_press(lv_indev_t * indev) in lv_indev_reset_long_press() argument
437 indev->long_pr_sent = 0; in lv_indev_reset_long_press()
438 indev->longpr_rep_timestamp = lv_tick_get(); in lv_indev_reset_long_press()
439 indev->pr_timestamp = lv_tick_get(); in lv_indev_reset_long_press()
442 void lv_indev_set_cursor(lv_indev_t * indev, lv_obj_t * cur_obj) in lv_indev_set_cursor() argument
444 if(indev->type != LV_INDEV_TYPE_POINTER) return; in lv_indev_set_cursor()
446 indev->cursor = cur_obj; in lv_indev_set_cursor()
447 lv_obj_set_parent(indev->cursor, lv_display_get_layer_sys(indev->disp)); in lv_indev_set_cursor()
448 lv_obj_set_pos(indev->cursor, indev->pointer.act_point.x, indev->pointer.act_point.y); in lv_indev_set_cursor()
449 lv_obj_remove_flag(indev->cursor, LV_OBJ_FLAG_CLICKABLE); in lv_indev_set_cursor()
450 lv_obj_add_flag(indev->cursor, LV_OBJ_FLAG_IGNORE_LAYOUT | LV_OBJ_FLAG_FLOATING); in lv_indev_set_cursor()
453 void lv_indev_set_group(lv_indev_t * indev, lv_group_t * group) in lv_indev_set_group() argument
455 if(indev && (indev->type == LV_INDEV_TYPE_KEYPAD || indev->type == LV_INDEV_TYPE_ENCODER)) { in lv_indev_set_group()
456 indev->group = group; in lv_indev_set_group()
460 void lv_indev_set_button_points(lv_indev_t * indev, const lv_point_t points[]) in lv_indev_set_button_points() argument
462 if(indev && indev->type == LV_INDEV_TYPE_BUTTON) { in lv_indev_set_button_points()
463 indev->btn_points = points; in lv_indev_set_button_points()
467 void lv_indev_get_point(const lv_indev_t * indev, lv_point_t * point) in lv_indev_get_point() argument
469 if(indev == NULL) { in lv_indev_get_point()
473 else if(indev->type != LV_INDEV_TYPE_POINTER && indev->type != LV_INDEV_TYPE_BUTTON) { in lv_indev_get_point()
478 point->x = indev->pointer.act_point.x; in lv_indev_get_point()
479 point->y = indev->pointer.act_point.y; in lv_indev_get_point()
483 lv_dir_t lv_indev_get_gesture_dir(const lv_indev_t * indev) in lv_indev_get_gesture_dir() argument
485 return indev->pointer.gesture_dir; in lv_indev_get_gesture_dir()
488 uint32_t lv_indev_get_key(const lv_indev_t * indev) in lv_indev_get_key() argument
492 if(indev && indev->type == LV_INDEV_TYPE_KEYPAD) in lv_indev_get_key()
493 key = indev->keypad.last_key; in lv_indev_get_key()
498 uint8_t lv_indev_get_short_click_streak(const lv_indev_t * indev) in lv_indev_get_short_click_streak() argument
500 return indev->pointer.short_click_streak; in lv_indev_get_short_click_streak()
503 lv_dir_t lv_indev_get_scroll_dir(const lv_indev_t * indev) in lv_indev_get_scroll_dir() argument
505 if(indev == NULL) return false; in lv_indev_get_scroll_dir()
506 if(indev->type != LV_INDEV_TYPE_POINTER && indev->type != LV_INDEV_TYPE_BUTTON) return false; in lv_indev_get_scroll_dir()
507 return indev->pointer.scroll_dir; in lv_indev_get_scroll_dir()
510 lv_obj_t * lv_indev_get_scroll_obj(const lv_indev_t * indev) in lv_indev_get_scroll_obj() argument
512 if(indev == NULL) return NULL; in lv_indev_get_scroll_obj()
513 if(indev->type != LV_INDEV_TYPE_POINTER && indev->type != LV_INDEV_TYPE_BUTTON) return NULL; in lv_indev_get_scroll_obj()
514 return indev->pointer.scroll_obj; in lv_indev_get_scroll_obj()
517 void lv_indev_get_vect(const lv_indev_t * indev, lv_point_t * point) in lv_indev_get_vect() argument
522 if(indev == NULL) return; in lv_indev_get_vect()
524 if(indev->type == LV_INDEV_TYPE_POINTER || indev->type == LV_INDEV_TYPE_BUTTON) { in lv_indev_get_vect()
525 point->x = indev->pointer.vect.x; in lv_indev_get_vect()
526 point->y = indev->pointer.vect.y; in lv_indev_get_vect()
530 lv_obj_t * lv_indev_get_cursor(lv_indev_t * indev) in lv_indev_get_cursor() argument
532 if(indev == NULL) return NULL; in lv_indev_get_cursor()
533 return indev->cursor; in lv_indev_get_cursor()
536 void lv_indev_wait_release(lv_indev_t * indev) in lv_indev_wait_release() argument
538 if(indev == NULL)return; in lv_indev_wait_release()
539 indev->wait_until_release = 1; in lv_indev_wait_release()
547 lv_timer_t * lv_indev_get_read_timer(lv_indev_t * indev) in lv_indev_get_read_timer() argument
549 if(indev == NULL) { in lv_indev_get_read_timer()
554 return indev->read_timer; in lv_indev_get_read_timer()
557 lv_indev_mode_t lv_indev_get_mode(lv_indev_t * indev) in lv_indev_get_mode() argument
559 if(indev) return indev->mode; in lv_indev_get_mode()
563 void lv_indev_set_mode(lv_indev_t * indev, lv_indev_mode_t mode) in lv_indev_set_mode() argument
565 if(indev == NULL || indev->mode == mode) in lv_indev_set_mode()
568 indev->mode = mode; in lv_indev_set_mode()
569 if(indev->read_timer) { in lv_indev_set_mode()
571 lv_timer_pause(indev->read_timer); in lv_indev_set_mode()
575 lv_timer_set_cb(indev->read_timer, lv_indev_read_timer_cb); in lv_indev_set_mode()
576 lv_timer_resume(indev->read_timer); in lv_indev_set_mode()
617 void lv_indev_add_event_cb(lv_indev_t * indev, lv_event_cb_t event_cb, lv_event_code_t filter, void… in lv_indev_add_event_cb() argument
619 LV_ASSERT_NULL(indev); in lv_indev_add_event_cb()
621 lv_event_add(&indev->event_list, event_cb, filter, user_data); in lv_indev_add_event_cb()
624 uint32_t lv_indev_get_event_count(lv_indev_t * indev) in lv_indev_get_event_count() argument
626 LV_ASSERT_NULL(indev); in lv_indev_get_event_count()
627 return lv_event_get_count(&indev->event_list); in lv_indev_get_event_count()
630 lv_event_dsc_t * lv_indev_get_event_dsc(lv_indev_t * indev, uint32_t index) in lv_indev_get_event_dsc() argument
632 LV_ASSERT_NULL(indev); in lv_indev_get_event_dsc()
633 return lv_event_get_dsc(&indev->event_list, index); in lv_indev_get_event_dsc()
637 bool lv_indev_remove_event(lv_indev_t * indev, uint32_t index) in lv_indev_remove_event() argument
639 LV_ASSERT_NULL(indev); in lv_indev_remove_event()
641 return lv_event_remove(&indev->event_list, index); in lv_indev_remove_event()
644 uint32_t lv_indev_remove_event_cb_with_user_data(lv_indev_t * indev, lv_event_cb_t event_cb, void *… in lv_indev_remove_event_cb_with_user_data() argument
646 LV_ASSERT_NULL(indev); in lv_indev_remove_event_cb_with_user_data()
648 uint32_t event_cnt = lv_indev_get_event_count(indev); in lv_indev_remove_event_cb_with_user_data()
653 lv_event_dsc_t * dsc = lv_indev_get_event_dsc(indev, i); in lv_indev_remove_event_cb_with_user_data()
655 lv_indev_remove_event(indev, i); in lv_indev_remove_event_cb_with_user_data()
663 lv_result_t lv_indev_send_event(lv_indev_t * indev, lv_event_code_t code, void * param) in lv_indev_send_event() argument
669 e.current_target = indev; in lv_indev_send_event()
670 e.original_target = indev; in lv_indev_send_event()
673 res = lv_event_send(&indev->event_list, &e, true); in lv_indev_send_event()
676 res = lv_event_send(&indev->event_list, &e, false); in lv_indev_send_event()
1174 static void indev_proc_press(lv_indev_t * indev) in indev_proc_press() argument
1176 LV_LOG_INFO("pressed at x:%d y:%d", (int)indev->pointer.act_point.x, in indev_proc_press()
1177 (int)indev->pointer.act_point.y); in indev_proc_press()
1178 indev_obj_act = indev->pointer.act_obj; in indev_proc_press()
1180 if(indev->wait_until_release != 0) return; in indev_proc_press()
1187 indev_obj_act = pointer_search_obj(disp, &indev->pointer.act_point); in indev_proc_press()
1191 else if(indev->pointer.scroll_obj == NULL && in indev_proc_press()
1193 indev_obj_act = pointer_search_obj(disp, &indev->pointer.act_point); in indev_proc_press()
1198 if(new_obj_searched && indev->pointer.scroll_obj) { in indev_proc_press()
1200 if(indev->scroll_throw_anim) { in indev_proc_press()
1201 lv_anim_delete(indev, indev_scroll_throw_anim_cb); in indev_proc_press()
1202 indev->scroll_throw_anim = NULL; in indev_proc_press()
1205 lv_indev_scroll_throw_handler(indev); in indev_proc_press()
1206 if(indev_reset_check(indev)) return; in indev_proc_press()
1210 if(indev_obj_act != indev->pointer.act_obj) { in indev_proc_press()
1211 indev->pointer.last_point.x = indev->pointer.act_point.x; in indev_proc_press()
1212 indev->pointer.last_point.y = indev->pointer.act_point.y; in indev_proc_press()
1215 if(indev->pointer.last_hovered && indev->pointer.last_hovered != indev_obj_act) { in indev_proc_press()
1216 lv_obj_send_event(indev->pointer.last_hovered, LV_EVENT_HOVER_LEAVE, indev); in indev_proc_press()
1217 if(indev_reset_check(indev)) return; in indev_proc_press()
1219 lv_indev_send_event(indev, LV_EVENT_HOVER_LEAVE, indev->pointer.last_hovered); in indev_proc_press()
1220 if(indev_reset_check(indev)) return; in indev_proc_press()
1222 indev->pointer.last_hovered = indev_obj_act; in indev_proc_press()
1226 if(indev->pointer.act_obj != NULL) { in indev_proc_press()
1228 lv_obj_t * last_obj = indev->pointer.act_obj; in indev_proc_press()
1231 if(indev_reset_check(indev)) return; in indev_proc_press()
1234 indev->pointer.act_obj = indev_obj_act; /*Save the pressed object*/ in indev_proc_press()
1235 indev->pointer.last_obj = indev_obj_act; in indev_proc_press()
1240 indev->pr_timestamp = lv_tick_get(); in indev_proc_press()
1241 indev->long_pr_sent = 0; in indev_proc_press()
1242 indev->pointer.scroll_sum.x = 0; in indev_proc_press()
1243 indev->pointer.scroll_sum.y = 0; in indev_proc_press()
1244 indev->pointer.scroll_dir = LV_DIR_NONE; in indev_proc_press()
1245 indev->pointer.scroll_obj = NULL; in indev_proc_press()
1246 indev->pointer.gesture_dir = LV_DIR_NONE; in indev_proc_press()
1247 indev->pointer.gesture_sent = 0; in indev_proc_press()
1248 indev->pointer.gesture_sum.x = 0; in indev_proc_press()
1249 indev->pointer.gesture_sum.y = 0; in indev_proc_press()
1250 indev->pointer.press_moved = 0; in indev_proc_press()
1251 indev->pointer.vect.x = 0; in indev_proc_press()
1252 indev->pointer.vect.y = 0; in indev_proc_press()
1256 if(indev->pointer.last_hovered != indev_obj_act) { in indev_proc_press()
1266 if(indev_reset_check(indev)) return; in indev_proc_press()
1272 indev->pointer.vect.x = indev->pointer.act_point.x - indev->pointer.last_point.x; in indev_proc_press()
1273 indev->pointer.vect.y = indev->pointer.act_point.y - indev->pointer.last_point.y; in indev_proc_press()
1275indev->pointer.scroll_throw_vect.x = (indev->pointer.scroll_throw_vect.x + indev->pointer.vect.x) … in indev_proc_press()
1276indev->pointer.scroll_throw_vect.y = (indev->pointer.scroll_throw_vect.y + indev->pointer.vect.y) … in indev_proc_press()
1278 indev->pointer.scroll_throw_vect_ori = indev->pointer.scroll_throw_vect; in indev_proc_press()
1280 …if(LV_ABS(indev->pointer.vect.x) > indev->scroll_limit || LV_ABS(indev->pointer.vect.y) > indev->s… in indev_proc_press()
1281 indev->pointer.press_moved = 1; in indev_proc_press()
1285 if(indev->gesture_type != LV_INDEV_GESTURE_NONE) { in indev_proc_press()
1286 lv_indev_send_event(indev, LV_EVENT_GESTURE, indev_act); in indev_proc_press()
1292 if(indev->gesture_type != LV_INDEV_GESTURE_NONE) { in indev_proc_press()
1304 if(indev->pointer.scroll_obj) { in indev_proc_press()
1305 lv_obj_stop_scroll_anim(indev->pointer.scroll_obj); in indev_proc_press()
1308 lv_indev_scroll_handler(indev); in indev_proc_press()
1309 if(indev_reset_check(indev)) return; in indev_proc_press()
1310 indev_gesture(indev); in indev_proc_press()
1311 if(indev_reset_check(indev)) return; in indev_proc_press()
1313 …if(indev->mode == LV_INDEV_MODE_EVENT && indev->read_timer && lv_timer_get_paused(indev->read_time… in indev_proc_press()
1314 lv_timer_resume(indev->read_timer); in indev_proc_press()
1318 if(indev->pointer.scroll_obj == NULL && indev->long_pr_sent == 0) { in indev_proc_press()
1320 if(lv_tick_elaps(indev->pr_timestamp) > indev_act->long_press_time) { in indev_proc_press()
1325 indev->long_pr_sent = 1; in indev_proc_press()
1328 indev->longpr_rep_timestamp = lv_tick_get(); in indev_proc_press()
1332 if(indev->pointer.scroll_obj == NULL && indev->long_pr_sent == 1) { in indev_proc_press()
1333 if(lv_tick_elaps(indev->longpr_rep_timestamp) > indev_act->long_press_repeat_time) { in indev_proc_press()
1337 indev->longpr_rep_timestamp = lv_tick_get(); in indev_proc_press()
1347 static void indev_proc_release(lv_indev_t * indev) in indev_proc_release() argument
1349 if(indev->wait_until_release || /*Hover the new widget even if the coordinates didn't changed*/ in indev_proc_release()
1350 (indev->pointer.last_point.x != indev->pointer.act_point.x || in indev_proc_release()
1351 indev->pointer.last_point.y != indev->pointer.act_point.y)) { in indev_proc_release()
1352 lv_obj_t ** last = &indev->pointer.last_hovered; in indev_proc_release()
1353 … lv_obj_t * hovered = pointer_search_obj(lv_display_get_default(), &indev->pointer.act_point); in indev_proc_release()
1355 lv_obj_send_event(hovered, LV_EVENT_HOVER_OVER, indev); in indev_proc_release()
1356 if(indev_reset_check(indev)) return; in indev_proc_release()
1357 lv_indev_send_event(indev, LV_EVENT_HOVER_OVER, hovered); in indev_proc_release()
1358 if(indev_reset_check(indev)) return; in indev_proc_release()
1360 lv_obj_send_event(*last, LV_EVENT_HOVER_LEAVE, indev); in indev_proc_release()
1361 if(indev_reset_check(indev)) return; in indev_proc_release()
1362 lv_indev_send_event(indev, LV_EVENT_HOVER_LEAVE, *last); in indev_proc_release()
1363 if(indev_reset_check(indev)) return; in indev_proc_release()
1368 if(indev->wait_until_release) { in indev_proc_release()
1369 lv_obj_send_event(indev->pointer.act_obj, LV_EVENT_PRESS_LOST, indev_act); in indev_proc_release()
1370 if(indev_reset_check(indev)) return; in indev_proc_release()
1372 indev->pointer.act_obj = NULL; in indev_proc_release()
1373 indev->pointer.last_obj = NULL; in indev_proc_release()
1374 indev->pr_timestamp = 0; in indev_proc_release()
1375 indev->longpr_rep_timestamp = 0; in indev_proc_release()
1376 indev->wait_until_release = 0; in indev_proc_release()
1378 indev_obj_act = indev->pointer.act_obj; in indev_proc_release()
1379 lv_obj_t * scroll_obj = indev->pointer.scroll_obj; in indev_proc_release()
1381 …if(indev->mode == LV_INDEV_MODE_EVENT && indev->read_timer && !lv_timer_get_paused(indev->read_tim… in indev_proc_release()
1382 lv_timer_pause(indev->read_timer); in indev_proc_release()
1386 if(indev->gesture_type != LV_INDEV_GESTURE_NONE) { in indev_proc_release()
1387 lv_indev_send_event(indev, LV_EVENT_GESTURE, indev_act); in indev_proc_release()
1395 if(is_enabled && indev->gesture_type != LV_INDEV_GESTURE_NONE) { in indev_proc_release()
1405 if(indev->long_pr_sent == 0) { in indev_proc_release()
1406 if(indev_proc_short_click(indev) == LV_RESULT_INVALID) return; in indev_proc_release()
1412 if(indev_reset_check(indev)) return; in indev_proc_release()
1415 indev->pointer.act_obj = NULL; in indev_proc_release()
1416 indev->pr_timestamp = 0; in indev_proc_release()
1417 indev->longpr_rep_timestamp = 0; in indev_proc_release()
1447 … lv_point_transform(&indev->pointer.scroll_throw_vect, angle, scale_x, scale_y, &pivot, false); in indev_proc_release()
1448 … lv_point_transform(&indev->pointer.scroll_throw_vect_ori, angle, scale_x, scale_y, &pivot, false); in indev_proc_release()
1454 if(!indev->scroll_throw_anim) { in indev_proc_release()
1455 indev_scroll_throw_anim_start(indev); in indev_proc_release()
1458 if(indev_reset_check(indev)) return; in indev_proc_release()
1462 static lv_result_t indev_proc_short_click(lv_indev_t * indev) in indev_proc_short_click() argument
1465 indev->pointer.short_click_streak++; in indev_proc_short_click()
1466 if(lv_tick_elaps(indev->pointer.last_short_click_timestamp) > indev->long_press_time) { in indev_proc_short_click()
1467 indev->pointer.short_click_streak = 1; in indev_proc_short_click()
1469 else if(indev->type == LV_INDEV_TYPE_POINTER || indev->type == LV_INDEV_TYPE_BUTTON) { in indev_proc_short_click()
1470 int32_t dx = indev->pointer.last_short_click_point.x - indev->pointer.act_point.x; in indev_proc_short_click()
1471 int32_t dy = indev->pointer.last_short_click_point.y - indev->pointer.act_point.y; in indev_proc_short_click()
1472 …if(dx * dx + dy * dy > indev->scroll_limit * indev->scroll_limit) indev->pointer.short_click_strea… in indev_proc_short_click()
1475 indev->pointer.last_short_click_timestamp = lv_tick_get(); in indev_proc_short_click()
1476 lv_indev_get_point(indev, &indev->pointer.last_short_click_point); in indev_proc_short_click()
1485 switch((indev->pointer.short_click_streak - 1) % 3) { in indev_proc_short_click()
1496 static void indev_proc_pointer_diff(lv_indev_t * indev) in indev_proc_pointer_diff() argument
1498 lv_obj_t * obj = indev->pointer.last_pressed; in indev_proc_pointer_diff()
1500 if(indev->pointer.diff == 0) return; in indev_proc_pointer_diff()
1507 uint32_t indev_sensitivity = indev->rotary_sensitivity; in indev_proc_pointer_diff()
1509 …int32_t diff = (int32_t)((int32_t)indev->pointer.diff * indev_sensitivity * obj_sensitivity + 3276… in indev_proc_pointer_diff()
1514 int32_t vect = indev->pointer.diff > 0 ? indev->scroll_limit : -indev->scroll_limit; in indev_proc_pointer_diff()
1515 indev->pointer.vect.y = vect; in indev_proc_pointer_diff()
1516 indev->pointer.act_obj = obj; in indev_proc_pointer_diff()
1517 lv_obj_t * scroll_obj = lv_indev_find_scroll_obj(indev); in indev_proc_pointer_diff()
1519 uint32_t indev_sensitivity = indev->rotary_sensitivity; in indev_proc_pointer_diff()
1521 …int32_t diff = (int32_t)((int32_t)indev->pointer.diff * indev_sensitivity * obj_sensitivity + 3276… in indev_proc_pointer_diff()
1523 indev->pointer.scroll_throw_vect.y = diff; in indev_proc_pointer_diff()
1524 indev->pointer.scroll_throw_vect_ori.y = diff; in indev_proc_pointer_diff()
1525 lv_indev_scroll_handler(indev); in indev_proc_pointer_diff()
1553 static void indev_proc_reset_query_handler(lv_indev_t * indev) in indev_proc_reset_query_handler() argument
1555 if(indev->reset_query) { in indev_proc_reset_query_handler()
1556 indev->pointer.act_obj = NULL; in indev_proc_reset_query_handler()
1557 indev->pointer.last_obj = NULL; in indev_proc_reset_query_handler()
1558 indev->pointer.scroll_obj = NULL; in indev_proc_reset_query_handler()
1559 indev->pointer.last_hovered = NULL; in indev_proc_reset_query_handler()
1560 indev->long_pr_sent = 0; in indev_proc_reset_query_handler()
1561 indev->pr_timestamp = 0; in indev_proc_reset_query_handler()
1562 indev->longpr_rep_timestamp = 0; in indev_proc_reset_query_handler()
1563 indev->pointer.scroll_sum.x = 0; in indev_proc_reset_query_handler()
1564 indev->pointer.scroll_sum.y = 0; in indev_proc_reset_query_handler()
1565 indev->pointer.scroll_dir = LV_DIR_NONE; in indev_proc_reset_query_handler()
1566 indev->pointer.scroll_obj = NULL; in indev_proc_reset_query_handler()
1567 indev->pointer.scroll_throw_vect.x = 0; in indev_proc_reset_query_handler()
1568 indev->pointer.scroll_throw_vect.y = 0; in indev_proc_reset_query_handler()
1569 indev->pointer.gesture_sum.x = 0; in indev_proc_reset_query_handler()
1570 indev->pointer.gesture_sum.y = 0; in indev_proc_reset_query_handler()
1571 indev->reset_query = 0; in indev_proc_reset_query_handler()
1572 indev->stop_processing_query = 0; in indev_proc_reset_query_handler()
1581 static void indev_click_focus(lv_indev_t * indev) in indev_click_focus() argument
1589 …lv_group_t * g_prev = indev->pointer.last_pressed ? lv_obj_get_group(indev->pointer.last_pressed) … in indev_click_focus()
1596 if(indev_reset_check(indev)) return; in indev_click_focus()
1600 if(indev->pointer.last_pressed != indev_obj_act) { in indev_click_focus()
1601 lv_obj_send_event(indev->pointer.last_pressed, LV_EVENT_DEFOCUSED, indev_act); in indev_click_focus()
1602 if(indev_reset_check(indev)) return; in indev_click_focus()
1605 if(indev_reset_check(indev)) return; in indev_click_focus()
1612 if(g_prev == NULL && indev->pointer.last_pressed) { in indev_click_focus()
1613 lv_obj_send_event(indev->pointer.last_pressed, LV_EVENT_DEFOCUSED, indev_act); in indev_click_focus()
1614 if(indev_reset_check(indev)) return; in indev_click_focus()
1618 if(indev->pointer.last_pressed) { in indev_click_focus()
1621 lv_obj_send_event(indev->pointer.last_pressed, LV_EVENT_DEFOCUSED, indev_act); in indev_click_focus()
1622 if(indev_reset_check(indev)) return; in indev_click_focus()
1626 lv_obj_send_event(indev->pointer.last_pressed, LV_EVENT_LEAVE, indev_act); in indev_click_focus()
1627 if(indev_reset_check(indev)) return; in indev_click_focus()
1635 if(indev_reset_check(indev)) return; in indev_click_focus()
1639 if(indev_reset_check(indev)) return; in indev_click_focus()
1642 indev->pointer.last_pressed = indev_obj_act; in indev_click_focus()
1649 void indev_gesture(lv_indev_t * indev) in indev_gesture() argument
1651 if(indev->pointer.scroll_obj) return; in indev_gesture()
1652 if(indev->pointer.gesture_sent) return; in indev_gesture()
1654 lv_obj_t * gesture_obj = indev->pointer.act_obj; in indev_gesture()
1663 if((LV_ABS(indev->pointer.vect.x) < indev_act->gesture_min_velocity) && in indev_gesture()
1664 (LV_ABS(indev->pointer.vect.y) < indev_act->gesture_min_velocity)) { in indev_gesture()
1665 indev->pointer.gesture_sum.x = 0; in indev_gesture()
1666 indev->pointer.gesture_sum.y = 0; in indev_gesture()
1670 indev->pointer.gesture_sum.x += indev->pointer.vect.x; in indev_gesture()
1671 indev->pointer.gesture_sum.y += indev->pointer.vect.y; in indev_gesture()
1673 if((LV_ABS(indev->pointer.gesture_sum.x) > indev_act->gesture_limit) || in indev_gesture()
1674 (LV_ABS(indev->pointer.gesture_sum.y) > indev_act->gesture_limit)) { in indev_gesture()
1676 indev->pointer.gesture_sent = 1; in indev_gesture()
1678 if(LV_ABS(indev->pointer.gesture_sum.x) > LV_ABS(indev->pointer.gesture_sum.y)) { in indev_gesture()
1679 if(indev->pointer.gesture_sum.x > 0) in indev_gesture()
1680 indev->pointer.gesture_dir = LV_DIR_RIGHT; in indev_gesture()
1682 indev->pointer.gesture_dir = LV_DIR_LEFT; in indev_gesture()
1685 if(indev->pointer.gesture_sum.y > 0) in indev_gesture()
1686 indev->pointer.gesture_dir = LV_DIR_BOTTOM; in indev_gesture()
1688 indev->pointer.gesture_dir = LV_DIR_TOP; in indev_gesture()
1692 if(indev_reset_check(indev)) return; in indev_gesture()
1704 static bool indev_reset_check(lv_indev_t * indev) in indev_reset_check() argument
1706 if(indev->reset_query) { in indev_reset_check()
1710 return indev->reset_query; in indev_reset_check()
1718 static bool indev_stop_processing_check(lv_indev_t * indev) in indev_stop_processing_check() argument
1720 return indev->stop_processing_query; in indev_stop_processing_check()
1728 static void indev_reset_core(lv_indev_t * indev, lv_obj_t * obj) in indev_reset_core() argument
1733 indev->reset_query = 1; in indev_reset_core()
1734 if(indev_act == indev) indev_obj_act = NULL; in indev_reset_core()
1735 if(indev->type == LV_INDEV_TYPE_POINTER || indev->type == LV_INDEV_TYPE_KEYPAD) { in indev_reset_core()
1736 if(obj == NULL || indev->pointer.last_pressed == obj) { in indev_reset_core()
1737 indev->pointer.last_pressed = NULL; in indev_reset_core()
1739 if(obj == NULL || indev->pointer.act_obj == obj) { in indev_reset_core()
1740 if(indev->pointer.act_obj) { in indev_reset_core()
1742 act_obj = indev->pointer.act_obj; in indev_reset_core()
1743 indev->pointer.act_obj = NULL; in indev_reset_core()
1744 lv_obj_send_event(act_obj, LV_EVENT_INDEV_RESET, indev); in indev_reset_core()
1745 lv_indev_send_event(indev, LV_EVENT_INDEV_RESET, act_obj); in indev_reset_core()
1749 if(obj == NULL || indev->pointer.last_obj == obj) { in indev_reset_core()
1750 indev->pointer.last_obj = NULL; in indev_reset_core()
1752 if(obj == NULL || indev->pointer.scroll_obj == obj) { in indev_reset_core()
1753 if(indev->pointer.scroll_obj) { in indev_reset_core()
1755 scroll_obj = indev->pointer.scroll_obj; in indev_reset_core()
1756 indev->pointer.scroll_obj = NULL; in indev_reset_core()
1757 lv_obj_send_event(scroll_obj, LV_EVENT_INDEV_RESET, indev); in indev_reset_core()
1758 lv_indev_send_event(indev, LV_EVENT_INDEV_RESET, act_obj); in indev_reset_core()
1762 if(obj == NULL || indev->pointer.last_hovered == obj) { in indev_reset_core()
1763 indev->pointer.last_hovered = NULL; in indev_reset_core()
1770 lv_indev_t * indev = indev_act; in send_event() local
1779 lv_indev_send_event(indev, code, indev_obj_act); in send_event()
1780 if(indev_reset_check(indev)) return LV_RESULT_INVALID; in send_event()
1782 if(indev_stop_processing_check(indev)) { in send_event()
1784 indev->stop_processing_query = 0; in send_event()
1790 if(indev_reset_check(indev)) return LV_RESULT_INVALID; in send_event()
1799 lv_indev_t * indev = (lv_indev_t *)var; in indev_scroll_throw_anim_cb() local
1801 lv_indev_scroll_throw_handler(indev); in indev_scroll_throw_anim_cb()
1803 if(indev->pointer.scroll_dir == LV_DIR_NONE || indev->pointer.scroll_obj == NULL) { in indev_scroll_throw_anim_cb()
1804 if(indev->scroll_throw_anim) { in indev_scroll_throw_anim_cb()
1806 lv_anim_delete(indev, indev_scroll_throw_anim_cb); in indev_scroll_throw_anim_cb()
1818 static void indev_scroll_throw_anim_start(lv_indev_t * indev) in indev_scroll_throw_anim_start() argument
1820 LV_ASSERT_NULL(indev); in indev_scroll_throw_anim_start()
1824 lv_anim_set_var(&a, indev); in indev_scroll_throw_anim_start()
1832 indev->scroll_throw_anim = lv_anim_start(&a); in indev_scroll_throw_anim_start()