From 4ba8550da86b92fb1c5d29ac7d5fd7120ba43048 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Sat, 3 Feb 2024 23:27:22 +0100 Subject: [PATCH] render: compute image width/height in single function call --- src/backends/metal/video.rs | 9 +++++---- src/gfx_api.rs | 3 +-- src/gfx_apis/gl/renderer/texture.rs | 8 ++------ src/portal/ptr_gui.rs | 5 ++++- src/renderer.rs | 5 +++-- src/renderer/renderer_base.rs | 2 +- src/tree/output.rs | 4 ++-- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/backends/metal/video.rs b/src/backends/metal/video.rs index 08c62445..314946dc 100644 --- a/src/backends/metal/video.rs +++ b/src/backends/metal/video.rs @@ -396,17 +396,18 @@ impl MetalConnector { buffer.dev_fb.copy_texture(&self.state, tex, 0, 0, true); } } + let (width, height) = buffer.dev_fb.size(); changes.change_object(plane.id, |c| { c.change(plane.fb_id, buffer.drm.id().0 as _); c.change(plane.crtc_id.id, crtc.id.0 as _); c.change(plane.crtc_x.id, self.cursor_x.get() as _); c.change(plane.crtc_y.id, self.cursor_y.get() as _); - c.change(plane.crtc_w.id, buffer.render_tex.width() as _); - c.change(plane.crtc_h.id, buffer.render_tex.height() as _); + c.change(plane.crtc_w.id, width as _); + c.change(plane.crtc_h.id, height as _); c.change(plane.src_x.id, 0); c.change(plane.src_y.id, 0); - c.change(plane.src_w.id, (buffer.render_tex.width() as u64) << 16); - c.change(plane.src_h.id, (buffer.render_tex.height() as u64) << 16); + c.change(plane.src_w.id, (width as u64) << 16); + c.change(plane.src_h.id, (height as u64) << 16); }); } else { changes.change_object(plane.id, |c| { diff --git a/src/gfx_api.rs b/src/gfx_api.rs index 9681ea6e..f8412dd5 100644 --- a/src/gfx_api.rs +++ b/src/gfx_api.rs @@ -270,8 +270,7 @@ pub trait GfxImage { } pub trait GfxTexture: Debug { - fn width(&self) -> i32; - fn height(&self) -> i32; + fn size(&self) -> (i32, i32); fn as_any(&self) -> &dyn Any; } diff --git a/src/gfx_apis/gl/renderer/texture.rs b/src/gfx_apis/gl/renderer/texture.rs index 0eb73dd8..6f8c1a96 100644 --- a/src/gfx_apis/gl/renderer/texture.rs +++ b/src/gfx_apis/gl/renderer/texture.rs @@ -32,12 +32,8 @@ impl Texture { } impl GfxTexture for Texture { - fn width(&self) -> i32 { - self.width() - } - - fn height(&self) -> i32 { - self.height() + fn size(&self) -> (i32, i32) { + (self.width(), self.height()) } fn as_any(&self) -> &dyn Any { diff --git a/src/portal/ptr_gui.rs b/src/portal/ptr_gui.rs index 6c173e23..2ba92bea 100644 --- a/src/portal/ptr_gui.rs +++ b/src/portal/ptr_gui.rs @@ -304,7 +304,10 @@ impl GuiElement for Label { ) .ok(); let (tex, width, height) = match tex { - Some((t, _)) => (Some(t.clone()), t.texture.width(), t.texture.height()), + Some((t, _)) => { + let (width, height) = t.texture.size(); + (Some(t.clone()), width, height) + } _ => (None, 0, 0), }; self.tex.set(tex); diff --git a/src/renderer.rs b/src/renderer.rs index ff1ae61f..d3fad54d 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -197,8 +197,9 @@ impl Renderer<'_> { &Color::from_rgba_straight(20, 20, 20, 255), ); if let Some(tex) = placeholder.textures.get(&self.base.scale) { - let x = x + (pos.width() - tex.texture.width()) / 2; - let y = y + (pos.height() - tex.texture.height()) / 2; + let (tex_width, tex_height) = tex.texture.size(); + let x = x + (pos.width() - tex_width) / 2; + let y = y + (pos.height() - tex_height) / 2; self.base.render_texture( &tex.texture, x, diff --git a/src/renderer/renderer_base.rs b/src/renderer/renderer_base.rs index 7c737bc6..1f58f417 100644 --- a/src/renderer/renderer_base.rs +++ b/src/renderer/renderer_base.rs @@ -135,7 +135,7 @@ impl RendererBase<'_> { let (twidth, theight) = if let Some(size) = tsize { size } else { - let (mut w, mut h) = (texture.width(), texture.height()); + let (mut w, mut h) = texture.size(); if tscale != self.scale { let tscale = tscale.to_f64(); w = (w as f64 * self.scalef / tscale).round() as _; diff --git a/src/tree/output.rs b/src/tree/output.rs index 68b311f1..da518f4b 100644 --- a/src/tree/output.rs +++ b/src/tree/output.rs @@ -194,7 +194,7 @@ impl OutputNode { }; ws.title_texture.set(Some(title.clone())); let mut x = pos + 1; - let mut width = title.texture.width(); + let (mut width, _) = title.texture.size(); if let Some(scale) = scale { width = (width as f64 / scale).round() as _; } @@ -253,7 +253,7 @@ impl OutputNode { break 'set_status; } }; - let mut width = title.texture.width(); + let (mut width, _) = title.texture.size(); if let Some(scale) = scale { width = (width as f64 / scale).round() as _; }