|
version 3.46, 1999/05/16 06:55:50
|
version 3.47, 1999/05/30 02:28:10
|
|
|
|
| * | * |
| */ | */ |
| | |
| /* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86Xinput.c,v 3.45 1999/05/09 06:06:21 dawes Exp $ */ |
/* $XFree86: xc/programs/Xserver/hw/xfree86/common/xf86Xinput.c,v 3.46 1999/05/16 06:55:50 dawes Exp $ */ |
| | |
| #include "Xfuncproto.h" | #include "Xfuncproto.h" |
| #include "Xmd.h" | #include "Xmd.h" |
|
|
|
| { | { |
| LocalDevicePtr local = (LocalDevicePtr)dev->public.devicePrivate; | LocalDevicePtr local = (LocalDevicePtr)dev->public.devicePrivate; |
| | |
| |
local->dxremaind = 0.0; |
| |
local->dyremaind = 0.0; |
| |
|
| if (InitIntegerFeedbackClassDeviceStruct(dev, xf86AlwaysCoreControl) == FALSE) { | if (InitIntegerFeedbackClassDeviceStruct(dev, xf86AlwaysCoreControl) == FALSE) { |
| ErrorF("Unable to init integer feedback for always core feature\n"); | ErrorF("Unable to init integer feedback for always core feature\n"); |
| } else { | } else { |
|
|
|
| */ | */ |
| | |
| void | void |
| OpenInputDevice(DeviceIntPtr dev, ClientPtr client, int *status) |
OpenInputDevice(DeviceIntPtr dev, |
| |
ClientPtr client, |
| |
int *status) |
| { | { |
| if (!dev->inited) { | if (!dev->inited) { |
| *status = BadDevice; | *status = BadDevice; |
|
|
|
| ValuatorClassPtr val = device->valuator; | ValuatorClassPtr val = device->valuator; |
| int *axisvals; | int *axisvals; |
| AxisInfoPtr axes; | AxisInfoPtr axes; |
| |
int dx, dy; |
| |
float mult; |
| #ifdef XFreeXDGA | #ifdef XFreeXDGA |
| int xdelta, ydelta; |
int xdelta = 0, ydelta = 0; |
| #endif | #endif |
| | |
| DBG(5, ErrorF("xf86PostMotionEvent BEGIN 0x%x(%s) switch=0x%x is_core=%s is_shared=%s is_absolute=%s\n", | DBG(5, ErrorF("xf86PostMotionEvent BEGIN 0x%x(%s) switch=0x%x is_core=%s is_shared=%s is_absolute=%s\n", |
|
|
|
| | |
| if (loop == 1 && !is_absolute && device->ptrfeed && device->ptrfeed->ctrl.num) { | if (loop == 1 && !is_absolute && device->ptrfeed && device->ptrfeed->ctrl.num) { |
| /* modeled from xf86Events.c */ | /* modeled from xf86Events.c */ |
| |
if (device->ptrfeed->ctrl.threshold) { |
| if ((abs(xv->valuator0) + abs(xv->valuator1)) >= device->ptrfeed->ctrl.threshold) { | if ((abs(xv->valuator0) + abs(xv->valuator1)) >= device->ptrfeed->ctrl.threshold) { |
| xv->valuator0 = (xv->valuator0 * device->ptrfeed->ctrl.num) / | xv->valuator0 = (xv->valuator0 * device->ptrfeed->ctrl.num) / |
| device->ptrfeed->ctrl.den; | device->ptrfeed->ctrl.den; |
| xv->valuator1 = (xv->valuator1 * device->ptrfeed->ctrl.num) / | xv->valuator1 = (xv->valuator1 * device->ptrfeed->ctrl.num) / |
| device->ptrfeed->ctrl.den; | device->ptrfeed->ctrl.den; |
| DBG(6, ErrorF("xf86PostMotionEvent acceleration v0=%d v1=%d\n", xv->valuator0, xv->valuator1)); |
|
| } | } |
| } | } |
| |
else if (xv->valuator0 || xv->valuator1) { |
| |
dx = xv->valuator0; |
| |
dy = xv->valuator1; |
| |
mult = pow((float)(dx*dx+dy*dy), |
| |
((float)(device->ptrfeed->ctrl.num) / |
| |
(float)(device->ptrfeed->ctrl.den) - 1.0) / |
| |
2.0) / 2.0; |
| |
if (dx) { |
| |
local->dxremaind = mult * (float)dx + local->dxremaind; |
| |
xv->valuator0 = dx = (int)local->dxremaind; |
| |
local->dxremaind = local->dxremaind - (float)dx; |
| |
} |
| |
if (dy) { |
| |
local->dyremaind = mult * (float)dy + local->dyremaind; |
| |
xv->valuator1 = dy = (int)local->dyremaind; |
| |
local->dyremaind = local->dyremaind - (float)dy; |
| |
} |
| |
} |
| |
DBG(6, ErrorF("xf86PostMotionEvent acceleration v0=%d v1=%d\n", xv->valuator0, xv->valuator1)); |
| |
} |
| |
|
| /* mr Sat Jul 5 13:46:55 MET 1997 | /* mr Sat Jul 5 13:46:55 MET 1997 |
| * fix to recognize XWarpCursor requests | * fix to recognize XWarpCursor requests |
| * FL Thu Nov 12 07:42:03 1998 | * FL Thu Nov 12 07:42:03 1998 |
|
|
|
| GetSpritePosition(&cx, &cy); | GetSpritePosition(&cx, &cy); |
| | |
| xE->u.u.type = is_down ? ButtonPress : ButtonRelease; | xE->u.u.type = is_down ? ButtonPress : ButtonRelease; |
| xE->u.u.detail = button; |
xE->u.u.detail = device->button->map[button]; |
| xE->u.keyButtonPointer.rootY = cx; | xE->u.keyButtonPointer.rootY = cx; |
| xE->u.keyButtonPointer.rootX = cy; | xE->u.keyButtonPointer.rootX = cy; |
| xf86Info.lastEventTime = xE->u.keyButtonPointer.time = GetTimeInMillis(); | xf86Info.lastEventTime = xE->u.keyButtonPointer.time = GetTimeInMillis(); |