diff options
| author | axtloss <axtlos@getcryst.al> | 2024-01-28 14:25:40 +0100 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-01-31 23:02:38 +0400 |
| commit | 962e159db61dc6c7822aa899b1d9dc86fb6a0de5 (patch) | |
| tree | 9ebdc148d411230cf33e5b4abcd1880af484d8e7 /niri-config/src | |
| parent | 11bff3a2f1aa069a998cd6710dd06467acb73920 (diff) | |
| download | niri-962e159db61dc6c7822aa899b1d9dc86fb6a0de5.tar.gz niri-962e159db61dc6c7822aa899b1d9dc86fb6a0de5.tar.bz2 niri-962e159db61dc6c7822aa899b1d9dc86fb6a0de5.zip | |
Add option to rotate outputs
Diffstat (limited to 'niri-config/src')
| -rw-r--r-- | niri-config/src/lib.rs | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs index 03b39390..98d2097e 100644 --- a/niri-config/src/lib.rs +++ b/niri-config/src/lib.rs @@ -187,6 +187,8 @@ pub struct Output { pub name: String, #[knuffel(child, unwrap(argument), default = 1.)] pub scale: f64, + #[knuffel(child, unwrap(argument, str), default = Transform::Normal)] + pub transform: Transform, #[knuffel(child)] pub position: Option<Position>, #[knuffel(child, unwrap(argument, str))] @@ -199,12 +201,62 @@ impl Default for Output { off: false, name: String::new(), scale: 1., + transform: Transform::Normal, position: None, mode: None, } } } +/// Output transform, which goes counter-clockwise. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum Transform { + Normal, + _90, + _180, + _270, + Flipped, + Flipped90, + Flipped180, + Flipped270, +} + +impl FromStr for Transform { + type Err = miette::Error; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + match s { + "normal" => Ok(Self::Normal), + "90" => Ok(Self::_90), + "180" => Ok(Self::_180), + "270" => Ok(Self::_270), + "flipped" => Ok(Self::Flipped), + "flipped-90" => Ok(Self::Flipped90), + "flipped-180" => Ok(Self::Flipped180), + "flipped-270" => Ok(Self::Flipped270), + _ => Err(miette!(concat!( + r#"invalid transform, can be "90", "180", "270", "#, + r#""flipped", "flipped-90", "flipped-180" or "flipped-270""# + ))), + } + } +} + +impl From<Transform> for smithay::utils::Transform { + fn from(value: Transform) -> Self { + match value { + Transform::Normal => Self::Normal, + Transform::_90 => Self::_90, + Transform::_180 => Self::_180, + Transform::_270 => Self::_270, + Transform::Flipped => Self::Flipped, + Transform::Flipped90 => Self::Flipped90, + Transform::Flipped180 => Self::Flipped180, + Transform::Flipped270 => Self::Flipped270, + } + } +} + #[derive(knuffel::Decode, Debug, Clone, Copy, PartialEq, Eq)] pub struct Position { #[knuffel(property)] @@ -726,6 +778,7 @@ mod tests { output "eDP-1" { scale 2.0 + transform "flipped-90" position x=10 y=20 mode "1920x1080@144" } @@ -826,6 +879,7 @@ mod tests { off: false, name: "eDP-1".to_owned(), scale: 2., + transform: Transform::Flipped90, position: Some(Position { x: 10, y: 20 }), mode: Some(Mode { width: 1920, |
