Skip to main content

ferroui_linuxframebuffer/input/ev_dev/
ev_dev_touch_screen_device_description.rs

1//! The description of a touch screen (the port of
2//! `EvDevTouchScreenDeviceDescription.cs`).
3
4use ferroui_base::Matrix;
5use std::collections::HashMap;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct EvDevTouchScreenDeviceDescription {
9    pub path: Option<String>,
10    pub calibration_matrix: Matrix,
11}
12
13impl Default for EvDevTouchScreenDeviceDescription {
14    fn default() -> Self {
15        Self { path: None, calibration_matrix: Matrix::IDENTITY }
16    }
17}
18
19impl EvDevTouchScreenDeviceDescription {
20    pub(crate) fn parse_from_env(path: &str, options: &HashMap<String, String>) -> Result<Self, String> {
21        let mut calibration_matrix = Matrix::IDENTITY;
22        if let Some(calibration) = options.get("calibration") {
23            calibration_matrix =
24                Matrix::parse(calibration).map_err(|error| format!("Invalid calibration matrix: {error}"))?;
25        }
26        Ok(Self { path: Some(path.to_owned()), calibration_matrix })
27    }
28}