From 509a0a574a2aa343643dfea63eb154ea46c4ef7f Mon Sep 17 00:00:00 2001 From: Cory Forsstrom Date: Fri, 27 Sep 2024 08:58:33 -0700 Subject: Don't fill out of viewport text --- core/src/widget/text.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/src/widget/text.rs b/core/src/widget/text.rs index 8b02f8c2..813b4be8 100644 --- a/core/src/widget/text.rs +++ b/core/src/widget/text.rs @@ -334,6 +334,10 @@ pub fn draw( { let bounds = layout.bounds(); + if !bounds.intersects(viewport) { + return; + } + let x = match paragraph.horizontal_alignment() { alignment::Horizontal::Left => bounds.x, alignment::Horizontal::Center => bounds.center_x(), -- cgit From d40aa6400d7e8692516c2651687790a00deb727e Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 2 Oct 2024 15:45:21 +0200 Subject: Cull widget draw calls in `column` and `row` --- core/src/widget/text.rs | 4 ---- widget/src/column.rs | 19 ++++++++----------- widget/src/row.rs | 19 ++++++++----------- 3 files changed, 16 insertions(+), 26 deletions(-) diff --git a/core/src/widget/text.rs b/core/src/widget/text.rs index 813b4be8..8b02f8c2 100644 --- a/core/src/widget/text.rs +++ b/core/src/widget/text.rs @@ -334,10 +334,6 @@ pub fn draw( { let bounds = layout.bounds(); - if !bounds.intersects(viewport) { - return; - } - let x = match paragraph.horizontal_alignment() { alignment::Horizontal::Left => bounds.x, alignment::Horizontal::Center => bounds.center_x(), diff --git a/widget/src/column.rs b/widget/src/column.rs index fc4653b9..213f68fc 100644 --- a/widget/src/column.rs +++ b/widget/src/column.rs @@ -320,24 +320,21 @@ where viewport: &Rectangle, ) { if let Some(clipped_viewport) = layout.bounds().intersection(viewport) { + let viewport = if self.clip { + &clipped_viewport + } else { + viewport + }; + for ((child, state), layout) in self .children .iter() .zip(&tree.children) .zip(layout.children()) + .filter(|(_, layout)| layout.bounds().intersects(viewport)) { child.as_widget().draw( - state, - renderer, - theme, - style, - layout, - cursor, - if self.clip { - &clipped_viewport - } else { - viewport - }, + state, renderer, theme, style, layout, cursor, viewport, ); } } diff --git a/widget/src/row.rs b/widget/src/row.rs index 75d5fb40..9c0fa97e 100644 --- a/widget/src/row.rs +++ b/widget/src/row.rs @@ -316,24 +316,21 @@ where viewport: &Rectangle, ) { if let Some(clipped_viewport) = layout.bounds().intersection(viewport) { + let viewport = if self.clip { + &clipped_viewport + } else { + viewport + }; + for ((child, state), layout) in self .children .iter() .zip(&tree.children) .zip(layout.children()) + .filter(|(_, layout)| layout.bounds().intersects(viewport)) { child.as_widget().draw( - state, - renderer, - theme, - style, - layout, - cursor, - if self.clip { - &clipped_viewport - } else { - viewport - }, + state, renderer, theme, style, layout, cursor, viewport, ); } } -- cgit