aboutsummaryrefslogtreecommitdiff
path: root/src/render_helpers/clipped_surface.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-05-02 08:14:21 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-05-02 14:27:53 +0400
commit2f42f8ac75f459cba16482bebcbb58df265971cb (patch)
tree6dd566e9c147b78f635fcd1073307195bcaebdce /src/render_helpers/clipped_surface.rs
parent42cef79c699c0f03b4bb99c4278169c48d9a5bd0 (diff)
downloadniri-2f42f8ac75f459cba16482bebcbb58df265971cb.tar.gz
niri-2f42f8ac75f459cba16482bebcbb58df265971cb.tar.bz2
niri-2f42f8ac75f459cba16482bebcbb58df265971cb.zip
Damage window on corner radius changes
Diffstat (limited to 'src/render_helpers/clipped_surface.rs')
-rw-r--r--src/render_helpers/clipped_surface.rs29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/render_helpers/clipped_surface.rs b/src/render_helpers/clipped_surface.rs
index 69c2a012..43ba8594 100644
--- a/src/render_helpers/clipped_surface.rs
+++ b/src/render_helpers/clipped_surface.rs
@@ -6,8 +6,9 @@ use smithay::backend::renderer::gles::{
GlesError, GlesFrame, GlesRenderer, GlesTexProgram, Uniform,
};
use smithay::backend::renderer::utils::{CommitCounter, DamageSet};
-use smithay::utils::{Buffer, Logical, Physical, Rectangle, Scale, Transform};
+use smithay::utils::{Buffer, Logical, Physical, Rectangle, Scale, Size, Transform};
+use super::damage::ExtraDamage;
use super::renderer::{AsGlesFrame as _, NiriRenderer};
use super::shaders::{mat3_uniform, Shaders};
use crate::backend::tty::{TtyFrame, TtyRenderer, TtyRendererError};
@@ -21,6 +22,12 @@ pub struct ClippedSurfaceRenderElement<R: NiriRenderer> {
input_to_geo: Mat3,
}
+#[derive(Debug, Default, Clone)]
+pub struct RoundedCornerDamage {
+ damage: ExtraDamage,
+ corner_radius: CornerRadius,
+}
+
impl<R: NiriRenderer> ClippedSurfaceRenderElement<R> {
pub fn new(
elem: WaylandSurfaceRenderElement<R>,
@@ -267,3 +274,23 @@ impl<'render> RenderElement<TtyRenderer<'render>>
None
}
}
+
+impl RoundedCornerDamage {
+ pub fn set_size(&mut self, size: Size<i32, Logical>) {
+ self.damage.set_size(size);
+ }
+
+ pub fn set_corner_radius(&mut self, corner_radius: CornerRadius) {
+ if self.corner_radius == corner_radius {
+ return;
+ }
+
+ // FIXME: make the damage granular.
+ self.corner_radius = corner_radius;
+ self.damage.damage_all();
+ }
+
+ pub fn element(&self) -> ExtraDamage {
+ self.damage.clone()
+ }
+}