aboutsummaryrefslogtreecommitdiff
path: root/src/layout.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2023-09-21 13:48:32 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2023-09-21 13:48:50 +0400
commit109668fa30bf65e56a2723ff29bcadc3e9a6e4ca (patch)
treed95fbf3bdb3c2c14683a34d8bb7203b7dae4820d /src/layout.rs
parentcfa73c153cc6ae2f1c21dcbbc8e755b265babbd2 (diff)
downloadniri-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.rs23
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.,
));
}