aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--niri-config/src/lib.rs6
-rw-r--r--src/input/mod.rs14
2 files changed, 20 insertions, 0 deletions
diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs
index 4520d75c..6a9fb682 100644
--- a/niri-config/src/lib.rs
+++ b/niri-config/src/lib.rs
@@ -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,
},
diff --git a/src/input/mod.rs b/src/input/mod.rs
index 8d9e6d82..a2931b85 100644
--- a/src/input/mod.rs
+++ b/src/input/mod.rs
@@ -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);
}
}