Add `Path2D::add_path()`
This commit is contained in:
parent
15718d297c
commit
c258616bad
|
@ -569,6 +569,18 @@ impl Path2D {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://html.spec.whatwg.org/multipage/canvas.html#dom-path2d-addpath
|
||||||
|
pub fn add_path(&mut self, mut path: Path2D, transform: &Transform2F) {
|
||||||
|
self.flush_current_contour();
|
||||||
|
path.flush_current_contour();
|
||||||
|
path.outline.transform(transform);
|
||||||
|
let last_contour = path.outline.pop_contour();
|
||||||
|
for contour in path.outline.into_contours() {
|
||||||
|
self.outline.push_contour(contour);
|
||||||
|
}
|
||||||
|
self.current_contour = last_contour.unwrap_or_else(Contour::new);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn into_outline(mut self) -> Outline {
|
pub fn into_outline(mut self) -> Outline {
|
||||||
self.flush_current_contour();
|
self.flush_current_contour();
|
||||||
self.outline
|
self.outline
|
||||||
|
|
|
@ -120,6 +120,11 @@ impl Outline {
|
||||||
&self.contours
|
&self.contours
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
pub fn into_contours(self) -> Vec<Contour> {
|
||||||
|
self.contours
|
||||||
|
}
|
||||||
|
|
||||||
/// Removes all contours from this outline.
|
/// Removes all contours from this outline.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn clear(&mut self) {
|
pub fn clear(&mut self) {
|
||||||
|
@ -141,6 +146,18 @@ impl Outline {
|
||||||
self.contours.push(contour);
|
self.contours.push(contour);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn pop_contour(&mut self) -> Option<Contour> {
|
||||||
|
let last_contour = self.contours.pop();
|
||||||
|
|
||||||
|
let mut new_bounds = None;
|
||||||
|
for contour in &mut self.contours {
|
||||||
|
contour.update_bounds(&mut new_bounds);
|
||||||
|
}
|
||||||
|
self.bounds = new_bounds.unwrap_or_else(|| RectF::default());
|
||||||
|
|
||||||
|
last_contour
|
||||||
|
}
|
||||||
|
|
||||||
pub fn transform(&mut self, transform: &Transform2F) {
|
pub fn transform(&mut self, transform: &Transform2F) {
|
||||||
if transform.is_identity() {
|
if transform.is_identity() {
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue