evdev: Use temporary x and y coordinates when applying calibration

Don't overwrite device->abs.x halfway through the matrix multiplication.
This commit is contained in:
Kristian Høgsberg 2013-07-26 10:41:43 -07:00 committed by Jonas Ådahl
parent 95e1abf104
commit 7ff70db86d

View file

@ -230,16 +230,21 @@ is_motion_event(struct input_event *e)
static void
transform_absolute(struct evdev_device *device)
{
int32_t x, y;
if (!device->abs.apply_calibration)
return;
device->abs.x = device->abs.x * device->abs.calibration[0] +
device->abs.y * device->abs.calibration[1] +
device->abs.calibration[2];
x = device->abs.x * device->abs.calibration[0] +
device->abs.y * device->abs.calibration[1] +
device->abs.calibration[2];
device->abs.y = device->abs.x * device->abs.calibration[3] +
device->abs.y * device->abs.calibration[4] +
device->abs.calibration[5];
y = device->abs.x * device->abs.calibration[3] +
device->abs.y * device->abs.calibration[4] +
device->abs.calibration[5];
device->abs.x = x;
device->abs.y = y;
}
static void