libinput: Use floating point instead of fixed point numbers

Also update configure.ac to require libinput 0.3 when enabled, as it is
the version where double replaced li_fixed_t.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
diff --git a/configure.ac b/configure.ac
index e2bf38d..16e813d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -159,7 +159,7 @@
 AM_CONDITIONAL([ENABLE_LIBINPUT_BACKEND], [test x$enable_libinput_backend = xyes])
 if test x$enable_libinput_backend = xyes; then
   AC_DEFINE([BUILD_LIBINPUT_BACKEND], [1], [Build the libinput input device backend])
-  PKG_CHECK_MODULES(LIBINPUT_BACKEND, [libinput >= 0.1.0])
+  PKG_CHECK_MODULES(LIBINPUT_BACKEND, [libinput >= 0.3.0])
 fi
 
 
diff --git a/src/libinput-device.c b/src/libinput-device.c
index 4605a76..2ba4ec3 100644
--- a/src/libinput-device.c
+++ b/src/libinput-device.c
@@ -73,11 +73,14 @@
 {
 	struct evdev_device *device =
 		libinput_device_get_user_data(libinput_device);
+	wl_fixed_t dx, dy;
 
+	dx = wl_fixed_from_double(libinput_event_pointer_get_dx(pointer_event));
+	dy = wl_fixed_from_double(libinput_event_pointer_get_dy(pointer_event));
 	notify_motion(device->seat,
 		      libinput_event_pointer_get_time(pointer_event),
-		      libinput_event_pointer_get_dx(pointer_event),
-		      libinput_event_pointer_get_dy(pointer_event));
+		      dx,
+		      dy);
 }
 
 static void
@@ -99,10 +102,12 @@
 	width = device->output->current_mode->width;
 	height = device->output->current_mode->height;
 
-	x = libinput_event_pointer_get_absolute_x_transformed(pointer_event,
-							      width);
-	y = libinput_event_pointer_get_absolute_y_transformed(pointer_event,
-							      height);
+	x = wl_fixed_from_double(
+		libinput_event_pointer_get_absolute_x_transformed(pointer_event,
+								  width));
+	y = wl_fixed_from_double(
+		libinput_event_pointer_get_absolute_y_transformed(pointer_event,
+								  height));
 
 	weston_output_transform_coordinate(device->output, x, y, &x, &y);
 	notify_motion_absolute(device->seat, time, x, y);
@@ -127,11 +132,13 @@
 {
 	struct evdev_device *device =
 		libinput_device_get_user_data(libinput_device);
+	double value;
 
+	value = libinput_event_pointer_get_axis_value(pointer_event);
 	notify_axis(device->seat,
 		    libinput_event_pointer_get_time(pointer_event),
 		    libinput_event_pointer_get_axis(pointer_event),
-		    libinput_event_pointer_get_axis_value(pointer_event));
+		    wl_fixed_from_double(value));
 }
 
 static void
@@ -155,8 +162,10 @@
 
 	width = device->output->current_mode->width;
 	height = device->output->current_mode->height;
-	x = libinput_event_touch_get_x_transformed(touch_event, width);
-	y = libinput_event_touch_get_y_transformed(touch_event, height);
+	x = wl_fixed_from_double(
+		libinput_event_touch_get_x_transformed(touch_event, width));
+	y = wl_fixed_from_double(
+		libinput_event_touch_get_y_transformed(touch_event, height));
 
 	weston_output_transform_coordinate(device->output,
 					   x, y, &x, &y);