Evas_Object *gesture_rect; /**< Gesture rectangle */
unsigned int n_taps; /**< Number of fingers touching screen */
unsigned int event_time;
-
+ int angle;
struct {
gesture_state_e state; // current state of gesture
unsigned int timestamp[3]; // time of gesture;
static Cover *cover;
static Ecore_Event_Filter *ef;
+static Ecore_Event_Handler *eh;
static void _gesture_init(void);
static void _gesture_shutdown(void);
static void _hover_event_emit(Cover *cov, int state);
free(data);
}
+static Eina_Bool
+_rotation_cb_change_end(void *data, int type, void *event)
+{
+ E_Event_Client *ev = event;
+ E_Client *ec = ev->ec;
+ Cover *cov = data;
+ cov->angle = ec->e.state.rot.ang.curr;
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
static void _emit_mouse_move_event ( Ecore_Event_Mouse_Button *ev_btn)
{
Ecore_Event_Mouse_Move *ev_move;//that is because of the EFL bug. Mouse move event before mouse down, if move is not send before down then coordinates are not coming right for mouse down
ecore_event_add(ECORE_EVENT_MOUSE_MOVE, ev_move, NULL, NULL);
}
-static void _event_emit(Gesture g, int x, int y, int x_e, int y_e, int state, unsigned int event_time)
+void __transform_coordinates(int *ax, int *ay, int win_angle)
+{
+ int w, h, tmp;
+
+ ecore_wl_screen_size_get(&w, &h);
+ switch (win_angle) {
+ case 90:
+ tmp = *ax;
+ *ax = h - *ay;
+ *ay = tmp;
+ break;
+ case 270:
+ tmp = *ax;
+ *ax = *ay;
+ *ay = w - tmp;
+ break;
+ }
+}
+
+static void _event_emit(Gesture g, int x, int y, int x_e, int y_e, int state, unsigned int event_time, int angle)
{
Gesture_Info *info = calloc(sizeof(Gesture_Info), 1);
EINA_SAFETY_ON_NULL_RETURN(info);
+ __transform_coordinates(&x, &y, angle);
+ __transform_coordinates(&x_e, &y_e, angle);
+
info->type = g;
info->x_beg = x;
info->x_end = x_e;
if (cov->flick_gesture.n_fingers == 3)
type = THREE_FINGERS_FLICK_RIGHT_RETURN;
}
- _event_emit(type, ax, ay, axe, aye, 2, cov->event_time);
+ _event_emit(type, ax, ay, axe, aye, 2, cov->event_time, cov->angle);
}
static void
switch (cov->hover_gesture.n_fingers)
{
case 1:
- _event_emit(ONE_FINGER_HOVER, ax, ay, ax, ay, state, cov->event_time);
+ _event_emit(ONE_FINGER_HOVER, ax, ay, ax, ay, state, cov->event_time, cov->angle);
break;
case 2:
- _event_emit(TWO_FINGERS_HOVER, ax, ay, ax, ay, state, cov->event_time);
+ _event_emit(TWO_FINGERS_HOVER, ax, ay, ax, ay, state, cov->event_time, cov->angle);
break;
default:
break;
_event_emit(ONE_FINGER_SINGLE_TAP,
cov->tap_gesture_data.x_org[0], cov->tap_gesture_data.y_org[0],
cov->tap_gesture_data.x_org[0], cov->tap_gesture_data.y_org[0],
- 2, cov->event_time);
+ 2, cov->event_time, cov->angle);
}
else if(cov->tap_gesture_data.tap_type == TWO_FINGERS_GESTURE)
{
_event_emit(TWO_FINGERS_SINGLE_TAP,
cov->tap_gesture_data.x_org[0], cov->tap_gesture_data.y_org[0],
cov->tap_gesture_data.x_org[1], cov->tap_gesture_data.y_org[1],
- 2, cov->event_time);
+ 2, cov->event_time, cov->angle);
}
else if(cov->tap_gesture_data.tap_type == THREE_FINGERS_GESTURE)
{
_event_emit(THREE_FINGERS_SINGLE_TAP,
cov->tap_gesture_data.x_org[0], cov->tap_gesture_data.y_org[0],
cov->tap_gesture_data.x_org[2], cov->tap_gesture_data.y_org[2],
- 2, cov->event_time);
+ 2, cov->event_time, cov->angle);
}
else
{
_event_emit(ONE_FINGER_DOUBLE_TAP,
cov->tap_gesture_data.x_org[0], cov->tap_gesture_data.y_org[0],
cov->tap_gesture_data.x_org[0], cov->tap_gesture_data.y_org[0],
- 2, cov->event_time);
+ 2, cov->event_time, cov->angle);
}
else if(cov->tap_gesture_data.tap_type == TWO_FINGERS_GESTURE)
{
_event_emit(TWO_FINGERS_DOUBLE_TAP,
cov->tap_gesture_data.x_org[0], cov->tap_gesture_data.y_org[0],
cov->tap_gesture_data.x_org[1], cov->tap_gesture_data.y_org[1],
- 2, cov->event_time);
+ 2, cov->event_time, cov->angle);
}
else if(cov->tap_gesture_data.tap_type == THREE_FINGERS_GESTURE)
{
_event_emit(THREE_FINGERS_DOUBLE_TAP,
cov->tap_gesture_data.x_org[0], cov->tap_gesture_data.y_org[0],
cov->tap_gesture_data.x_org[2], cov->tap_gesture_data.y_org[2],
- 2, cov->event_time);
+ 2, cov->event_time, cov->angle);
}
else
{
_event_emit(ONE_FINGER_TRIPLE_TAP,
cov->tap_gesture_data.x_org[0], cov->tap_gesture_data.y_org[0],
cov->tap_gesture_data.x_org[0], cov->tap_gesture_data.y_org[0],
- 2, cov->event_time);
+ 2, cov->event_time, cov->angle);
}
else if(cov->tap_gesture_data.tap_type == TWO_FINGERS_GESTURE)
{
_event_emit(TWO_FINGERS_TRIPLE_TAP,
cov->tap_gesture_data.x_org[0], cov->tap_gesture_data.y_org[0],
cov->tap_gesture_data.x_org[1], cov->tap_gesture_data.y_org[1],
- 2, cov->event_time);
+ 2, cov->event_time, cov->angle);
}
else if(cov->tap_gesture_data.tap_type == THREE_FINGERS_GESTURE)
{
_event_emit(THREE_FINGERS_TRIPLE_TAP,
cov->tap_gesture_data.x_org[0], cov->tap_gesture_data.y_org[0],
cov->tap_gesture_data.x_org[2], cov->tap_gesture_data.y_org[2],
- 2, cov->event_time);
+ 2, cov->event_time, cov->angle);
}
else
{
ef = ecore_event_filter_add(NULL, _event_filter, NULL, NULL);
if (!E_EVENT_ATSPI_GESTURE_DETECTED)
E_EVENT_ATSPI_GESTURE_DETECTED = ecore_event_type_new();
+ eh = ecore_event_handler_add(E_EVENT_CLIENT_ROTATION_CHANGE_END, _rotation_cb_change_end, (void*)cover);
}
static void
_events_shutdown(void)
{
ecore_event_filter_del(ef);
+ ecore_event_handler_del(eh);
}
static void
DEBUG("gesture init");
_gesture_init();
_events_init();
+ ecore_wl_init(NULL);
return 0;
}
_events_shutdown();
_gesture_shutdown();
+ ecore_wl_shutdown();
return 0;
}