static Eina_Bool _cb_work_timeout(void *data);
static Eina_Bool _ev_wait_timeout(void *data);
+/* callbacks - gesture */
+static Eina_Bool _cb_gesture_tap(void *data, int type, void *event);
+
+/* functions - gesture */
+static void _gesture_tap_generate(etRunner *runner);
+
/**********************
listeners
**********************/
}
Eina_Bool
+etRunner::generateTouchDown(int idx, int x, int y)
+{
+ // Using efl_util_input_generate instead of generate event by eldbus
+ int ret = EFL_UTIL_ERROR_NONE;
+
+ if (inputGenerator == NULL)
+ {
+ inputGenerator = efl_util_input_initialize_generator(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN);
+ work();
+ }
+
+ ret = efl_util_input_generate_touch(inputGenerator,
+ idx,
+ EFL_UTIL_INPUT_TOUCH_BEGIN,
+ x, y);
+ if (ret != EFL_UTIL_ERROR_NONE)
+ {
+ efl_util_input_deinitialize_generator(inputGenerator);
+ inputGenerator = NULL;
+ return EINA_FALSE;
+ }
+
+ return EINA_TRUE;
+}
+
+Eina_Bool
+etRunner::generateTouchMove(int idx, int x, int y)
+{
+ // Using efl_util_input_generate instead of generate event by eldbus
+ int ret = EFL_UTIL_ERROR_NONE;
+
+ if (inputGenerator == NULL)
+ {
+ inputGenerator = efl_util_input_initialize_generator(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN);
+ work();
+ }
+
+ ret = efl_util_input_generate_touch(inputGenerator,
+ idx,
+ EFL_UTIL_INPUT_TOUCH_UPDATE,
+ x, y);
+ if (ret != EFL_UTIL_ERROR_NONE)
+ {
+ efl_util_input_deinitialize_generator(inputGenerator);
+ inputGenerator = NULL;
+ return EINA_FALSE;
+ }
+
+ return EINA_TRUE;
+}
+
+Eina_Bool
+etRunner::generateTouchUp(int idx, int x, int y)
+{
+ // Using efl_util_input_generate instead of generate event by eldbus
+ int ret = EFL_UTIL_ERROR_NONE;
+
+ if (inputGenerator == NULL)
+ {
+ inputGenerator = efl_util_input_initialize_generator(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN);
+ work();
+ }
+
+ ret = efl_util_input_generate_touch(inputGenerator,
+ idx,
+ EFL_UTIL_INPUT_TOUCH_END,
+ x, y);
+ if (ret != EFL_UTIL_ERROR_NONE)
+ {
+ efl_util_input_deinitialize_generator(inputGenerator);
+ inputGenerator = NULL;
+ return EINA_FALSE;
+ }
+
+ return EINA_TRUE;
+}
+
+Eina_Bool
etRunner::setSplashLaunch(const char *path, int type)
{
const char *effect_type = "launch";
evas_object_smart_callback_add(this->ev.win, launch_done, _cb_evas_smart_cb_launch_done, this);
break;
+ case E_TC_EVENT_TYPE_GESTURE_TAP:
+ eh = ecore_event_handler_add(EFL_UTIL_EVENT_GESTURE_TAP, _cb_gesture_tap, this);
+ _gesture_tap_generate(this);
+ break;
+
default:
goto finish;
break;
return ECORE_CALLBACK_CANCEL;
}
+static Eina_Bool
+_cb_gesture_tap(void *data, int type, void *event)
+{
+ etRunner *runner = (etRunner *)data;
+ efl_util_event_gesture_tap_s *ev =
+ (efl_util_event_gesture_tap_s *)event;
+
+ if ((ev->fingers == (unsigned int)runner->ev.gesture.tap.fingers) &&
+ (ev->repeats == (unsigned int)runner->ev.gesture.tap.repeats))
+ {
+ runner->ev.response = E_TC_EVENT_TYPE_GESTURE_TAP;
+ elm_exit();
+ }
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_cb_gesture_tap_delay_timer(void *data)
+{
+ etRunner *runner = (etRunner *)data;
+ int i;
+
+ for (i = 0; i < runner->ev.gesture.tap.fingers; i++)
+ {
+ if (!runner->ev.gesture.tap.pressed)
+ {
+ runner->generateTouchDown(i, 100 * (i + 1), 100 * (i + 1));
+ }
+ else
+ {
+ runner->generateTouchUp(i, 100 * (i + 1), 100 * (i + 1));
+ }
+ }
+
+ runner->ev.gesture.tap.timer = NULL;
+
+ runner->ev.gesture.tap.pressed = !runner->ev.gesture.tap.pressed;
+ if (!runner->ev.gesture.tap.pressed)
+ {
+ runner->ev.gesture.tap.current_repeats--;
+ }
+
+ if (runner->ev.gesture.tap.current_repeats > 0)
+ {
+ runner->ev.gesture.tap.timer = ecore_timer_add(0.11,
+ _cb_gesture_tap_delay_timer,
+ runner);
+ }
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+_gesture_tap_generate(etRunner *runner)
+{
+ runner->ev.gesture.tap.current_repeats = runner->ev.gesture.tap.repeats;
+ runner->ev.gesture.tap.pressed = EINA_FALSE;
+
+ runner->ev.gesture.tap.timer = ecore_timer_add(1.0,
+ _cb_gesture_tap_delay_timer,
+ runner);
+}
unsigned int state_smcb;
unsigned int type;
} effect;
+ struct
+ {
+ struct
+ {
+ Ecore_Timer *timer;
+ int fingers;
+ int repeats;
+ int current_repeats;
+ Eina_Bool pressed;
+ } tap;
+ } gesture;
} ev;
public:
Eina_Bool generateKeyPress(const char *key);
Eina_Bool generateKeyRelease(const char *key);
void generateKeyEvent(const char *keyname, double delay);
+ Eina_Bool generateTouchDown(int idx, int x, int y);
+ Eina_Bool generateTouchMove(int idx, int x, int y);
+ Eina_Bool generateTouchUp(int idx, int x, int y);
Eina_Bool setSplashLaunch(const char *path, int type);
Eina_Bool setSplashOwner();
Eina_Bool setWindowEffectType(etWin *tw, E_TC_Window_Effect_type type);
E_TC_EVENT_TYPE_INPUT_EVAS_KEY,
E_TC_EVENT_TYPE_EFFECT_EVAS_CB,
E_TC_EVENT_TYPE_EFFECT,
+ E_TC_EVENT_TYPE_GESTURE_TAP,
E_TC_EVENT_TYPE_MAX
} E_TC_Event_Type;
Eina_Bool retry;
} Window_Info_List;
+# define EFL_UTIL_RETURN_TO_STRING(type) \
+ ((type == EFL_UTIL_ERROR_NONE)?"None": \
+ (type == EFL_UTIL_ERROR_INVALID_PARAMETER)?"Invalid parameter": \
+ (type == EFL_UTIL_ERROR_OUT_OF_MEMORY)?"Out of memory": \
+ (type == EFL_UTIL_ERROR_PERMISSION_DENIED)?"Permission denied": \
+ (type == EFL_UTIL_ERROR_NO_SUCH_DEVICE)?"No such device": \
+ (type == EFL_UTIL_ERROR_INVALID_OPERATION)?"Invalid operation": \
+ (type == EFL_UTIL_ERROR_NOT_SUPPORTED)?"Not supported": \
+ (type == EFL_UTIL_ERROR_NOT_SUPPORTED_WINDOW_TYPE)?"Not supported window type": \
+ (type == EFL_UTIL_ERROR_SCREENSHOT_INIT_FAIL)?"Screenshot init fail": \
+ (type == EFL_UTIL_ERROR_SCREENSHOT_EXECUTION_FAIL)?"Screenshot execution fail": \
+ (type == EFL_UTIL_ERROR_NO_RESOURCE_AVAILABLE)?"No resource available": \
+ "Unknown") \
+
#endif // end of E_TC_MAIN_H
#ifdef __cplusplus
etRunner::get().ev.key.name = NULL;
etRunner::get().ev.win = NULL;
}
+
+TEST_F(etTestInput, gesture_tap22)
+{
+ int ret = EFL_UTIL_ERROR_NONE;
+ efl_util_gesture_h gesture_h;
+ efl_util_gesture_data tap_d;
+
+ gesture_h = efl_util_gesture_initialize();
+ ASSERT_TRUE(gesture_h != NULL) << "failed to initiation gesture system";
+
+ tap_d = efl_util_gesture_tap_new(gesture_h, 2, 2);
+ ASSERT_TRUE(tap_d != NULL) << "failed to generate tap grab data";
+
+ ret = efl_util_gesture_grab(gesture_h, tap_d);
+ ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to grab tap gesture: (ret: "
+ << EFL_UTIL_RETURN_TO_STRING(ret) << ")";
+
+ etRunner::get().ev.gesture.tap.fingers = 2;
+ etRunner::get().ev.gesture.tap.repeats = 2;
+
+ ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_GESTURE_TAP);
+ ASSERT_TRUE(ret);
+
+ etRunner::get().ev.gesture.tap.fingers = 0;
+ etRunner::get().ev.gesture.tap.repeats = 0;
+
+ ret = efl_util_gesture_ungrab(gesture_h, tap_d);
+ ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to ungrab tap gesture: (ret: "
+ << EFL_UTIL_RETURN_TO_STRING(ret) << ")";
+
+ efl_util_gesture_tap_free(gesture_h, tap_d);
+ ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to free tap grab data: (ret: "
+ << EFL_UTIL_RETURN_TO_STRING(ret) << ")";
+}
+
+TEST_F(etTestInput, gesture_tap23)
+{
+ int ret = EFL_UTIL_ERROR_NONE;
+ efl_util_gesture_h gesture_h;
+ efl_util_gesture_data tap_d;
+
+ gesture_h = efl_util_gesture_initialize();
+ ASSERT_TRUE(gesture_h != NULL) << "failed to initiation gesture system";
+
+ tap_d = efl_util_gesture_tap_new(gesture_h, 2, 3);
+ ASSERT_TRUE(tap_d != NULL) << "failed to generate tap grab data";
+
+ ret = efl_util_gesture_grab(gesture_h, tap_d);
+ ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to grab tap gesture: (ret: "
+ << EFL_UTIL_RETURN_TO_STRING(ret) << ")";
+
+ etRunner::get().ev.gesture.tap.fingers = 2;
+ etRunner::get().ev.gesture.tap.repeats = 3;
+
+ ret = etRunner::get().waitEvent(E_TC_EVENT_TYPE_GESTURE_TAP);
+ ASSERT_TRUE(ret);
+
+ etRunner::get().ev.gesture.tap.fingers = 0;
+ etRunner::get().ev.gesture.tap.repeats = 0;
+
+ ret = efl_util_gesture_ungrab(gesture_h, tap_d);
+ ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to ungrab tap gesture: (ret: "
+ << EFL_UTIL_RETURN_TO_STRING(ret) << ")";
+
+ efl_util_gesture_tap_free(gesture_h, tap_d);
+ ASSERT_TRUE(ret == EFL_UTIL_ERROR_NONE) << "failed to free tap grab data: (ret: "
+ << EFL_UTIL_RETURN_TO_STRING(ret) << ")";
+}
\ No newline at end of file