filter: add helper function to reset and free trackers

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2018-04-10 16:26:46 +10:00
parent 3f53430ea1
commit 228d0497b7
2 changed files with 34 additions and 14 deletions

View file

@ -73,6 +73,11 @@ struct pointer_trackers {
void init_trackers(struct pointer_trackers *trackers,
size_t ntrackers);
void free_trackers(struct pointer_trackers *trackers);
void
reset_trackers(struct pointer_trackers *trackers,
uint64_t time);
void
feed_trackers(struct pointer_trackers *trackers,
const struct device_float_coords *delta,

View file

@ -188,6 +188,33 @@ init_trackers(struct pointer_trackers *trackers,
trackers->smoothener = NULL;
}
void
free_trackers(struct pointer_trackers *trackers)
{
free(trackers->trackers);
free(trackers->smoothener);
}
void
reset_trackers(struct pointer_trackers *trackers,
uint64_t time)
{
unsigned int offset;
struct pointer_tracker *tracker;
for (offset = 1; offset < trackers->ntrackers; offset++) {
tracker = tracker_by_offset(trackers, offset);
tracker->time = 0;
tracker->dir = 0;
tracker->delta.x = 0;
tracker->delta.y = 0;
}
tracker = tracker_by_offset(trackers, 0);
tracker->time = time;
tracker->dir = UNDEFINED_DIRECTION;
}
void
feed_trackers(struct pointer_trackers *trackers,
const struct device_float_coords *delta,
@ -622,20 +649,8 @@ accelerator_restart(struct motion_filter *filter,
{
struct pointer_accelerator *accel =
(struct pointer_accelerator *) filter;
unsigned int offset;
struct pointer_tracker *tracker;
for (offset = 1; offset < accel->trackers.ntrackers; offset++) {
tracker = tracker_by_offset(&accel->trackers, offset);
tracker->time = 0;
tracker->dir = 0;
tracker->delta.x = 0;
tracker->delta.y = 0;
}
tracker = tracker_by_offset(&accel->trackers, 0);
tracker->time = time;
tracker->dir = UNDEFINED_DIRECTION;
reset_trackers(&accel->trackers, time);
}
static void
@ -644,7 +659,7 @@ accelerator_destroy(struct motion_filter *filter)
struct pointer_accelerator *accel =
(struct pointer_accelerator *) filter;
free(accel->trackers.trackers);
free_trackers(&accel->trackers);
free(accel);
}