mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2025-12-25 04:40:05 +01:00
filter: Ignore non-suitable trackers when calculating initial velocity
calculate_velocity() didn't skip pointer trackers far away in time when calculating the initial velocity. This check was done later when iterating the rest, so while at it, simplify the function by doing both iterations in one single loop. Signed-off-by: Jonas Ådahl <jadahl@gmail.com> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
parent
acce2da38c
commit
eae6bec344
1 changed files with 11 additions and 20 deletions
31
src/filter.c
31
src/filter.c
|
|
@ -183,28 +183,15 @@ calculate_velocity(struct pointer_accelerator *accel, uint64_t time)
|
|||
struct pointer_tracker *tracker;
|
||||
double velocity;
|
||||
double result = 0.0;
|
||||
double initial_velocity;
|
||||
double initial_velocity = 0.0;
|
||||
double velocity_diff;
|
||||
unsigned int offset;
|
||||
|
||||
unsigned int dir = tracker_by_offset(accel, 0)->dir;
|
||||
|
||||
/* Find first velocity */
|
||||
for (offset = 1; offset < NUM_POINTER_TRACKERS; offset++) {
|
||||
tracker = tracker_by_offset(accel, offset);
|
||||
|
||||
if (time <= tracker->time)
|
||||
continue;
|
||||
|
||||
result = initial_velocity =
|
||||
calculate_tracker_velocity(tracker, time);
|
||||
if (initial_velocity > 0.0)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Find least recent vector within a timelimit, maximum velocity diff
|
||||
* and direction threshold. */
|
||||
for (; offset < NUM_POINTER_TRACKERS; offset++) {
|
||||
for (offset = 1; offset < NUM_POINTER_TRACKERS; offset++) {
|
||||
tracker = tracker_by_offset(accel, offset);
|
||||
|
||||
/* Stop if too far away in time */
|
||||
|
|
@ -219,12 +206,16 @@ calculate_velocity(struct pointer_accelerator *accel, uint64_t time)
|
|||
|
||||
velocity = calculate_tracker_velocity(tracker, time);
|
||||
|
||||
/* Stop if velocity differs too much from initial */
|
||||
velocity_diff = fabs(initial_velocity - velocity);
|
||||
if (velocity_diff > MAX_VELOCITY_DIFF)
|
||||
break;
|
||||
if (initial_velocity == 0.0) {
|
||||
result = initial_velocity = velocity;
|
||||
} else {
|
||||
/* Stop if velocity differs too much from initial */
|
||||
velocity_diff = fabs(initial_velocity - velocity);
|
||||
if (velocity_diff > MAX_VELOCITY_DIFF)
|
||||
break;
|
||||
|
||||
result = velocity;
|
||||
result = velocity;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue