diff --git a/lisgd.c b/lisgd.c index 9d3442b..78f6a3c 100644 --- a/lisgd.c +++ b/lisgd.c @@ -109,19 +109,21 @@ touchup(struct libinput_event *e) ); } - if (xend[slot] > xstart[slot] && fabs(xend[slot] - xstart[slot]) > threshold) { - start = Left; - end = Right; - } else if (xend[slot] < xstart[slot] && fabs(xend[slot] - xstart[slot]) > threshold) { - start = Right; - end = Left; - } else if (yend[slot] > ystart[slot] && fabs(yend[slot] - ystart[slot]) > threshold) { - start = Up; - end = Down; - } else if (yend[slot] < ystart[slot] && fabs(yend[slot] - ystart[slot]) > threshold) { - start = Down; - end = Up; - } else { + int move_x = fabs(xend[slot] - xstart[slot]) > threshold + ? (xend[slot] > xstart[slot] ? 1 : -1) : 0; + int move_y = fabs(yend[slot] - ystart[slot]) > threshold + ? (yend[slot] > ystart[slot] ? 1 : -1) : 0; + switch (move_x * 100 + move_y) { + case -100 -1: start = Right; end = Up; break; + case -100 +0: start = Right; end = Left; break; + case -100 +1: start = Right; end = Down; break; + case +0 -1: start = Down; end = Up; break; + case +0 +1: start = Up; end = Down; break; + case +100 -1: start = Left; end = Up; break; + case +100 +0: start = Left; end = Right; break; + case +100 +1: start = Left; end = Down; break; + case +0 +0: + default: if (verbose) { fprintf(stderr, "Input didn't match a known gesture\n"); }