aboutsummaryrefslogtreecommitdiff
path: root/src/layout
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-02-08 13:33:28 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-02-10 07:29:33 -0800
commit4f05a74aa84bca74b650cffdc7ad889413f621cf (patch)
tree9bf496dde8954c60fb5ba232a2f2b10babcd9de5 /src/layout
parentc30f522ef28ed01744f5c90150af8a9c4da558f1 (diff)
downloadniri-4f05a74aa84bca74b650cffdc7ad889413f621cf.tar.gz
niri-4f05a74aa84bca74b650cffdc7ad889413f621cf.tar.bz2
niri-4f05a74aa84bca74b650cffdc7ad889413f621cf.zip
Add alpha parameter to shaders
Lets us add extra opacity.
Diffstat (limited to 'src/layout')
-rw-r--r--src/layout/focus_ring.rs10
-rw-r--r--src/layout/insert_hint_element.rs2
-rw-r--r--src/layout/shadow.rs3
-rw-r--r--src/layout/tile.rs4
4 files changed, 16 insertions, 3 deletions
diff --git a/src/layout/focus_ring.rs b/src/layout/focus_ring.rs
index 3d97cb02..411a73a5 100644
--- a/src/layout/focus_ring.rs
+++ b/src/layout/focus_ring.rs
@@ -2,7 +2,7 @@ use std::iter::zip;
use arrayvec::ArrayVec;
use niri_config::{CornerRadius, Gradient, GradientRelativeTo};
-use smithay::backend::renderer::element::Kind;
+use smithay::backend::renderer::element::{Element as _, Kind};
use smithay::utils::{Logical, Point, Rectangle, Size};
use crate::niri_render_elements;
@@ -53,6 +53,7 @@ impl FocusRing {
}
}
+ #[allow(clippy::too_many_arguments)]
pub fn update_render_elements(
&mut self,
win_size: Size<f64, Logical>,
@@ -61,6 +62,7 @@ impl FocusRing {
view_rect: Rectangle<f64, Logical>,
radius: CornerRadius,
scale: f64,
+ alpha: f32,
) {
let width = self.config.width.0;
self.full_size = win_size + Size::from((width, width)).upscale(2.);
@@ -181,6 +183,7 @@ impl FocusRing {
rounded_corner_border_width,
radius,
scale as f32,
+ alpha,
);
}
} else {
@@ -199,6 +202,7 @@ impl FocusRing {
rounded_corner_border_width,
radius,
scale as f32,
+ alpha,
);
}
@@ -229,7 +233,9 @@ impl FocusRing {
let elem = if self.use_border_shader && has_border_shader {
border.clone().with_location(location).into()
} else {
- SolidColorRenderElement::from_buffer(buffer, location, 1., Kind::Unspecified).into()
+ let alpha = border.alpha();
+ SolidColorRenderElement::from_buffer(buffer, location, alpha, Kind::Unspecified)
+ .into()
};
rv.push(elem);
};
diff --git a/src/layout/insert_hint_element.rs b/src/layout/insert_hint_element.rs
index 5f70295c..89dfcd14 100644
--- a/src/layout/insert_hint_element.rs
+++ b/src/layout/insert_hint_element.rs
@@ -48,7 +48,7 @@ impl InsertHintElement {
scale: f64,
) {
self.inner
- .update_render_elements(size, true, false, view_rect, radius, scale);
+ .update_render_elements(size, true, false, view_rect, radius, scale, 1.);
}
pub fn render(
diff --git a/src/layout/shadow.rs b/src/layout/shadow.rs
index 3e0605c4..d91986d1 100644
--- a/src/layout/shadow.rs
+++ b/src/layout/shadow.rs
@@ -38,6 +38,7 @@ impl Shadow {
is_active: bool,
radius: CornerRadius,
scale: f64,
+ alpha: f32,
) {
let ceil = |logical: f64| (logical * scale).ceil() / scale;
@@ -129,6 +130,7 @@ impl Shadow {
scale as f32,
Rectangle::new(window_geo.loc - offset - rect.loc, window_geo.size),
win_radius,
+ alpha,
);
rect.loc += offset;
@@ -147,6 +149,7 @@ impl Shadow {
scale as f32,
Rectangle::zero(),
Default::default(),
+ alpha,
);
self.shader_rects[0].loc += offset;
diff --git a/src/layout/tile.rs b/src/layout/tile.rs
index b8d049b0..ad3f7ff9 100644
--- a/src/layout/tile.rs
+++ b/src/layout/tile.rs
@@ -336,6 +336,7 @@ impl<W: LayoutElement> Tile<W> {
),
radius,
self.scale,
+ 1.,
);
let radius = if self.is_fullscreen {
@@ -350,6 +351,7 @@ impl<W: LayoutElement> Tile<W> {
is_active,
radius,
self.scale,
+ 1.,
);
let draw_focus_ring_with_background = if self.effective_border_width().is_some() {
@@ -365,6 +367,7 @@ impl<W: LayoutElement> Tile<W> {
view_rect,
radius,
self.scale,
+ 1.,
);
}
@@ -880,6 +883,7 @@ impl<W: LayoutElement> Tile<W> {
0.,
radius,
scale.x as f32,
+ 1.,
)
.with_location(geo.loc)
.into();