#define RAD_270DEG (M_PI_2 * 3)
#define RAD_360DEG (M_PI * 2)
-#define COPY_EVENT_INFO(P, EV) do { \
- P = malloc(sizeof(*EV)); \
- memcpy(P, EV, sizeof(*EV)); \
-} while (0)
+static void *
+_glayer_bufdup(void *buf, size_t size)
+{
+ void *p;
+ p = malloc(size);
+ memcpy(p, buf, size);
+ return p;
+}
+#define COPY_EVENT_INFO(EV) _glayer_bufdup(EV, sizeof(*EV))
#define SET_TEST_BIT(P) do { \
Gesture_Info *gesture[ELM_GESTURE_LAST];
Ecore_Timer *dbl_timeout; /* When this expires, dbl click/taps ABORTed */
- Eina_List *touched; /* List of devices with currently touched */
+ Eina_List *pending; /* List of devices need to refeed *UP event */
+ int touched; /* Int containing number of touched devices */
Eina_Bool repeat_events : 1;
};
static void _event_history_clear(Evas_Object *obj);
static void _reset_states(Widget_Data *wd);
-static void _mouse_in(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info);
-static void _mouse_out(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info);
+static void _key_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info);
static void _key_up_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info);
static void _zoom_with_wheel_test(Evas_Object *obj, void *event_info, Evas_Callback_Type event_type, Elm_Gesture_Types g_type);
static void _mouse_wheel(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info);
/**
* @internal
*
+ * Get event flag
+ * @param event_info pointer to event.
+ *
+ * @ingroup Elm_Gesture_Layer
+ */
+static Evas_Event_Flags
+_get_event_flag(void *event_info, Evas_Callback_Type event_type)
+{
+ switch(event_type)
+ {
+ case EVAS_CALLBACK_MOUSE_IN:
+ return ((Evas_Event_Mouse_In *) event_info)->event_flags;
+ case EVAS_CALLBACK_MOUSE_OUT:
+ return ((Evas_Event_Mouse_Out *) event_info)->event_flags;
+ case EVAS_CALLBACK_MOUSE_DOWN:
+ return ((Evas_Event_Mouse_Down *) event_info)->event_flags;
+ case EVAS_CALLBACK_MOUSE_MOVE:
+ return ((Evas_Event_Mouse_Move *) event_info)->event_flags;
+ case EVAS_CALLBACK_MOUSE_UP:
+ return ((Evas_Event_Mouse_Up *) event_info)->event_flags;
+ case EVAS_CALLBACK_MOUSE_WHEEL:
+ return ((Evas_Event_Mouse_Wheel *) event_info)->event_flags;
+ case EVAS_CALLBACK_MULTI_DOWN:
+ return ((Evas_Event_Multi_Down *) event_info)->event_flags;
+ case EVAS_CALLBACK_MULTI_MOVE:
+ return ((Evas_Event_Multi_Move *) event_info)->event_flags;
+ case EVAS_CALLBACK_MULTI_UP:
+ return ((Evas_Event_Multi_Up *) event_info)->event_flags;
+ case EVAS_CALLBACK_KEY_DOWN:
+ return ((Evas_Event_Key_Down *) event_info)->event_flags;
+ case EVAS_CALLBACK_KEY_UP:
+ return ((Evas_Event_Key_Up *) event_info)->event_flags;
+ default:
+ return EVAS_EVENT_FLAG_NONE;
+ }
+}
+
+/**
+ * @internal
+ *
* Sets event flag to value returned from user callback
* @param wd Widget Data
* @param event_info pointer to event.
{
switch(event_type)
{
- case EVAS_CALLBACK_MOUSE_IN:
- ((Evas_Event_Mouse_In *) event_info)->event_flags |= ev_flags;
- break;
- case EVAS_CALLBACK_MOUSE_OUT:
- ((Evas_Event_Mouse_Out *) event_info)->event_flags |= ev_flags;
- break;
case EVAS_CALLBACK_MOUSE_DOWN:
((Evas_Event_Mouse_Down *) event_info)->event_flags |= ev_flags;
break;
case EVAS_CALLBACK_MULTI_UP:
((Evas_Event_Multi_Up *) event_info)->event_flags |= ev_flags;
break;
+ case EVAS_CALLBACK_KEY_DOWN:
+ ((Evas_Event_Key_Down *) event_info)->event_flags |= ev_flags;
+ break;
case EVAS_CALLBACK_KEY_UP:
((Evas_Event_Key_Up *) event_info)->event_flags |= ev_flags;
break;
}
}
- if (reset_s && !all_undefined)
+// if ((!wd->touched) || (reset_s && !all_undefined))
+ /* (!wd->touched && reset_s) - don't stop zoom with mouse-wheel */
+ if ((!wd->touched && reset_s) || (reset_s && !all_undefined))
_event_history_clear(obj);
}
if(pe1.timestamp && (!pe.timestamp))
memcpy(&st->zoom_st1, &pe1, sizeof(Pointer_Event));
+
st->zoom_tolerance = wd->zoom_tolerance;
st->info.zoom = 1.0;
}
if (wd->target)
{
- evas_object_event_callback_add(wd->target, EVAS_CALLBACK_MOUSE_IN,
- _mouse_in, obj);
- evas_object_event_callback_add(wd->target, EVAS_CALLBACK_MOUSE_OUT,
- _mouse_out, obj);
-
evas_object_event_callback_add(wd->target, EVAS_CALLBACK_MOUSE_DOWN,
_mouse_down, obj);
evas_object_event_callback_add(wd->target, EVAS_CALLBACK_MOUSE_MOVE,
evas_object_event_callback_add(wd->target, EVAS_CALLBACK_MULTI_UP,
_multi_up, obj);
+ evas_object_event_callback_add(wd->target, EVAS_CALLBACK_KEY_DOWN, _key_down_cb, obj);
evas_object_event_callback_add(wd->target, EVAS_CALLBACK_KEY_UP, _key_up_cb, obj);
}
}
if (wd->target)
{
- evas_object_event_callback_del(wd->target, EVAS_CALLBACK_MOUSE_IN,
- _mouse_in);
- evas_object_event_callback_del(wd->target, EVAS_CALLBACK_MOUSE_OUT,
- _mouse_out);
-
evas_object_event_callback_del(wd->target, EVAS_CALLBACK_MOUSE_DOWN,
_mouse_down);
evas_object_event_callback_del(wd->target, EVAS_CALLBACK_MOUSE_MOVE,
evas_object_event_callback_del(wd->target, EVAS_CALLBACK_MULTI_UP,
_multi_up);
+ evas_object_event_callback_del(wd->target, EVAS_CALLBACK_KEY_DOWN, _key_down_cb);
evas_object_event_callback_del(wd->target, EVAS_CALLBACK_KEY_UP, _key_up_cb);
}
}
/* START - Event history list handling functions */
/**
* @internal
+ * This function is used to find if device number
+ * is found in a list of devices.
+ * The list contains devices for refeeding *UP event
+ *
+ * @ingroup Elm_Gesture_Layer
+ */
+static int
+device_in_list(const void *data1, const void *data2)
+{ /* Compare the two device numbers */
+ return (((int) data1) - ((int) data2));
+}
+
+/**
+ * @internal
+ *
+ * This functions adds device to refeed-pending device list
+ * @ingroup Elm_Gesture_Layer
+ */
+static Eina_List *
+_add_device_pending(Eina_List *list, void *event, Evas_Callback_Type event_type)
+{
+ int device = ELM_MOUSE_DEVICE;
+ switch(event_type)
+ {
+ case EVAS_CALLBACK_MOUSE_DOWN:
+ break;
+ case EVAS_CALLBACK_MULTI_DOWN:
+ device = ((Evas_Event_Multi_Down *) event)->device;
+ break;
+ default:
+ return list;
+ }
+
+ if (!eina_list_search_unsorted_list(list, device_in_list, (void *) device))
+ {
+ printf("%s ======> Added <%d>\n", __func__, device);
+ return eina_list_append(list, (void *) device);
+ }
+
+ return list;
+}
+
+/**
+ * @internal
+ *
+ * This functions returns pending-device node
+ * @ingroup Elm_Gesture_Layer
+ */
+static Eina_List *
+_device_is_pending(Eina_List *list, void *event, Evas_Callback_Type event_type)
+{
+ int device = ELM_MOUSE_DEVICE;
+ switch(event_type)
+ {
+ case EVAS_CALLBACK_MOUSE_UP:
+ break;
+ case EVAS_CALLBACK_MULTI_UP:
+ device = ((Evas_Event_Multi_Up *) event)->device;
+ break;
+ default:
+ return NULL;
+ }
+
+ return eina_list_search_unsorted_list(list, device_in_list, (void *) device);
+}
+
+/**
+ * @internal
*
* This function reports ABORT to all none-detected gestures
* Then resets test bits for all desired gesures
{
Event_History *t;
t = wd->event_history_list;
+ Eina_List *pending = _device_is_pending(wd->pending, wd->event_history_list->event, wd->event_history_list->event_type);
/* Refeed events if no gesture matched input */
- if ((!gesture_found) && (!wd->repeat_events))
- evas_event_refeed_event(e, wd->event_history_list->event,
- wd->event_history_list->event_type);
+ if (pending || ((!gesture_found) && (!wd->repeat_events)))
+ {
+ evas_event_refeed_event(e, wd->event_history_list->event, wd->event_history_list->event_type);
+
+ if(pending)
+ {
+ wd->pending = eina_list_remove_list(wd->pending, pending);
+ int device = ELM_MOUSE_DEVICE;
+ if(wd->event_history_list->event_type == EVAS_CALLBACK_MULTI_UP)
+ device = ((Evas_Event_Multi_Up *) (wd->event_history_list->event))->device;
+ printf("%s ======> Removed <%d>\n", __func__, device);
+ }
+ else
+ wd->pending = _add_device_pending(wd->pending, wd->event_history_list->event, wd->event_history_list->event_type);
+ }
free(wd->event_history_list->event);
wd->event_history_list = (Event_History *) eina_inlist_remove(
_register_callbacks(obj);
}
+/**
+ * @internal
+ *
+ * This function copies input events.
+ * We copy event info before adding it to history.
+ * The memory is freed when we clear history.
+ *
+ * @param event the event to copy
+ * @param event_type event type to copy
+ *
+ * @ingroup Elm_Gesture_Layer
+ */
+static void *
+_copy_event_info(void *event, Evas_Callback_Type event_type)
+{
+ switch(event_type)
+ {
+ case EVAS_CALLBACK_MOUSE_DOWN:
+ return COPY_EVENT_INFO((Evas_Event_Mouse_Down *) event);
+ break;
+ case EVAS_CALLBACK_MOUSE_MOVE:
+ return COPY_EVENT_INFO((Evas_Event_Mouse_Move *) event);
+ break;
+ case EVAS_CALLBACK_MOUSE_UP:
+ return COPY_EVENT_INFO((Evas_Event_Mouse_Up *) event);
+ break;
+ case EVAS_CALLBACK_MOUSE_WHEEL:
+ return COPY_EVENT_INFO((Evas_Event_Mouse_Wheel *) event);
+ break;
+ case EVAS_CALLBACK_MULTI_DOWN:
+ return COPY_EVENT_INFO((Evas_Event_Multi_Down *) event);
+ break;
+ case EVAS_CALLBACK_MULTI_MOVE:
+ return COPY_EVENT_INFO((Evas_Event_Multi_Move *) event);
+ break;
+ case EVAS_CALLBACK_MULTI_UP:
+ return COPY_EVENT_INFO((Evas_Event_Multi_Up *) event);
+ break;
+ case EVAS_CALLBACK_KEY_DOWN:
+ return COPY_EVENT_INFO((Evas_Event_Key_Down *) event);
+ break;
+ case EVAS_CALLBACK_KEY_UP:
+ return COPY_EVENT_INFO((Evas_Event_Key_Up *) event);
+ break;
+ default:
+ return NULL;
+ }
+}
+
static Eina_Bool
_event_history_add(Evas_Object *obj, void *event, Evas_Callback_Type event_type)
{
if (!wd) return EINA_FALSE;
ev = malloc(sizeof(Event_History));
- ev->event = event;
+ ev->event = _copy_event_info(event, event_type); /* Freed on event_history_clear */
ev->event_type = event_type;
wd->event_history_list = (Event_History *) eina_inlist_append(
EINA_INLIST_GET(wd->event_history_list), EINA_INLIST_GET(ev));
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
- eina_list_free(wd->touched);
_event_history_clear(obj);
+ eina_list_free(wd->pending);
if (!elm_widget_disabled_get(obj))
_unregister_callbacks(obj);
if (!gesture ) return;
if((gesture->state == ELM_GESTURE_STATE_UNDEFINED) &&
- eina_list_count(wd->touched))
+ wd->touched)
return; /* user left a finger on device, do NOT start */
Taps_Type *st = gesture->data;
if (!gesture ) return;
if((gesture->state == ELM_GESTURE_STATE_UNDEFINED) &&
- eina_list_count(wd->touched))
+ wd->touched)
return; /* user left a finger on device, do NOT start */
Momentum_Type *st = gesture->data;
if (!gesture ) return;
if((gesture->state == ELM_GESTURE_STATE_UNDEFINED) &&
- eina_list_count(wd->touched))
+ wd->touched)
return; /* user left a finger on device, do NOT start */
Line_Type *st = gesture->data;
/**
* @internal
*
- * This function manges a list of devices that are currently touched
- * when a *DOWN event for a device comes, we add it to the list
- * When a *UP event for a device comes, we remove it from list
- *
- * @param list Pointer to device list.
- * @param device What device to add or remove from list
- * @param add When TRUE means - add to list, otherwise remove
- *
- * @return The new pointer to list head
- * @ingroup Elm_Gesture_Layer
- */
-static Eina_List *
-_manage_device_list(Eina_List *list, int device, Eina_Bool add)
-{
- Eina_List *l;
- void *data;
-
- if (add)
- return eina_list_append(list, (void *) device);
- else
- EINA_LIST_FOREACH(list, l, data)
- { /* Remove device from list if found */
- if(device == (int) data)
- return eina_list_remove_list(list, l);
- }
-
- return list;
-}
-
-/**
- * @internal
- *
* This function is used to save input events in an abstract struct
* to be used later by getsure-testing functions.
*
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
- _event_history_add(data, event_info, event_type);
/* Start testing candidate gesture from here */
if (_make_pointer_event(data, event_info, event_type, &_pe))
pe = &_pe;
if (IS_TESTED(ELM_GESTURE_ROTATE))
_rotate_test(data, pe, event_info, event_type, ELM_GESTURE_ROTATE);
- /* Report current states and clear history if needed */
- _clear_if_finished(data);
+ if (_get_event_flag(event_info, event_type) & EVAS_EVENT_FLAG_ON_HOLD)
+ _event_history_add(data, event_info, event_type);
+ else if ((event_type == EVAS_CALLBACK_MOUSE_UP) ||
+ (event_type == EVAS_CALLBACK_MULTI_UP))
+ {
+ Eina_List *pending = _device_is_pending(wd->pending, event_info, event_type);
+ if (pending)
+ {
+ consume_event(wd, event_info, event_type, EVAS_EVENT_FLAG_ON_HOLD);
+ _event_history_add(data, event_info, event_type);
+ }
+ }
/* we maintain list of touched devices*/
if ((event_type == EVAS_CALLBACK_MOUSE_DOWN) ||
(event_type == EVAS_CALLBACK_MULTI_DOWN))
- wd->touched = _manage_device_list(wd->touched, pe->device, EINA_TRUE);
- else
- if ((event_type == EVAS_CALLBACK_MOUSE_UP) ||
- (event_type == EVAS_CALLBACK_MULTI_UP))
- wd->touched = _manage_device_list(wd->touched, pe->device, EINA_FALSE);
+ {
+ wd->touched++;
+ printf("%s touched=<%d>\n", __func__, wd->touched);
+ }
+ else if ((event_type == EVAS_CALLBACK_MOUSE_UP) ||
+ (event_type == EVAS_CALLBACK_MULTI_UP))
+ {
+ wd->touched--;
+ printf("%s touched=<%d>\n", __func__, wd->touched);
+ }
+
+ /* Report current states and clear history if needed */
+ _clear_if_finished(data);
}
+
/**
- * For all _mouse_* / multi_* functions we copy event information
- * to newly allocated memory space with COPY_EVENT_INFO macro.
- * then send this event to _event_process function where
- * it is saved in events-history list and processes.
- * The allocated memeory is cleared in event_history_clear()
+ * For all _mouse_* / multi_* functions wethen send this event to
+ * _event_process function.
*
* @param data The gesture-layer object.
* @param event_info Pointer to recent input event.
* @ingroup Elm_Gesture_Layer
*/
static void
-_mouse_in(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
- void *event_info)
-{
- Widget_Data *wd = elm_widget_data_get(data);
- if (!wd) return;
-
- Evas_Event_Mouse_In *p, *ev = event_info;
- COPY_EVENT_INFO(p, ev);
- _event_process(data, obj, (void *) p, EVAS_CALLBACK_MOUSE_IN);
-
-#if defined(DEBUG_GESTURE_LAYER)
- printf("%s %d %d\n", __func__, p->canvas.x, p->canvas.y);
-#endif
-}
-
-static void
-_mouse_out(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
+_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
void *event_info)
{
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
+printf("---- %s ----\n", __func__);
+ if (((Evas_Event_Mouse_Down *) event_info)->button != 1) /* We only process left-click at the moment */
+ return;
- Evas_Event_Mouse_Out *p, *ev = event_info;
- COPY_EVENT_INFO(p, ev);
- _event_process(data, obj, (void *) p, EVAS_CALLBACK_MOUSE_OUT);
-#if defined(DEBUG_GESTURE_LAYER)
- printf("%s %d %d\n", __func__, p->canvas.x, p->canvas.y);
-#endif
+ _event_process(data, obj, event_info, EVAS_CALLBACK_MOUSE_DOWN);
}
static void
-_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
+_mouse_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
void *event_info)
{
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
- Evas_Event_Mouse_Down *p, *ev = event_info;
- if (ev->button != 1) /* We only process left-click at the moment */
- return;
-
- COPY_EVENT_INFO(p, ev);
- _event_process(data, obj, (void *) p, EVAS_CALLBACK_MOUSE_DOWN);
-#if defined(DEBUG_GESTURE_LAYER)
- printf("%s %d %d\n", __func__, p->canvas.x, p->canvas.y);
-#endif
+ _event_process(data, obj, event_info, EVAS_CALLBACK_MOUSE_MOVE);
}
static void
-_mouse_move(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
+_key_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
void *event_info)
{
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
- Evas_Event_Mouse_Move *p, *ev = event_info;
-
- COPY_EVENT_INFO(p, ev);
- _event_process(data, obj, (void *) p, EVAS_CALLBACK_MOUSE_MOVE);
-#if defined(DEBUG_GESTURE_LAYER)
- printf("%s %d %d\n", __func__, p->cur.canvas.x, p->cur.canvas.y);
-#endif
+ _event_process(data, obj, event_info, EVAS_CALLBACK_KEY_DOWN);
}
static void
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
- Evas_Event_Key_Up *p, *ev = event_info;
-
- COPY_EVENT_INFO(p, ev);
- _event_process(data, obj, (void *) p, EVAS_CALLBACK_KEY_UP);
-
-#if defined(DEBUG_GESTURE_LAYER)
- printf("%s %s\n", __func__, p->keyname);
-#endif
+ _event_process(data, obj, event_info, EVAS_CALLBACK_KEY_UP);
}
static void
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
- Evas_Event_Mouse_Up *p, *ev = event_info;
- if (ev->button != 1) /* We only process left-click at the moment */
+printf("---- %s ----\n", __func__);
+ if (((Evas_Event_Mouse_Up *) event_info)->button != 1) /* We only process left-click at the moment */
return;
- COPY_EVENT_INFO(p, ev);
- _event_process(data, obj, (void *) p, EVAS_CALLBACK_MOUSE_UP);
-#if defined(DEBUG_GESTURE_LAYER)
- printf("%s %d %d\n", __func__, p->canvas.x, p->canvas.y);
-#endif
+ _event_process(data, obj, event_info, EVAS_CALLBACK_MOUSE_UP);
}
static void
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
- Evas_Event_Mouse_Wheel *p, *ev = event_info;
- COPY_EVENT_INFO(p, ev);
- _event_process(data, obj, (void *) p, EVAS_CALLBACK_MOUSE_WHEEL);
-#if defined(DEBUG_GESTURE_LAYER)
- printf("%s %d %d %d\n", __func__, p->canvas.x, p->canvas.y, p->z);
-#endif
+ _event_process(data, obj, event_info, EVAS_CALLBACK_MOUSE_WHEEL);
}
static void
{
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
+printf("---- %s ----\n", __func__);
- Evas_Event_Multi_Down *p, *ev = event_info;
- COPY_EVENT_INFO(p, ev);
- _event_process(data, obj, (void *) p, EVAS_CALLBACK_MULTI_DOWN);
-#if defined(DEBUG_GESTURE_LAYER)
- printf("%s %d\n", __func__, __LINE__);
- printf("radius=<%3.2f> radius_x=<%3.2f> radius_y=<%3.2f> device: <%d>\n",
- p->radius, p->radius_x, p->radius_y, p->device);
- printf("pressure<%3.2f> angle<%3.2f>\n", p->pressure, p->angle);
- printf("output.x=<%d> output.y=<%d>\n", p->output.x, p->output.y);
- printf("canvas.x=<%d> canvas.y=<%d> canvas.xsub=<%3.2f> canvas.ysub=<%3.2f>\n\n\n", p->canvas.x, p->canvas.y, p->canvas.xsub, p->canvas.ysub);
-#endif
+ _event_process(data, obj, event_info, EVAS_CALLBACK_MULTI_DOWN);
}
static void
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
- Evas_Event_Multi_Move *p, *ev = event_info;
- COPY_EVENT_INFO(p, ev);
- _event_process(data, obj, (void *) p, EVAS_CALLBACK_MULTI_MOVE);
-#if defined(DEBUG_GESTURE_LAYER)
- printf("%s %d\n", __func__, __LINE__);
- printf("radius=<%3.2f> radius_x=<%3.2f> radius_y=<%3.2f> device: <%d>\n", p->radius, p->radius_x, p->radius_y, p->device);
- printf("pressure<%3.2f> angle<%3.2f>\n", p->pressure, p->angle);
- printf("output.x=<%d> output.y=<%d>\n", p->cur.output.x, p->cur.output.y);
- printf("canvas.x=<%d> canvas.y=<%d> canvas.xsub=<%3.2f> canvas.ysub=<%3.2f>\n\n\n", p->cur.canvas.x, p->cur.canvas.y, p->cur.canvas.xsub, p->cur.canvas.ysub);
-#endif
+ _event_process(data, obj, event_info, EVAS_CALLBACK_MULTI_MOVE);
}
static void
{
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
+printf("---- %s ----\n", __func__);
- Evas_Event_Multi_Up *p, *ev = event_info;
- COPY_EVENT_INFO(p, ev);
- _event_process(data, obj, (void *) p, EVAS_CALLBACK_MULTI_UP);
-#if defined(DEBUG_GESTURE_LAYER)
- printf("%s %d\n", __func__, __LINE__);
- printf("radius=<%3.2f> radius_x=<%3.2f> radius_y=<%3.2f> device: <%d>\n", p->radius, p->radius_x, p->radius_y, p->device);
- printf("pressure<%3.2f> angle<%3.2f>\n", p->pressure, p->angle);
- printf("output.x=<%d> output.y=<%d>\n", p->output.x, p->output.y);
- printf("canvas.x=<%d> canvas.y=<%d> canvas.xsub=<%3.2f> canvas.ysub=<%3.2f>\n\n\n", p->canvas.x, p->canvas.y, p->canvas.xsub, p->canvas.ysub);
-#endif
+ _event_process(data, obj, event_info, EVAS_CALLBACK_MULTI_UP);
}
EAPI Eina_Bool