diff options
Diffstat (limited to 'src/evdev_axes.c')
-rw-r--r-- | src/evdev_axes.c | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/src/evdev_axes.c b/src/evdev_axes.c index beeb765..1443495 100644 --- a/src/evdev_axes.c +++ b/src/evdev_axes.c @@ -371,7 +371,7 @@ EvdevConvert(InputInfoPtr pInfo, int first, int num, int v0, int v1, int v2, * after a cleanup. */ static void -EvdevAxesDoRotation (InputInfoPtr pInfo, float x, float y) +EvdevAxesDoRotation (InputInfoPtr pInfo) { evdevDevicePtr pEvdev = pInfo->private; evdevStatePtr state = &pEvdev->state; @@ -390,18 +390,16 @@ EvdevAxesDoRotation (InputInfoPtr pInfo, float x, float y) } if (axes->rotation) { + float x = axes->v[0], y = axes->v[1]; axes->v[0] = (x * axes->rot_cos) - (y * axes->rot_sin); axes->v[1] = (y * axes->rot_cos) + (x * axes->rot_sin); axes->v_flags[0] |= EV_AXES_V_UPDATED; axes->v_flags[1] |= EV_AXES_V_UPDATED; #if DEBUG - xf86Msg(X_ERROR, "%s %d (%s): cos=%f, sin=%f, x=%f, y=%f, v[0]=%d, v[1]=%d\n", __FILE__, __LINE__, __FUNCTION__, - axes->rot_cos, axes->rot_sin, x, y, axes->v[0], axes->v[1]); + xf86Msg(X_ERROR, "%s %d (%s): rotation=%d, cos=%f, sin=%f, x=%f, y=%f, v[0]=%d, v[1]=%d\n", __FILE__, __LINE__, __FUNCTION__, + axes->rotation, axes->rot_cos, axes->rot_sin, x, y, axes->v[0], axes->v[1]); #endif - } else { - axes->v[0] = x; - axes->v[1] = y; } } @@ -521,7 +519,7 @@ EvdevAxesSynRep (InputInfoPtr pInfo) max_y = dabs->max_y; } - EvdevAxesDoRotation (pInfo, axes->v[0], axes->v[1]); + EvdevAxesDoRotation (pInfo); axes->v[0] = EvdevScaleAxis (axes->v[0], 0, width, min_x, max_x); axes->v[1] = EvdevScaleAxis (axes->v[1], 0, height, min_y, max_y); @@ -546,15 +544,31 @@ EvdevAxesSynRep (InputInfoPtr pInfo) if (dabs->flip_y) axes->v[1] = -axes->v[1]; - EvdevAxesDoRotation (pInfo, axes->v[0], axes->v[1]); + EvdevAxesDoRotation (pInfo); } } +#if DEBUG + xf86Msg(X_ERROR, "%s %d (%s): v[0]=%d%s%s, v[1]=%d%s%s, v[2]=%d%s%s\n", __FILE__, __LINE__, __FUNCTION__, + axes->v[0], + axes->v_flags[0] & EV_AXES_V_M_ABS ? "!" : "", + axes->v_flags[0] & EV_AXES_V_UPDATED ? "*" : "", + axes->v[1], + axes->v_flags[1] & EV_AXES_V_M_ABS ? "!" : "", + axes->v_flags[1] & EV_AXES_V_UPDATED ? "*" : "", + axes->v[2], + axes->v_flags[2] & EV_AXES_V_M_ABS ? "!" : "", + axes->v_flags[2] & EV_AXES_V_UPDATED ? "*" : ""); +#endif for (i = 0; i < axes->axes; i++) { if (axes->v_flags[i] & EV_AXES_V_UPDATED) { if (run) { if (mode != (axes->v_flags[i] & EV_AXES_V_M_MASK)) { mode = (mode == EV_AXES_V_M_ABS); +#if DEBUG + xf86Msg(X_ERROR, "%s %d (%s): mode=%d, start=%d, i - start=%d\n", __FILE__, __LINE__, __FUNCTION__, + mode, start, i - start); +#endif xf86PostMotionEventP (pInfo->dev, mode, start, i - start, axes->v + start); start = i; mode = axes->v_flags[i] & EV_AXES_V_M_MASK; @@ -568,6 +582,7 @@ EvdevAxesSynRep (InputInfoPtr pInfo) } else if (run) { mode = (mode == EV_AXES_V_M_ABS); xf86PostMotionEventP (pInfo->dev, mode, start, i - start, axes->v + start); + run = 0; } } if (run) { |