summaryrefslogtreecommitdiffstats
path: root/widget
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-10-02 15:45:21 +0200
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-10-02 15:45:21 +0200
commitd40aa6400d7e8692516c2651687790a00deb727e (patch)
tree614eb59115dff257fd9fd42e0efca871b2012421 /widget
parent509a0a574a2aa343643dfea63eb154ea46c4ef7f (diff)
downloadiced-d40aa6400d7e8692516c2651687790a00deb727e.tar.gz
iced-d40aa6400d7e8692516c2651687790a00deb727e.tar.bz2
iced-d40aa6400d7e8692516c2651687790a00deb727e.zip
Cull widget draw calls in `column` and `row`
Diffstat (limited to 'widget')
-rw-r--r--widget/src/column.rs19
-rw-r--r--widget/src/row.rs19
2 files changed, 16 insertions, 22 deletions
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,
);
}
}