From 23b2a2810c431941e5203331b9e6c967f0ddaabe Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Sun, 3 Nov 2019 15:45:24 +0100 Subject: [PATCH] drag fixes Even in case of LV_DRAG_DIR_BOTH only one dir drag was possible if x or y havn't changed during the first movement. --- src/lv_core/lv_indev.c | 21 +++++++++++++++------ src/lv_core/lv_obj.c | 1 + 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/lv_core/lv_indev.c b/src/lv_core/lv_indev.c index 7bec119a2..623a667b8 100644 --- a/src/lv_core/lv_indev.c +++ b/src/lv_core/lv_indev.c @@ -1100,10 +1100,8 @@ static void indev_drag(lv_indev_proc_t * proc) if(proc->types.pointer.drag_limit_out == 0) { proc->types.pointer.drag_sum.x += proc->types.pointer.vect.x; proc->types.pointer.drag_sum.y += proc->types.pointer.vect.y; - } - /*Enough move?*/ - if(proc->types.pointer.drag_limit_out == 0) { + /*Enough move?*/ bool hor_en = false; bool ver_en = false; if(allowed_dirs == LV_DRAG_DIR_HOR || allowed_dirs == LV_DRAG_DIR_BOTH) { @@ -1182,9 +1180,20 @@ static void indev_drag(lv_indev_proc_t * proc) } } - /*In the inactive direction `drag_sum` is kept zero*/ - if(proc->types.pointer.drag_sum.x) act_x += proc->types.pointer.vect.x; - if(proc->types.pointer.drag_sum.y) act_y += proc->types.pointer.vect.y; + /*Move the object*/ + if(allowed_dirs == LV_DRAG_DIR_HOR || + allowed_dirs == LV_DRAG_DIR_BOTH || + (allowed_dirs == LV_DRAG_DIR_ONE && + LV_MATH_ABS(proc->types.pointer.drag_sum.x) > LV_MATH_ABS(proc->types.pointer.drag_sum.y))) { + act_x += proc->types.pointer.vect.x; + } + if(allowed_dirs == LV_DRAG_DIR_VER || + allowed_dirs == LV_DRAG_DIR_BOTH || + (allowed_dirs == LV_DRAG_DIR_ONE && + LV_MATH_ABS(proc->types.pointer.drag_sum.x) < LV_MATH_ABS(proc->types.pointer.drag_sum.y))) { + act_y += proc->types.pointer.vect.y; + } + lv_obj_set_pos(drag_obj, act_x, act_y); proc->types.pointer.drag_in_prog = 1; diff --git a/src/lv_core/lv_obj.c b/src/lv_core/lv_obj.c index cb60c95ac..b03e8a347 100644 --- a/src/lv_core/lv_obj.c +++ b/src/lv_core/lv_obj.c @@ -204,6 +204,7 @@ lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy) new_obj->drag = 0; new_obj->drag_throw = 0; new_obj->drag_parent = 0; + new_obj->drag_dir = 0; new_obj->hidden = 0; new_obj->top = 0; new_obj->protect = LV_PROTECT_NONE;