On 02/22/2012 10:08 PM, Peter Hutterer wrote:
On Wed, Feb 22, 2012 at 08:11:58PM -0800, Chase Douglas wrote:
On 02/22/2012 07:59 PM, Peter Hutterer wrote:
On Thu, Feb 09, 2012 at 06:53:05PM -0800, Chase Douglas wrote:
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<[email protected]>
---
src/synaptics.c | 7 +++----
1 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/src/synaptics.c b/src/synaptics.c
index dd138ea..9d8f3ee 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -2046,9 +2046,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);
@@ -2118,7 +2117,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)
--
1.7.8.3
uhm, that commit seems a bit too simple. how does this affect other devices?
It doesn't feel any different to me, to be honest. It should affect
all devices equally, too. Many people have been testing it and no
one has mentioned a change in motion behavior.
I think estimate_delta() is mainly used for smoothing out the data
using interpolation. It's used in other parts of the driver too. I
think having the smoothing for pointer motion is unnecessary,
though, since we have acceleration profiles. In other words, there's
too much smoothing going on already, and dropping this doesn't cause
a material difference in the feel of motion.
ok. However that brings up the question - why not remove estimate_delta
altogether then?
estimate_delta is still used for scroll coasting. While we have
smoothing for pointer motion provided by the X.org server, we don't have
smoothing for scrolling. I haven't really thought any deeper about it,
though. That rationalization was good enough for me.
-- Chase
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel