diff options
| author | 2020-02-22 18:03:49 +0100 | |
|---|---|---|
| committer | 2020-02-22 18:25:43 +0100 | |
| commit | 126133ead775fda064a6c23503e9a552a10dc2c5 (patch) | |
| tree | 8f36aaf39111606573369a3629b1661d8a198144 /wgpu/src | |
| parent | d6c2b1121c9592826e1cc25eeecbf3fa8d982ee8 (diff) | |
| download | iced-126133ead775fda064a6c23503e9a552a10dc2c5.tar.gz iced-126133ead775fda064a6c23503e9a552a10dc2c5.tar.bz2 iced-126133ead775fda064a6c23503e9a552a10dc2c5.zip  | |
Fix `Clip` primitive intersection in `iced_wgpu`
Diffstat (limited to '')
| -rw-r--r-- | wgpu/src/renderer.rs | 29 | 
1 files changed, 11 insertions, 18 deletions
diff --git a/wgpu/src/renderer.rs b/wgpu/src/renderer.rs index 29adcfb6..af61804e 100644 --- a/wgpu/src/renderer.rs +++ b/wgpu/src/renderer.rs @@ -240,25 +240,18 @@ impl Renderer {                  offset,                  content,              } => { -                let x = bounds.x - layer.offset.x as f32; -                let y = bounds.y - layer.offset.y as f32; -                let width = (bounds.width + x).min(bounds.width); -                let height = (bounds.height + y).min(bounds.height); - -                // Only draw visible content on-screen -                // TODO: Also, check for parent layer bounds to avoid further -                // drawing in some circumstances. -                if width > 0.0 && height > 0.0 { -                    let clip_layer = Layer::new( -                        Rectangle { -                            x: x.max(0.0).floor() as u32, -                            y: y.max(0.0).floor() as u32, -                            width: width.ceil() as u32, -                            height: height.ceil() as u32, -                        }, -                        layer.offset + *offset, -                    ); +                let layer_bounds: Rectangle<f32> = layer.bounds.into(); +                let clip = Rectangle { +                    x: bounds.x - layer.offset.x as f32, +                    y: bounds.y - layer.offset.y as f32, +                    ..*bounds +                }; + +                // Only draw visible content +                if let Some(clip_bounds) = layer_bounds.intersection(&clip) { +                    let clip_layer = +                        Layer::new(clip_bounds.into(), layer.offset + *offset);                      let new_layer = Layer::new(layer.bounds, layer.offset);                      layers.push(clip_layer);  | 
