aboutsummaryrefslogtreecommitdiff
path: root/niri-config/src
diff options
context:
space:
mode:
authoraxtloss <axtlos@getcryst.al>2024-01-28 14:25:40 +0100
committerIvan Molodetskikh <yalterz@gmail.com>2024-01-31 23:02:38 +0400
commit962e159db61dc6c7822aa899b1d9dc86fb6a0de5 (patch)
tree9ebdc148d411230cf33e5b4abcd1880af484d8e7 /niri-config/src
parent11bff3a2f1aa069a998cd6710dd06467acb73920 (diff)
downloadniri-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.rs54
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,