/* callbacks - gesture */
static Eina_Bool _cb_gesture_tap(void *data, int type, void *event);
static Eina_Bool _cb_gesture_edge_swipe(void *data, int type, void *event);
+static Eina_Bool _cb_gesture_edge_drag(void *data, int type, void *event);
/* functions - gesture */
static void _gesture_tap_generate(etRunner *runner);
static void _gesture_edge_swipe_generate(etRunner *runner);
+static void _gesture_edge_drag_generate(etRunner *runner);
/**********************
listeners
_gesture_edge_swipe_generate(this);
break;
+ case E_TC_EVENT_TYPE_GESTURE_EDGE_DRAG:
+ eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_EDGE_DRAG, _cb_gesture_edge_drag, this);
+ _gesture_edge_drag_generate(this);
+ break;
+
default:
goto finish;
break;
efl_util_event_gesture_edge_swipe_s *ev =
(efl_util_event_gesture_edge_swipe_s *)event;
- if ((ev->fingers == (unsigned int)runner->ev.gesture.edge_swipe.fingers) &&
- (ev->edge == (unsigned int)runner->ev.gesture.edge_swipe.edge))
+ if ((ev->fingers == (unsigned int)runner->ev.gesture.edge.fingers) &&
+ (ev->edge == (unsigned int)runner->ev.gesture.edge.edge))
{
runner->ev.response = E_TC_EVENT_TYPE_GESTURE_EDGE_SWIPE;
if (runner->ev.gesture.timer)
{
- runner->ev.gesture.edge_swipe.get_event = EINA_TRUE;
+ runner->ev.gesture.edge.get_event = EINA_TRUE;
}
else
elm_exit();
int i, cnt, fingers, w, h;
efl_util_gesture_edge_e edge;
- cnt = ++runner->ev.gesture.edge_swipe.touch_count;
- fingers = runner->ev.gesture.edge_swipe.fingers;
- edge = runner->ev.gesture.edge_swipe.edge;
+ cnt = ++runner->ev.gesture.edge.touch_count;
+ fingers = runner->ev.gesture.edge.fingers;
+ edge = runner->ev.gesture.edge.edge;
w = runner->output.w - 1;
h = runner->output.h - 1;
}
runner->ev.gesture.timer = NULL;
- if (runner->ev.gesture.edge_swipe.get_event)
+ if (runner->ev.gesture.edge.get_event)
{
- runner->ev.gesture.edge_swipe.get_event = EINA_FALSE;
+ runner->ev.gesture.edge.get_event = EINA_FALSE;
elm_exit();
}
return ECORE_CALLBACK_CANCEL;
static void
_gesture_edge_swipe_generate(etRunner *runner)
{
- runner->ev.gesture.edge_swipe.touch_count = 0;
- runner->ev.gesture.edge_swipe.get_event = EINA_FALSE;
+ runner->ev.gesture.edge.touch_count = 0;
+ runner->ev.gesture.edge.get_event = EINA_FALSE;
runner->ev.gesture.timer = ecore_timer_add(1.0,
_cb_gesture_edge_swipe_delay_timer,
runner);
}
+static Eina_Bool
+_cb_gesture_edge_drag(void *data, int type, void *event)
+{
+ etRunner *runner = (etRunner *)data;
+ efl_util_event_gesture_edge_drag_s *ev =
+ (efl_util_event_gesture_edge_drag_s *)event;
+
+ if ((ev->fingers == (unsigned int)runner->ev.gesture.edge.fingers) &&
+ (ev->edge == (unsigned int)runner->ev.gesture.edge.edge) &&
+ (ev->mode == EFL_UTIL_GESTURE_MODE_END))
+ {
+ runner->ev.response = E_TC_EVENT_TYPE_GESTURE_EDGE_DRAG;
+ elm_exit();
+ }
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_cb_gesture_edge_drag_delay_timer(void *data)
+{
+ etRunner *runner = (etRunner *)data;
+ int i, cnt, fingers, w, h;
+ efl_util_gesture_edge_e edge;
+
+ cnt = ++runner->ev.gesture.edge.touch_count;
+ fingers = runner->ev.gesture.edge.fingers;
+ edge = runner->ev.gesture.edge.edge;
+ w = runner->output.w - 1;
+ h = runner->output.h - 1;
+
+ if (cnt == 1)
+ {
+ for (i = 0; i < fingers; i++)
+ {
+ switch (edge)
+ {
+ case EFL_UTIL_GESTURE_EDGE_TOP:
+ runner->generateTouchDown(i, 100 * (i + 1), 1);
+ break;
+ case EFL_UTIL_GESTURE_EDGE_RIGHT:
+ runner->generateTouchDown(i, w - 1, 100 * (i + 1));
+ break;
+ case EFL_UTIL_GESTURE_EDGE_BOTTOM:
+ runner->generateTouchDown(i, 100 * (i + 1), h - 1);
+ break;
+ case EFL_UTIL_GESTURE_EDGE_LEFT:
+ runner->generateTouchDown(i, 1, 100 * (i + 1));
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ else if (cnt < 5)
+ {
+ for (i = 0; i < fingers; i++)
+ {
+ switch (edge)
+ {
+ case EFL_UTIL_GESTURE_EDGE_TOP:
+ runner->generateTouchMove(i, 100 * (i + 1), 50 * cnt);
+ break;
+ case EFL_UTIL_GESTURE_EDGE_RIGHT:
+ runner->generateTouchMove(i, (w - 1) - (50 * cnt), 100 * (i + 1));
+ break;
+ case EFL_UTIL_GESTURE_EDGE_BOTTOM:
+ runner->generateTouchMove(i, 100 * (i + 1), (h - 1) - (50 * cnt));
+ break;
+ case EFL_UTIL_GESTURE_EDGE_LEFT:
+ runner->generateTouchMove(i, 50 * cnt, 100 * (i + 1));
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ else
+ {
+ cnt--;
+ for (i = 0; i < fingers; i++)
+ {
+ switch (edge)
+ {
+ case EFL_UTIL_GESTURE_EDGE_TOP:
+ runner->generateTouchUp(i, 100 * (i + 1), 50 * cnt);
+ break;
+ case EFL_UTIL_GESTURE_EDGE_RIGHT:
+ runner->generateTouchUp(i, (w - 1) - (50 * cnt), 100 * (i + 1));
+ break;
+ case EFL_UTIL_GESTURE_EDGE_BOTTOM:
+ runner->generateTouchUp(i, 100 * (i + 1), (h - 1) - (50 * cnt));
+ break;
+ case EFL_UTIL_GESTURE_EDGE_LEFT:
+ runner->generateTouchUp(i, 50 * cnt, 100 * (i + 1));
+ break;
+ default:
+ break;
+ }
+ }
+
+ runner->ev.gesture.timer = NULL;
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ runner->ev.gesture.timer = NULL;
+ runner->ev.gesture.timer = ecore_timer_add(0.11,
+ _cb_gesture_edge_drag_delay_timer,
+ runner);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+_gesture_edge_drag_generate(etRunner *runner)
+{
+ runner->ev.gesture.edge.touch_count = 0;
+
+ runner->ev.gesture.timer = ecore_timer_add(1.0,
+ _cb_gesture_edge_drag_delay_timer,
+ runner);
+}
ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to grab edge swipe gesture: (ret: "
<< EFL_UTIL_RETURN_TO_STRING(ret) << ")";
- etRunner::get().ev.gesture.edge_swipe.fingers = fingers;
- etRunner::get().ev.gesture.edge_swipe.edge = edge;
+ etRunner::get().ev.gesture.edge.fingers = fingers;
+ etRunner::get().ev.gesture.edge.edge = edge;
ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_GESTURE_EDGE_SWIPE);
ASSERT_TRUE(ret);
- etRunner::get().ev.gesture.edge_swipe.fingers = 0;
- etRunner::get().ev.gesture.edge_swipe.edge = EFL_UTIL_GESTURE_EDGE_NONE;;
+ etRunner::get().ev.gesture.edge.fingers = 0;
+ etRunner::get().ev.gesture.edge.edge = EFL_UTIL_GESTURE_EDGE_NONE;;
ret = efl_util_gesture_ungrab(gesture_h, edge_swipe_d);
ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to grab edge swipe gesture: (ret: "
TEST_F(etTestInput, gesture_edge_swipe24)
{
_test_gesture_edge_swipe(2, EFL_UTIL_GESTURE_EDGE_LEFT);
+}
+
+static void
+_test_gesture_edge_drag(int fingers, efl_util_gesture_edge_e edge)
+{
+ int ret = EFL_UTIL_ERROR_NONE;
+ efl_util_gesture_h gesture_h;
+ efl_util_gesture_data edge_drag_d;
+
+ gesture_h = efl_util_gesture_initialize();
+ ASSERT_TRUE(gesture_h != NULL) << "failed to initialize gesture system";
+
+ edge_drag_d = efl_util_gesture_edge_drag_new(gesture_h, fingers, edge);
+ ASSERT_TRUE(edge_drag_d != NULL) << "failed to generate edge drag grab data";
+
+ ret = efl_util_gesture_grab(gesture_h, edge_drag_d);
+ ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to grab edge drag gesture: (ret: "
+ << EFL_UTIL_RETURN_TO_STRING(ret) << ")";
+
+ etRunner::get().ev.gesture.edge.fingers = fingers;
+ etRunner::get().ev.gesture.edge.edge = edge;
+
+ ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_GESTURE_EDGE_DRAG);
+ ASSERT_TRUE(ret);
+
+ etRunner::get().ev.gesture.edge.fingers = 0;
+ etRunner::get().ev.gesture.edge.edge = EFL_UTIL_GESTURE_EDGE_NONE;;
+
+ ret = efl_util_gesture_ungrab(gesture_h, edge_drag_d);
+ ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to grab edge drag gesture: (ret: "
+ << EFL_UTIL_RETURN_TO_STRING(ret) << ")";
+
+ ret = efl_util_gesture_edge_drag_free(gesture_h, edge_drag_d);
+ ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to free tap grab data: (ret: "
+ << EFL_UTIL_RETURN_TO_STRING(ret) << ")";
+
+ ret = efl_util_gesture_deinitialize(gesture_h);
+ ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to deinitialize gesture system: (ret: "
+ << EFL_UTIL_RETURN_TO_STRING(ret) << ")";
+}
+
+TEST_F(etTestInput, gesture_edge_drag11)
+{
+ _test_gesture_edge_drag(1, EFL_UTIL_GESTURE_EDGE_TOP);
+}
+
+TEST_F(etTestInput, gesture_edge_drag12)
+{
+ _test_gesture_edge_drag(1, EFL_UTIL_GESTURE_EDGE_RIGHT);
+}
+
+TEST_F(etTestInput, gesture_edge_drag13)
+{
+ _test_gesture_edge_drag(1, EFL_UTIL_GESTURE_EDGE_BOTTOM);
+}
+
+TEST_F(etTestInput, gesture_edge_drag14)
+{
+ _test_gesture_edge_drag(1, EFL_UTIL_GESTURE_EDGE_LEFT);
+}
+
+TEST_F(etTestInput, gesture_edge_drag21)
+{
+ _test_gesture_edge_drag(2, EFL_UTIL_GESTURE_EDGE_TOP);
+}
+
+TEST_F(etTestInput, gesture_edge_drag22)
+{
+ _test_gesture_edge_drag(2, EFL_UTIL_GESTURE_EDGE_RIGHT);
+}
+
+TEST_F(etTestInput, gesture_edge_drag23)
+{
+ _test_gesture_edge_drag(2, EFL_UTIL_GESTURE_EDGE_BOTTOM);
+}
+
+TEST_F(etTestInput, gesture_edge_drag24)
+{
+ _test_gesture_edge_drag(2, EFL_UTIL_GESTURE_EDGE_LEFT);
}
\ No newline at end of file