From 2f23f280d5bff3d5aa3f6115ecc05fa73b1cc2bb Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Thu, 13 May 2010 23:21:37 +0200 Subject: Add rotation gesture Moving two fingers around a center point will trigger the gesture. This patch computes the rotation gesture and maps it to mouse buttons 14 and 15. Signed-off-by: Henrik Rydberg --- src/gestures.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/gestures.c') diff --git a/src/gestures.c b/src/gestures.c index 03ec96d..2dafe79 100644 --- a/src/gestures.c +++ b/src/gestures.c @@ -74,7 +74,8 @@ static void extract_movement(struct Gestures *gs, struct MTouch* mt) float xm[DIM_FINGER], ym[DIM_FINGER]; float xpos = 0, ypos = 0; float move, xmove = 0, ymove = 0; - float rad, rad2 = 0, scale = 0; + float rad, rad2 = 0, scale = 0, rot = 0; + if (!nmove || nmove != npoint) return; @@ -116,13 +117,23 @@ static void extract_movement(struct Gestures *gs, struct MTouch* mt) rad2 += yp[i] * yp[i]; scale += xp[i] * xm[i]; scale += yp[i] * ym[i]; + rot += xp[i] * ym[i]; + rot -= yp[i] * xm[i]; } rad2 /= nmove; scale /= nmove; + rot /= nmove; rad = sqrt(rad2); scale /= rad; + rot /= rad; - if (abs(scale) > move) { + if (abs(rot) > move && abs(rot) > abs(scale)) { + gs->rot = rot; + if (gs->rot) { + if (nmove == 2) + SETBIT(gs->type, GS_ROTATE); + } + } else if (abs(scale) > move) { gs->scale = scale; if (gs->scale) { if (nmove == 2) -- cgit v1.2.3