diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-21 13:48:32 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-21 13:48:50 +0400 |
| commit | 109668fa30bf65e56a2723ff29bcadc3e9a6e4ca (patch) | |
| tree | d95fbf3bdb3c2c14683a34d8bb7203b7dae4820d /src/layout.rs | |
| parent | cfa73c153cc6ae2f1c21dcbbc8e755b265babbd2 (diff) | |
| download | niri-109668fa30bf65e56a2723ff29bcadc3e9a6e4ca.tar.gz niri-109668fa30bf65e56a2723ff29bcadc3e9a6e4ca.tar.bz2 niri-109668fa30bf65e56a2723ff29bcadc3e9a6e4ca.zip | |
Add output configuration & integer scaling support
Diffstat (limited to 'src/layout.rs')
| -rw-r--r-- | src/layout.rs | 23 |
1 files changed, 16 insertions, 7 deletions
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<Window> { &self, renderer: &mut GlesRenderer, ) -> Vec<MonitorRenderElement<GlesRenderer>> { + 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<Window> { 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<Window> { 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<Window> { 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<Window> { 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<Window> { } 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<Window> { 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., )); } |
