aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenrik Rydberg <rydberg@alnilam.(none)>2010-02-01 20:26:21 +0100
committerHenrik Rydberg <rydberg@alnilam.(none)>2010-02-01 20:44:43 +0100
commit011634a6f8df4fb6b6c24dc173680b96c7fb16f1 (patch)
treef2f68a110978e9e4049582791ef14ff2c5ff3cf9
parent0571c36648079b79cb38c9969c865cd9f982aef4 (diff)
downloadxorg-input-kobomultitouch-011634a6f8df4fb6b6c24dc173680b96c7fb16f1.tar.gz
xorg-input-kobomultitouch-011634a6f8df4fb6b6c24dc173680b96c7fb16f1.tar.bz2
xorg-input-kobomultitouch-011634a6f8df4fb6b6c24dc173680b96c7fb16f1.zip
button: simplify button handling
Make better use of the bit representation, reducing one layer of conversion.
-rw-r--r--src/gestures.c10
-rw-r--r--src/gestures.h2
-rw-r--r--src/multitouch.c13
3 files changed, 10 insertions, 15 deletions
diff --git a/src/gestures.c b/src/gestures.c
index 89dad1a..0b0ba1d 100644
--- a/src/gestures.c
+++ b/src/gestures.c
@@ -57,14 +57,8 @@ void extract_gestures(struct Gestures *gs, struct MTouch* mt)
if (nsf == 3)
mt->ns.button = BITMASK(MT_BUTTON_MIDDLE);
}
- for (i = 0; i < DIM_BUTTON; i++) {
- if (GETBIT(mt->ns.button, i) != GETBIT(mt->os.button, i)) {
- SETBIT(gs->type, GS_BUTTON);
- gs->btix[gs->nbt] = i + 1;
- gs->btval[gs->nbt] = GETBIT(mt->ns.button, i);
- gs->nbt++;
- }
- }
+ gs->btmask = (mt->ns.button ^ mt->os.button) & BITONES(DIM_BUTTON);
+ gs->btdata = mt->ns.button & BITONES(DIM_BUTTON);
mt->os = mt->ns;
}
diff --git a/src/gestures.h b/src/gestures.h
index 4b2d948..f83cae2 100644
--- a/src/gestures.h
+++ b/src/gestures.h
@@ -37,7 +37,7 @@
struct Gestures {
unsigned type;
int dx, dy;
- int nbt, btix[DIM_BUTTON], btval[DIM_BUTTON];
+ button_t btmask, btdata;
};
////////////////////////////////////////////////////////
diff --git a/src/multitouch.c b/src/multitouch.c
index f6e5305..fa966ce 100644
--- a/src/multitouch.c
+++ b/src/multitouch.c
@@ -231,12 +231,13 @@ static void handle_gestures(LocalDevicePtr local,
int hstep = 1 +
hscroll_fraction * (caps->abs_position_x.maximum -
caps->abs_position_x.minimum);
- int i;
- for (i = 0; i < gs->nbt; i++) {
- xf86PostButtonEvent(local->dev, FALSE,
- gs->btix[i], gs->btval[i],
- 0, 0);
- TRACE2("button: %d %d\n", gs->btix[i], gs->btval[i]);
+ int i;
+ for (i = 0; i < DIM_BUTTON; i++) {
+ if (GETBIT(gs->btmask, i)) {
+ xf86PostButtonEvent(local->dev, FALSE,
+ i + 1, GETBIT(gs->btdata, i), 0, 0);
+ TRACE2("button bit: %d %d\n", i, GETBIT(gs->btdata, i));
+ }
}
if (GETBIT(gs->type, GS_MOVE)) {
xf86PostMotionEvent(local->dev, 0, 0, 2,