summaryrefslogtreecommitdiffstats
path: root/graphics
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-03-10 23:33:58 +0700
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2022-03-10 23:33:58 +0700
commitec8ed9fa8bdfdd750cfc26eb50b971d575095ebf (patch)
tree18dd54da8116e5cbfc8900edb5bb8a704413a282 /graphics
parenta53fa91e0ddf374bbeb66d5e831b79127ed47a9d (diff)
downloadiced-ec8ed9fa8bdfdd750cfc26eb50b971d575095ebf.tar.gz
iced-ec8ed9fa8bdfdd750cfc26eb50b971d575095ebf.tar.bz2
iced-ec8ed9fa8bdfdd750cfc26eb50b971d575095ebf.zip
Fix `canvas::Frame` issuing a new layer for `Mesh2D` in `with_clip`
Text will still be rendered in its own layer, until we fix the composition bottleneck in `glyph-brush`.
Diffstat (limited to 'graphics')
-rw-r--r--graphics/src/widget/canvas/frame.rs42
-rw-r--r--graphics/src/widget/canvas/geometry.rs6
2 files changed, 32 insertions, 16 deletions
diff --git a/graphics/src/widget/canvas/frame.rs b/graphics/src/widget/canvas/frame.rs
index a3449605..8e198b29 100644
--- a/graphics/src/widget/canvas/frame.rs
+++ b/graphics/src/widget/canvas/frame.rs
@@ -265,12 +265,30 @@ impl Frame {
f(&mut frame);
- self.primitives.push(Primitive::Clip {
- bounds: region,
- content: Box::new(Primitive::Translate {
- translation: Vector::new(region.x, region.y),
- content: Box::new(frame.into_geometry().into_primitive()),
- }),
+ let primitives = frame.into_primitives();
+
+ let (text, meshes) = primitives
+ .into_iter()
+ .partition(|primitive| matches!(primitive, Primitive::Text { .. }));
+
+ let translation = Vector::new(region.x, region.y);
+
+ self.primitives.push(Primitive::Group {
+ primitives: vec![
+ Primitive::Translate {
+ translation,
+ content: Box::new(Primitive::Group { primitives: meshes }),
+ },
+ Primitive::Translate {
+ translation,
+ content: Box::new(Primitive::Clip {
+ bounds: region,
+ content: Box::new(Primitive::Group {
+ primitives: text,
+ }),
+ }),
+ },
+ ],
});
}
@@ -308,7 +326,13 @@ impl Frame {
}
/// Produces the [`Geometry`] representing everything drawn on the [`Frame`].
- pub fn into_geometry(mut self) -> Geometry {
+ pub fn into_geometry(self) -> Geometry {
+ Geometry::from_primitive(Primitive::Group {
+ primitives: self.into_primitives(),
+ })
+ }
+
+ fn into_primitives(mut self) -> Vec<Primitive> {
if !self.buffers.indices.is_empty() {
self.primitives.push(Primitive::Mesh2D {
buffers: triangle::Mesh2D {
@@ -319,9 +343,7 @@ impl Frame {
});
}
- Geometry::from_primitive(Primitive::Group {
- primitives: self.primitives,
- })
+ self.primitives
}
}
diff --git a/graphics/src/widget/canvas/geometry.rs b/graphics/src/widget/canvas/geometry.rs
index 8915cda1..e8ac621d 100644
--- a/graphics/src/widget/canvas/geometry.rs
+++ b/graphics/src/widget/canvas/geometry.rs
@@ -22,9 +22,3 @@ impl Geometry {
self.0
}
}
-
-impl From<Geometry> for Primitive {
- fn from(geometry: Geometry) -> Primitive {
- geometry.0
- }
-}