No takers on reviewing this series of patches, eh? Favux, any chance you could test it briefly and report if gestures on Bamboo either improved or at least didn't regress?
They kinda have to improve since 2 finger gestures do not work with stock xf86-input-wacom and upstream kernel drivers. Its a pretty small repo so this is probably easiest way; so you can blow the whole directory away when your done. git clone git://github.com/cbagwell/xf86-input-wacom.git cd xf86-input-wacom git checkout gesture3 Chris On Sun, Aug 28, 2011 at 4:30 PM, <ch...@cnpbagwell.com> wrote: > From: Chris Bagwell <ch...@cnpbagwell.com> > > Gestures will work on wider range of hardware with different > resolutions now. > > Signed-off-by: Chris Bagwell <ch...@cnpbagwell.com> > --- > > I had developed this on a non-wacom touchscreen originally and didn't > bother to test this version on Bamboo. Turned out init order was different > and causing -1 to be seen for some values. Got rid of Default concept for > Gesture info stored in Common structure to prevent being overwrite by -1. > > Pushed to github gesture3 branch. > > src/wcmCommon.c | 8 +++----- > src/wcmTouchFilter.c | 36 ++++++++++++++++++++++++++---------- > src/wcmValidateDevice.c | 12 ++++++------ > src/xf86Wacom.c | 1 + > src/xf86Wacom.h | 2 ++ > src/xf86WacomDefs.h | 4 +--- > 6 files changed, 39 insertions(+), 24 deletions(-) > > diff --git a/src/wcmCommon.c b/src/wcmCommon.c > index e4ff7d9..9e71c37 100644 > --- a/src/wcmCommon.c > +++ b/src/wcmCommon.c > @@ -1393,13 +1393,11 @@ WacomCommonPtr wcmNewCommon(void) > common->wcmFlags = 0; /* various flags */ > common->wcmProtocolLevel = WCM_PROTOCOL_4; /* protocol level */ > common->wcmTPCButton = 0; /* set Tablet PC button on/off */ > - common->wcmGestureParameters.wcmZoomDistance = 50; > - common->wcmGestureParameters.wcmZoomDistanceDefault = 50; > + common->wcmGestureParameters.wcmZoomDistance = -1; > common->wcmGestureParameters.wcmScrollDirection = 0; > - common->wcmGestureParameters.wcmScrollDistance = 20; > - common->wcmGestureParameters.wcmScrollDistanceDefault = 20; > + common->wcmGestureParameters.wcmScrollDistance = -1; > + common->wcmGestureParameters.wcmInlineDistance = -1; > common->wcmGestureParameters.wcmTapTime = 250; > - common->wcmGestureParameters.wcmTapTimeDefault = 250; > common->wcmRotate = ROTATE_NONE; /* default tablet rotation to off */ > common->wcmMaxX = 0; /* max digitizer logical X value */ > common->wcmMaxY = 0; /* max digitizer logical Y value */ > diff --git a/src/wcmTouchFilter.c b/src/wcmTouchFilter.c > index 1600705..0e1e258 100644 > --- a/src/wcmTouchFilter.c > +++ b/src/wcmTouchFilter.c > @@ -24,7 +24,6 @@ > #include <math.h> > > /* Defines for 2FC Gesture */ > -#define WACOM_INLINE_DISTANCE 40 > #define WACOM_HORIZ_ALLOWED 1 > #define WACOM_VERT_ALLOWED 2 > #define WACOM_GESTURE_LAG_TIME 10 > @@ -43,6 +42,20 @@ > static void wcmFingerScroll(WacomDevicePtr priv); > static void wcmFingerZoom(WacomDevicePtr priv); > > +void wcmInitGestureSizes(InputInfoPtr pInfo) > +{ > + WacomDevicePtr priv = (WacomDevicePtr) pInfo->private; > + WacomCommonPtr common = priv->common; > + WacomGesturesParameters *gp = &common->wcmGestureParameters; > + > + if (gp->wcmZoomDistance == -1) > + gp->wcmZoomDistance = priv->maxX * (1600.0 / 14720); > + if (gp->wcmScrollDistance == -1) > + gp->wcmScrollDistance = priv->maxX * (640.0 / 14720); > + if (gp->wcmInlineDistance == -1) > + gp->wcmInlineDistance = priv->maxX * (1280.0 / 14720); > +} > + > static double touchDistance(WacomDeviceState ds0, WacomDeviceState ds1) > { > int xDelta = ds0.x - ds1.x; > @@ -61,17 +74,18 @@ static Bool pointsInLine(WacomCommonPtr common, > WacomDeviceState ds0, > WACOM_HORIZ_ALLOWED : WACOM_VERT_ALLOWED; > int vertical_rotated = (rotated) ? > WACOM_VERT_ALLOWED : WACOM_HORIZ_ALLOWED; > + int inline_distance = common->wcmGestureParameters.wcmInlineDistance; > > if (!common->wcmGestureParameters.wcmScrollDirection) > { > - if ((abs(ds0.x - ds1.x) < WACOM_INLINE_DISTANCE) && > - (abs(ds0.y - ds1.y) > WACOM_INLINE_DISTANCE)) > + if ((abs(ds0.x - ds1.x) < inline_distance) && > + (abs(ds0.y - ds1.y) > inline_distance)) > { > common->wcmGestureParameters.wcmScrollDirection = > horizon_rotated; > ret = TRUE; > } > - if ((abs(ds0.y - ds1.y) < WACOM_INLINE_DISTANCE) && > - (abs(ds0.x - ds1.x) > WACOM_INLINE_DISTANCE)) > + if ((abs(ds0.y - ds1.y) < inline_distance) && > + (abs(ds0.x - ds1.x) > inline_distance)) > { > common->wcmGestureParameters.wcmScrollDirection = > vertical_rotated; > ret = TRUE; > @@ -79,12 +93,12 @@ static Bool pointsInLine(WacomCommonPtr common, > WacomDeviceState ds0, > } > else if (common->wcmGestureParameters.wcmScrollDirection == > vertical_rotated) > { > - if (abs(ds0.y - ds1.y) < WACOM_INLINE_DISTANCE) > + if (abs(ds0.y - ds1.y) < inline_distance) > ret = TRUE; > } > else if (common->wcmGestureParameters.wcmScrollDirection == > horizon_rotated) > { > - if (abs(ds0.x - ds1.x) < WACOM_INLINE_DISTANCE) > + if (abs(ds0.x - ds1.x) < inline_distance) > ret = TRUE; > } > return ret; > @@ -414,6 +428,7 @@ static void wcmFingerScroll(WacomDevicePtr priv) > int midPoint_old = 0; > int i = 0, dist = 0; > WacomFilterState filterd; /* borrow this struct */ > + int inline_distance = common->wcmGestureParameters.wcmInlineDistance; > > DBG(10, priv, "\n"); > > @@ -421,7 +436,7 @@ static void wcmFingerScroll(WacomDevicePtr priv) > { > if (abs(touchDistance(ds[0], ds[1]) - > touchDistance(common->wcmGestureState[0], > - common->wcmGestureState[1])) < WACOM_INLINE_DISTANCE) > + common->wcmGestureState[1])) < inline_distance) > { > /* two fingers stay close to each other all the time > and > * move in vertical or horizontal direction together > @@ -511,6 +526,7 @@ static void wcmFingerZoom(WacomDevicePtr priv) > int count, button; > int dist = touchDistance(common->wcmGestureState[0], > common->wcmGestureState[1]); > + int inline_distance = common->wcmGestureParameters.wcmInlineDistance; > > DBG(10, priv, "\n"); > > @@ -520,13 +536,13 @@ static void wcmFingerZoom(WacomDevicePtr priv) > if (abs(touchDistance(ds[0], ds[1]) - > touchDistance(common->wcmGestureState[0], > common->wcmGestureState[1])) > > - (3 * WACOM_INLINE_DISTANCE)) > + (3 * inline_distance)) > { > /* left button might be down, send it up first */ > wcmSendButtonClick(priv, 1, 0); > > /* fingers moved apart more than 3 times > - * WACOM_INLINE_DISTANCE, zoom mode is entered */ > + * wcmInlineDistance, zoom mode is entered */ > common->wcmGestureMode = GESTURE_ZOOM_MODE; > } > } > diff --git a/src/wcmValidateDevice.c b/src/wcmValidateDevice.c > index e0a78d9..955bdea 100644 > --- a/src/wcmValidateDevice.c > +++ b/src/wcmValidateDevice.c > @@ -878,12 +878,12 @@ Bool wcmParseOptions(InputInfoPtr pInfo, Bool > is_primary, Bool is_dependent) > { > int gesture_is_on; > > - /* GestureDefault was off for all devices > + /* Gesture was off for all devices > * except when multi-touch is supported */ > - common->wcmGestureDefault = 1; > + common->wcmGesture = 1; > > gesture_is_on = xf86SetBoolOption(pInfo->options, "Gesture", > - common->wcmGestureDefault); > + common->wcmGesture); > > if (is_primary || IsTouch(priv)) > common->wcmGesture = gesture_is_on; > @@ -893,15 +893,15 @@ Bool wcmParseOptions(InputInfoPtr pInfo, Bool > is_primary, Bool is_dependent) > > common->wcmGestureParameters.wcmZoomDistance = > xf86SetIntOption(pInfo->options, "ZoomDistance", > - common->wcmGestureParameters.wcmZoomDistanceDefault); > + common->wcmGestureParameters.wcmZoomDistance); > > common->wcmGestureParameters.wcmScrollDistance = > xf86SetIntOption(pInfo->options, "ScrollDistance", > - > common->wcmGestureParameters.wcmScrollDistanceDefault); > + common->wcmGestureParameters.wcmScrollDistance); > > common->wcmGestureParameters.wcmTapTime = > xf86SetIntOption(pInfo->options, "TapTime", > - common->wcmGestureParameters.wcmTapTimeDefault); > + common->wcmGestureParameters.wcmTapTime); > } > > /* Swap stylus buttons 2 and 3 for Tablet PCs */ > diff --git a/src/xf86Wacom.c b/src/xf86Wacom.c > index 16561b5..62738a6 100644 > --- a/src/xf86Wacom.c > +++ b/src/xf86Wacom.c > @@ -436,6 +436,7 @@ static int wcmDevInit(DeviceIntPtr pWcm) > { > wcmInitialToolSize(pInfo); > wcmMappingFactor(pInfo); > + wcmInitGestureSizes(pInfo); > } > > if (!wcmInitAxes(pWcm)) > diff --git a/src/xf86Wacom.h b/src/xf86Wacom.h > index 60353dc..72d06bb 100644 > --- a/src/xf86Wacom.h > +++ b/src/xf86Wacom.h > @@ -128,6 +128,8 @@ Bool wcmAreaListOverlap(WacomToolAreaPtr area, > WacomToolAreaPtr list); > > /* calculate the proper tablet to screen mapping factor */ > void wcmMappingFactor(InputInfoPtr pInfo); > +/* calculate gesture sizes based on tablet sizes */ > +void wcmInitGestureSizes(InputInfoPtr pInfo); > > /* validation */ > extern Bool wcmIsAValidType(InputInfoPtr pInfo, const char* type); > diff --git a/src/xf86WacomDefs.h b/src/xf86WacomDefs.h > index 94eee2e..6e1549a 100644 > --- a/src/xf86WacomDefs.h > +++ b/src/xf86WacomDefs.h > @@ -411,10 +411,9 @@ extern WacomDeviceClass gWacomISDV4Device; > > typedef struct { > int wcmZoomDistance; /* minimum distance for a zoom touch > gesture */ > - int wcmZoomDistanceDefault; /* default minimum distance for a zoom > touch gesture */ > int wcmScrollDistance; /* minimum motion before sending a > scroll gesture */ > int wcmScrollDirection; /* store the vertical or horizontal bit > in use */ > - int wcmScrollDistanceDefault; /* default minimum motion before > sending a scroll gesture */ > + int wcmInlineDistance; /* maximum distance between fingers > for scroll gesture */ > int wcmGestureUsed; /* retain used gesture count within one > in-prox event */ > int wcmTapTime; /* minimum time between taps for a > right click */ > int wcmTapTimeDefault; /* default minimum time between taps > for a right click */ > @@ -480,7 +479,6 @@ struct _WacomCommonRec > int wcmTouch; /* disable/enable touch event */ > int wcmTouchDefault; /* default to disable when not supported > */ > int wcmGesture; /* disable/enable touch gesture */ > - int wcmGestureDefault; /* default touch gesture to disable when > not supported */ > int wcmGestureMode; /* data is in Gesture Mode? */ > WacomDeviceState wcmGestureState[MAX_FINGERS]; /* inital state when in > gesture mode */ > WacomGesturesParameters wcmGestureParameters; > -- > 1.7.6 > > ------------------------------------------------------------------------------ Special Offer -- Download ArcSight Logger for FREE! Finally, a world-class log management solution at an even better price-free! And you'll get a free "Love Thy Logs" t-shirt when you download Logger. Secure your free ArcSight Logger TODAY! http://p.sf.net/sfu/arcsisghtdev2dev _______________________________________________ Linuxwacom-devel mailing list Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel