use smithay::backend::renderer::element::{Element, Id, RenderElement}; use smithay::backend::renderer::utils::CommitCounter; use smithay::backend::renderer::Renderer; use smithay::utils::{Buffer, Logical, Physical, Point, Rectangle, Scale, Size}; #[derive(Debug, Clone)] pub struct ExtraDamage { id: Id, commit: CommitCounter, geometry: Rectangle, } impl ExtraDamage { pub fn new() -> Self { Self { id: Id::new(), commit: Default::default(), geometry: Default::default(), } } pub fn set_size(&mut self, size: Size) { if self.geometry.size == size { return; } self.geometry.size = size; self.commit.increment(); } pub fn damage_all(&mut self) { self.commit.increment(); } pub fn with_location(mut self, location: Point) -> Self { self.geometry.loc = location; self } } impl Default for ExtraDamage { fn default() -> Self { Self::new() } } impl Element for ExtraDamage { fn id(&self) -> &Id { &self.id } fn current_commit(&self) -> CommitCounter { self.commit } fn src(&self) -> Rectangle { Rectangle::from_size(Size::from((1., 1.))) } fn geometry(&self, scale: Scale) -> Rectangle { self.geometry.to_physical_precise_up(scale) } } impl RenderElement for ExtraDamage { fn draw( &self, _frame: &mut R::Frame<'_, '_>, _src: Rectangle, _dst: Rectangle, _damage: &[Rectangle], _opaque_regions: &[Rectangle], ) -> Result<(), R::Error> { Ok(()) } }