|
@@ -166,16 +166,18 @@ static void mmm_filter_event(struct mmm_data *md, struct input_dev *input)
|
|
if (f->touch) {
|
|
if (f->touch) {
|
|
/* this finger is on the screen */
|
|
/* this finger is on the screen */
|
|
int wide = (f->w > f->h);
|
|
int wide = (f->w > f->h);
|
|
|
|
+ /* divided by two to match visual scale of touch */
|
|
|
|
+ int major = max(f->w, f->h) >> 1;
|
|
|
|
+ int minor = min(f->w, f->h) >> 1;
|
|
|
|
+
|
|
if (!f->prev_touch)
|
|
if (!f->prev_touch)
|
|
f->id = md->id++;
|
|
f->id = md->id++;
|
|
input_event(input, EV_ABS, ABS_MT_TRACKING_ID, f->id);
|
|
input_event(input, EV_ABS, ABS_MT_TRACKING_ID, f->id);
|
|
input_event(input, EV_ABS, ABS_MT_POSITION_X, f->x);
|
|
input_event(input, EV_ABS, ABS_MT_POSITION_X, f->x);
|
|
input_event(input, EV_ABS, ABS_MT_POSITION_Y, f->y);
|
|
input_event(input, EV_ABS, ABS_MT_POSITION_Y, f->y);
|
|
input_event(input, EV_ABS, ABS_MT_ORIENTATION, wide);
|
|
input_event(input, EV_ABS, ABS_MT_ORIENTATION, wide);
|
|
- input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR,
|
|
|
|
- wide ? f->w : f->h);
|
|
|
|
- input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR,
|
|
|
|
- wide ? f->h : f->w);
|
|
|
|
|
|
+ input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, major);
|
|
|
|
+ input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR, minor);
|
|
/* touchscreen emulation: pick the oldest contact */
|
|
/* touchscreen emulation: pick the oldest contact */
|
|
if (!oldest || ((f->id - oldest->id) & (SHRT_MAX + 1)))
|
|
if (!oldest || ((f->id - oldest->id) & (SHRT_MAX + 1)))
|
|
oldest = f;
|
|
oldest = f;
|