diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-05-02 08:14:21 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-05-02 14:27:53 +0400 |
| commit | 2f42f8ac75f459cba16482bebcbb58df265971cb (patch) | |
| tree | 6dd566e9c147b78f635fcd1073307195bcaebdce /src/render_helpers/clipped_surface.rs | |
| parent | 42cef79c699c0f03b4bb99c4278169c48d9a5bd0 (diff) | |
| download | niri-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.rs | 29 |
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() + } +} |
