mirror of
https://github.com/labwc/labwc.git
synced 2025-10-29 05:40:24 -04:00
libinput: add support for touchscreen set matrix
My android pad emit a strange touch input from libinput, need to rotate it in 270 degree clockwise to fix.
This commit is contained in:
parent
8b8652e2b3
commit
bd4d92bad8
5 changed files with 28 additions and 7 deletions
|
|
@ -504,6 +504,9 @@
|
||||||
- tapButtonMap [lrm|lmr]
|
- tapButtonMap [lrm|lmr]
|
||||||
- clickMethod [none|buttonAreas|clickfinger]
|
- clickMethod [none|buttonAreas|clickfinger]
|
||||||
- sendEventsMode [yes|no|disabledOnExternalMouse]
|
- sendEventsMode [yes|no|disabledOnExternalMouse]
|
||||||
|
- calibrationMatrix [six float values split by space],
|
||||||
|
visit https://wayland.freedesktop.org/libinput/doc/latest/absolute-axes.html#calibration-of-absolute-devices
|
||||||
|
for more information
|
||||||
-->
|
-->
|
||||||
<libinput>
|
<libinput>
|
||||||
<device category="default">
|
<device category="default">
|
||||||
|
|
@ -519,6 +522,7 @@
|
||||||
<disableWhileTyping></disableWhileTyping>
|
<disableWhileTyping></disableWhileTyping>
|
||||||
<clickMethod></clickMethod>
|
<clickMethod></clickMethod>
|
||||||
<sendEventsMode></sendEventsMode>
|
<sendEventsMode></sendEventsMode>
|
||||||
|
<calibrationMatrix></calibrationMatrix>
|
||||||
</device>
|
</device>
|
||||||
</libinput>
|
</libinput>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,13 +23,15 @@ struct libinput_category {
|
||||||
int left_handed;
|
int left_handed;
|
||||||
enum libinput_config_tap_state tap;
|
enum libinput_config_tap_state tap;
|
||||||
enum libinput_config_tap_button_map tap_button_map;
|
enum libinput_config_tap_button_map tap_button_map;
|
||||||
int tap_and_drag; /* -1 or libinput_config_drag_state */
|
int tap_and_drag; /* -1 or libinput_config_drag_state */
|
||||||
int drag_lock; /* -1 or libinput_config_drag_lock_state */
|
int drag_lock; /* -1 or libinput_config_drag_lock_state */
|
||||||
int accel_profile; /* -1 or libinput_config_accel_profile */
|
int accel_profile; /* -1 or libinput_config_accel_profile */
|
||||||
int middle_emu; /* -1 or libinput_config_middle_emulation_state */
|
int middle_emu; /* -1 or libinput_config_middle_emulation_state */
|
||||||
int dwt; /* -1 or libinput_config_dwt_state */
|
int dwt; /* -1 or libinput_config_dwt_state */
|
||||||
int click_method; /* -1 or libinput_config_click_method */
|
int click_method; /* -1 or libinput_config_click_method */
|
||||||
int send_events_mode; /* -1 or libinput_config_send_events_mode */
|
int send_events_mode; /* -1 or libinput_config_send_events_mode */
|
||||||
|
bool no_calibration_matrix; /* false if have calibration matrix */
|
||||||
|
float calibration_matrix[6]; /* calibration matrix */
|
||||||
};
|
};
|
||||||
|
|
||||||
enum lab_libinput_device_type get_device_type(const char *s);
|
enum lab_libinput_device_type get_device_type(const char *s);
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ libinput_category_init(struct libinput_category *l)
|
||||||
l->dwt = -1;
|
l->dwt = -1;
|
||||||
l->click_method = -1;
|
l->click_method = -1;
|
||||||
l->send_events_mode = -1;
|
l->send_events_mode = -1;
|
||||||
|
l->no_calibration_matrix = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum lab_libinput_device_type
|
enum lab_libinput_device_type
|
||||||
|
|
|
||||||
|
|
@ -611,6 +611,12 @@ fill_libinput_category(char *nodename, char *content)
|
||||||
} else if (!strcasecmp(nodename, "sendEventsMode")) {
|
} else if (!strcasecmp(nodename, "sendEventsMode")) {
|
||||||
current_libinput_category->send_events_mode =
|
current_libinput_category->send_events_mode =
|
||||||
get_send_events_mode(content);
|
get_send_events_mode(content);
|
||||||
|
} else if (!strcasecmp(nodename, "calibrationMatrix")) {
|
||||||
|
float *m = current_libinput_category->calibration_matrix;
|
||||||
|
int r = sscanf(content, "%f%f%f%f%f%f", &m[0], &m[1], &m[2], &m[3], &m[4], &m[5]);
|
||||||
|
if (r == 6) {
|
||||||
|
current_libinput_category->no_calibration_matrix = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -237,6 +237,14 @@ configure_libinput(struct wlr_input_device *wlr_input_device)
|
||||||
wlr_log(WLR_INFO, "send events mode configured");
|
wlr_log(WLR_INFO, "send events mode configured");
|
||||||
libinput_device_config_send_events_set_mode(libinput_dev, dc->send_events_mode);
|
libinput_device_config_send_events_set_mode(libinput_dev, dc->send_events_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (libinput_device_config_calibration_has_matrix(libinput_dev) == 0
|
||||||
|
|| dc->no_calibration_matrix) {
|
||||||
|
wlr_log(WLR_INFO, "calibration matrix not configured");
|
||||||
|
} else {
|
||||||
|
wlr_log(WLR_INFO, "calibration matrix configured");
|
||||||
|
libinput_device_config_calibration_set_matrix(libinput_dev, dc->calibration_matrix);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct wlr_output *
|
static struct wlr_output *
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue