lib/efl/interfaces/efl_ui_spin.eo \
lib/efl/interfaces/efl_ui_progress.eo \
lib/efl/interfaces/efl_event.eo \
+ lib/efl/interfaces/efl_input_interface.eo \
lib/efl/interfaces/efl_input_state.eo \
$(efl_eolian_legacy_files) \
$(NULL)
EVENT_XY_SET(ev, y, ee->w + fh - x - 1, y, ee->w + fh - mx - 1, fx, fy);
}
+static const Eo_Event_Description *
+_event_description_get(Efl_Pointer_Action action)
+{
+ switch (action)
+ {
+ case EFL_POINTER_ACTION_MOVE:
+ return EFL_EVENT_POINTER_MOVE;
+ case EFL_POINTER_ACTION_DOWN:
+ return EFL_EVENT_POINTER_DOWN;
+ case EFL_POINTER_ACTION_UP:
+ return EFL_EVENT_POINTER_UP;
+ case EFL_POINTER_ACTION_CANCEL:
+ return EFL_EVENT_POINTER_CANCEL;
+ case EFL_POINTER_ACTION_IN:
+ return EFL_EVENT_POINTER_IN;
+ case EFL_POINTER_ACTION_OUT:
+ return EFL_EVENT_POINTER_OUT;
+ case EFL_POINTER_ACTION_WHEEL:
+ return EFL_EVENT_POINTER_WHEEL;
+ default: return NULL;
+ }
+}
+
static Eina_Bool
_direct_mouse_updown(Ecore_Evas *ee, const Ecore_Event_Mouse_Button *info, Efl_Pointer_Action action)
{
ev->pressure = info->multi.pressure;
ev->angle = info->multi.angle - ee->rotation;
- eo_event_callback_call(e, EVAS_CANVAS_EVENT_POINTER, evt);
+ eo_event_callback_call(e, _event_description_get(ev->action), evt);
processed = ev->evas_done;
eo_unref(evt);
ev->pressure = info->multi.pressure;
ev->angle = info->multi.angle - ee->rotation;
- eo_event_callback_call(e, EVAS_CANVAS_EVENT_POINTER, evt);
+ eo_event_callback_call(e, _event_description_get(ev->action), evt);
processed = ev->evas_done;
eo_unref(evt);
ev->wheel.z = info->z;
ev->wheel.dir = info->direction ? EFL_ORIENT_HORIZONTAL : EFL_ORIENT_VERTICAL;
- eo_event_callback_call(e, EVAS_CANVAS_EVENT_POINTER, evt);
+ eo_event_callback_call(e, _event_description_get(ev->action), evt);
processed = ev->evas_done;
eo_unref(evt);
ev->timestamp = info->timestamp;
_pointer_position_set(ev, ee, info->x, info->y, info->x, info->y);
- eo_event_callback_call(e, EVAS_CANVAS_EVENT_POINTER, evt);
+ eo_event_callback_call(e, _event_description_get(ev->action), evt);
processed = ev->evas_done;
eo_unref(evt);
#include "interfaces/efl_event_types.eot.h"
#include "interfaces/efl_input_device.eo.h"
#include "interfaces/efl_input_state.eo.h"
+#include "interfaces/efl_input_interface.eo.h"
#include "interfaces/efl_event.eo.h"
#else
}
}
}
- events {
- /* FIXME: eolian thinks there's a cyclic dependency here. wtf */
- pointer /*: Efl.Pointer.Event*/; [[New generic pointer (mouse, finger, pen...) event.]]
- }
}
--- /dev/null
+interface Efl.Input.Interface ()
+{
+ [[An object implementing this interface can send pointer events.
+
+ Windows and canvas objects may send input events.
+ ]]
+ event_prefix: efl;
+ events {
+ pointer,move: Efl.Pointer.Event;
+ pointer,down: Efl.Pointer.Event;
+ pointer,up: Efl.Pointer.Event;
+ pointer,cancel: Efl.Pointer.Event;
+ pointer,in: Efl.Pointer.Event;
+ pointer,out: Efl.Pointer.Event;
+ pointer,wheel: Efl.Pointer.Event;
+ }
+}
#include "interfaces/efl_event.eo.c"
#include "interfaces/efl_input_state.eo.c"
+#include "interfaces/efl_input_interface.eo.c"
EAPI void
__efl_internal_init(void)
Eo *win = data;
Eo *evt = ev->info;
- eo_event_callback_call(win, EFL_GFX_EVENT_POINTER, evt);
+ eo_event_callback_call(win, ev->desc, evt);
return EO_CALLBACK_CONTINUE;
}
EO_CALLBACKS_ARRAY_DEFINE(_elm_win_evas_forward_callbacks,
- { EVAS_CANVAS_EVENT_POINTER, _evas_event_pointer_cb })
+{ EFL_EVENT_POINTER_MOVE, _evas_event_pointer_cb },
+{ EFL_EVENT_POINTER_DOWN, _evas_event_pointer_cb },
+{ EFL_EVENT_POINTER_UP, _evas_event_pointer_cb },
+{ EFL_EVENT_POINTER_IN, _evas_event_pointer_cb },
+{ EFL_EVENT_POINTER_OUT, _evas_event_pointer_cb },
+{ EFL_EVENT_POINTER_CANCEL, _evas_event_pointer_cb },
+{ EFL_EVENT_POINTER_WHEEL, _evas_event_pointer_cb })
static void
_deferred_ecore_evas_free(void *data)
class Elm.Win (Elm.Widget, Elm.Interface.Atspi.Window,
Elm.Interface.Atspi_Widget_Action, Efl.Pack,
- Efl.Input.State)
+ Efl.Input.State, Efl.Input.Interface)
{
legacy_prefix: elm_win;
eo_prefix: elm_obj_win;
} _eo_evas_object_cb_info;
static inline void *
-_pointer_event_get(const _eo_evas_object_cb_info *info, const Eo_Event *event)
+_pointer_event_get(const _eo_evas_object_cb_info *info, const Eo_Event *event,
+ const Eo_Event_Description **pdesc)
{
if (!info->data) return NULL;
/* See also evas_events.c: _pointer_event_create() */
-#define EV_CASE(TYPE, Type) \
- case EVAS_CALLBACK_ ## TYPE: return ((Evas_Event_ ## Type *) event->info)->reserved
+#define EV_CASE(TYPE, NEWTYPE, Type) \
+ case EVAS_CALLBACK_ ## TYPE: \
+ *pdesc = EFL_EVENT_POINTER_ ## NEWTYPE; \
+ return ((Evas_Event_ ## Type *) event->info)->reserved
switch (info->type)
{
- EV_CASE(MOUSE_MOVE, Mouse_Move);
- EV_CASE(MOUSE_OUT, Mouse_Out);
- EV_CASE(MOUSE_IN, Mouse_In);
- EV_CASE(MOUSE_DOWN, Mouse_Down);
- EV_CASE(MOUSE_UP, Mouse_Up);
- EV_CASE(MULTI_MOVE, Multi_Move);
- EV_CASE(MULTI_DOWN, Multi_Down);
- EV_CASE(MULTI_UP, Multi_Up);
- EV_CASE(MOUSE_WHEEL, Mouse_Wheel);
+ EV_CASE(MOUSE_MOVE, MOVE, Mouse_Move);
+ EV_CASE(MOUSE_OUT, OUT, Mouse_Out);
+ EV_CASE(MOUSE_IN, IN, Mouse_In);
+ EV_CASE(MOUSE_DOWN, DOWN, Mouse_Down);
+ EV_CASE(MOUSE_UP, UP, Mouse_Up);
+ EV_CASE(MULTI_MOVE, MOVE, Multi_Move);
+ EV_CASE(MULTI_DOWN, DOWN, Multi_Down);
+ EV_CASE(MULTI_UP, UP, Multi_Up);
+ EV_CASE(MOUSE_WHEEL, WHEEL, Mouse_Wheel);
default: return NULL;
}
#undef EV_CASE
_eo_evas_object_cb(void *data, const Eo_Event *event)
{
_eo_evas_object_cb_info *info = data;
- void *pe = _pointer_event_get(info, event);
- if (pe)
- {
- DBG("triggering eo pointer event!");
- eo_event_callback_call(event->object, EFL_GFX_EVENT_POINTER, pe);
- }
+ const Eo_Event_Description *desc;
+ void *pe = _pointer_event_get(info, event, &desc);
+ if (pe) eo_event_callback_call(event->object, desc, pe);
if (info->func) info->func(info->data, evas_object_evas_get(event->object), event->object, event->info);
return EINA_TRUE;
}
import evas_types;
import efl_event_types;
-class Evas.Canvas (Eo.Base, Evas.Common_Interface, Efl.Animator)
+class Evas.Canvas (Eo.Base, Evas.Common_Interface, Efl.Animator,
+ Efl.Input.Interface)
{
legacy_prefix: evas;
data: Evas_Public_Data;
device,changed;
axis,update;
viewport,resize;
- pointer: Efl.Pointer.Event; [[Generic pointer event (mouse, finger...)]]
}
}
if (!ev) return EO_CALLBACK_CONTINUE;
- /* TODO:
- * - implement legacy over eo instead of this (hardcore)
- */
-
ev->evas_done = EINA_TRUE;
ev->modifiers = &e->modifiers;
ev->locks = &e->locks;
return EO_CALLBACK_CONTINUE;
}
+EO_CALLBACKS_ARRAY_DEFINE(_evas_canvas_event_pointer_callbacks,
+{ EFL_EVENT_POINTER_MOVE, _evas_canvas_event_pointer_cb },
+{ EFL_EVENT_POINTER_DOWN, _evas_canvas_event_pointer_cb },
+{ EFL_EVENT_POINTER_UP, _evas_canvas_event_pointer_cb },
+{ EFL_EVENT_POINTER_IN, _evas_canvas_event_pointer_cb },
+{ EFL_EVENT_POINTER_OUT, _evas_canvas_event_pointer_cb },
+{ EFL_EVENT_POINTER_CANCEL, _evas_canvas_event_pointer_cb },
+{ EFL_EVENT_POINTER_WHEEL, _evas_canvas_event_pointer_cb })
+
void
_evas_canvas_event_init(Evas *eo_e, Evas_Public_Data *e)
{
- eo_event_callback_add(eo_e, EVAS_CANVAS_EVENT_POINTER, _evas_canvas_event_pointer_cb, e);
+ eo_event_callback_array_add(eo_e, _evas_canvas_event_pointer_callbacks(), e);
}
void
_evas_canvas_event_shutdown(Evas *eo_e, Evas_Public_Data *e)
{
- eo_event_callback_del(eo_e, EVAS_CANVAS_EVENT_POINTER, _evas_canvas_event_pointer_cb, e);
+ eo_event_callback_array_del(eo_e, _evas_canvas_event_pointer_callbacks(), e);
}
if (!ev || !event_info) return EINA_FALSE;
/* FIXME/TODO:
- *
- * Some things that are not supported or should be eo-ified somehow
- *
- * 1. Lock
- * 2. Modifiers
- * 3. data
- *
* Some events definitely don't have all the info they could have. Need
* to get it from ecore!
*/
-#warning Modifiers and locks not supported yet - very bad!
-
#if defined(DEBUG)
# define CHKACT(a) do { if (evdata->action != EFL_POINTER_ACTION_ ## a) abort(); } while (0)
#else
import evas_types;
-abstract Evas.Object (Eo.Base, Evas.Common_Interface, Efl.Gfx, Efl.Gfx.Stack, Efl.Animator)
+abstract Evas.Object (Eo.Base, Evas.Common_Interface, Efl.Gfx, Efl.Gfx.Stack,
+ Efl.Animator, Efl.Input.Interface)
{
legacy_prefix: evas_object;
eo_prefix: evas_obj;
Efl.Gfx.Stack.lower;
}
events {
+ /* FIXME: remove events from Efl.Input.Interface */
mouse,in; [[Mouse In Event ]]
mouse,out; [[Mouse Out Event ]]
mouse,down; [[Mouse Button Down Event ]]