filter: split out handling of the low-dpi accel method
authorPeter Hutterer <peter.hutterer@who-t.net>
Tue, 28 Jul 2015 05:49:22 +0000 (15:49 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Mon, 10 Aug 2015 23:19:55 +0000 (09:19 +1000)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jonas Ã…dahl <jadahl@gmail.com>
src/filter.c

index f3e0fb3..369d737 100644 (file)
@@ -296,6 +296,27 @@ accelerator_filter(struct motion_filter *filter,
                (struct pointer_accelerator *) filter;
        double accel_value; /* unitless factor */
        struct normalized_coords accelerated;
+
+       accel_value = calculate_acceleration_factor(accel,
+                                                   unaccelerated,
+                                                   data,
+                                                   time);
+
+       accelerated.x = accel_value * unaccelerated->x;
+       accelerated.y = accel_value * unaccelerated->y;
+
+       return accelerated;
+}
+
+static struct normalized_coords
+accelerator_filter_low_dpi(struct motion_filter *filter,
+                          const struct normalized_coords *unaccelerated,
+                          void *data, uint64_t time)
+{
+       struct pointer_accelerator *accel =
+               (struct pointer_accelerator *) filter;
+       double accel_value; /* unitless factor */
+       struct normalized_coords accelerated;
        struct normalized_coords unnormalized;
        double dpi_factor = accel->dpi_factor;
 
@@ -573,8 +594,6 @@ create_default_filter(int dpi)
        if (filter == NULL)
                return NULL;
 
-       filter->base.interface = &accelerator_interface;
-
        filter->last_velocity = 0.0;
 
        filter->trackers =
@@ -599,11 +618,19 @@ create_pointer_accelerator_filter_linear(int dpi)
        if (!filter)
                return NULL;
 
+       filter->base.interface = &accelerator_interface;
        filter->profile = pointer_accel_profile_linear;
 
        return &filter->base;
 }
 
+struct motion_filter_interface accelerator_interface_low_dpi = {
+       accelerator_filter_low_dpi,
+       accelerator_restart,
+       accelerator_destroy,
+       accelerator_set_speed,
+};
+
 struct motion_filter *
 create_pointer_accelerator_filter_linear_low_dpi(int dpi)
 {
@@ -613,6 +640,7 @@ create_pointer_accelerator_filter_linear_low_dpi(int dpi)
        if (!filter)
                return NULL;
 
+       filter->base.interface = &accelerator_interface_low_dpi;
        filter->profile = pointer_accel_profile_linear_low_dpi;
 
        return &filter->base;
@@ -627,6 +655,7 @@ create_pointer_accelerator_filter_touchpad(int dpi)
        if (!filter)
                return NULL;
 
+       filter->base.interface = &accelerator_interface;
        filter->profile = touchpad_accel_profile_linear;
 
        return &filter->base;
@@ -641,6 +670,7 @@ create_pointer_accelerator_filter_lenovo_x230(int dpi)
        if (!filter)
                return NULL;
 
+       filter->base.interface = &accelerator_interface;
        filter->profile = touchpad_lenovo_x230_accel_profile;
 
        return &filter->base;