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`.
This commit is contained in:
Héctor Ramón Jiménez 2022-03-10 23:33:58 +07:00
parent a53fa91e0d
commit ec8ed9fa8b
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
2 changed files with 32 additions and 16 deletions

View file

@ -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
}
}

View file

@ -22,9 +22,3 @@ impl Geometry {
self.0
}
}
impl From<Geometry> for Primitive {
fn from(geometry: Geometry) -> Primitive {
geometry.0
}
}