diff --git a/src/shell/layout/tiling/mod.rs b/src/shell/layout/tiling/mod.rs index 8a445c2c..e5e53453 100644 --- a/src/shell/layout/tiling/mod.rs +++ b/src/shell/layout/tiling/mod.rs @@ -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::::render_elements::< - CosmicMappedRenderElement, - >( - 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::::render_elements::>( + 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::>(); + ); + 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::>(); if focused == Some(mapped) { if indicator_thickness > 0 { diff --git a/src/shell/workspace.rs b/src/shell/workspace.rs index f74b70f8..e03abacc 100644 --- a/src/shell/workspace.rs +++ b/src/shell/workspace.rs @@ -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(), )