summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Osterlund <petero2@telia.com>2005-01-04 00:41:24 +0100
committerPeter Osterlund <petero2@telia.com>2006-04-09 04:03:01 +0200
commitaa8910ec72f4d5b805c59c609f48c55cc3f8adf8 (patch)
tree63745dabec19d87b0889884a65d5d54f4cb3784b
parent6e06fadd324bfdfccce24f028d55fa5c11f75c2b (diff)
Improved edge motion behavior. The speed no longer depends
on the MinSpeed, MaxSpeed and AccelFactor parameters, and it doesn't depend on the packet rate from the touchpad hardware. The EdgeMotionMinSpeed and EdgeMotionMaxSpeed parameters may have to be modified to get the same speed as before this change.
-rw-r--r--README.alps4
-rw-r--r--synaptics.c17
-rw-r--r--synaptics.h9
3 files changed, 14 insertions, 16 deletions
diff --git a/README.alps b/README.alps
index ffa7786..237f489 100644
--- a/README.alps
+++ b/README.alps
@@ -26,8 +26,8 @@ Section "InputDevice"
Option "MinSpeed" "0.2"
Option "MaxSpeed" "0.5"
Option "AccelFactor" "0.01"
- Option "EdgeMotionMinSpeed" "15"
- Option "EdgeMotionMaxSpeed" "15"
+ Option "EdgeMotionMinSpeed" "100"
+ Option "EdgeMotionMaxSpeed" "100"
Option "UpDownScrolling" "1"
Option "CircularScrolling" "1"
Option "CircScrollDelta" "0.1"
diff --git a/synaptics.c b/synaptics.c
index 7a42f7f..cffa803 100644
--- a/synaptics.c
+++ b/synaptics.c
@@ -1160,6 +1160,10 @@ static long ComputeDeltas(SynapticsPrivate *priv, struct SynapticsHwState *hw,
!priv->vert_scroll_on && !priv->horiz_scroll_on && !priv->circ_scroll_on) {
delay = MIN(delay, 13);
if (priv->count_packet_finger > 3) { /* min. 3 packets */
+ double tmpf;
+ int x_edge_speed = 0;
+ int y_edge_speed = 0;
+ double dtime = (hw->millis - MOVE_HIST(1).millis) / 1000.0;
dx = (hw->x - MOVE_HIST(2).x) / 2;
dy = (hw->y - MOVE_HIST(2).y) / 2;
@@ -1169,8 +1173,6 @@ static long ComputeDeltas(SynapticsPrivate *priv, struct SynapticsHwState *hw,
int minSpd = para->edge_motion_min_speed;
int maxSpd = para->edge_motion_max_speed;
int edge_speed;
- int x_edge_speed = 0;
- int y_edge_speed = 0;
if (hw->z <= minZ) {
edge_speed = minSpd;
@@ -1199,8 +1201,6 @@ static long ComputeDeltas(SynapticsPrivate *priv, struct SynapticsHwState *hw,
x_edge_speed = (int)(edge_speed * relX);
y_edge_speed = (int)(edge_speed * relY);
}
- dx += x_edge_speed;
- dy += y_edge_speed;
}
/* speed depending on distance/packet */
@@ -1212,10 +1212,12 @@ static long ComputeDeltas(SynapticsPrivate *priv, struct SynapticsHwState *hw,
speed = para->min_speed;
}
- /* save the fraction for adding to the next priv->count_packet */
- priv->frac_x = xf86modf((dx * speed) + priv->frac_x, &integral);
+ /* save the fraction, report the integer part */
+ tmpf = dx * speed + x_edge_speed * dtime + priv->frac_x;
+ priv->frac_x = xf86modf(tmpf, &integral);
dx = integral;
- priv->frac_y = xf86modf((dy * speed) + priv->frac_y, &integral);
+ tmpf = dy * speed + y_edge_speed * dtime + priv->frac_y;
+ priv->frac_y = xf86modf(tmpf, &integral);
dy = integral;
}
@@ -1236,6 +1238,7 @@ static long ComputeDeltas(SynapticsPrivate *priv, struct SynapticsHwState *hw,
/* generate a history of the absolute positions */
MOVE_HIST(0).x = hw->x;
MOVE_HIST(0).y = hw->y;
+ MOVE_HIST(0).millis = hw->millis;
return delay;
}
diff --git a/synaptics.h b/synaptics.h
index 3e68e24..f96583a 100644
--- a/synaptics.h
+++ b/synaptics.h
@@ -106,15 +106,10 @@ typedef struct _SynapticsSHM
*****************************************************************************/
#define SYNAPTICS_MOVE_HISTORY 5
-typedef struct _SynapticsTapRec
-{
- int x, y;
- unsigned int millis;
-} SynapticsTapRec;
-
typedef struct _SynapticsMoveHist
{
int x, y;
+ unsigned int millis;
} SynapticsMoveHistRec;
enum MidButtonEmulation {
@@ -178,7 +173,7 @@ typedef struct _SynapticsPrivateRec
int tap_max_fingers; /* Max number of fingers seen since entering start state */
int tap_button; /* Which button started the tap processing */
enum TapButtonState tap_button_state; /* Current tap action */
- SynapticsTapRec touch_on; /* data when the touchpad is touched/released */
+ SynapticsMoveHistRec touch_on; /* data when the touchpad is touched/released */
Bool vert_scroll_on; /* scrolling flag */
Bool horiz_scroll_on; /* scrolling flag */