On Wed, Jun 15, 2011 at 1:06 AM, Daniel Stone <[email protected]> wrote: > > From: Derek Foreman <[email protected]> > > Use better time estimates so we can provide better fake motion events. > This reduces the difference between motion with one and two fingers down > to be almost imperceptible, despite the reporting rate being halved on > PS/2 devices. > > Signed-off-by: Derek Foreman <[email protected]> > Reviewed-by: Daniel Stone <[email protected]> > Reviewed-by: Peter Hutterer <[email protected]> > --- > src/synaptics.c | 10 +++++----- > src/synapticsstr.h | 1 + > 2 files changed, 6 insertions(+), 5 deletions(-) > > diff --git a/src/synaptics.c b/src/synaptics.c > index cfd1384..a68a6fd 100644 > --- a/src/synaptics.c > +++ b/src/synaptics.c > @@ -1808,7 +1808,7 @@ get_edge_speed(SynapticsPrivate *priv, const struct > SynapticsHwState *hw, > * history and return relative co-ordinates. > */ > static void regress(SynapticsPrivate *priv, const struct SynapticsHwState > *hw, > - double *dx, double *dy) > + double *dx, double *dy, unsigned long start_time) > { > const SynapticsParameters *pars = &priv->synpara; > int i, j; > @@ -1841,8 +1841,8 @@ static void regress(SynapticsPrivate *priv, const > struct SynapticsHwState *hw, > xb1 = xb1n/b1d; > yb1 = yb1n/b1d; > > - *dx = -xb1 * (HIST(0).millis - hw->millis); > - *dy = -yb1 * (HIST(0).millis - hw->millis); > + *dx = -xb1 * (start_time - hw->millis); > + *dy = -yb1 * (start_time - hw->millis);
Why not like this... it is slightly easier on the brain, at least for me: + *dx = xb1 * (hw->millis - start_time); + *dy = yb1 * (hw->millis - start_time); > return; > > filtered: > @@ -1864,7 +1864,8 @@ get_delta(SynapticsPrivate *priv, const struct > SynapticsHwState *hw, > Bool outlier = FALSE; > > /* regress() performs the actual motion prediction. */ > - regress(priv, hw, dx, dy); > + regress(priv, hw, dx, dy, priv->last_motion_millis); > + priv->last_motion_millis = hw->millis; > > if ((priv->tap_state == TS_DRAG) || para->edge_motion_use_always) > get_edge_speed(priv, hw, edge, &x_edge_speed, &y_edge_speed); > @@ -2673,7 +2674,6 @@ HandleState(InputInfoPtr pInfo, struct SynapticsHwState > *hw, CARD32 now, > /* generate a history of the absolute positions */ > if (inside_active_area && !from_timer) > store_history(priv, hw->x, hw->y, hw->millis); > - > return delay; > } > > diff --git a/src/synapticsstr.h b/src/synapticsstr.h > index 1290dc1..cdb6d99 100644 > --- a/src/synapticsstr.h > +++ b/src/synapticsstr.h > @@ -199,6 +199,7 @@ typedef struct _SynapticsPrivateRec > int button_delay_millis; /* button delay for 3rd button > emulation */ > Bool prev_up; /* Previous up button value, for > double click emulation */ > enum FingerState finger_state; /* previous finger state */ > + unsigned long last_motion_millis; /* time of the last motion */ > > enum TapState tap_state; /* State of tap processing */ > int tap_max_fingers; /* Max number of fingers seen since > entering start state */ > -- > 1.7.5.3 > > _______________________________________________ > [email protected]: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: http://lists.x.org/mailman/listinfo/xorg-devel _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
