From 109668fa30bf65e56a2723ff29bcadc3e9a6e4ca Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Thu, 21 Sep 2023 13:48:32 +0400 Subject: Add output configuration & integer scaling support --- src/layout.rs | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'src/layout.rs') diff --git a/src/layout.rs b/src/layout.rs index f7f00b46..2c0ef30f 100644 --- a/src/layout.rs +++ b/src/layout.rs @@ -1231,6 +1231,7 @@ impl Monitor { &self, renderer: &mut GlesRenderer, ) -> Vec> { + let output_scale = Scale::from(self.output.current_scale().fractional_scale()); let output_transform = self.output.current_transform(); let output_mode = self.output.current_mode().unwrap(); let output_size = output_transform.transform_size(output_mode.size); @@ -1251,7 +1252,7 @@ impl Monitor { Some(RelocateRenderElement::from_element( CropRenderElement::from_element( elem, - 1., + output_scale, Rectangle::from_loc_and_size((0, 0), output_size), )?, (0, -offset), @@ -1262,7 +1263,7 @@ impl Monitor { Some(RelocateRenderElement::from_element( CropRenderElement::from_element( elem, - 1., + output_scale, Rectangle::from_loc_and_size((0, 0), output_size), )?, (0, -offset + output_size.h), @@ -1279,7 +1280,7 @@ impl Monitor { Some(RelocateRenderElement::from_element( CropRenderElement::from_element( elem, - 1., + output_scale, Rectangle::from_loc_and_size((0, 0), output_size), )?, (0, 0), @@ -1823,6 +1824,14 @@ impl Workspace { return vec![]; } + // FIXME: workspaces should probably cache their last used scale so they can be correctly + // rendered even with no outputs connected. + let output_scale = self + .output + .as_ref() + .map(|o| Scale::from(o.current_scale().fractional_scale())) + .unwrap_or(Scale::from(1.)); + let mut rv = vec![]; let view_pos = self.view_pos(); @@ -1840,8 +1849,8 @@ impl Workspace { } rv.extend(active_win.render_elements( renderer, - win_pos.to_physical(1), - Scale::from(1.), + win_pos.to_physical_precise_round(output_scale), + output_scale, 1., )); @@ -1862,8 +1871,8 @@ impl Workspace { rv.extend(win.render_elements( renderer, - win_pos.to_physical(1), - Scale::from(1.), + win_pos.to_physical_precise_round(output_scale), + output_scale, 1., )); } -- cgit