forked from enlightenment/efl
patch from Lars Munch for abs input device support in ecore_fb
SVN revision: 39461
This commit is contained in:
parent
a63715c0c4
commit
fea71a8859
|
@ -291,7 +291,11 @@ _ecore_evas_fb_init(int w, int h)
|
||||||
if (ecore_evas_input_devices)
|
if (ecore_evas_input_devices)
|
||||||
{
|
{
|
||||||
/* Mouse */
|
/* Mouse */
|
||||||
|
#ifdef HAVE_TSLIB
|
||||||
if (caps & ECORE_FB_INPUT_DEVICE_CAP_RELATIVE)
|
if (caps & ECORE_FB_INPUT_DEVICE_CAP_RELATIVE)
|
||||||
|
#else
|
||||||
|
if ((caps & ECORE_FB_INPUT_DEVICE_CAP_RELATIVE) || (caps & ECORE_FB_INPUT_DEVICE_CAP_ABSOLUTE))
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
ecore_fb_input_device_axis_size_set(device, w, h);
|
ecore_fb_input_device_axis_size_set(device, w, h);
|
||||||
ecore_fb_input_device_listen(device,1);
|
ecore_fb_input_device_listen(device,1);
|
||||||
|
|
|
@ -258,15 +258,15 @@ _ecore_fb_li_device_event_rel(Ecore_Fb_Input_Device *dev, struct input_event *ie
|
||||||
static void
|
static void
|
||||||
_ecore_fb_li_device_event_abs(Ecore_Fb_Input_Device *dev, struct input_event *iev)
|
_ecore_fb_li_device_event_abs(Ecore_Fb_Input_Device *dev, struct input_event *iev)
|
||||||
{
|
{
|
||||||
|
static int prev_pressure = 0;
|
||||||
|
int pressure;
|
||||||
|
|
||||||
if(!dev->listen)
|
if(!dev->listen)
|
||||||
return;
|
return;
|
||||||
switch(iev->code)
|
switch(iev->code)
|
||||||
{
|
{
|
||||||
case ABS_X:
|
case ABS_X:
|
||||||
case ABS_Y:
|
if(dev->mouse.w != 0)
|
||||||
{
|
|
||||||
Ecore_Fb_Event_Mouse_Move *ev;
|
|
||||||
if((iev->code == ABS_X) && (dev->mouse.w != 0))
|
|
||||||
{
|
{
|
||||||
int tmp;
|
int tmp;
|
||||||
|
|
||||||
|
@ -277,8 +277,12 @@ _ecore_fb_li_device_event_abs(Ecore_Fb_Input_Device *dev, struct input_event *ie
|
||||||
dev->mouse.x = dev->mouse.w;
|
dev->mouse.x = dev->mouse.w;
|
||||||
else
|
else
|
||||||
dev->mouse.x = tmp;
|
dev->mouse.x = tmp;
|
||||||
|
dev->mouse.event = ECORE_FB_EVENT_MOUSE_MOVE;
|
||||||
}
|
}
|
||||||
else if((iev->code == ABS_Y) && (dev->mouse.h != 0))
|
break;
|
||||||
|
|
||||||
|
case ABS_Y:
|
||||||
|
if(dev->mouse.h != 0)
|
||||||
{
|
{
|
||||||
int tmp;
|
int tmp;
|
||||||
|
|
||||||
|
@ -289,21 +293,62 @@ _ecore_fb_li_device_event_abs(Ecore_Fb_Input_Device *dev, struct input_event *ie
|
||||||
dev->mouse.y = dev->mouse.h;
|
dev->mouse.y = dev->mouse.h;
|
||||||
else
|
else
|
||||||
dev->mouse.y = tmp;
|
dev->mouse.y = tmp;
|
||||||
|
dev->mouse.event = ECORE_FB_EVENT_MOUSE_MOVE;
|
||||||
}
|
}
|
||||||
ev = calloc(1,sizeof(Ecore_Fb_Event_Mouse_Move));
|
break;
|
||||||
ev->x = dev->mouse.x;
|
|
||||||
ev->y = dev->mouse.y;
|
|
||||||
ev->dev = dev;
|
|
||||||
|
|
||||||
ecore_event_add(ECORE_FB_EVENT_MOUSE_MOVE, ev, NULL, NULL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case ABS_PRESSURE:
|
case ABS_PRESSURE:
|
||||||
/* TODO emulate a button press */
|
pressure = iev->value;
|
||||||
|
if ((pressure) && (!prev_pressure))
|
||||||
|
{
|
||||||
|
/* DOWN: mouse is down, but was not now */
|
||||||
|
dev->mouse.event = ECORE_FB_EVENT_MOUSE_BUTTON_DOWN;
|
||||||
|
}
|
||||||
|
else if ((!pressure) && (prev_pressure))
|
||||||
|
{
|
||||||
|
/* UP: mouse was down, but is not now */
|
||||||
|
dev->mouse.event = ECORE_FB_EVENT_MOUSE_BUTTON_UP;
|
||||||
|
}
|
||||||
|
prev_pressure = pressure;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ecore_fb_li_device_event_syn(Ecore_Fb_Input_Device *dev, struct input_event *iev)
|
||||||
|
{
|
||||||
|
if(!dev->listen)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(dev->mouse.event == ECORE_FB_EVENT_MOUSE_MOVE)
|
||||||
|
{
|
||||||
|
Ecore_Fb_Event_Mouse_Move *ev;
|
||||||
|
ev = calloc(1,sizeof(Ecore_Fb_Event_Mouse_Move));
|
||||||
|
ev->x = dev->mouse.x;
|
||||||
|
ev->y = dev->mouse.y;
|
||||||
|
ev->dev = dev;
|
||||||
|
ecore_event_add(ECORE_FB_EVENT_MOUSE_MOVE, ev, NULL, NULL);
|
||||||
|
}
|
||||||
|
else if(dev->mouse.event == ECORE_FB_EVENT_MOUSE_BUTTON_DOWN)
|
||||||
|
{
|
||||||
|
Ecore_Fb_Event_Mouse_Button_Down *ev;
|
||||||
|
ev = calloc(1, sizeof(Ecore_Fb_Event_Mouse_Button_Down));
|
||||||
|
ev->x = dev->mouse.x;
|
||||||
|
ev->y = dev->mouse.y;
|
||||||
|
ev->button = 1;
|
||||||
|
ecore_event_add(ECORE_FB_EVENT_MOUSE_BUTTON_DOWN, ev, NULL, NULL);
|
||||||
|
}
|
||||||
|
else if(dev->mouse.event == ECORE_FB_EVENT_MOUSE_BUTTON_UP)
|
||||||
|
{
|
||||||
|
Ecore_Fb_Event_Mouse_Button_Up *ev;
|
||||||
|
ev = calloc(1, sizeof(Ecore_Fb_Event_Mouse_Button_Up));
|
||||||
|
ev->x = dev->mouse.x;
|
||||||
|
ev->y = dev->mouse.y;
|
||||||
|
ev->button = 1;
|
||||||
|
ecore_event_add(ECORE_FB_EVENT_MOUSE_BUTTON_UP, ev, NULL, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_ecore_fb_li_device_fd_callback(void *data, Ecore_Fd_Handler *fdh)
|
_ecore_fb_li_device_fd_callback(void *data, Ecore_Fd_Handler *fdh)
|
||||||
{
|
{
|
||||||
|
@ -320,6 +365,9 @@ _ecore_fb_li_device_fd_callback(void *data, Ecore_Fd_Handler *fdh)
|
||||||
{
|
{
|
||||||
switch(ev[i].type)
|
switch(ev[i].type)
|
||||||
{
|
{
|
||||||
|
case EV_SYN:
|
||||||
|
_ecore_fb_li_device_event_syn(dev, &ev[i]);
|
||||||
|
break;
|
||||||
case EV_ABS:
|
case EV_ABS:
|
||||||
_ecore_fb_li_device_event_abs(dev, &ev[i]);
|
_ecore_fb_li_device_event_abs(dev, &ev[i]);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -20,8 +20,8 @@
|
||||||
#define kernel_ulong_t unsigned long
|
#define kernel_ulong_t unsigned long
|
||||||
#define BITS_PER_LONG 32
|
#define BITS_PER_LONG 32
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#undef kernel_ulong_t <-added
|
#undef kernel_ulong_t
|
||||||
#undef BITS_PER_LONG <-added
|
#undef BITS_PER_LONG
|
||||||
#else
|
#else
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -53,7 +53,7 @@ struct _Ecore_Fb_Input_Device
|
||||||
/* absolute axis */
|
/* absolute axis */
|
||||||
int min_w, min_h;
|
int min_w, min_h;
|
||||||
double rel_w, rel_h;
|
double rel_w, rel_h;
|
||||||
|
int event;
|
||||||
} mouse;
|
} mouse;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue