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;
};
#include "config.h"
+#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
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.
*/
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 *
#include "config.h"
+#include <stdbool.h>
#include <stdint.h>
struct motion_params {
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,