summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChase Douglas <chase.douglas@canonical.com>2012-02-09 16:22:35 -0800
committerChase Douglas <chase.douglas@canonical.com>2012-03-02 12:07:49 -0800
commitf8a73c54b4cb5116c6e23d646bae0ea5061debfc (patch)
tree8566df83a4dcf951250f016c3fd17b7bf8041104
parent7969af1e7b8a087bf2a6480a859abcc19bdf71ce (diff)
Don't use linear regression when calculating touchpad motion deltas
The results depend on the data rate of the device. A device with a higher data rate, and thus lower individual deltas, will behave differently with the regression calculation. This can be verified on Synaptics semi-mt clickpads. The data rate is halved when two or more touches are on the device. When trying to press a button and drag the cursor with another touch, the motion will feel faster than dragging with only one touch on the device. Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
-rw-r--r--src/synaptics.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/synaptics.c b/src/synaptics.c
index 202ae9b..e80dff8 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -2163,9 +2163,8 @@ get_delta(SynapticsPrivate *priv, const struct SynapticsHwState *hw,
int x_edge_speed = 0;
int y_edge_speed = 0;
- /* HIST is full enough: priv->count_packet_finger > 3 */
- *dx = estimate_delta(hw->x, HIST(0).x, HIST(1).x, HIST(2).x);
- *dy = estimate_delta(hw->y, HIST(0).y, HIST(1).y, HIST(2).y);
+ *dx = hw->x - HIST(0).x;
+ *dy = hw->y - HIST(0).y;
if ((priv->tap_state == TS_DRAG) || para->edge_motion_use_always)
get_edge_speed(priv, hw, edge, &x_edge_speed, &y_edge_speed);
@@ -2234,7 +2233,7 @@ ComputeDeltas(SynapticsPrivate *priv, const struct SynapticsHwState *hw,
* POLL_MS declaration. */
delay = MIN(delay, POLL_MS);
- if (priv->count_packet_finger <= 3) /* min. 3 packets, see get_delta() */
+ if (priv->count_packet_finger <= 1)
goto out; /* skip the lot */
if (priv->moving_state == MS_TRACKSTICK)