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); |