From d2ed42a157037f85a95b53da0431ac043922cea0 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Sun, 12 May 2024 08:46:02 +0400 Subject: closing_window: Pass geo size and view rect --- src/layout/closing_window.rs | 17 +++++++++-------- src/layout/workspace.rs | 11 ++++------- 2 files changed, 13 insertions(+), 15 deletions(-) (limited to 'src/layout') diff --git a/src/layout/closing_window.rs b/src/layout/closing_window.rs index 2312f9f1..c1f4e599 100644 --- a/src/layout/closing_window.rs +++ b/src/layout/closing_window.rs @@ -10,7 +10,7 @@ use smithay::backend::renderer::element::utils::{ use smithay::backend::renderer::element::{Id, Kind, RenderElement}; use smithay::backend::renderer::gles::{GlesRenderer, GlesTexture}; use smithay::backend::renderer::Renderer as _; -use smithay::utils::{Logical, Point, Scale, Transform}; +use smithay::utils::{Logical, Point, Rectangle, Scale, Size, Transform}; use crate::animation::Animation; use crate::niri_render_elements; @@ -35,8 +35,8 @@ pub struct ClosingWindow { /// Where the window should be blocked out from. block_out_from: Option, - /// Center of the window geometry. - center: Point, + /// Size of the window geometry. + geo_size: Size, /// Position in the workspace. pos: Point, @@ -62,7 +62,7 @@ impl ClosingWindow { renderer: &mut GlesRenderer, snapshot: RenderSnapshot, scale: Scale, - center: Point, + geo_size: Size, pos: Point, anim: Animation, ) -> anyhow::Result { @@ -95,7 +95,7 @@ impl ClosingWindow { texture_scale: scale, texture_renderer_id: renderer.id(), block_out_from: snapshot.block_out_from, - center, + geo_size, pos, texture_offset, blocked_out_texture_offset, @@ -113,7 +113,7 @@ impl ClosingWindow { pub fn render( &self, - view_pos: i32, + view_rect: Rectangle, scale: Scale, target: RenderTarget, ) -> ClosingWindowRenderElement { @@ -141,14 +141,15 @@ impl ClosingWindow { let elem = PrimaryGpuTextureRenderElement(elem); + let center = self.geo_size.to_point().to_f64().downscale(2.); let elem = RescaleRenderElement::from_element( elem, - (self.center.to_f64() - offset).to_physical_precise_round(scale), + (center - offset).to_physical_precise_round(scale), (val / 5. + 0.8).max(0.), ); let mut location = self.pos.to_f64() + offset; - location.x -= view_pos as f64; + location.x -= view_rect.loc.x as f64; let elem = RelocateRenderElement::from_element( elem, location.to_physical_precise_round(scale), diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs index ed16a776..a2515a76 100644 --- a/src/layout/workspace.rs +++ b/src/layout/workspace.rs @@ -1338,10 +1338,6 @@ impl Workspace { let removing_last = col.tiles.len() == 1; let offset = self.column_x(col_idx + 1) - self.column_x(col_idx); - let mut center = Point::from((0, 0)); - center.x += tile.tile_size().w / 2; - center.y += tile.tile_size().h / 2; - tile_pos.x += self.view_pos(); if col_idx < self.active_column_idx && removing_last { @@ -1354,7 +1350,7 @@ impl Workspace { renderer, snapshot, output_scale, - center, + tile.tile_size(), tile_pos, anim, ); @@ -2097,9 +2093,10 @@ impl Workspace { let mut rv = vec![]; // Draw the closing windows on top. - let view_pos = self.view_pos(); + let view_rect = Rectangle::from_loc_and_size((self.view_pos(), 0), self.view_size); for closing in &self.closing_windows { - rv.push(closing.render(view_pos, output_scale, target).into()); + let elem = closing.render(view_rect, output_scale, target); + rv.push(elem.into()); } if self.columns.is_empty() { -- cgit