diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-11-02 09:42:46 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-11-02 10:53:55 +0300 |
| commit | fce5d668783b4bbd5a6cea5e816d5d90a810d8e6 (patch) | |
| tree | 82705b9c2f2d7ce2b9022deb7c6a72b40010e9e0 | |
| parent | 05d218113c1209f58b0dcdd415f1e095d4ff2b46 (diff) | |
| download | niri-fce5d668783b4bbd5a6cea5e816d5d90a810d8e6.tar.gz niri-fce5d668783b4bbd5a6cea5e816d5d90a810d8e6.tar.bz2 niri-fce5d668783b4bbd5a6cea5e816d5d90a810d8e6.zip | |
Follow window corner radius in insert hint
| -rw-r--r-- | src/layout/mod.rs | 13 | ||||
| -rw-r--r-- | src/layout/tile.rs | 2 | ||||
| -rw-r--r-- | src/layout/workspace.rs | 5 |
3 files changed, 16 insertions, 4 deletions
diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 1c531b51..8d723627 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -35,7 +35,8 @@ use std::rc::Rc; use std::time::Duration; use niri_config::{ - CenterFocusedColumn, Config, FloatOrInt, PresetSize, Struts, Workspace as WorkspaceConfig, + CenterFocusedColumn, Config, CornerRadius, FloatOrInt, PresetSize, Struts, + Workspace as WorkspaceConfig, }; use niri_ipc::SizeChange; use smithay::backend::renderer::element::surface::WaylandSurfaceRenderElement; @@ -2260,10 +2261,20 @@ impl<W: LayoutElement> Layout<W> { .unwrap(); let position = ws.get_insert_position(move_.pointer_pos_within_output - offset); + + let rules = move_.tile.window().rules(); + let border_width = move_.tile.effective_border_width().unwrap_or(0.); + let corner_radius = rules + .geometry_corner_radius + .map_or(CornerRadius::default(), |radius| { + radius.expanded_by(border_width as f32) + }); + ws.set_insert_hint(InsertHint { position, width: move_.width, is_full_width: move_.is_full_width, + corner_radius, }); } } diff --git a/src/layout/tile.rs b/src/layout/tile.rs index c9347a1d..ddb9bd8c 100644 --- a/src/layout/tile.rs +++ b/src/layout/tile.rs @@ -392,7 +392,7 @@ impl<W: LayoutElement> Tile<W> { } /// Returns `None` if the border is hidden and `Some(width)` if it should be shown. - fn effective_border_width(&self) -> Option<f64> { + pub fn effective_border_width(&self) -> Option<f64> { if self.is_fullscreen { return None; } diff --git a/src/layout/workspace.rs b/src/layout/workspace.rs index c8b3d5ee..7dab2bc0 100644 --- a/src/layout/workspace.rs +++ b/src/layout/workspace.rs @@ -4,7 +4,7 @@ use std::rc::Rc; use std::time::Duration; use niri_config::{ - CenterFocusedColumn, OutputName, PresetSize, Struts, Workspace as WorkspaceConfig, + CenterFocusedColumn, CornerRadius, OutputName, PresetSize, Struts, Workspace as WorkspaceConfig, }; use niri_ipc::SizeChange; use ordered_float::NotNan; @@ -137,6 +137,7 @@ pub struct InsertHint { pub position: InsertPosition, pub width: ColumnWidth, pub is_full_width: bool, + pub corner_radius: CornerRadius, } #[derive(Debug, Clone)] @@ -566,7 +567,7 @@ impl<W: LayoutElement> Workspace<W> { self.insert_hint_element.update_render_elements( area.size, view_rect, - Default::default(), + insert_hint.corner_radius, self.scale.fractional_scale(), ); } |
