tiling: Fix misaligned positioning
This commit is contained in:
parent
9be6c85459
commit
0d1894e08f
2 changed files with 96 additions and 89 deletions
|
|
@ -1837,37 +1837,47 @@ where
|
|||
)
|
||||
.into_iter()
|
||||
.flat_map(|element| match element {
|
||||
CosmicMappedRenderElement::Stack(elem) => Some(
|
||||
CosmicMappedRenderElement::TiledStack(RelocateRenderElement::from_element(
|
||||
RescaleRenderElement::from_element(
|
||||
CropRenderElement::from_element(
|
||||
elem,
|
||||
output_scale,
|
||||
crop_rect.to_physical_precise_round(output_scale),
|
||||
)?,
|
||||
CosmicMappedRenderElement::Stack(elem) => {
|
||||
Some(CosmicMappedRenderElement::TiledStack({
|
||||
let cropped = CropRenderElement::from_element(
|
||||
elem,
|
||||
output_scale,
|
||||
crop_rect.to_physical_precise_round(output_scale),
|
||||
)?;
|
||||
let rescaled = RescaleRenderElement::from_element(
|
||||
cropped,
|
||||
original_location,
|
||||
scale,
|
||||
),
|
||||
geo.loc.to_physical_precise_round(output_scale),
|
||||
Relocate::Absolute,
|
||||
)),
|
||||
),
|
||||
);
|
||||
let relocated = RelocateRenderElement::from_element(
|
||||
rescaled,
|
||||
(geo.loc - original_geo.loc)
|
||||
.to_physical_precise_round(output_scale),
|
||||
Relocate::Relative,
|
||||
);
|
||||
relocated
|
||||
}))
|
||||
}
|
||||
CosmicMappedRenderElement::Window(elem) => {
|
||||
Some(CosmicMappedRenderElement::TiledWindow(
|
||||
RelocateRenderElement::from_element(
|
||||
RescaleRenderElement::from_element(
|
||||
CropRenderElement::from_element(
|
||||
elem,
|
||||
output_scale,
|
||||
crop_rect.to_physical_precise_round(output_scale),
|
||||
)?,
|
||||
(0, 0).into(),
|
||||
scale,
|
||||
),
|
||||
geo.loc.to_physical_precise_round(output_scale),
|
||||
Relocate::Absolute,
|
||||
),
|
||||
))
|
||||
Some(CosmicMappedRenderElement::TiledWindow({
|
||||
let cropped = CropRenderElement::from_element(
|
||||
elem,
|
||||
output_scale,
|
||||
crop_rect.to_physical_precise_round(output_scale),
|
||||
)?;
|
||||
let rescaled = RescaleRenderElement::from_element(
|
||||
cropped,
|
||||
original_location,
|
||||
scale,
|
||||
);
|
||||
let relocated = RelocateRenderElement::from_element(
|
||||
rescaled,
|
||||
(geo.loc - original_geo.loc)
|
||||
.to_physical_precise_round(output_scale),
|
||||
Relocate::Relative,
|
||||
);
|
||||
relocated
|
||||
}))
|
||||
}
|
||||
x => Some(x),
|
||||
})
|
||||
|
|
@ -2001,57 +2011,64 @@ where
|
|||
(new_geo, percentage)
|
||||
};
|
||||
|
||||
let original_location = original_geo.loc.to_physical_precise_round(output_scale)
|
||||
- mapped
|
||||
.geometry()
|
||||
.loc
|
||||
.to_physical_precise_round(output_scale);
|
||||
let mut elements = AsRenderElements::<R>::render_elements::<
|
||||
CosmicMappedRenderElement<R>,
|
||||
>(
|
||||
mapped,
|
||||
renderer,
|
||||
original_location,
|
||||
Scale::from(output_scale),
|
||||
alpha,
|
||||
)
|
||||
.into_iter()
|
||||
.flat_map(|element| match element {
|
||||
CosmicMappedRenderElement::Stack(elem) => Some(
|
||||
CosmicMappedRenderElement::TiledStack(RelocateRenderElement::from_element(
|
||||
RescaleRenderElement::from_element(
|
||||
CropRenderElement::from_element(
|
||||
let original_location = (original_geo.loc - mapped.geometry().loc)
|
||||
.to_physical_precise_round(output_scale);
|
||||
|
||||
let mut elements =
|
||||
AsRenderElements::<R>::render_elements::<CosmicMappedRenderElement<R>>(
|
||||
mapped,
|
||||
renderer,
|
||||
original_location,
|
||||
Scale::from(output_scale),
|
||||
alpha,
|
||||
)
|
||||
.into_iter()
|
||||
.flat_map(|element| match element {
|
||||
CosmicMappedRenderElement::Stack(elem) => {
|
||||
Some(CosmicMappedRenderElement::TiledStack({
|
||||
let cropped = CropRenderElement::from_element(
|
||||
elem,
|
||||
output_scale,
|
||||
crop_rect.to_physical_precise_round(output_scale),
|
||||
)?,
|
||||
original_location,
|
||||
scale,
|
||||
),
|
||||
geo.loc.to_physical_precise_round(output_scale),
|
||||
Relocate::Absolute,
|
||||
)),
|
||||
),
|
||||
CosmicMappedRenderElement::Window(elem) => {
|
||||
Some(CosmicMappedRenderElement::TiledWindow(
|
||||
RelocateRenderElement::from_element(
|
||||
RescaleRenderElement::from_element(
|
||||
CropRenderElement::from_element(
|
||||
elem,
|
||||
output_scale,
|
||||
crop_rect.to_physical_precise_round(output_scale),
|
||||
)?,
|
||||
(0, 0).into(),
|
||||
)?;
|
||||
let rescaled = RescaleRenderElement::from_element(
|
||||
cropped,
|
||||
original_location,
|
||||
scale,
|
||||
),
|
||||
geo.loc.to_physical_precise_round(output_scale),
|
||||
Relocate::Absolute,
|
||||
),
|
||||
))
|
||||
}
|
||||
x => Some(x),
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
);
|
||||
let relocated = RelocateRenderElement::from_element(
|
||||
rescaled,
|
||||
(geo.loc - original_geo.loc)
|
||||
.to_physical_precise_round(output_scale),
|
||||
Relocate::Relative,
|
||||
);
|
||||
relocated
|
||||
}))
|
||||
}
|
||||
CosmicMappedRenderElement::Window(elem) => {
|
||||
Some(CosmicMappedRenderElement::TiledWindow({
|
||||
let cropped = CropRenderElement::from_element(
|
||||
elem,
|
||||
output_scale,
|
||||
crop_rect.to_physical_precise_round(output_scale),
|
||||
)?;
|
||||
let rescaled = RescaleRenderElement::from_element(
|
||||
cropped,
|
||||
original_location,
|
||||
scale,
|
||||
);
|
||||
let relocated = RelocateRenderElement::from_element(
|
||||
rescaled,
|
||||
(geo.loc - original_geo.loc)
|
||||
.to_physical_precise_round(output_scale),
|
||||
Relocate::Relative,
|
||||
);
|
||||
relocated
|
||||
}))
|
||||
}
|
||||
x => Some(x),
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
if focused == Some(mapped) {
|
||||
if indicator_thickness > 0 {
|
||||
|
|
|
|||
|
|
@ -42,10 +42,7 @@ use smithay::{
|
|||
input::{pointer::GrabStartData as PointerGrabStartData, Seat},
|
||||
output::Output,
|
||||
reexports::wayland_server::protocol::wl_surface::WlSurface,
|
||||
utils::{
|
||||
Buffer as BufferCoords, IsAlive, Logical, Physical, Point, Rectangle, Scale, Size,
|
||||
Transform,
|
||||
},
|
||||
utils::{Buffer as BufferCoords, IsAlive, Logical, Physical, Point, Rectangle, Scale, Size},
|
||||
wayland::{seat::WaylandFocus, shell::wlr_layer::Layer},
|
||||
xwayland::X11Surface,
|
||||
};
|
||||
|
|
@ -686,7 +683,7 @@ impl Workspace {
|
|||
Id::new(),
|
||||
renderer
|
||||
.glow_renderer_mut()
|
||||
.import_memory(&[0, 0, 0, 255], Fourcc::Argb8888, (1, 1).into(), false)
|
||||
.import_memory(&[0, 0, 0, 255], Fourcc::Abgr8888, (1, 1).into(), false)
|
||||
.unwrap(),
|
||||
);
|
||||
renderer
|
||||
|
|
@ -711,17 +708,10 @@ impl Workspace {
|
|||
tex,
|
||||
1,
|
||||
smithay::utils::Transform::Normal,
|
||||
Some(alpha as f32),
|
||||
Some(alpha.min(0.8) as f32),
|
||||
Some(Rectangle::from_loc_and_size((0., 0.), (1., 1.))),
|
||||
Some(output.geometry().size),
|
||||
if alpha >= 1.0 {
|
||||
Some(vec![Rectangle::from_loc_and_size(
|
||||
(0, 0),
|
||||
output.geometry().size.to_buffer(1, Transform::Normal),
|
||||
)])
|
||||
} else {
|
||||
None
|
||||
},
|
||||
None,
|
||||
)
|
||||
.into(),
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue