feat(indev): add lv_indev_set_mode to switch input device's event model (#4949)

Signed-off-by: YanXiaowei <yanxiaowei@xiaomi.com>
Co-authored-by: YanXiaowei <yanxiaowei@xiaomi.com>
This commit is contained in:
bjsylvia
2023-12-20 16:35:14 +08:00
committed by GitHub
parent 2f7816b30c
commit 94f0b8eaa0
7 changed files with 39 additions and 17 deletions

View File

@@ -121,6 +121,7 @@ lv_indev_t * lv_indev_create(void)
indev->disp = lv_display_get_default();
indev->type = LV_INDEV_TYPE_NONE;
indev->mode = LV_INDEV_MODE_TIMER;
indev->scroll_limit = LV_INDEV_DEF_SCROLL_LIMIT;
indev->scroll_throw = LV_INDEV_DEF_SCROLL_THROW;
indev->long_press_time = LV_INDEV_DEF_LONG_PRESS_TIME;
@@ -486,11 +487,21 @@ lv_timer_t * lv_indev_get_read_timer(lv_indev_t * indev)
return indev->read_timer;
}
void lv_indev_delete_read_timer(lv_indev_t * indev)
void lv_indev_set_mode(lv_indev_t * indev, lv_indev_mode_t mode)
{
if(indev && indev->read_timer) {
lv_timer_delete(indev->read_timer);
indev->read_timer = NULL;
if(!indev || indev->mode == mode)
return;
indev->mode = mode;
if(indev->read_timer) {
if(mode == LV_INDEV_MODE_EVENT) {
lv_timer_pause(indev->read_timer);
}
else if(mode == LV_INDEV_MODE_TIMER) {
/* use default timer mode*/
lv_timer_set_cb(indev->read_timer, lv_indev_read_timer_cb);
lv_timer_resume(indev->read_timer);
}
}
}
@@ -1170,6 +1181,10 @@ static void indev_proc_press(lv_indev_t * indev)
indev_gesture(indev);
if(indev_reset_check(indev)) return;
if(indev->mode == LV_INDEV_MODE_EVENT && indev->read_timer && lv_timer_get_paused(indev->read_timer)) {
lv_timer_resume(indev->read_timer);
}
/*If there is no scrolling then check for long press time*/
if(indev->pointer.scroll_obj == NULL && indev->long_pr_sent == 0) {
/*Send a long press event if enough time elapsed*/
@@ -1215,6 +1230,10 @@ static void indev_proc_release(lv_indev_t * indev)
indev_obj_act = indev->pointer.act_obj;
lv_obj_t * scroll_obj = indev->pointer.scroll_obj;
if(indev->mode == LV_INDEV_MODE_EVENT && indev->read_timer && !lv_timer_get_paused(indev->read_timer)) {
lv_timer_pause(indev->read_timer);
}
if(indev_obj_act) {
LV_LOG_INFO("released");
@@ -1393,7 +1412,6 @@ static void indev_click_focus(lv_indev_t * indev)
*/
void indev_gesture(lv_indev_t * indev)
{
if(indev->pointer.scroll_obj) return;
if(indev->pointer.gesture_sent) return;
@@ -1555,3 +1573,4 @@ static void indev_scroll_throw_anim_start(lv_indev_t * indev)
indev->scroll_throw_anim = lv_anim_start(&a);
}