forked from enlightenment/efl
elementary: add new config value to handle tap finger size.
Summary: The tap_finger_size value of the concept is different from the finger_size value used in the past. We need a minimum value for recognize the gesture as a tap or not. Since the actual screen has different screen sizes, there is a problem that the recognition rate of tap is lowered when using the existing value(finger_size) Test Plan: elementary_test -> gesture sample. Reviewers: cedric, woohyun, Jaehyun_Cho, herb, id213sin Subscribers: cedric Differential Revision: https://phab.enlightenment.org/D5842 Reviewed-by: Cedric BAIL <cedric@osg.samsung.com> Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
parent
f9fa8bfcb0
commit
0088189eee
|
@ -72,6 +72,7 @@ group "Elm_Config" struct {
|
|||
value "glayer_long_tap_start_timeout" double: 1.2; /* sec to start long-tap */
|
||||
value "glayer_double_tap_timeout" double: 0.25; /* Timeout between two mouse dows when doing double click (and more). */
|
||||
value "glayer_continues_enable" uchar: 1; /* Continues gesture enabled */
|
||||
value "glayer_tap_finger_size" int: 10;
|
||||
value "week_start" int: 1;
|
||||
value "weekend_start" int: 6;
|
||||
value "weekend_len" int: 2;
|
||||
|
|
|
@ -72,6 +72,7 @@ group "Elm_Config" struct {
|
|||
value "glayer_long_tap_start_timeout" double: 1.2; /* sec to start long-tap */
|
||||
value "glayer_double_tap_timeout" double: 0.25; /* Timeout between two mouse dows when doing double click (and more). */
|
||||
value "glayer_continues_enable" uchar: 1; /* Continues gesture enabled */
|
||||
value "glayer_tap_finger_size" int: 10;
|
||||
value "week_start" int: 1;
|
||||
value "weekend_start" int: 6;
|
||||
value "weekend_len" int: 2;
|
||||
|
|
|
@ -73,6 +73,7 @@ group "Elm_Config" struct {
|
|||
value "glayer_long_tap_start_timeout" double: 1.2; /* sec to start long-tap */
|
||||
value "glayer_double_tap_timeout" double: 0.25; /* Timeout between two mouse dows when doing double click (and more). */
|
||||
value "glayer_continues_enable" uchar: 1; /* Continues gesture enabled */
|
||||
value "glayer_tap_finger_size" int: 10;
|
||||
value "week_start" int: 1;
|
||||
value "weekend_start" int: 6;
|
||||
value "weekend_len" int: 2;
|
||||
|
|
|
@ -461,6 +461,7 @@ _desc_init(void)
|
|||
ELM_CONFIG_VAL(D, T, glayer_flick_time_limit_ms, T_INT);
|
||||
ELM_CONFIG_VAL(D, T, glayer_long_tap_start_timeout, T_DOUBLE);
|
||||
ELM_CONFIG_VAL(D, T, glayer_double_tap_timeout, T_DOUBLE);
|
||||
ELM_CONFIG_VAL(D, T, glayer_tap_finger_size, T_INT);
|
||||
ELM_CONFIG_VAL(D, T, access_mode, T_UCHAR);
|
||||
ELM_CONFIG_VAL(D, T, selection_clear_enable, T_UCHAR);
|
||||
ELM_CONFIG_VAL(D, T, glayer_continues_enable, T_UCHAR);
|
||||
|
@ -1796,6 +1797,7 @@ _config_load(void)
|
|||
_elm_config->glayer_long_tap_start_timeout = 1.2; /* 1.2 second to start long-tap */
|
||||
_elm_config->glayer_double_tap_timeout = 0.25; /* 0.25 seconds between 2 mouse downs of a tap. */
|
||||
_elm_config->glayer_continues_enable = EINA_TRUE; /* Continue gestures default */
|
||||
_elm_config->glayer_tap_finger_size = 10;
|
||||
_elm_config->access_mode = ELM_ACCESS_MODE_OFF;
|
||||
_elm_config->selection_clear_enable = EINA_FALSE;
|
||||
_elm_config->week_start = 1; /* monday */
|
||||
|
@ -1955,6 +1957,7 @@ _elm_config_reload_do(void)
|
|||
KEEP_VAL(glayer_flick_time_limit_ms);
|
||||
KEEP_VAL(glayer_long_tap_start_timeout);
|
||||
KEEP_VAL(glayer_double_tap_timeout);
|
||||
KEEP_VAL(glayer_tap_finger_size);
|
||||
KEEP_VAL(access_mode);
|
||||
KEEP_VAL(glayer_continues_enable);
|
||||
KEEP_VAL(week_start);
|
||||
|
@ -2813,6 +2816,9 @@ _env_get(void)
|
|||
s = getenv("ELM_POPUP_SCROLLABLE");
|
||||
if (s) _elm_config->popup_scrollable = atoi(s);
|
||||
|
||||
s = getenv("ELM_GLAYER_TAP_FINGER_SIZE");
|
||||
if (s) _elm_config->glayer_tap_finger_size = atoi(s);
|
||||
|
||||
s = getenv("EFL_UI_DND_DRAG_ANIM_DURATION");
|
||||
if (s) _elm_config->drag_anim_duration = _elm_atof(s);
|
||||
}
|
||||
|
|
|
@ -1657,7 +1657,7 @@ _taps_rect_get(Eina_List *taps, int idx, Eina_Rectangle *r)
|
|||
* @ingroup Elm_Gesture_Layer
|
||||
*/
|
||||
static Eina_Bool
|
||||
_tap_gesture_check_finish(Gesture_Info *gesture, Evas_Coord tap_finger_size)
|
||||
_tap_gesture_check_finish(Gesture_Info *gesture)
|
||||
{
|
||||
/* Here we check if taps-gesture was completed successfully */
|
||||
/* Count how many taps were received on each device then */
|
||||
|
@ -1668,8 +1668,8 @@ _tap_gesture_check_finish(Gesture_Info *gesture, Evas_Coord tap_finger_size)
|
|||
Eina_List *pe_list;
|
||||
Eina_Rectangle base = {0, 0, 0, 0};
|
||||
Eina_Rectangle tmp = {0, 0, 0, 0};
|
||||
if (!tap_finger_size) /* Use system default if not set by user */
|
||||
tap_finger_size = elm_config_finger_size_get();
|
||||
|
||||
ELM_GESTURE_LAYER_DATA_GET(gesture->obj, sd);
|
||||
|
||||
if (!st->l) return EINA_FALSE;
|
||||
EINA_LIST_FOREACH(st->l, l, pe_list)
|
||||
|
@ -1690,16 +1690,16 @@ _tap_gesture_check_finish(Gesture_Info *gesture, Evas_Coord tap_finger_size)
|
|||
{ /* Compare all other rects to base, tolerance is finger size */
|
||||
if (_taps_rect_get(st->l, i, &tmp))
|
||||
{
|
||||
if (abs(tmp.x - base.x) > tap_finger_size)
|
||||
if (abs(tmp.x - base.x) > sd->tap_finger_size)
|
||||
return EINA_FALSE;
|
||||
|
||||
if (abs(tmp.y - base.y) > tap_finger_size)
|
||||
if (abs(tmp.y - base.y) > sd->tap_finger_size)
|
||||
return EINA_FALSE;
|
||||
|
||||
if (abs((tmp.x + tmp.w) - (base.x + base.w)) > tap_finger_size)
|
||||
if (abs((tmp.x + tmp.w) - (base.x + base.w)) > sd->tap_finger_size)
|
||||
return EINA_FALSE;
|
||||
|
||||
if (abs((tmp.y + tmp.h) - (base.y + base.h)) > tap_finger_size)
|
||||
if (abs((tmp.y + tmp.h) - (base.y + base.h)) > sd->tap_finger_size)
|
||||
return EINA_FALSE;
|
||||
}
|
||||
}
|
||||
|
@ -1717,14 +1717,14 @@ _tap_gesture_check_finish(Gesture_Info *gesture, Evas_Coord tap_finger_size)
|
|||
* @ingroup Elm_Gesture_Layer
|
||||
*/
|
||||
static void
|
||||
_tap_gesture_finish(void *data, Evas_Coord tap_finger_size)
|
||||
_tap_gesture_finish(void *data)
|
||||
{
|
||||
/* This function will test each tap gesture when timer expires */
|
||||
Elm_Gesture_State s = ELM_GESTURE_STATE_ABORT;
|
||||
Gesture_Info *gesture = data;
|
||||
Taps_Type *st = gesture->data;
|
||||
|
||||
if (_tap_gesture_check_finish(gesture, tap_finger_size))
|
||||
if (_tap_gesture_check_finish(gesture))
|
||||
{
|
||||
s = ELM_GESTURE_STATE_END;
|
||||
}
|
||||
|
@ -1750,16 +1750,13 @@ _multi_tap_timeout(void *data)
|
|||
ELM_GESTURE_LAYER_DATA_GET(data, sd);
|
||||
|
||||
if (IS_TESTED(ELM_GESTURE_N_TAPS))
|
||||
_tap_gesture_finish(sd->gesture[ELM_GESTURE_N_TAPS],
|
||||
sd->tap_finger_size);
|
||||
_tap_gesture_finish(sd->gesture[ELM_GESTURE_N_TAPS]);
|
||||
|
||||
if (IS_TESTED(ELM_GESTURE_N_DOUBLE_TAPS))
|
||||
_tap_gesture_finish(sd->gesture[ELM_GESTURE_N_DOUBLE_TAPS],
|
||||
sd->tap_finger_size);
|
||||
_tap_gesture_finish(sd->gesture[ELM_GESTURE_N_DOUBLE_TAPS]);
|
||||
|
||||
if (IS_TESTED(ELM_GESTURE_N_TRIPLE_TAPS))
|
||||
_tap_gesture_finish(sd->gesture[ELM_GESTURE_N_TRIPLE_TAPS],
|
||||
sd->tap_finger_size);
|
||||
_tap_gesture_finish(sd->gesture[ELM_GESTURE_N_TRIPLE_TAPS]);
|
||||
|
||||
_clear_if_finished(data);
|
||||
sd->gest_taps_timeout = NULL;
|
||||
|
@ -1950,9 +1947,9 @@ _tap_gesture_test(Evas_Object *obj,
|
|||
((gesture->g_type == ELM_GESTURE_N_DOUBLE_TAPS) &&
|
||||
!IS_TESTED(ELM_GESTURE_N_TRIPLE_TAPS)))
|
||||
{ /* Test for finish immediately, not waiting for timeout */
|
||||
if (_tap_gesture_check_finish(gesture, sd->tap_finger_size))
|
||||
if (_tap_gesture_check_finish(gesture))
|
||||
{
|
||||
_tap_gesture_finish(gesture, sd->tap_finger_size);
|
||||
_tap_gesture_finish(gesture);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -3772,6 +3769,7 @@ _elm_gesture_layer_efl_canvas_group_group_add(Eo *obj, Elm_Gesture_Layer_Data *p
|
|||
priv->long_tap_start_timeout = _elm_config->glayer_long_tap_start_timeout;
|
||||
priv->repeat_events = EINA_TRUE;
|
||||
priv->glayer_continues_enable = _elm_config->glayer_continues_enable;
|
||||
priv->tap_finger_size = _elm_config->glayer_tap_finger_size;
|
||||
|
||||
/* FIXME: Hack to get around old configs - if too small, enlarge. */
|
||||
if (_elm_config->glayer_double_tap_timeout < 0.00001)
|
||||
|
|
|
@ -290,6 +290,7 @@ struct _Elm_Config_Flags
|
|||
Eina_Bool glayer_flick_time_limit_ms : 1; // unused
|
||||
Eina_Bool glayer_long_tap_start_timeout : 1;
|
||||
Eina_Bool glayer_double_tap_timeout : 1;
|
||||
Eina_Bool glayer_tap_finger_size : 1;
|
||||
Eina_Bool access_mode : 1;
|
||||
Eina_Bool glayer_continues_enable : 1; // unused
|
||||
Eina_Bool week_start : 1; // unused
|
||||
|
@ -425,6 +426,7 @@ struct _Elm_Config
|
|||
unsigned int glayer_flick_time_limit_ms;
|
||||
double glayer_long_tap_start_timeout;
|
||||
double glayer_double_tap_timeout;
|
||||
int glayer_tap_finger_size;
|
||||
Eina_Bool access_mode;
|
||||
unsigned char glayer_continues_enable;
|
||||
int week_start;
|
||||
|
|
Loading…
Reference in New Issue