[PATCH] Input: Fix frac calculation on [Raw]DeviceEvent conversion

Max Schwarz Max at x-quadraht.de
Sun Sep 25 11:44:26 PDT 2011


(1UL << 32) evaluates to 0 (at least here), so do the
fraction calculation in two steps as in libXi. Fractions on xXIRawEvent
were not multiplied at all, which also gave 0 as result.

Signed-off-by: Max Schwarz <Max at x-quadraht.de>
---
Hi,

I noticed a problem (see patch) with Daniel Stone's patch
[PATCH 22/28] Input: Make DeviceEvent use doubles internally
from june.
I'm CCing Peter as well, as I noticed the problem on his next-all
branch. The patch is based on there.

Best regards,
  Max

 dix/eventconvert.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index 9cc177e..9eb0771 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -635,7 +635,7 @@ eventToDeviceEvent(DeviceEvent *ev, xEvent **xi)
             SetBit(ptr, i);
             axisval->integral = trunc(ev->valuators.data[i]);
             axisval->frac = (ev->valuators.data[i] - axisval->integral) *
-                            (1UL << 32);
+                            (1 << 16) * (1 << 16);
             axisval++;
         }
     }
@@ -679,10 +679,12 @@ eventToRawEvent(RawDeviceEvent *ev, xEvent **xi)
         {
             SetBit(ptr, i);
             axisval->integral = trunc(ev->valuators.data[i]);
-            axisval->frac = ev->valuators.data[i] - axisval->integral;
+            axisval->frac = (ev->valuators.data[i] - axisval->integral) *
+                            (1 << 16) * (1 << 16);
             axisval_raw->integral = trunc(ev->valuators.data_raw[i]);
-            axisval_raw->frac = ev->valuators.data_raw[i] -
-                                axisval_raw->integral;
+            axisval_raw->frac =
+                (ev->valuators.data_raw[i] - axisval_raw->integral) *
+                  (1 << 16) * (1 << 16);
             axisval++;
             axisval_raw++;
         }
-- 
1.7.4.1



More information about the xorg-devel mailing list