On Sun, Aug 28, 2011 at 04:30:43PM -0500, [email protected] wrote:
> From: Chris Bagwell <[email protected]>
>
> Gestures will work on wider range of hardware with different
> resolutions now.
>
> Signed-off-by: Chris Bagwell <[email protected]>
> ---
>
> 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.
sorry, saw that one too late. Same comments apply, other than that you
obviously already got id of the now-unused default.
Cheers,
Peter
> 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
>
>
> ------------------------------------------------------------------------------
> EMC VNX: the world's simplest storage, starting under $10K
> The only unified storage solution that offers unified management
> Up to 160% more powerful than alternatives and 25% more efficient.
> Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev
> _______________________________________________
> Linuxwacom-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel
>
------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel