upright screens take 2

This commit is contained in:
galister
2024-02-06 01:31:44 +01:00
parent 26b1961376
commit 926e5d9ec4
2 changed files with 21 additions and 18 deletions

View File

@@ -19,6 +19,10 @@ fn def_true() -> bool {
true
}
fn def_false() -> bool {
false
}
fn def_one() -> f32 {
1.0
}
@@ -49,6 +53,9 @@ pub struct GeneralConfig {
#[serde(default = "def_osc_port")]
pub osc_out_port: u16,
#[serde(default = "def_false")]
pub upright_screen_fix: bool,
}
impl GeneralConfig {

View File

@@ -507,32 +507,28 @@ where
let logical_ratio = output.logical_size.0 as f32 / output.logical_size.1 as f32;
let physical_ratio = output.size.0 as f32 / output.size.1 as f32;
let logical_rotated =
logical_ratio > 1. && physical_ratio < 1. || logical_ratio < 1. && physical_ratio > 1.;
let angle = if logical_rotated {
0.
} else {
let angle = if session.config.upright_screen_fix {
match output.transform {
Transform::_90 | Transform::Flipped90 => PI / 2.,
Transform::_180 | Transform::Flipped180 => PI,
Transform::_270 | Transform::Flipped270 => -PI / 2.,
_ => 0.,
}
} else {
0.
};
let interaction_transform = if output.size.0 >= output.size.1 {
Affine2::from_translation(Vec2 { x: 0.5, y: 0.5 })
* Affine2::from_scale(Vec2 {
x: 1.,
y: -output.size.0 as f32 / output.size.1 as f32,
})
} else {
Affine2::from_translation(Vec2 { x: 0.5, y: 0.5 })
* Affine2::from_scale(Vec2 {
x: output.size.1 as f32 / output.size.0 as f32,
y: -1.,
})
let center = Vec2 { x:0.5, y:0.5};
let interaction_transform = match output.transform {
Transform::_90 | Transform::Flipped90 =>
Affine2::from_cols(Vec2::NEG_Y * (output.size.0 as f32 / output.size.1 as f32), Vec2::X, center),
Transform::_180 | Transform::Flipped180 =>
Affine2::from_cols(Vec2::NEG_X, Vec2::NEG_Y * (-output.size.0 as f32 / output.size.1 as f32), center),
Transform::_270 | Transform::Flipped270 =>
Affine2::from_cols(Vec2::Y * (output.size.0 as f32 / output.size.1 as f32), Vec2::NEG_X, center),
_ =>
Affine2::from_cols(Vec2::X, Vec2::Y * (-output.size.0 as f32 / output.size.1 as f32), center)
};
Some(OverlayData {