mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-22 02:01:55 +07:00
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:
@@ -337,6 +337,8 @@ impl From<TapButtonMap> for input::TapButtonMap {
|
|||||||
pub struct Tablet {
|
pub struct Tablet {
|
||||||
#[knuffel(child)]
|
#[knuffel(child)]
|
||||||
pub off: bool,
|
pub off: bool,
|
||||||
|
#[knuffel(child, unwrap(arguments))]
|
||||||
|
pub calibration_matrix: Option<Vec<f32>>,
|
||||||
#[knuffel(child, unwrap(argument))]
|
#[knuffel(child, unwrap(argument))]
|
||||||
pub map_to_output: Option<String>,
|
pub map_to_output: Option<String>,
|
||||||
#[knuffel(child)]
|
#[knuffel(child)]
|
||||||
@@ -3560,6 +3562,8 @@ mod tests {
|
|||||||
|
|
||||||
tablet {
|
tablet {
|
||||||
map-to-output "eDP-1"
|
map-to-output "eDP-1"
|
||||||
|
calibration-matrix 1.0 2.0 3.0 \
|
||||||
|
4.0 5.0 6.0
|
||||||
}
|
}
|
||||||
|
|
||||||
touch {
|
touch {
|
||||||
@@ -3804,6 +3808,8 @@ mod tests {
|
|||||||
},
|
},
|
||||||
tablet: Tablet {
|
tablet: Tablet {
|
||||||
off: false,
|
off: false,
|
||||||
|
calibration_matrix: Some(vec![1., 2., 3.,
|
||||||
|
4., 5., 6.]),
|
||||||
map_to_output: Some("eDP-1".to_owned()),
|
map_to_output: Some("eDP-1".to_owned()),
|
||||||
left_handed: false,
|
left_handed: false,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -3451,6 +3451,20 @@ pub fn apply_libinput_settings(config: &niri_config::Input, device: &mut input::
|
|||||||
} else {
|
} else {
|
||||||
input::SendEventsMode::ENABLED
|
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);
|
let _ = device.config_left_handed_set(c.left_handed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user