From 0a5186a089ea1c32ab3c871cfb37ae92a324d0af Mon Sep 17 00:00:00 2001 From: Corbin Crutchley Date: Fri, 3 Jul 2026 08:48:22 -0700 Subject: [PATCH] fix: monitors no longer overlap --- .../src/compositor/output.rs | 8 ++++---- crates/hearthspace-settings/src/main.rs | 19 +++++++++---------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/crates/hearthspace-compositor/src/compositor/output.rs b/crates/hearthspace-compositor/src/compositor/output.rs index 824776b..fd6ea62 100644 --- a/crates/hearthspace-compositor/src/compositor/output.rs +++ b/crates/hearthspace-compositor/src/compositor/output.rs @@ -163,7 +163,7 @@ fn secondary_descriptors_for_layout( impl OutputRecord { fn logical_size(&self) -> Size { - self.size.to_logical(self.scale) + Size::from((self.size.w, self.size.h)) } fn logical_rect(&self) -> Rectangle { @@ -259,7 +259,7 @@ struct OutputGeometry { impl OutputGeometry { fn logical_size(&self) -> Size { - self.size.to_logical(self.scale) + Size::from((self.size.w, self.size.h)) } } @@ -805,7 +805,7 @@ mod tests { } #[test] - fn output_layout_applies_saved_scale_to_logical_size() { + fn output_layout_keeps_scaled_outputs_at_physical_layout_size() { let plan = output_locations_for_layout( geometry_with_size("eDP-1", 2560, 1440), vec![geometry_with_size("HDMI-A-1", 1920, 1080)], @@ -833,7 +833,7 @@ mod tests { assert_eq!(plan.primary, Point::from((0, 0))); assert_eq!(plan.primary_scale, 2); - assert_eq!(plan.secondary_location("HDMI-A-1"), Point::from((1280, 0))); + assert_eq!(plan.secondary_location("HDMI-A-1"), Point::from((2560, 0))); assert_eq!(plan.secondary_scale("HDMI-A-1"), Some(1)); } diff --git a/crates/hearthspace-settings/src/main.rs b/crates/hearthspace-settings/src/main.rs index cead4b2..f4c80c2 100644 --- a/crates/hearthspace-settings/src/main.rs +++ b/crates/hearthspace-settings/src/main.rs @@ -164,7 +164,7 @@ fn monitor_details_view(state: &SettingsApp) -> Box> flex_col(( label(format!("Selected: {}", monitor.name)), label(format!( - "Physical: {}x{} | Logical: {}x{} | Position: {},{}", + "Physical: {}x{} | Desktop: {}x{} | Position: {},{}", monitor.width, monitor.height, monitor_logical_width(monitor), @@ -460,9 +460,8 @@ fn monitor_logical_height(monitor: &MonitorConfig) -> i32 { logical_dimension(monitor.height, monitor.scale) } -fn logical_dimension(size: i32, scale: i32) -> i32 { - let scale = scale.max(1); - (size.max(1) / scale).max(1) +fn logical_dimension(size: i32, _scale: i32) -> i32 { + size.max(1) } fn default_placeholder_monitors(monitors: &[MonitorConfig]) -> bool { @@ -1302,11 +1301,11 @@ mod tests { ); assert_eq!(monitors[0].scale, 2); - assert_eq!(monitor_logical_width(&monitors[0]), 1280); + assert_eq!(monitor_logical_width(&monitors[0]), 2560); } #[test] - fn scaling_monitor_shifts_outputs_to_the_right_by_logical_delta() { + fn scaling_monitor_keeps_outputs_at_physical_desktop_size() { let mut monitors = Settings::default().monitors; recalculate_monitor_positions_for_scale(&mut monitors, "primary", 2); @@ -1320,13 +1319,13 @@ mod tests { .find(|monitor| monitor.id == "secondary") .unwrap(); assert_eq!(primary.scale, 2); - assert_eq!(monitor_logical_width(primary), 960); - assert_eq!((secondary.x, secondary.y), (960, 0)); + assert_eq!(monitor_logical_width(primary), 1920); + assert_eq!((secondary.x, secondary.y), (1920, 0)); assert!(!monitors_overlap(&monitors)); } #[test] - fn scaling_monitor_shifts_outputs_below_by_logical_delta() { + fn scaling_monitor_keeps_outputs_below_at_physical_desktop_size() { let mut monitors = Settings::default().monitors; offset_monitor(&mut monitors, "secondary", 0, 1080); @@ -1336,7 +1335,7 @@ mod tests { .iter() .find(|monitor| monitor.id == "secondary") .unwrap(); - assert_eq!((secondary.x, secondary.y), (0, 540)); + assert_eq!((secondary.x, secondary.y), (0, 1080)); assert!(!monitors_overlap(&monitors)); } -- 2.51.2