Lines Matching +full:- +full:- +full:include
1 #include "lv_indev_private.h"
2 #include "../misc/lv_event_private.h"
3 #include "../misc/lv_area_private.h"
4 #include "../misc/lv_anim_private.h"
5 #include "../core/lv_obj_draw_private.h"
14 #include "lv_indev_scroll.h"
15 #include "lv_indev_gesture.h"
16 #include "../display/lv_display_private.h"
17 #include "../core/lv_global.h"
18 #include "../core/lv_obj_private.h"
19 #include "../core/lv_group.h"
20 #include "../core/lv_refr.h"
22 #include "../tick/lv_tick.h"
23 #include "../misc/lv_timer_private.h"
24 #include "../misc/lv_math.h"
25 #include "../misc/lv_profiler.h"
26 #include "../stdlib/lv_string.h"
34 /*Drag throw slow-down in [%]. Greater value -> faster slow-down*/
58 #define indev_act LV_GLOBAL_DEFAULT()->indev_active
59 #define indev_obj_act LV_GLOBAL_DEFAULT()->indev_obj_active
60 #define indev_ll_head &(LV_GLOBAL_DEFAULT()->indev_ll)
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()
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()
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()
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()
188 data->key = LV_KEY_ENTER; in indev_read_core()
191 if(indev->read_cb) { in indev_read_core()
193 indev->read_cb(indev, data); in indev_read_core()
204 lv_indev_read(timer->user_data); in lv_indev_read_timer_cb()
216 if(indev->disp == NULL) return; /*Not assigned to any displays*/ 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()
235 continue_reading = indev->mode != LV_INDEV_MODE_EVENT && data.continue_reading; 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()
254 else if(indev->type == LV_INDEV_TYPE_KEYPAD) { in lv_indev_read()
257 else if(indev->type == LV_INDEV_TYPE_ENCODER) { in lv_indev_read()
260 else if(indev->type == LV_INDEV_TYPE_BUTTON) { in lv_indev_read()
278 indev->enabled = (uint8_t) enable; in lv_indev_enable()
283 i->enabled = (uint8_t) enable; in lv_indev_enable()
298 indev->type = indev_type; in lv_indev_set_type()
299 indev->reset_query = 1; in lv_indev_set_type()
306 indev->read_cb = read_cb; in lv_indev_set_read_cb()
312 indev->user_data = user_data; in lv_indev_set_user_data()
318 indev->driver_data = driver_data; in lv_indev_set_driver_data()
328 return indev->read_cb; in lv_indev_get_read_cb()
335 return indev->type; in lv_indev_get_type()
342 return indev->state; in lv_indev_get_state()
349 return indev->group; in lv_indev_get_group()
356 return indev->disp; in lv_indev_get_display()
363 indev->disp = disp; in lv_indev_set_display()
370 indev->long_press_time = long_press_time; in lv_indev_set_long_press_time()
377 indev->long_press_repeat_time = long_press_repeat_time; in lv_indev_set_long_press_repeat_time()
384 indev->scroll_limit = scroll_limit; in lv_indev_set_scroll_limit()
391 indev->scroll_throw = scroll_throw; in lv_indev_set_scroll_throw()
397 return indev->user_data; in lv_indev_get_user_data()
404 return indev->driver_data; in lv_indev_get_driver_data()
411 return indev->pointer.press_moved; in lv_indev_get_press_moved()
432 indev->stop_processing_query = 1; in lv_indev_stop_processing()
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()
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()
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()
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()
470 point->x = 0; in lv_indev_get_point()
471 point->y = 0; 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()
474 point->x = -1; in lv_indev_get_point()
475 point->y = -1; 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()
485 return indev->pointer.gesture_dir; in lv_indev_get_gesture_dir()
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()
500 return indev->pointer.short_click_streak; in lv_indev_get_short_click_streak()
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()
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()
519 point->x = 0; in lv_indev_get_vect()
520 point->y = 0; 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()
533 return indev->cursor; in lv_indev_get_cursor()
539 indev->wait_until_release = 1; in lv_indev_wait_release()
554 return indev->read_timer; in lv_indev_get_read_timer()
559 if(indev) return indev->mode; in lv_indev_get_mode()
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()
594 lv_area_t obj_coords = obj->coords; in lv_indev_search_obj()
604 for(i = child_cnt - 1; i >= 0; i--) { in lv_indev_search_obj()
605 lv_obj_t * child = obj->spec_attr->children[i]; in lv_indev_search_obj()
621 lv_event_add(&indev->event_list, event_cb, filter, user_data); in lv_indev_add_event_cb()
627 return lv_event_get_count(&indev->event_list); in lv_indev_get_event_count()
633 return lv_event_get_dsc(&indev->event_list, index); in lv_indev_get_event_dsc()
641 return lv_event_remove(&indev->event_list, index); in lv_indev_remove_event()
652 for(i = event_cnt - 1; i >= 0; i--) { in lv_indev_remove_event_cb_with_user_data()
654 if(dsc && dsc->cb == event_cb && dsc->user_data == user_data) { in lv_indev_remove_event_cb_with_user_data()
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()
693 lv_display_t * disp = i->disp; in indev_pointer_proc()
695 i->pointer.last_raw_point.x = data->point.x; in indev_pointer_proc()
696 i->pointer.last_raw_point.y = data->point.y; in indev_pointer_proc()
698 if(disp->rotation == LV_DISPLAY_ROTATION_180 || disp->rotation == LV_DISPLAY_ROTATION_270) { in indev_pointer_proc()
699 data->point.x = disp->hor_res - data->point.x - 1; in indev_pointer_proc()
700 data->point.y = disp->ver_res - data->point.y - 1; in indev_pointer_proc()
702 if(disp->rotation == LV_DISPLAY_ROTATION_90 || disp->rotation == LV_DISPLAY_ROTATION_270) { in indev_pointer_proc()
703 int32_t tmp = data->point.y; in indev_pointer_proc()
704 data->point.y = data->point.x; in indev_pointer_proc()
705 data->point.x = disp->ver_res - tmp - 1; in indev_pointer_proc()
709 if(data->point.x < 0) { in indev_pointer_proc()
710 LV_LOG_WARN("X is %d which is smaller than zero", (int)data->point.x); in indev_pointer_proc()
712 if(data->point.x >= lv_display_get_horizontal_resolution(i->disp)) { in indev_pointer_proc()
713 LV_LOG_WARN("X is %d which is greater than hor. res", (int)data->point.x); in indev_pointer_proc()
715 if(data->point.y < 0) { in indev_pointer_proc()
716 LV_LOG_WARN("Y is %d which is smaller than zero", (int)data->point.y); in indev_pointer_proc()
718 if(data->point.y >= lv_display_get_vertical_resolution(i->disp)) { in indev_pointer_proc()
719 LV_LOG_WARN("Y is %d which is greater than ver. res", (int)data->point.y); in indev_pointer_proc()
723 if(i->cursor != NULL && in indev_pointer_proc()
724 (i->pointer.last_point.x != data->point.x || i->pointer.last_point.y != data->point.y)) { in indev_pointer_proc()
725 lv_obj_set_pos(i->cursor, data->point.x, data->point.y); in indev_pointer_proc()
728 i->pointer.act_point.x = data->point.x; in indev_pointer_proc()
729 i->pointer.act_point.y = data->point.y; in indev_pointer_proc()
730 i->pointer.diff = data->enc_diff; in indev_pointer_proc()
732 i->gesture_type = data->gesture_type; in indev_pointer_proc()
733 i->gesture_data = data->gesture_data; in indev_pointer_proc()
738 if(i->state == LV_INDEV_STATE_PRESSED) { in indev_pointer_proc()
745 i->pointer.last_point.x = i->pointer.act_point.x; in indev_pointer_proc()
746 i->pointer.last_point.y = i->pointer.act_point.y; in indev_pointer_proc()
756 if(data->state == LV_INDEV_STATE_PRESSED && i->wait_until_release) return; in indev_keypad_proc()
758 if(i->wait_until_release) { in indev_keypad_proc()
759 i->wait_until_release = 0; in indev_keypad_proc()
760 i->pr_timestamp = 0; in indev_keypad_proc()
761 i->long_pr_sent = 0; in indev_keypad_proc()
762 i->keypad.last_state = LV_INDEV_STATE_RELEASED; /*To skip the processing of release*/ in indev_keypad_proc()
766 uint32_t prev_key = i->keypad.last_key; in indev_keypad_proc()
767 i->keypad.last_key = data->key; in indev_keypad_proc()
769 lv_group_t * g = i->group; in indev_keypad_proc()
780 uint32_t prev_state = i->keypad.last_state; in indev_keypad_proc()
781 i->keypad.last_state = data->state; in indev_keypad_proc()
784 if(data->state == LV_INDEV_STATE_PRESSED && prev_state == LV_INDEV_STATE_RELEASED) { in indev_keypad_proc()
785 LV_LOG_INFO("%" LV_PRIu32 " key is pressed", data->key); in indev_keypad_proc()
786 i->pr_timestamp = lv_tick_get(); in indev_keypad_proc()
789 if(data->key == LV_KEY_NEXT) { in indev_keypad_proc()
795 else if(data->key == LV_KEY_PREV) { in indev_keypad_proc()
802 if(data->key == LV_KEY_ENTER) { in indev_keypad_proc()
810 else if(data->key == LV_KEY_ESC) { in indev_keypad_proc()
819 lv_group_send_data(g, data->key); in indev_keypad_proc()
825 …else if(is_enabled && data->state == LV_INDEV_STATE_PRESSED && prev_state == LV_INDEV_STATE_PRESSE… in indev_keypad_proc()
827 if(data->key == LV_KEY_ENTER) { in indev_keypad_proc()
832 if(i->long_pr_sent == 0 && lv_tick_elaps(i->pr_timestamp) > i->long_press_time) { in indev_keypad_proc()
833 i->long_pr_sent = 1; in indev_keypad_proc()
834 if(data->key == LV_KEY_ENTER) { in indev_keypad_proc()
835 i->longpr_rep_timestamp = lv_tick_get(); in indev_keypad_proc()
841 else if(i->long_pr_sent != 0 && in indev_keypad_proc()
842 lv_tick_elaps(i->longpr_rep_timestamp) > i->long_press_repeat_time) { in indev_keypad_proc()
844 i->longpr_rep_timestamp = lv_tick_get(); in indev_keypad_proc()
847 if(data->key == LV_KEY_ENTER) { in indev_keypad_proc()
851 else if(data->key == LV_KEY_NEXT) { in indev_keypad_proc()
857 else if(data->key == LV_KEY_PREV) { in indev_keypad_proc()
864 lv_group_send_data(g, data->key); in indev_keypad_proc()
870 …else if(is_enabled && data->state == LV_INDEV_STATE_RELEASED && prev_state == LV_INDEV_STATE_PRESS… in indev_keypad_proc()
871 LV_LOG_INFO("%" LV_PRIu32 " key is released", data->key); in indev_keypad_proc()
873 data->key = prev_key; in indev_keypad_proc()
874 if(data->key == LV_KEY_ENTER) { in indev_keypad_proc()
878 if(i->long_pr_sent == 0) { in indev_keypad_proc()
885 i->pr_timestamp = 0; in indev_keypad_proc()
886 i->long_pr_sent = 0; in indev_keypad_proc()
900 if(data->state == LV_INDEV_STATE_PRESSED && i->wait_until_release) return; in indev_encoder_proc()
902 if(i->wait_until_release) { in indev_encoder_proc()
903 i->wait_until_release = 0; in indev_encoder_proc()
904 i->pr_timestamp = 0; in indev_encoder_proc()
905 i->long_pr_sent = 0; in indev_encoder_proc()
906 i->keypad.last_state = LV_INDEV_STATE_RELEASED; /*To skip the processing of release*/ in indev_encoder_proc()
911 lv_indev_state_t last_state = i->keypad.last_state; in indev_encoder_proc()
912 i->keypad.last_state = data->state; in indev_encoder_proc()
913 i->keypad.last_key = data->key; in indev_encoder_proc()
915 lv_group_t * g = i->group; in indev_encoder_proc()
922 if(data->state != LV_INDEV_STATE_RELEASED) { in indev_encoder_proc()
923 data->enc_diff = 0; in indev_encoder_proc()
929 if(data->state == LV_INDEV_STATE_PRESSED && last_state == LV_INDEV_STATE_RELEASED) { in indev_encoder_proc()
932 i->pr_timestamp = lv_tick_get(); in indev_encoder_proc()
934 if(data->key == LV_KEY_ENTER) { in indev_encoder_proc()
944 else if(data->key == LV_KEY_LEFT) { in indev_encoder_proc()
946 data->enc_diff--; in indev_encoder_proc()
948 else if(data->key == LV_KEY_RIGHT) { in indev_encoder_proc()
950 data->enc_diff++; in indev_encoder_proc()
952 else if(data->key == LV_KEY_ESC) { in indev_encoder_proc()
963 lv_group_send_data(g, data->key); in indev_encoder_proc()
968 else if(data->state == LV_INDEV_STATE_PRESSED && last_state == LV_INDEV_STATE_PRESSED) { in indev_encoder_proc()
970 if(i->long_pr_sent == 0 && lv_tick_elaps(i->pr_timestamp) > i->long_press_time) { in indev_encoder_proc()
972 i->long_pr_sent = 1; in indev_encoder_proc()
973 i->longpr_rep_timestamp = lv_tick_get(); in indev_encoder_proc()
975 if(data->key == LV_KEY_ENTER) { in indev_encoder_proc()
1001 i->long_pr_sent = 1; in indev_encoder_proc()
1004 …else if(i->long_pr_sent != 0 && lv_tick_elaps(i->longpr_rep_timestamp) > i->long_press_repeat_time… in indev_encoder_proc()
1006 i->longpr_rep_timestamp = lv_tick_get(); in indev_encoder_proc()
1008 if(data->key == LV_KEY_ENTER) { in indev_encoder_proc()
1013 else if(data->key == LV_KEY_LEFT) { in indev_encoder_proc()
1015 data->enc_diff--; in indev_encoder_proc()
1017 else if(data->key == LV_KEY_RIGHT) { in indev_encoder_proc()
1019 data->enc_diff++; in indev_encoder_proc()
1022 lv_group_send_data(g, data->key); in indev_encoder_proc()
1030 else if(data->state == LV_INDEV_STATE_RELEASED && last_state == LV_INDEV_STATE_PRESSED) { in indev_encoder_proc()
1033 if(data->key == LV_KEY_ENTER) { in indev_encoder_proc()
1037 /*The button was released on a non-editable object. Just send enter*/ in indev_encoder_proc()
1043 if(i->long_pr_sent == 0 && is_enabled) { in indev_encoder_proc()
1055 if(!i->long_pr_sent || lv_group_get_obj_count(g) <= 1) { in indev_encoder_proc()
1071 else if(!i->long_pr_sent) { in indev_encoder_proc()
1077 i->pr_timestamp = 0; in indev_encoder_proc()
1078 i->long_pr_sent = 0; in indev_encoder_proc()
1083 if(data->enc_diff != 0) { in indev_encoder_proc()
1086 LV_LOG_INFO("rotated by %+d (edit)", data->enc_diff); in indev_encoder_proc()
1088 if(data->enc_diff < 0) { in indev_encoder_proc()
1089 for(s = 0; s < -data->enc_diff; s++) { in indev_encoder_proc()
1094 else if(data->enc_diff > 0) { in indev_encoder_proc()
1095 for(s = 0; s < data->enc_diff; s++) { in indev_encoder_proc()
1103 LV_LOG_INFO("rotated by %+d (nav)", data->enc_diff); in indev_encoder_proc()
1105 if(data->enc_diff < 0) { in indev_encoder_proc()
1106 for(s = 0; s < -data->enc_diff; s++) { in indev_encoder_proc()
1111 else if(data->enc_diff > 0) { in indev_encoder_proc()
1112 for(s = 0; s < data->enc_diff; s++) { in indev_encoder_proc()
1122 * Process new points from an input device. indev->state.pressed has to be set
1129 /*Die gracefully if i->btn_points is NULL*/ in indev_button_proc()
1130 if(i->btn_points == NULL) { in indev_button_proc()
1135 int32_t x = i->btn_points[data->btn_id].x; in indev_button_proc()
1136 int32_t y = i->btn_points[data->btn_id].y; in indev_button_proc()
1138 if(LV_INDEV_STATE_RELEASED != data->state) { in indev_button_proc()
1139 if(data->state == LV_INDEV_STATE_PRESSED) { in indev_button_proc()
1140 … LV_LOG_INFO("button %" LV_PRIu32 " is pressed (x:%d y:%d)", data->btn_id, (int)x, (int)y); in indev_button_proc()
1143 … LV_LOG_INFO("button %" LV_PRIu32 " is released (x:%d y:%d)", data->btn_id, (int)x, (int)y); in indev_button_proc()
1148 if(data->state == LV_INDEV_STATE_PRESSED) { in indev_button_proc()
1149 if(i->pointer.last_point.x != x || in indev_button_proc()
1150 i->pointer.last_point.y != y) { in indev_button_proc()
1158 i->pointer.act_point.x = x; in indev_button_proc()
1159 i->pointer.act_point.y = y; in indev_button_proc()
1161 if(data->state == LV_INDEV_STATE_PRESSED) indev_proc_press(i); in indev_button_proc()
1166 i->pointer.last_point.x = i->pointer.act_point.x; in indev_button_proc()
1167 i->pointer.last_point.y = i->pointer.act_point.y; in indev_button_proc()
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()
1182 lv_display_t * disp = indev_act->disp; 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()
1202 indev->scroll_throw_anim = NULL; 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()
1219 lv_indev_send_event(indev, LV_EVENT_HOVER_LEAVE, indev->pointer.last_hovered); 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()
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()
1262 if(indev_act->wait_until_release) 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()
1275 …indev->pointer.scroll_throw_vect.x = (indev->pointer.scroll_throw_vect.x + indev->pointer.vect.x) … in indev_proc_press()
1276 …indev->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()
1292 if(indev->gesture_type != LV_INDEV_GESTURE_NONE) { in indev_proc_press()
1302 if(indev_act->wait_until_release) return; 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()
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()
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()
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()
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()
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()
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()
1444 angle = -angle; 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()
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()
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()
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()
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()
1589 …lv_group_t * g_prev = indev->pointer.last_pressed ? lv_obj_get_group(indev->pointer.last_pressed) … 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()
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()
1616 /*Focus on a non-group object*/ 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()
1626 lv_obj_send_event(indev->pointer.last_pressed, LV_EVENT_LEAVE, indev_act); in indev_click_focus()
1642 indev->pointer.last_pressed = indev_obj_act; in indev_click_focus()
1646 * Handle the gesture of indev_proc_p->pointer.act_obj
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()
1706 if(indev->reset_query) { in indev_reset_check()
1710 return indev->reset_query; in indev_reset_check()
1720 return indev->stop_processing_query; in indev_stop_processing_check()
1733 indev->reset_query = 1; 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()
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()
1762 if(obj == NULL || indev->pointer.last_hovered == obj) { in indev_reset_core()
1763 indev->pointer.last_hovered = NULL; in indev_reset_core()
1784 indev->stop_processing_query = 0; in send_event()
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()
1814 indev_scroll_throw_anim_reset((lv_indev_t *)anim->var); in indev_scroll_throw_anim_completed_cb()
1832 indev->scroll_throw_anim = lv_anim_start(&a); in indev_scroll_throw_anim_start()