From 2f42f8ac75f459cba16482bebcbb58df265971cb Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Thu, 2 May 2024 08:14:21 +0400 Subject: Damage window on corner radius changes --- src/render_helpers/clipped_surface.rs | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'src/render_helpers/clipped_surface.rs') 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 { input_to_geo: Mat3, } +#[derive(Debug, Default, Clone)] +pub struct RoundedCornerDamage { + damage: ExtraDamage, + corner_radius: CornerRadius, +} + impl ClippedSurfaceRenderElement { pub fn new( elem: WaylandSurfaceRenderElement, @@ -267,3 +274,23 @@ impl<'render> RenderElement> None } } + +impl RoundedCornerDamage { + pub fn set_size(&mut self, size: Size) { + 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() + } +} -- cgit