diff --git a/crates/engine/src/cmd/flatten.rs b/crates/engine/src/cmd/flatten.rs index 0d471625..001d2011 100644 --- a/crates/engine/src/cmd/flatten.rs +++ b/crates/engine/src/cmd/flatten.rs @@ -938,7 +938,7 @@ fn render_raster(doc: &Document, art: &[Node], rect: Rect, ppi: f64, clip: Optio }) .collect(); let cover = r.render_region(&isolated_doc(doc, cover), region, scale, false); - for (px, c) in img.pixels.chunks_exact_mut(4).zip(cover.pixels.chunks_exact(4)) { + for (px, c) in img.pixels.as_chunks_mut::<4>().0.iter_mut().zip(cover.pixels.as_chunks::<4>().0) { let k = c[3]; let k2 = if o.anti_alias || k == 0 || k == 255 { k diff --git a/crates/engine/src/tests_expand.rs b/crates/engine/src/tests_expand.rs index 4046a1ab..b6672d33 100644 --- a/crates/engine/src/tests_expand.rs +++ b/crates/engine/src/tests_expand.rs @@ -38,7 +38,13 @@ fn render(s: &Session) -> vectorcraft_render::Rendered { /// Pixels (of 200×200) whose colour differs by more than `tol` in any channel. fn differing(a: &vectorcraft_render::Rendered, b: &vectorcraft_render::Rendered, tol: u8) -> usize { - a.pixels.chunks_exact(4).zip(b.pixels.chunks_exact(4)).filter(|(p, q)| p.iter().zip(q.iter()).any(|(x, y)| x.abs_diff(*y) > tol)).count() + a.pixels + .as_chunks::<4>() + .0 + .iter() + .zip(b.pixels.as_chunks::<4>().0) + .filter(|(p, q)| p.iter().zip(q.iter()).any(|(x, y)| x.abs_diff(*y) > tol)) + .count() } fn expandable(s: &Session) -> bool { diff --git a/crates/engine/src/tests_flatten.rs b/crates/engine/src/tests_flatten.rs index f5456fda..a014b1db 100644 --- a/crates/engine/src/tests_flatten.rs +++ b/crates/engine/src/tests_flatten.rs @@ -108,7 +108,14 @@ fn assert_regions_match(s: &Session, before: &Rendered, group: u64, tol: u8, wha /// Share of pixels whose colour moved by more than 8/255. fn changed(a: &Rendered, b: &Rendered) -> f64 { - let n = a.pixels.chunks_exact(4).zip(b.pixels.chunks_exact(4)).filter(|(p, q)| p.iter().zip(q.iter()).any(|(x, y)| x.abs_diff(*y) > 8)).count(); + let n = a + .pixels + .as_chunks::<4>() + .0 + .iter() + .zip(b.pixels.as_chunks::<4>().0) + .filter(|(p, q)| p.iter().zip(q.iter()).any(|(x, y)| x.abs_diff(*y) > 8)) + .count(); n as f64 / (a.pixels.len() / 4) as f64 } diff --git a/crates/engine/src/tests_objexpand.rs b/crates/engine/src/tests_objexpand.rs index 8ccf5f4d..bcb9b117 100644 --- a/crates/engine/src/tests_objexpand.rs +++ b/crates/engine/src/tests_objexpand.rs @@ -69,7 +69,13 @@ fn mean_diff(a: &vectorcraft_render::Rendered, b: &vectorcraft_render::Rendered) /// Pixels (of 200×200) whose colour differs by more than `tol` in any channel. fn differing(a: &vectorcraft_render::Rendered, b: &vectorcraft_render::Rendered, tol: u8) -> usize { - a.pixels.chunks_exact(4).zip(b.pixels.chunks_exact(4)).filter(|(p, q)| p.iter().zip(q.iter()).any(|(x, y)| x.abs_diff(*y) > tol)).count() + a.pixels + .as_chunks::<4>() + .0 + .iter() + .zip(b.pixels.as_chunks::<4>().0) + .filter(|(p, q)| p.iter().zip(q.iter()).any(|(x, y)| x.abs_diff(*y) > tol)) + .count() } fn white_black() -> Value { diff --git a/crates/engine/src/tests_stylelib.rs b/crates/engine/src/tests_stylelib.rs index 10a9baf9..927f81f8 100644 --- a/crates/engine/src/tests_stylelib.rs +++ b/crates/engine/src/tests_stylelib.rs @@ -219,7 +219,7 @@ fn every_builtin_style_paints_visibly_on_a_rectangle() { run(&mut s, "graphicStyle.addFromLibrary", json!({"library": b.id, "name": g.name, "apply": true})); assert_eq!(doc(&s).node(id).unwrap().graphic_style, doc(&s).graphic_style(&g.name).map(|x| x.id), "{}", g.name); let img = renderer.render_region(doc(&s), Rect::new(0.0, 0.0, 100.0, 100.0), 0.5, true); - let painted = img.pixels.chunks_exact(4).filter(|p| p[..3] != [255, 255, 255]).count(); + let painted = img.pixels.as_chunks::<4>().0.iter().filter(|p| p[..3] != [255, 255, 255]).count(); assert!(painted > 40, "{} / {} paints {painted} pixels", b.id, g.name); } } diff --git a/crates/render/src/ink.rs b/crates/render/src/ink.rs index b51dbb65..34136df9 100644 --- a/crates/render/src/ink.rs +++ b/crates/render/src/ink.rs @@ -204,7 +204,7 @@ pub(crate) fn compose(cmy: &[u8], k: &[u8], background: Option<[u8; 4]>) -> Vec< let mut out = Vec::with_capacity(cmy.len()); // Runs of one colour convert once. let mut last: Option<([u8; 8], [u8; 4])> = None; - for (p, q) in cmy.chunks_exact(4).zip(k.chunks_exact(4)) { + for (p, q) in cmy.as_chunks::<4>().0.iter().zip(k.as_chunks::<4>().0) { let key = [p[0], p[1], p[2], p[3], q[0], q[1], q[2], q[3]]; let px = match (&last, &bg) { _ if p[3] == 0 => [0; 4], diff --git a/crates/ui-egui/src/panels/flattener_preview.rs b/crates/ui-egui/src/panels/flattener_preview.rs index b06941fb..fdd807da 100644 --- a/crates/ui-egui/src/panels/flattener_preview.rs +++ b/crates/ui-egui/src/panels/flattener_preview.rs @@ -325,7 +325,7 @@ fn render( .highlight_art(&shot.doc, h) .map(|art| r.render(&art, w, hh, view, &RenderOptions { skip_templates: true, ..Default::default() })); let red = [color.r(), color.g(), color.b()].map(f32::from); - for (i, p) in img.pixels.chunks_exact_mut(4).enumerate() { + for (i, p) in img.pixels.as_chunks_mut::<4>().0.iter_mut().enumerate() { // A light grey of the art, so the highlight stands out. let luma = 0.299 * p[0] as f32 + 0.587 * p[1] as f32 + 0.114 * p[2] as f32; let grey = 96.0 + luma * 0.62;