From e9bbdd13c20eab0e4af318f9997003c9a6e0406e Mon Sep 17 00:00:00 2001 From: Victoria Fischer Date: Sat, 14 Dec 2024 14:48:31 +0100 Subject: [PATCH] render: make surfaces own rectangles, to drop a clone --- src/animations.rs | 9 ++++----- src/buffers.rs | 16 ++++++++-------- src/render.rs | 4 ++-- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/animations.rs b/src/animations.rs index 9e6c749..89a7897 100644 --- a/src/animations.rs +++ b/src/animations.rs @@ -58,9 +58,9 @@ impl Shader for ThinkingShader { impl IdleTask { pub fn new>(surfaces: &mut S) -> Self { IdleTask { - solid: surfaces.new_surface(&Rectangle::everything()).unwrap(), - surface: surfaces.new_surface(&Rectangle::everything()).unwrap(), - shimmer: surfaces.new_surface(&Rectangle::everything()).unwrap(), + solid: surfaces.new_surface(Rectangle::everything()).unwrap(), + surface: surfaces.new_surface(Rectangle::everything()).unwrap(), + shimmer: surfaces.new_surface(Rectangle::everything()).unwrap(), } } } @@ -183,8 +183,7 @@ impl Task for TestPattern { self.stepper.run(|| { self.frame = self.frame.wrapping_add(1); self.surface.set_opacity(sin8(self.frame)); - //log::info!("Step {}", self.frame); - self.surface.set_rect( &match self.pattern { + self.surface.set_rect( match self.pattern { TestShader::SweepX => Rectangle::new( Coordinates::new(self.frame, 0), Coordinates::new(self.frame, 255) diff --git a/src/buffers.rs b/src/buffers.rs index e21eee1..ef920f9 100644 --- a/src/buffers.rs +++ b/src/buffers.rs @@ -82,9 +82,9 @@ impl Surface for BufferedSurface { }); } - fn set_rect(&mut self, rect: &Rectangle) { + fn set_rect(&mut self, rect: Rectangle) { self.updater.push(SurfaceUpdate { - rect: Some(rect.clone()), + rect: Some(rect), slot: self.slot, ..Default::default() }); @@ -179,12 +179,12 @@ impl Surfaces for ShaderChain { type Error = (); type Surface = BufferedSurface; - fn new_surface(&mut self, area: &Rectangle) -> Result { + fn new_surface(&mut self, area: Rectangle) -> Result { let next_slot = self.bindings.len(); self.bindings.push(ShaderBinding { opacity: 255, shader: None, - rect: area.clone() + rect: area }); Ok(BufferedSurface { @@ -225,7 +225,7 @@ impl BufferedSurfacePool { impl Surfaces for BufferedSurfacePool { type Error = (); type Surface = ::Surface; - fn new_surface(&mut self, area: &crate::geometry::Rectangle) -> Result { + fn new_surface(&mut self, area: crate::geometry::Rectangle) -> Result { self.pool.write().unwrap().new_surface(area) } @@ -270,8 +270,8 @@ impl Surface for SharedSurface { self.binding.lock().unwrap().shader = None; } - fn set_rect(&mut self, rect: &Rectangle) { - self.binding.lock().unwrap().rect = rect.clone(); + fn set_rect(&mut self, rect: Rectangle) { + self.binding.lock().unwrap().rect = rect; } fn set_opacity(&mut self, opacity: u8) { @@ -296,7 +296,7 @@ impl SurfacePool { impl Surfaces for SurfacePool { type Surface = SharedSurface; type Error = io::Error; - fn new_surface(&mut self, area: &Rectangle) -> Result { + fn new_surface(&mut self, area: Rectangle) -> Result { let mut surface = SharedSurface::default(); surface.set_rect(area); self.surfaces.push(surface.clone()); diff --git a/src/render.rs b/src/render.rs index 7415a5f..2df0f44 100644 --- a/src/render.rs +++ b/src/render.rs @@ -30,7 +30,7 @@ pub trait Shader: Send + Sync { pub trait Surfaces: Send + Sync { type Surface: Surface; type Error: Debug; - fn new_surface(&mut self, area: &Rectangle) -> Result; + fn new_surface(&mut self, area: Rectangle) -> Result; fn render_to(&self, output: &mut S, frame: usize); } @@ -38,7 +38,7 @@ pub trait Surface: Send + Sync { fn set_shader(&mut self, shader: Box); fn clear_shader(&mut self); - fn set_rect(&mut self, rect: &Rectangle); + fn set_rect(&mut self, rect: Rectangle); fn set_opacity(&mut self, opacity: u8); }