Implement rounded window corners

This commit is contained in:
Ivan Molodetskikh
2024-05-01 19:06:08 +04:00
parent d86df5025c
commit 42cef79c69
27 changed files with 1288 additions and 309 deletions
+20 -13
View File
@@ -3,7 +3,8 @@ use std::sync::atomic::Ordering;
use std::time::Duration;
use niri::animation::ANIMATION_SLOWDOWN;
use niri::render_helpers::gradient::GradientRenderElement;
use niri::render_helpers::border::BorderRenderElement;
use niri_config::CornerRadius;
use smithay::backend::renderer::element::RenderElement;
use smithay::backend::renderer::gles::GlesRenderer;
use smithay::utils::{Logical, Physical, Rectangle, Scale, Size};
@@ -60,17 +61,23 @@ impl TestCase for GradientAngle {
let size = (size.w - a * 2, size.h - b * 2);
let area = Rectangle::from_loc_and_size((a, b), size);
GradientRenderElement::new(
renderer,
Scale::from(1.),
area,
area,
[1., 0., 0., 1.],
[0., 1., 0., 1.],
self.angle - FRAC_PI_2,
)
.into_iter()
.map(|elem| Box::new(elem) as _)
.collect()
BorderRenderElement::shader(renderer)
.map(|shader| {
BorderRenderElement::new(
shader.clone(),
Scale::from(1.),
area,
area,
[1., 0., 0., 1.],
[0., 1., 0., 1.],
self.angle - FRAC_PI_2,
area,
0.,
CornerRadius::default(),
)
})
.into_iter()
.map(|elem| Box::new(elem) as _)
.collect()
}
}
+20 -14
View File
@@ -4,8 +4,8 @@ use std::time::Duration;
use niri::animation::ANIMATION_SLOWDOWN;
use niri::layout::focus_ring::FocusRing;
use niri::render_helpers::gradient::GradientRenderElement;
use niri_config::Color;
use niri::render_helpers::border::BorderRenderElement;
use niri_config::{Color, CornerRadius};
use smithay::backend::renderer::element::RenderElement;
use smithay::backend::renderer::gles::GlesRenderer;
use smithay::utils::{Logical, Physical, Point, Rectangle, Scale, Size};
@@ -85,7 +85,7 @@ impl TestCase for GradientArea {
let g_loc = ((size.w - g_size.w) / 2, (size.h - g_size.h) / 2);
let g_area = Rectangle::from_loc_and_size(g_loc, g_size);
self.border.update(g_size, true);
self.border.update(g_size, true, CornerRadius::default());
rv.extend(
self.border
.render(
@@ -98,17 +98,23 @@ impl TestCase for GradientArea {
);
rv.extend(
GradientRenderElement::new(
renderer,
Scale::from(1.),
area,
g_area,
[1., 0., 0., 1.],
[0., 1., 0., 1.],
FRAC_PI_4,
)
.into_iter()
.map(|elem| Box::new(elem) as _),
BorderRenderElement::shader(renderer)
.map(|shader| {
BorderRenderElement::new(
shader.clone(),
Scale::from(1.),
area,
g_area,
[1., 0., 0., 1.],
[0., 1., 0., 1.],
FRAC_PI_4,
area,
0.,
CornerRadius::default(),
)
})
.into_iter()
.map(|elem| Box::new(elem) as _),
);
rv