static void
_e_gesture_util_center_axis_get(int num_finger, int *x, int *y)
{
- int i;
+ int i, cnt = 0;
int calc_x = 0, calc_y = 0;
if (num_finger <= 0)
for (i = 1; i <= num_finger; i++)
{
+ if (!gesture->gesture_events.base_point[i].pressed) continue;
calc_x += gesture->gesture_events.base_point[i].axis.x;
calc_y += gesture->gesture_events.base_point[i].axis.y;
+ cnt++;
}
- calc_x = (int)(calc_x / num_finger);
- calc_y = (int)(calc_y / num_finger);
+ calc_x = (int)(calc_x / cnt);
+ calc_y = (int)(calc_y / cnt);
*x = calc_x;
*y = calc_y;
for (i = 1; i <= num_finger; i++)
{
+ if (!gesture->gesture_events.base_point[i].pressed) continue;
distance += _e_gesture_util_distance_get(cx, cy,
gesture->gesture_events.base_point[i].axis.x,
gesture->gesture_events.base_point[i].axis.y);
}
static void
-_e_gesture_util_rect_get(int finger, int *x1, int *y1, int *x2, int *y2)
+_e_gesture_util_rect_get(int num_finger, int *x1, int *y1, int *x2, int *y2)
{
- int i;
-
- *x1 = *x2 = gesture->gesture_events.base_point[1].axis.x;
- *y1 = *y2 = gesture->gesture_events.base_point[1].axis.y;
+ int i, start_i = 0;
- for (i = 2; i < finger + 1; i++)
+ if (num_finger <= 0)
{
- if (gesture->gesture_events.base_point[i].axis.x < *x1)
- *x1 = gesture->gesture_events.base_point[i].axis.x;
- else if (gesture->gesture_events.base_point[i].axis.x > *x2)
- *x2 = gesture->gesture_events.base_point[i].axis.x;
+ *x1 = *x2 = 0;
+ *y1 = *y2 = 0;
+ return;
+ }
- if (gesture->gesture_events.base_point[i].axis.y < *y1)
- *y1 = gesture->gesture_events.base_point[i].axis.y;
- else if (gesture->gesture_events.base_point[i].axis.y > *y2)
- *y2 = gesture->gesture_events.base_point[i].axis.y;
+ for (i = 1; i <= num_finger ; i++)
+ {
+ if (!gesture->gesture_events.base_point[i].pressed) continue;
+ if (start_i == 0)
+ {
+ *x1 = *x2 = gesture->gesture_events.base_point[i].axis.x;
+ *y1 = *y2 = gesture->gesture_events.base_point[i].axis.y;
+ start_i = i;
+ }
+ else
+ {
+ if (gesture->gesture_events.base_point[i].axis.x < *x1)
+ *x1 = gesture->gesture_events.base_point[i].axis.x;
+ else if (gesture->gesture_events.base_point[i].axis.x > *x2)
+ *x2 = gesture->gesture_events.base_point[i].axis.x;
+
+ if (gesture->gesture_events.base_point[i].axis.y < *y1)
+ *y1 = gesture->gesture_events.base_point[i].axis.y;
+ else if (gesture->gesture_events.base_point[i].axis.y > *y2)
+ *y2 = gesture->gesture_events.base_point[i].axis.y;
+ }
}
}
}
static Eina_Bool
-_e_gesture_process_distance_check(int id, int x, int y)
+_e_gesture_process_distance_check(int id, int x, int y, int num_fingers)
{
double distance;
int cx = 0, cy = 0;
E_Gesture_Conf_Edd *conf = gesture->config->conf;
- _e_gesture_util_center_axis_get(gesture->gesture_events.num_pressed, &cx, &cy);
+ _e_gesture_util_center_axis_get(num_fingers, &cx, &cy);
distance = _e_gesture_util_distance_get(x, y, cx, cy);
// for Debugging
E_Gesture_Event_Pan *pans = &gesture->gesture_events.pans;
int num_pressed = gesture->gesture_events.num_pressed;
int i;
+ Coords start_point = {0, };
if (pans->fingers[num_pressed].client)
{
- for (i = 1; i <= num_pressed; i++)
- {
- pans->start_point.x += gesture->gesture_events.base_point[i].axis.x;
- pans->start_point.y += gesture->gesture_events.base_point[i].axis.y;
- }
- pans->center_point.x = pans->start_point.x = (int)(pans->start_point.x / num_pressed);
- pans->center_point.y = pans->start_point.y = (int)(pans->start_point.y / num_pressed);
+ _e_gesture_util_center_axis_get(num_pressed, &start_point.x, &start_point.y);
+ pans->start_point.x = pans->center_point.x = start_point.x;
+ pans->start_point.y = pans->center_point.y = start_point.y;
pans->state = E_GESTURE_PANPINCH_STATE_START;
}
else
return;
}
- if (gesture->gesture_events.num_pressed > 0)
+ if (gesture->gesture_events.num_pressed > 1)
{
if (!_e_gesture_process_distance_check(ev->multi.device,
- ev->x, ev->y))
+ ev->x, ev->y, gesture->gesture_events.num_pressed))
_e_gesture_pan_cancel();
}
return;
}
- if (gesture->gesture_events.num_pressed > 0)
+ if (gesture->gesture_events.num_pressed > 1)
{
if (!_e_gesture_process_distance_check(ev->multi.device,
- ev->x, ev->y))
+ ev->x, ev->y, gesture->gesture_events.num_pressed))
_e_gesture_pan_cancel();
}
taps->repeats = 0;
taps->enabled_finger = 0;
taps->current_finger = 0;
+ GTINF("Tap state changed. %d -> %d", taps->state, E_GESTURE_TAP_STATE_READY);
taps->state = E_GESTURE_TAP_STATE_READY;
taps->base_rect.x1 = 0;
taps->base_rect.y1 = 0;
{
E_Gesture_Event_Tap *taps = &gesture->gesture_events.taps;
- if (taps->fingers[taps->enabled_finger].enabled)
+ GTWRN("Tap start timer expired. Currently alived fingers: 0x%x (curr:%d)\n",
+ taps->enabled_finger, taps->current_finger);
+
+ if ((taps->enabled_finger == taps->current_finger) &&
+ (taps->fingers[taps->enabled_finger].enabled))
{
+ GTINF("Tap state changed. %d -> %d", taps->state, E_GESTURE_TAP_STATE_PROCESS);
taps->state = E_GESTURE_TAP_STATE_PROCESS;
}
else
{
+ GTWRN("Tap start timer expired. tap cancelled");
_e_gesture_tap_cancel();
}
if (gesture->gesture_events.num_pressed)
{
+ GTWRN("Tap done timer expired. tap cancelled");
_e_gesture_tap_cancel();
}
{
/* All fingers are released. */
gesture->gesture_filter = E_GESTURE_TYPE_ALL;
+ GTWRN("Tap interval timer is expired. tap cancelled");
_e_gesture_tap_cancel();
gesture->event_state = E_GESTURE_EVENT_STATE_KEEP;
E_Gesture_Event_Tap *taps = &gesture->gesture_events.taps;
E_Gesture_Conf_Edd *conf = gesture->config->conf;
+ GTINF("Tap state changed. %d -> %d", taps->state, E_GESTURE_TAP_STATE_START);
taps->state = E_GESTURE_TAP_STATE_START;
if (!taps->start_timer)
{
E_Gesture_Conf_Edd *conf = gesture->config->conf;
if (taps->repeats >= conf->tap.repeats_max)
- _e_gesture_tap_cancel();
+ {
+ GTWRN("Tap done. taps->repeats(%d) is too big (max:%d). tap cancelled", taps->repeats, conf->tap.repeats_max);
+ _e_gesture_tap_cancel();
+ }
if (!taps->fingers[taps->enabled_finger].enabled)
- _e_gesture_tap_cancel();
+ {
+ GTWRN("Tap done. enabled_finger(%d) is not enabled. tap cancelled", taps->enabled_finger);
+ _e_gesture_tap_cancel();
+ }
if (!(gesture->gesture_filter & E_GESTURE_TYPE_TAP) &&
gesture->gesture_events.num_pressed == 0)
{
+ GTINF("Tap state changed. %d -> %d", taps->state, E_GESTURE_TAP_STATE_WAIT);
taps->state = E_GESTURE_TAP_STATE_WAIT;
taps->repeats++;
if (taps->done_timer)
{
if (!taps->activation.active)
{
+ GTWRN("Tap is not active. tap cancelled");
_e_gesture_tap_cancel();
return EINA_FALSE;
}
if (gesture->gesture_events.recognized_gesture)
- _e_gesture_tap_cancel();
+ {
+ GTWRN("Tap recognized_gesture has a value(%d). tap cancelled",
+ gesture->gesture_events.recognized_gesture);
+ _e_gesture_tap_cancel();
+ }
return EINA_TRUE;
}
return;
}
- if (gesture->gesture_events.num_pressed > 0)
+ if (gesture->gesture_events.num_pressed > 1)
{
if (!_e_gesture_process_distance_check(ev->multi.device,
- ev->x, ev->y))
+ ev->x, ev->y, gesture->gesture_events.num_pressed))
_e_gesture_tap_cancel();
}
taps->current_finger++;
if (taps->enabled_finger > taps->max_fingers)
- _e_gesture_tap_cancel();
+ {
+ GTWRN("Tap Down. enabled_finger(%d) is too big (max:%d). tap cancelled", taps->enabled_finger, taps->max_fingers);
+ _e_gesture_tap_cancel();
+ }
if (taps->state == E_GESTURE_TAP_STATE_READY ||
taps->state == E_GESTURE_TAP_STATE_START ||
return;
}
- if (gesture->gesture_events.num_pressed > 0)
+ if (gesture->gesture_events.num_pressed > 1)
{
if (!_e_gesture_process_distance_check(ev->multi.device,
- ev->x, ev->y))
+ ev->x, ev->y, taps->current_finger))
_e_gesture_tap_cancel();
}
}
if (taps->enabled_finger != taps->current_finger)
- _e_gesture_tap_cancel();
+ {
+ GTWRN("Tap Up. enabled_finger(%d) is not equal (max:%d). tap cancelled", taps->enabled_finger, taps->max_fingers);
+ _e_gesture_tap_cancel();
+ }
switch (taps->state)
{
break;
case E_GESTURE_TAP_STATE_START:
+ GTINF("Tap state changed. %d -> %d", taps->state, E_GESTURE_TAP_STATE_PROCESS);
taps->state = E_GESTURE_TAP_STATE_PROCESS;
if (taps->start_timer)
{