[PATCH libinput 14/23] filter: move the flat filter into a separate file

Peter Hutterer peter.hutterer at who-t.net
Thu Apr 12 06:34:40 UTC 2018


This also fixes a bug with the _noop function, because we casted to the wrong
struct the dpi value was garbage.

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 meson.build       |   1 +
 src/filter-flat.c | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/filter.c      |  77 ---------------------------------
 3 files changed, 125 insertions(+), 77 deletions(-)
 create mode 100644 src/filter-flat.c

diff --git a/meson.build b/meson.build
index e9b165ec..933e2f3f 100644
--- a/meson.build
+++ b/meson.build
@@ -151,6 +151,7 @@ dep_libinput_util = declare_dependency(link_with : libinput_util)
 ############ libfilter.a ############
 src_libfilter = [
 		'src/filter.c',
+		'src/filter-flat.c',
 		'src/filter-touchpad.c',
 		'src/filter-touchpad-x230.c',
 		'src/filter-tablet.c',
diff --git a/src/filter-flat.c b/src/filter-flat.c
new file mode 100644
index 00000000..4bbf22eb
--- /dev/null
+++ b/src/filter-flat.c
@@ -0,0 +1,124 @@
+/*
+ * Copyright © 2006-2009 Simon Thum
+ * Copyright © 2012 Jonas Ådahl
+ * Copyright © 2014-2015 Red Hat, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#include "config.h"
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <limits.h>
+#include <math.h>
+
+#include "filter.h"
+#include "libinput-util.h"
+#include "filter-private.h"
+
+struct pointer_accelerator_flat {
+	struct motion_filter base;
+
+	double factor;
+	int dpi;
+};
+
+static struct normalized_coords
+accelerator_filter_flat(struct motion_filter *filter,
+			const struct device_float_coords *unaccelerated,
+			void *data, uint64_t time)
+{
+	struct pointer_accelerator_flat *accel_filter =
+		(struct pointer_accelerator_flat *)filter;
+	double factor; /* unitless factor */
+	struct normalized_coords accelerated;
+
+	/* You want flat acceleration, you get flat acceleration for the
+	 * device */
+	factor = accel_filter->factor;
+	accelerated.x = factor * unaccelerated->x;
+	accelerated.y = factor * unaccelerated->y;
+
+	return accelerated;
+}
+
+static struct normalized_coords
+accelerator_filter_noop_flat(struct motion_filter *filter,
+			     const struct device_float_coords *unaccelerated,
+			     void *data, uint64_t time)
+{
+	struct pointer_accelerator_flat *accel =
+		(struct pointer_accelerator_flat *) filter;
+
+	return normalize_for_dpi(unaccelerated, accel->dpi);
+}
+
+static bool
+accelerator_set_speed_flat(struct motion_filter *filter,
+			   double speed_adjustment)
+{
+	struct pointer_accelerator_flat *accel_filter =
+		(struct pointer_accelerator_flat *)filter;
+
+	assert(speed_adjustment >= -1.0 && speed_adjustment <= 1.0);
+
+	/* Speed rage is 0-200% of the nominal speed, with 0 mapping to the
+	 * nominal speed. Anything above 200 is pointless, we're already
+	 * skipping over ever second pixel at 200% speed.
+	 */
+
+	accel_filter->factor = max(0.005, 1 + speed_adjustment);
+	filter->speed_adjustment = speed_adjustment;
+
+	return true;
+}
+
+static void
+accelerator_destroy_flat(struct motion_filter *filter)
+{
+	struct pointer_accelerator_flat *accel =
+		(struct pointer_accelerator_flat *) filter;
+
+	free(accel);
+}
+
+struct motion_filter_interface accelerator_interface_flat = {
+	.type = LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT,
+	.filter = accelerator_filter_flat,
+	.filter_constant = accelerator_filter_noop_flat,
+	.restart = NULL,
+	.destroy = accelerator_destroy_flat,
+	.set_speed = accelerator_set_speed_flat,
+};
+
+struct motion_filter *
+create_pointer_accelerator_filter_flat(int dpi)
+{
+	struct pointer_accelerator_flat *filter;
+
+	filter = zalloc(sizeof *filter);
+	filter->base.interface = &accelerator_interface_flat;
+	filter->dpi = dpi;
+
+	return &filter->base;
+}
diff --git a/src/filter.c b/src/filter.c
index ed90af70..1261bc22 100644
--- a/src/filter.c
+++ b/src/filter.c
@@ -104,13 +104,6 @@ filter_get_type(struct motion_filter *filter)
 #define MOTION_TIMEOUT		ms2us(1000)
 #define NUM_POINTER_TRACKERS	16
 
-struct pointer_accelerator_flat {
-	struct motion_filter base;
-
-	double factor;
-	int dpi;
-};
-
 void
 init_trackers(struct pointer_trackers *trackers,
 	      size_t ntrackers)
@@ -682,73 +675,3 @@ create_pointer_accelerator_filter_linear_low_dpi(int dpi)
 
 	return &filter->base;
 }
-
-static struct normalized_coords
-accelerator_filter_flat(struct motion_filter *filter,
-			const struct device_float_coords *unaccelerated,
-			void *data, uint64_t time)
-{
-	struct pointer_accelerator_flat *accel_filter =
-		(struct pointer_accelerator_flat *)filter;
-	double factor; /* unitless factor */
-	struct normalized_coords accelerated;
-
-	/* You want flat acceleration, you get flat acceleration for the
-	 * device */
-	factor = accel_filter->factor;
-	accelerated.x = factor * unaccelerated->x;
-	accelerated.y = factor * unaccelerated->y;
-
-	return accelerated;
-}
-
-static bool
-accelerator_set_speed_flat(struct motion_filter *filter,
-			   double speed_adjustment)
-{
-	struct pointer_accelerator_flat *accel_filter =
-		(struct pointer_accelerator_flat *)filter;
-
-	assert(speed_adjustment >= -1.0 && speed_adjustment <= 1.0);
-
-	/* Speed rage is 0-200% of the nominal speed, with 0 mapping to the
-	 * nominal speed. Anything above 200 is pointless, we're already
-	 * skipping over ever second pixel at 200% speed.
-	 */
-
-	accel_filter->factor = max(0.005, 1 + speed_adjustment);
-	filter->speed_adjustment = speed_adjustment;
-
-	return true;
-}
-
-static void
-accelerator_destroy_flat(struct motion_filter *filter)
-{
-	struct pointer_accelerator_flat *accel =
-		(struct pointer_accelerator_flat *) filter;
-
-	free(accel);
-}
-
-struct motion_filter_interface accelerator_interface_flat = {
-	.type = LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT,
-	.filter = accelerator_filter_flat,
-	.filter_constant = accelerator_filter_noop,
-	.restart = NULL,
-	.destroy = accelerator_destroy_flat,
-	.set_speed = accelerator_set_speed_flat,
-};
-
-struct motion_filter *
-create_pointer_accelerator_filter_flat(int dpi)
-{
-	struct pointer_accelerator_flat *filter;
-
-	filter = zalloc(sizeof *filter);
-	filter->base.interface = &accelerator_interface_flat;
-	filter->dpi = dpi;
-
-	return &filter->base;
-}
-
-- 
2.14.3



More information about the wayland-devel mailing list