aboutsummaryrefslogtreecommitdiff
path: root/src/render_helpers/resize.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-03-01 09:45:57 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-03-10 07:59:14 +0300
commit880386e563f9936f83db72cd9866aae80cf20ca2 (patch)
tree9a7ea3f1ecb0305c4576f77a0a3e840acf3fcd42 /src/render_helpers/resize.rs
parent266c6c3878ba6f0c08f45c025dddc8dc8a1b2f0e (diff)
downloadniri-880386e563f9936f83db72cd9866aae80cf20ca2.tar.gz
niri-880386e563f9936f83db72cd9866aae80cf20ca2.tar.bz2
niri-880386e563f9936f83db72cd9866aae80cf20ca2.zip
render_helpers/resize: Fix logic to allow for partially-filled texture
"texture geo" defines offset and src size, rather than the full texture size.
Diffstat (limited to 'src/render_helpers/resize.rs')
-rw-r--r--src/render_helpers/resize.rs13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/render_helpers/resize.rs b/src/render_helpers/resize.rs
index 827eada2..4f03a74e 100644
--- a/src/render_helpers/resize.rs
+++ b/src/render_helpers/resize.rs
@@ -5,6 +5,7 @@ use niri_config::CornerRadius;
use smithay::backend::renderer::element::{Element, Id, Kind, RenderElement, UnderlyingStorage};
use smithay::backend::renderer::gles::{GlesError, GlesFrame, GlesRenderer, GlesTexture, Uniform};
use smithay::backend::renderer::utils::{CommitCounter, DamageSet, OpaqueRegions};
+use smithay::backend::renderer::Texture as _;
use smithay::utils::{Buffer, Logical, Physical, Rectangle, Scale, Size, Transform};
use super::renderer::{AsGlesFrame, NiriRenderer};
@@ -56,10 +57,10 @@ impl ResizeRenderElement {
let curr_geo_size = Vec2::new(curr_geo.size.w as f32, curr_geo.size.h as f32);
let tex_prev_geo_loc = Vec2::new(tex_prev_geo.loc.x as f32, tex_prev_geo.loc.y as f32);
- let tex_prev_geo_size = Vec2::new(tex_prev_geo.size.w as f32, tex_prev_geo.size.h as f32);
+ let tex_prev_size = Vec2::new(texture_prev.width() as f32, texture_prev.height() as f32);
let tex_next_geo_loc = Vec2::new(tex_next_geo.loc.x as f32, tex_next_geo.loc.y as f32);
- let tex_next_geo_size = Vec2::new(tex_next_geo.size.w as f32, tex_next_geo.size.h as f32);
+ let tex_next_size = Vec2::new(texture_next.width() as f32, texture_next.height() as f32);
let size_prev = Vec2::new(size_prev.w as f32, size_prev.h as f32);
let size_next = Vec2::new(size_next.w as f32, size_next.h as f32);
@@ -73,10 +74,10 @@ impl ResizeRenderElement {
let curr_geo_to_prev_geo = Mat3::from_scale(curr_geo_size / size_prev);
let curr_geo_to_next_geo = Mat3::from_scale(curr_geo_size / size_next);
- let geo_to_tex_prev = Mat3::from_translation(-tex_prev_geo_loc / tex_prev_geo_size)
- * Mat3::from_scale(size_prev / tex_prev_geo_size * scale);
- let geo_to_tex_next = Mat3::from_translation(-tex_next_geo_loc / tex_next_geo_size)
- * Mat3::from_scale(size_next / tex_next_geo_size * scale);
+ let geo_to_tex_prev = Mat3::from_translation(-tex_prev_geo_loc / tex_prev_size)
+ * Mat3::from_scale(size_prev / tex_prev_size * scale);
+ let geo_to_tex_next = Mat3::from_translation(-tex_next_geo_loc / tex_next_size)
+ * Mat3::from_scale(size_next / tex_next_size * scale);
let corner_radius = corner_radius.fit_to(curr_geo_size.x, curr_geo_size.y);
let clip_to_geometry = if clip_to_geometry { 1. } else { 0. };