aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-11-02 09:42:46 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2024-11-02 10:53:55 +0300
commitfce5d668783b4bbd5a6cea5e816d5d90a810d8e6 (patch)
tree82705b9c2f2d7ce2b9022deb7c6a72b40010e9e0
parent05d218113c1209f58b0dcdd415f1e095d4ff2b46 (diff)
downloadniri-fce5d668783b4bbd5a6cea5e816d5d90a810d8e6.tar.gz
niri-fce5d668783b4bbd5a6cea5e816d5d90a810d8e6.tar.bz2
niri-fce5d668783b4bbd5a6cea5e816d5d90a810d8e6.zip
Follow window corner radius in insert hint
-rw-r--r--src/layout/mod.rs13
-rw-r--r--src/layout/tile.rs2
-rw-r--r--src/layout/workspace.rs5
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(),
);
}