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.

Cheers,

Simon
>From 667b1cf28e38eab6b1b16d3ad2956b5f4d9686e0 Mon Sep 17 00:00:00 2001
From: Simon Thum <[email protected]>
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

_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to