summaryrefslogtreecommitdiff
path: root/src/mtstate.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mtstate.c')
-rw-r--r--src/mtstate.c45
1 files changed, 18 insertions, 27 deletions
diff --git a/src/mtstate.c b/src/mtstate.c
index 2403765..7a8ef19 100644
--- a/src/mtstate.c
+++ b/src/mtstate.c
@@ -34,7 +34,7 @@ void init_mtstate(struct MTState *s)
34 memset(s, 0, sizeof(struct MTState)); 34 memset(s, 0, sizeof(struct MTState));
35} 35}
36 36
37static int touching_finger(const struct FingerData *hw, 37static int touching_finger(const struct FingerState *hw,
38 const struct Capabilities *caps) 38 const struct Capabilities *caps)
39{ 39{
40 if (caps->has_abs[BIT_TOUCH_MAJOR] && caps->has_abs[BIT_WIDTH_MAJOR]) 40 if (caps->has_abs[BIT_TOUCH_MAJOR] && caps->has_abs[BIT_WIDTH_MAJOR])
@@ -52,8 +52,8 @@ static int touching_finger(const struct FingerData *hw,
52 * by all three values touch_major, width_minor, and trackpad size. 52 * by all three values touch_major, width_minor, and trackpad size.
53 * 53 *
54 */ 54 */
55static int thumb_finger(const struct FingerData *hw, 55static int is_thumb(const struct FingerState *hw,
56 const struct Capabilities *caps) 56 const struct Capabilities *caps)
57{ 57{
58 if (!caps->has_abs[BIT_TOUCH_MAJOR] || 58 if (!caps->has_abs[BIT_TOUCH_MAJOR] ||
59 !caps->has_abs[BIT_TOUCH_MINOR] || 59 !caps->has_abs[BIT_TOUCH_MINOR] ||
@@ -66,26 +66,17 @@ static int thumb_finger(const struct FingerData *hw,
66 hw->width_major > THUMB_WIDTH_SIZE(hw, caps); 66 hw->width_major > THUMB_WIDTH_SIZE(hw, caps);
67} 67}
68 68
69static int set_finger(struct MTFinger *f,
70 const struct FingerState *fs,
71 const struct Capabilities *caps)
72{
73 f->hw = fs->hw;
74 f->id = fs->id;
75 f->thumb = thumb_finger(&fs->hw, caps);
76}
77
78void extract_mtstate(struct MTState *s, 69void extract_mtstate(struct MTState *s,
79 const struct HWState *hs, 70 const struct HWState *hs,
80 const struct Capabilities *caps) 71 const struct Capabilities *caps)
81{ 72{
82 int i; 73 int i;
83
84 s->nfinger = 0; 74 s->nfinger = 0;
85 for (i = 0; i < hs->nfinger; i++) { 75 foreach_bit(i, hs->used) {
86 if (!touching_finger(&hs->finger[i].hw, caps)) 76 if (!touching_finger(&hs->data[i], caps))
87 continue; 77 continue;
88 set_finger(&s->finger[s->nfinger], &hs->finger[i], caps); 78 s->finger[s->nfinger] = hs->data[i];
79 MODBIT(s->thumb, s->nfinger, is_thumb(&hs->data[i], caps));
89 s->nfinger++; 80 s->nfinger++;
90 } 81 }
91 82
@@ -93,12 +84,12 @@ void extract_mtstate(struct MTState *s,
93 s->evtime = hs->evtime; 84 s->evtime = hs->evtime;
94} 85}
95 86
96const struct MTFinger *find_finger(const struct MTState *s, int id) 87const struct FingerState *find_finger(const struct MTState *s, int id)
97{ 88{
98 int i; 89 int i;
99 90
100 for (i = 0; i < s->nfinger; i++) 91 for (i = 0; i < s->nfinger; i++)
101 if (s->finger[i].id == id) 92 if (s->finger[i].tracking_id == id)
102 return s->finger + i; 93 return s->finger + i;
103 94
104 return NULL; 95 return NULL;
@@ -119,14 +110,14 @@ void output_mtstate(const struct MTState *s)
119 xf86Msg(X_INFO, 110 xf86Msg(X_INFO,
120 " %+02d %+05d:%+05d +%05d:%+05d " 111 " %+02d %+05d:%+05d +%05d:%+05d "
121 "%+06d %+06d %+05d:%+05d\n", 112 "%+06d %+06d %+05d:%+05d\n",
122 s->finger[i].id, 113 s->finger[i].tracking_id,
123 s->finger[i].hw.touch_major, 114 s->finger[i].touch_major,
124 s->finger[i].hw.touch_minor, 115 s->finger[i].touch_minor,
125 s->finger[i].hw.width_major, 116 s->finger[i].width_major,
126 s->finger[i].hw.width_minor, 117 s->finger[i].width_minor,
127 s->finger[i].hw.orientation, 118 s->finger[i].orientation,
128 s->finger[i].hw.pressure, 119 s->finger[i].pressure,
129 s->finger[i].hw.position_x, 120 s->finger[i].position_x,
130 s->finger[i].hw.position_y); 121 s->finger[i].position_y);
131 } 122 }
132} 123}