diff options
-rw-r--r-- | dix/ptrveloc.c | 65 |
1 files changed, 33 insertions, 32 deletions
diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c index a1f6e7aa5..95a7c711b 100644 --- a/dix/ptrveloc.c +++ b/dix/ptrveloc.c @@ -75,7 +75,8 @@ CleanupFilterChain(DeviceVelocityPtr s); static float SimpleSmoothProfile(DeviceVelocityPtr pVel, float velocity, float threshold, float acc); - +static PointerAccelerationProfileFunc +GetAccelerationProfile(DeviceVelocityPtr s, int profile_num); /*#define PTRACCEL_DEBUGGING*/ @@ -675,52 +676,52 @@ LinearProfile( } -/** - * Set the profile by number. - * Intended to make profiles exchangeable at runtime. - * If you created a profile, give it a number here and in the header to - * make it selectable. In case some profile-specific init is needed, here - * would be a good place, since FreeVelocityData() also calls this with -1. - * returns FALSE (0) if profile number is unavailable. - */ -int -SetAccelerationProfile( +static PointerAccelerationProfileFunc +GetAccelerationProfile( DeviceVelocityPtr s, int profile_num) { - PointerAccelerationProfileFunc profile; switch(profile_num){ - case -1: - profile = NULL; /* Special case to uninit properly */ - break; case AccelProfileClassic: - profile = ClassicProfile; - break; + return ClassicProfile; case AccelProfileDeviceSpecific: - if(NULL == s->deviceSpecificProfile) - return FALSE; - profile = s->deviceSpecificProfile; - break; + return s->deviceSpecificProfile; case AccelProfilePolynomial: - profile = PolynomialAccelerationProfile; - break; + return PolynomialAccelerationProfile; case AccelProfileSmoothLinear: - profile = SmoothLinearProfile; - break; + return SmoothLinearProfile; case AccelProfileSimple: - profile = SimpleSmoothProfile; - break; + return SimpleSmoothProfile; case AccelProfilePower: - profile = PowerProfile; - break; + return PowerProfile; case AccelProfileLinear: - profile = LinearProfile; - break; + return LinearProfile; case AccelProfileReserved: /* reserved for future use, e.g. a user-defined profile */ default: - return FALSE; + return NULL; } +} + +/** + * Set the profile by number. + * Intended to make profiles exchangeable at runtime. + * If you created a profile, give it a number here and in the header to + * make it selectable. In case some profile-specific init is needed, here + * would be a good place, since FreeVelocityData() also calls this with -1. + * returns FALSE (0) if profile number is unavailable. + */ +int +SetAccelerationProfile( + DeviceVelocityPtr s, + int profile_num) +{ + PointerAccelerationProfileFunc profile; + profile = GetAccelerationProfile(s, profile_num); + + if(profile == NULL && profile_num != -1) + return FALSE; + if(s->profile_private != NULL){ /* Here one could free old profile-private data */ xfree(s->profile_private); |