diff options
| author | Henrik Rydberg <rydberg@euromail.se> | 2008-11-08 16:01:51 +0100 |
|---|---|---|
| committer | Henrik Rydberg <rydberg@euromail.se> | 2008-11-08 16:01:51 +0100 |
| commit | 809b43cb3bac52ad87228a458dcd3dbf11180c97 (patch) | |
| tree | ffc51f2d9fa6a76e85170bb0ac1279931e722a4c /src/state.c | |
| parent | 9f6a75a35de8d05a8ae2e8b5d5cd10d960d4de4b (diff) | |
cleanup
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Diffstat (limited to 'src/state.c')
| -rw-r--r-- | src/state.c | 55 |
1 files changed, 19 insertions, 36 deletions
diff --git a/src/state.c b/src/state.c index e5ca1c1..1391322 100644 --- a/src/state.c +++ b/src/state.c | |||
| @@ -36,12 +36,6 @@ static void set_finger(struct FingerState* fs, | |||
| 36 | fs->hw.width_minor = hw->width_major; | 36 | fs->hw.width_minor = hw->width_major; |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | inline bool good_finger(const struct FingerState* fs) | ||
| 40 | { | ||
| 41 | return fs->hw.touch_major > 0 && fs->hw.width_major > 0 && | ||
| 42 | fs->hw.touch_minor > 0 && fs->hw.width_minor > 0; | ||
| 43 | } | ||
| 44 | |||
| 45 | /******************************************************/ | 39 | /******************************************************/ |
| 46 | 40 | ||
| 47 | void modify_state(struct State *s, | 41 | void modify_state(struct State *s, |
| @@ -49,43 +43,30 @@ void modify_state(struct State *s, | |||
| 49 | const struct Capabilities* caps) | 43 | const struct Capabilities* caps) |
| 50 | { | 44 | { |
| 51 | float A[DIM2_FINGER], *row; | 45 | float A[DIM2_FINGER], *row; |
| 52 | int id[DIM_FINGER], index[DIM_FINGER], i, j; | 46 | int sid[DIM_FINGER], hw2s[DIM_FINGER], id, sk, hwk; |
| 53 | struct FingerState *fs = s->finger; | 47 | |
| 54 | 48 | /* setup distance matrix for finger id matching */ | |
| 55 | for (j = 0; j < s->nfinger; j++) { | 49 | for (sk = 0; sk < s->nfinger; sk++) { |
| 56 | id[j] = s->finger[j].id; | 50 | sid[sk] = s->finger[sk].id; |
| 57 | row = A + hw->nfinger * j; | 51 | row = A + hw->nfinger * sk; |
| 58 | for (i = 0; i < hw->nfinger; i++) | 52 | for (hwk = 0; hwk < hw->nfinger; hwk++) |
| 59 | row[i] = dist2(&hw->finger[i], &s->finger[j].hw); | 53 | row[hwk] = dist2(&hw->finger[hwk], &s->finger[sk].hw); |
| 60 | } | 54 | } |
| 61 | 55 | ||
| 62 | match_fingers(index, A, hw->nfinger, s->nfinger); | 56 | match_fingers(hw2s, A, hw->nfinger, s->nfinger); |
| 63 | 57 | ||
| 64 | /* update matched fingers and create new ones */ | 58 | /* update matched fingers and create new ones */ |
| 65 | for (i = 0; i < hw->nfinger; i++) { | 59 | for (hwk = 0; hwk < hw->nfinger; hwk++) { |
| 66 | j = index[i]; | 60 | sk = hw2s[hwk]; |
| 67 | if (j >= 0) | 61 | id = sk < 0 ? s->nextid++ : sid[sk]; |
| 68 | set_finger(fs, hw->finger + i, id[j], caps); | 62 | set_finger(s->finger + hwk, hw->finger + hwk, id, caps); |
| 69 | else | ||
| 70 | set_finger(fs, hw->finger + i, ++s->lastid, caps); | ||
| 71 | if (good_finger(fs)) | ||
| 72 | fs++; | ||
| 73 | } | 63 | } |
| 74 | s->nfinger = fs - s->finger; | 64 | |
| 65 | s->button = hw->button; | ||
| 66 | s->nfinger = hw->nfinger; | ||
| 75 | 67 | ||
| 76 | /* sort fingers in touching order */ | 68 | /* sort fingers in touching order */ |
| 77 | qsort(s->finger, s->nfinger, sizeof(struct FingerState), fincmp); | 69 | qsort(s->finger, s->nfinger, sizeof(struct FingerState), fincmp); |
| 78 | |||
| 79 | /* make sure wrap-around does not create very strange effects */ | ||
| 80 | if (s->lastid > INT_MAX / 2) { | ||
| 81 | s->lastid = 0; | ||
| 82 | for (j = 0; j < s->nfinger; j++) | ||
| 83 | s->finger[j].id = ++s->lastid; | ||
| 84 | } | ||
| 85 | |||
| 86 | /* copy buttons */ | ||
| 87 | for (i = 0; i < DIM_BUTTON; i++) | ||
| 88 | s->button[i] = hw->button[i]; | ||
| 89 | } | 70 | } |
| 90 | 71 | ||
| 91 | /******************************************************/ | 72 | /******************************************************/ |
| @@ -107,7 +88,9 @@ void output_state(const struct State *s) | |||
| 107 | { | 88 | { |
| 108 | int i; | 89 | int i; |
| 109 | xf86Msg(X_INFO, "buttons: %d%d%d\n", | 90 | xf86Msg(X_INFO, "buttons: %d%d%d\n", |
| 110 | s->button[0], s->button[1], s->button[2]); | 91 | GETBIT(s->button, MT_BUTTON_LEFT), |
| 92 | GETBIT(s->button, MT_BUTTON_MIDDLE), | ||
| 93 | GETBIT(s->button, MT_BUTTON_RIGHT)); | ||
| 111 | xf86Msg(X_INFO, "fingers: %d\n", | 94 | xf86Msg(X_INFO, "fingers: %d\n", |
| 112 | s->nfinger); | 95 | s->nfinger); |
| 113 | for (i = 0; i < s->nfinger; i++) { | 96 | for (i = 0; i < s->nfinger; i++) { |
