[PATCH] fixes to pointer acceleration
Peter Hutterer
peter.hutterer at who-t.net
Wed May 6 23:15:10 PDT 2009
On Wed, May 06, 2009 at 10:39:16AM +0200, Simon Thum wrote:
> Peter Hutterer wrote:
>> Please add in the commit message why it's ok to remove the "reserved" profile,
>> just in case someone has to figure that out at a later point in time.
> I didn't do that in this patch. Attached patch removes 'reserved' and
> provides some more reasoning in the commit msg.
>
> From 667b1cf28e38eab6b1b16d3ad2956b5f4d9686e0 Mon Sep 17 00:00:00 2001
> From: Simon Thum <simon.thum at gmx.de>
> Date: Tue, 28 Apr 2009 10:11:32 +0200
> Subject: [PATCH] dix: add 'none' pointer acceleration profile with number -1
>
> This is a shorthand for disabling acceleration, while retaining the
> possiblity to use constant deceleration. If constant deceleration is
> also unused, it will optimize motion processing.
>
> Other possiblities to deactivate acceleration were quite hidden,
> and didn't always work as expected. E.g. xset m 1 1 would retain
> adaptive deceleration, while xset m 1 0 would not (in the default
> profile).
>
> Also removes the 'reserved' profile; it was unused and it's trivial
> to add new ones anyway.
> ---
> dix/ptrveloc.c | 36 ++++++++++++++++++++++++++++--------
> include/ptrveloc.h | 7 +++----
> 2 files changed, 31 insertions(+), 12 deletions(-)
>
> diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c
> index 7fa4200..dd26477 100644
> --- a/dix/ptrveloc.c
> +++ b/dix/ptrveloc.c
> @@ -77,9 +77,12 @@ GetAccelerationProfile(DeviceVelocityPtr s, int profile_num);
> #endif
>
> /********************************
> - * Init/Uninit etc
> + * Init/Uninit
> *******************************/
>
> +/* some int which is not a profile number */
> +#define PROFILE_UNINITIALIZE (-100)
> +
> /**
> * Init struct so it should match the average case
> */
> @@ -108,7 +111,7 @@ InitVelocityData(DeviceVelocityPtr s)
> static void
> FreeVelocityData(DeviceVelocityPtr s){
> xfree(s->tracker);
> - SetAccelerationProfile(s, -1);
> + SetAccelerationProfile(s, PROFILE_UNINITIALIZE);
> }
>
>
> @@ -824,6 +827,16 @@ LinearProfile(
> }
>
>
> +static float
> +NoProfile(
> + DeviceVelocityPtr pVel,
> + float velocity,
> + float threshold,
> + float acc)
> +{
> + return 1.0f;
> +}
> +
> static PointerAccelerationProfileFunc
> GetAccelerationProfile(
> DeviceVelocityPtr s,
> @@ -844,8 +857,8 @@ GetAccelerationProfile(
> return PowerProfile;
> case AccelProfileLinear:
> return LinearProfile;
> - case AccelProfileReserved:
> - /* reserved for future use, e.g. a user-defined profile */
> + case AccelProfileNone:
> + return NoProfile;
> default:
> return NULL;
> }
> @@ -856,8 +869,10 @@ GetAccelerationProfile(
> * 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.
> + * would be a good place, since FreeVelocityData() also calls this with
> + * PROFILE_UNINITIALIZE.
> + *
> + * returns FALSE if profile number is unavailable, TRUE otherwise.
> */
> int
> SetAccelerationProfile(
> @@ -867,7 +882,7 @@ SetAccelerationProfile(
> PointerAccelerationProfileFunc profile;
> profile = GetAccelerationProfile(s, profile_num);
>
> - if(profile == NULL && profile_num != -1)
> + if(profile == NULL && profile_num != PROFILE_UNINITIALIZE)
> return FALSE;
>
> if(s->profile_private != NULL){
> @@ -955,6 +970,11 @@ acceleratePointerPredictable(
> if (!num_valuators || !valuators || !velocitydata)
> return;
>
> + if (velocitydata->statistics.profile_number == AccelProfileNone &&
> + velocitydata->const_acceleration == 1.0f) {
> + return; /*we're inactive anyway, so skip the whole thing.*/
> + }
> +
> if (first_valuator == 0) {
> dx = valuators[0];
> px = &valuators[0];
> @@ -988,7 +1008,7 @@ acceleratePointerPredictable(
> /* Since it may not be apparent: lrintf() does not offer
> * strong statements about rounding; however because we
> * process each axis conditionally, there's no danger
> - * of a toggling remainder. Its lack of guarantees hopefully
> + * of a toggling remainder. Its lack of guarantees likely
> * makes it faster on the average target. */
> *px = lrintf(tmp);
> pDev->last.remainder[0] = tmp - (float)*px;
> diff --git a/include/ptrveloc.h b/include/ptrveloc.h
> index 6ef8c75..83d188c 100644
> --- a/include/ptrveloc.h
> +++ b/include/ptrveloc.h
> @@ -27,9 +27,9 @@
>
> #include <input.h> /* DeviceIntPtr */
>
> -/* constants for acceleration profiles;
> - * see */
> +/* constants for acceleration profiles */
>
> +#define AccelProfileNone -1
> #define AccelProfileClassic 0
> #define AccelProfileDeviceSpecific 1
> #define AccelProfilePolynomial 2
> @@ -37,8 +37,7 @@
> #define AccelProfileSimple 4
> #define AccelProfilePower 5
> #define AccelProfileLinear 6
> -#define AccelProfileReserved 7
> -#define AccelProfileLAST AccelProfileReserved
> +#define AccelProfileLAST AccelProfileLinear
>
> /* fwd */
> struct _DeviceVelocityRec;
> --
> 1.6.0.6
thanks, merged.
Cheers,
Peter
More information about the xorg-devel
mailing list