From f1baa87a9a455f6328f4f4da5282a5208a3d7f9a Mon Sep 17 00:00:00 2001 From: iris <2+iris@noreply.localhost> Date: Sat, 12 Sep 2026 20:59:54 -0400 Subject: [PATCH] iris: keep text overflow masks horizontal --- src/widget/text/mod.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/widget/text/mod.rs b/src/widget/text/mod.rs index c2f11d6..5cd9ad4 100644 --- a/src/widget/text/mod.rs +++ b/src/widget/text/mod.rs @@ -354,11 +354,12 @@ impl TextView { } else { (self.overflow.content_end - self.overflow.content_start).max(0.0) }; - let mask = vec2(content_width, self.overflow.viewport.y) + let horizontal_mask = vec2(content_width, self.overflow.viewport.y) .align(Align::TOP_LEFT) .offset(vec2(self.overflow.content_start, 0.0)) .within(&viewport) .within(&painter.region()); + let mask = UiRegion::new(horizontal_mask.x, UiSpan::FULL); painter.set_mask(mask); let origin = tex .size @@ -656,6 +657,24 @@ mod tests { assert_eq!(rsc.ui.widgets[text].view.overflow.trailing_marker, 0.0); } + #[test] + fn overflow_masks_only_the_horizontal_axis() { + let mut rsc = TestRsc { ui: Ui::default() }; + let text = wtext("glyphs jumping") + .overflow(TextOverflow::Hidden) + .size(18) + .add(&mut rsc); + let root = text.width(abs(50)).add_strong(&mut rsc).any(); + let mut render = UiRenderState::new(); + render.resize((800.0, 600.0)); + render.update(&root, &mut rsc); + + let mask = rsc.ui.masks[render.active[&text.id()].own_mask.idx()]; + let region = render.primitives.instance(mask.primitive).region; + assert_eq!(region.y, UiSpan::FULL); + assert_ne!(region.x, UiSpan::FULL); + } + #[test] fn selecting_an_ellipsis_selects_the_omitted_source_text() { let mut rsc = TestRsc { ui: Ui::default() };