Fix clip bounds with nested scrollable widgets

This commit is contained in:
Héctor Ramón Jiménez 2024-04-23 02:29:04 +02:00
parent 15e15700ab
commit 67e181ce7b
No known key found for this signature in database
GPG key ID: 7CC46565708259A7

View file

@ -659,6 +659,10 @@ where
let content_layout = layout.children().next().unwrap();
let content_bounds = content_layout.bounds();
let Some(visible_bounds) = bounds.intersection(viewport) else {
return;
};
let scrollbars =
Scrollbars::new(state, self.direction, bounds, content_bounds);
@ -704,7 +708,7 @@ where
// Draw inner content
if scrollbars.active() {
renderer.with_layer(bounds, |renderer| {
renderer.with_layer(visible_bounds, |renderer| {
renderer.with_translation(
Vector::new(-translation.x, -translation.y),
|renderer| {
@ -767,9 +771,9 @@ where
renderer.with_layer(
Rectangle {
width: (bounds.width + 2.0).min(viewport.width),
height: (bounds.height + 2.0).min(viewport.height),
..bounds
width: (visible_bounds.width + 2.0).min(viewport.width),
height: (visible_bounds.height + 2.0).min(viewport.height),
..visible_bounds
},
|renderer| {
if let Some(scrollbar) = scrollbars.y {