mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-02-11 17:30:29 +01:00
filter: duplicate the pointer_accelerator struct into the bits that use it
Yeah, it's duplication. But this way it's also separation and we can't accidentally use the wrong struct. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
31a21c0028
commit
1bd5869f19
4 changed files with 83 additions and 49 deletions
|
|
@ -45,6 +45,23 @@
|
|||
#define DEFAULT_ACCELERATION 2.0 /* unitless factor */
|
||||
#define DEFAULT_INCLINE 1.1 /* unitless factor */
|
||||
|
||||
struct pointer_accelerator_low_dpi {
|
||||
struct motion_filter base;
|
||||
|
||||
accel_profile_func_t profile;
|
||||
|
||||
double velocity; /* units/us */
|
||||
double last_velocity; /* units/us */
|
||||
|
||||
struct pointer_trackers trackers;
|
||||
|
||||
double threshold; /* units/us */
|
||||
double accel; /* unitless factor */
|
||||
double incline; /* incline of the function */
|
||||
|
||||
int dpi;
|
||||
};
|
||||
|
||||
/**
|
||||
* Custom acceleration function for mice < 1000dpi.
|
||||
* At slow motion, a single device unit causes a one-pixel movement.
|
||||
|
|
@ -61,8 +78,8 @@ pointer_accel_profile_linear_low_dpi(struct motion_filter *filter,
|
|||
double speed_in, /* in device units (units/us) */
|
||||
uint64_t time)
|
||||
{
|
||||
struct pointer_accelerator *accel_filter =
|
||||
(struct pointer_accelerator *)filter;
|
||||
struct pointer_accelerator_low_dpi *accel_filter =
|
||||
(struct pointer_accelerator_low_dpi *)filter;
|
||||
|
||||
double max_accel = accel_filter->accel; /* unitless factor */
|
||||
double threshold = accel_filter->threshold; /* units/us */
|
||||
|
|
@ -89,7 +106,7 @@ pointer_accel_profile_linear_low_dpi(struct motion_filter *filter,
|
|||
}
|
||||
|
||||
static inline double
|
||||
calculate_acceleration_factor(struct pointer_accelerator *accel,
|
||||
calculate_acceleration_factor(struct pointer_accelerator_low_dpi *accel,
|
||||
const struct device_float_coords *unaccelerated,
|
||||
void *data,
|
||||
uint64_t time)
|
||||
|
|
@ -115,8 +132,8 @@ accelerator_filter_generic(struct motion_filter *filter,
|
|||
const struct device_float_coords *unaccelerated,
|
||||
void *data, uint64_t time)
|
||||
{
|
||||
struct pointer_accelerator *accel =
|
||||
(struct pointer_accelerator *) filter;
|
||||
struct pointer_accelerator_low_dpi *accel =
|
||||
(struct pointer_accelerator_low_dpi *) filter;
|
||||
double accel_value; /* unitless factor */
|
||||
struct device_float_coords accelerated;
|
||||
|
||||
|
|
@ -154,8 +171,8 @@ accelerator_filter_noop(struct motion_filter *filter,
|
|||
const struct device_float_coords *unaccelerated,
|
||||
void *data, uint64_t time)
|
||||
{
|
||||
struct pointer_accelerator *accel =
|
||||
(struct pointer_accelerator *) filter;
|
||||
struct pointer_accelerator_low_dpi *accel =
|
||||
(struct pointer_accelerator_low_dpi *) filter;
|
||||
|
||||
return normalize_for_dpi(unaccelerated, accel->dpi);
|
||||
}
|
||||
|
|
@ -165,8 +182,8 @@ accelerator_restart(struct motion_filter *filter,
|
|||
void *data,
|
||||
uint64_t time)
|
||||
{
|
||||
struct pointer_accelerator *accel =
|
||||
(struct pointer_accelerator *) filter;
|
||||
struct pointer_accelerator_low_dpi *accel =
|
||||
(struct pointer_accelerator_low_dpi *) filter;
|
||||
|
||||
trackers_reset(&accel->trackers, time);
|
||||
}
|
||||
|
|
@ -174,8 +191,8 @@ accelerator_restart(struct motion_filter *filter,
|
|||
static void
|
||||
accelerator_destroy(struct motion_filter *filter)
|
||||
{
|
||||
struct pointer_accelerator *accel =
|
||||
(struct pointer_accelerator *) filter;
|
||||
struct pointer_accelerator_low_dpi *accel =
|
||||
(struct pointer_accelerator_low_dpi *) filter;
|
||||
|
||||
trackers_free(&accel->trackers);
|
||||
free(accel);
|
||||
|
|
@ -185,8 +202,8 @@ static bool
|
|||
accelerator_set_speed(struct motion_filter *filter,
|
||||
double speed_adjustment)
|
||||
{
|
||||
struct pointer_accelerator *accel_filter =
|
||||
(struct pointer_accelerator *)filter;
|
||||
struct pointer_accelerator_low_dpi *accel_filter =
|
||||
(struct pointer_accelerator_low_dpi *)filter;
|
||||
|
||||
assert(speed_adjustment >= -1.0 && speed_adjustment <= 1.0);
|
||||
|
||||
|
|
@ -218,10 +235,10 @@ struct motion_filter_interface accelerator_interface_low_dpi = {
|
|||
.set_speed = accelerator_set_speed,
|
||||
};
|
||||
|
||||
static struct pointer_accelerator *
|
||||
static struct pointer_accelerator_low_dpi *
|
||||
create_default_filter(int dpi)
|
||||
{
|
||||
struct pointer_accelerator *filter;
|
||||
struct pointer_accelerator_low_dpi *filter;
|
||||
|
||||
filter = zalloc(sizeof *filter);
|
||||
filter->last_velocity = 0.0;
|
||||
|
|
@ -239,7 +256,7 @@ create_default_filter(int dpi)
|
|||
struct motion_filter *
|
||||
create_pointer_accelerator_filter_linear_low_dpi(int dpi)
|
||||
{
|
||||
struct pointer_accelerator *filter;
|
||||
struct pointer_accelerator_low_dpi *filter;
|
||||
|
||||
filter = create_default_filter(dpi);
|
||||
if (!filter)
|
||||
|
|
|
|||
|
|
@ -45,6 +45,23 @@
|
|||
#define DEFAULT_ACCELERATION 2.0 /* unitless factor */
|
||||
#define DEFAULT_INCLINE 1.1 /* unitless factor */
|
||||
|
||||
struct pointer_accelerator {
|
||||
struct motion_filter base;
|
||||
|
||||
accel_profile_func_t profile;
|
||||
|
||||
double velocity; /* units/us */
|
||||
double last_velocity; /* units/us */
|
||||
|
||||
struct pointer_trackers trackers;
|
||||
|
||||
double threshold; /* units/us */
|
||||
double accel; /* unitless factor */
|
||||
double incline; /* incline of the function */
|
||||
|
||||
int dpi;
|
||||
};
|
||||
|
||||
/**
|
||||
* Calculate the acceleration factor for the given delta with the timestamp.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -71,23 +71,6 @@ struct pointer_trackers {
|
|||
struct pointer_delta_smoothener *smoothener;
|
||||
};
|
||||
|
||||
struct pointer_accelerator {
|
||||
struct motion_filter base;
|
||||
|
||||
accel_profile_func_t profile;
|
||||
|
||||
double velocity; /* units/us */
|
||||
double last_velocity; /* units/us */
|
||||
|
||||
struct pointer_trackers trackers;
|
||||
|
||||
double threshold; /* units/us */
|
||||
double accel; /* unitless factor */
|
||||
double incline; /* incline of the function */
|
||||
|
||||
int dpi;
|
||||
};
|
||||
|
||||
void trackers_init(struct pointer_trackers *trackers);
|
||||
void trackers_free(struct pointer_trackers *trackers);
|
||||
|
||||
|
|
|
|||
|
|
@ -48,6 +48,23 @@
|
|||
#define TOUCHPAD_ACCELERATION 9.0 /* unitless factor */
|
||||
#define TOUCHPAD_INCLINE 0.011 /* unitless factor */
|
||||
|
||||
struct touchpad_accelerator {
|
||||
struct motion_filter base;
|
||||
|
||||
accel_profile_func_t profile;
|
||||
|
||||
double velocity; /* units/us */
|
||||
double last_velocity; /* units/us */
|
||||
|
||||
struct pointer_trackers trackers;
|
||||
|
||||
double threshold; /* units/us */
|
||||
double accel; /* unitless factor */
|
||||
double incline; /* incline of the function */
|
||||
|
||||
int dpi;
|
||||
};
|
||||
|
||||
/**
|
||||
* Calculate the acceleration factor for the given delta with the timestamp.
|
||||
*
|
||||
|
|
@ -59,7 +76,7 @@
|
|||
* @return A unitless acceleration factor, to be applied to the delta
|
||||
*/
|
||||
static inline double
|
||||
calculate_acceleration_factor(struct pointer_accelerator *accel,
|
||||
calculate_acceleration_factor(struct touchpad_accelerator *accel,
|
||||
const struct device_float_coords *unaccelerated,
|
||||
void *data,
|
||||
uint64_t time)
|
||||
|
|
@ -97,8 +114,8 @@ accelerator_filter_generic(struct motion_filter *filter,
|
|||
const struct device_float_coords *unaccelerated,
|
||||
void *data, uint64_t time)
|
||||
{
|
||||
struct pointer_accelerator *accel =
|
||||
(struct pointer_accelerator *) filter;
|
||||
struct touchpad_accelerator *accel =
|
||||
(struct touchpad_accelerator *) filter;
|
||||
double accel_value; /* unitless factor */
|
||||
struct device_float_coords accelerated;
|
||||
|
||||
|
|
@ -118,8 +135,8 @@ accelerator_filter_post_normalized(struct motion_filter *filter,
|
|||
const struct device_float_coords *unaccelerated,
|
||||
void *data, uint64_t time)
|
||||
{
|
||||
struct pointer_accelerator *accel =
|
||||
(struct pointer_accelerator *) filter;
|
||||
struct touchpad_accelerator *accel =
|
||||
(struct touchpad_accelerator *) filter;
|
||||
struct device_float_coords accelerated;
|
||||
|
||||
/* Accelerate for device units, normalize afterwards */
|
||||
|
|
@ -134,8 +151,8 @@ static bool
|
|||
touchpad_accelerator_set_speed(struct motion_filter *filter,
|
||||
double speed_adjustment)
|
||||
{
|
||||
struct pointer_accelerator *accel_filter =
|
||||
(struct pointer_accelerator *)filter;
|
||||
struct touchpad_accelerator *accel_filter =
|
||||
(struct touchpad_accelerator *)filter;
|
||||
|
||||
assert(speed_adjustment >= -1.0 && speed_adjustment <= 1.0);
|
||||
|
||||
|
|
@ -157,8 +174,8 @@ touchpad_constant_filter(struct motion_filter *filter,
|
|||
const struct device_float_coords *unaccelerated,
|
||||
void *data, uint64_t time)
|
||||
{
|
||||
struct pointer_accelerator *accel =
|
||||
(struct pointer_accelerator *)filter;
|
||||
struct touchpad_accelerator *accel =
|
||||
(struct touchpad_accelerator *)filter;
|
||||
struct normalized_coords normalized;
|
||||
|
||||
normalized = normalize_for_dpi(unaccelerated, accel->dpi);
|
||||
|
|
@ -173,8 +190,8 @@ touchpad_accelerator_restart(struct motion_filter *filter,
|
|||
void *data,
|
||||
uint64_t time)
|
||||
{
|
||||
struct pointer_accelerator *accel =
|
||||
(struct pointer_accelerator *) filter;
|
||||
struct touchpad_accelerator *accel =
|
||||
(struct touchpad_accelerator *) filter;
|
||||
|
||||
trackers_reset(&accel->trackers, time);
|
||||
}
|
||||
|
|
@ -182,8 +199,8 @@ touchpad_accelerator_restart(struct motion_filter *filter,
|
|||
static void
|
||||
touchpad_accelerator_destroy(struct motion_filter *filter)
|
||||
{
|
||||
struct pointer_accelerator *accel =
|
||||
(struct pointer_accelerator *) filter;
|
||||
struct touchpad_accelerator *accel =
|
||||
(struct touchpad_accelerator *) filter;
|
||||
|
||||
trackers_free(&accel->trackers);
|
||||
free(accel);
|
||||
|
|
@ -195,8 +212,8 @@ touchpad_accel_profile_linear(struct motion_filter *filter,
|
|||
double speed_in, /* in device units/µs */
|
||||
uint64_t time)
|
||||
{
|
||||
struct pointer_accelerator *accel_filter =
|
||||
(struct pointer_accelerator *)filter;
|
||||
struct touchpad_accelerator *accel_filter =
|
||||
(struct touchpad_accelerator *)filter;
|
||||
const double max_accel = accel_filter->accel; /* unitless factor */
|
||||
const double threshold = accel_filter->threshold; /* units/us */
|
||||
const double incline = accel_filter->incline;
|
||||
|
|
@ -281,7 +298,7 @@ create_pointer_accelerator_filter_touchpad(int dpi,
|
|||
uint64_t event_delta_smooth_threshold,
|
||||
uint64_t event_delta_smooth_value)
|
||||
{
|
||||
struct pointer_accelerator *filter;
|
||||
struct touchpad_accelerator *filter;
|
||||
struct pointer_delta_smoothener *smoothener;
|
||||
|
||||
filter = zalloc(sizeof *filter);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue