diff --git a/src/filter-private.h b/src/filter-private.h index 283a747b..dcce1259 100644 --- a/src/filter-private.h +++ b/src/filter-private.h @@ -32,9 +32,12 @@ struct motion_filter_interface { struct motion_params *motion, void *data, uint64_t time); void (*destroy)(struct motion_filter *filter); + bool (*set_speed)(struct motion_filter *filter, + double speed); }; struct motion_filter { + double speed; /* normalized [-1, 1] */ struct motion_filter_interface *interface; }; diff --git a/src/filter.c b/src/filter.c index 5e627e1a..327dbce5 100644 --- a/src/filter.c +++ b/src/filter.c @@ -22,6 +22,7 @@ #include "config.h" +#include #include #include #include @@ -49,6 +50,19 @@ filter_destroy(struct motion_filter *filter) filter->interface->destroy(filter); } +bool +filter_set_speed(struct motion_filter *filter, + double speed) +{ + return filter->interface->set_speed(filter, speed); +} + +double +filter_get_speed(struct motion_filter *filter) +{ + return filter->speed; +} + /* * Default parameters for pointer acceleration profiles. */ @@ -237,9 +251,21 @@ accelerator_destroy(struct motion_filter *filter) free(accel); } +static bool +accelerator_set_speed(struct motion_filter *filter, + double speed) +{ + assert(speed >= -1.0 && speed <= 1.0); + + filter->speed = speed; + + return true; +} + struct motion_filter_interface accelerator_interface = { accelerator_filter, - accelerator_destroy + accelerator_destroy, + accelerator_set_speed, }; struct motion_filter * diff --git a/src/filter.h b/src/filter.h index b79f0e34..1f53e81c 100644 --- a/src/filter.h +++ b/src/filter.h @@ -25,6 +25,7 @@ #include "config.h" +#include #include struct motion_params { @@ -40,6 +41,12 @@ filter_dispatch(struct motion_filter *filter, void filter_destroy(struct motion_filter *filter); +bool +filter_set_speed(struct motion_filter *filter, + double speed); +double +filter_get_speed(struct motion_filter *filter); + typedef double (*accel_profile_func_t)(struct motion_filter *filter, void *data, double velocity,