feat: support for setting tablet calibration matrix; this allows for rotating tablet inputs (#1122)

* feat: support for setting tablet calibration matrix

* Change default matrix
This commit is contained in:
Ivan Chinenov
2025-02-14 08:15:45 +03:00
committed by GitHub
parent 4e17cbb9ea
commit 9e794f358b
2 changed files with 20 additions and 0 deletions
+6
View File
@@ -337,6 +337,8 @@ impl From<TapButtonMap> for input::TapButtonMap {
pub struct Tablet {
#[knuffel(child)]
pub off: bool,
#[knuffel(child, unwrap(arguments))]
pub calibration_matrix: Option<Vec<f32>>,
#[knuffel(child, unwrap(argument))]
pub map_to_output: Option<String>,
#[knuffel(child)]
@@ -3560,6 +3562,8 @@ mod tests {
tablet {
map-to-output "eDP-1"
calibration-matrix 1.0 2.0 3.0 \
4.0 5.0 6.0
}
touch {
@@ -3804,6 +3808,8 @@ mod tests {
},
tablet: Tablet {
off: false,
calibration_matrix: Some(vec![1., 2., 3.,
4., 5., 6.]),
map_to_output: Some("eDP-1".to_owned()),
left_handed: false,
},
+14
View File
@@ -3451,6 +3451,20 @@ pub fn apply_libinput_settings(config: &niri_config::Input, device: &mut input::
} else {
input::SendEventsMode::ENABLED
});
#[rustfmt::skip]
const IDENTITY_MATRIX: [f32; 6] = [
1., 0., 0.,
0., 1., 0.,
];
let _ = device.config_calibration_set_matrix(
c.calibration_matrix
.as_deref()
.and_then(|m| m.try_into().ok())
.or(device.config_calibration_default_matrix())
.unwrap_or(IDENTITY_MATRIX),
);
let _ = device.config_left_handed_set(c.left_handed);
}
}