32 lines
1.5 KiB
Rust
32 lines
1.5 KiB
Rust
//! Document Setup options the renderer honours.
|
||
|
||
use vectorcraft_doc::{Document, ImageBlob, ImageObject, Node, NodeKind};
|
||
|
||
use super::*;
|
||
|
||
fn doc_with_red_image() -> Document {
|
||
let mut d = Document::new(40.0, 40.0);
|
||
let mut png = Vec::new();
|
||
image::RgbaImage::from_pixel(4, 4, image::Rgba([255, 0, 0, 255])).write_to(&mut std::io::Cursor::new(&mut png), image::ImageFormat::Png).unwrap();
|
||
d.images.insert("red".into(), ImageBlob::new("image/png", png));
|
||
let (id, layer) = (d.alloc_id(), d.layers[0].id);
|
||
let im = ImageObject { key: "red".into(), width: 40, height: 40, xf: Affine::IDENTITY, link: None, placement: Default::default() };
|
||
d.insert(Some(layer), 0, Node::new(id, NodeKind::Image(im))).unwrap();
|
||
d
|
||
}
|
||
|
||
#[test]
|
||
fn outline_mode_draws_images_in_grey_only_when_the_setup_asks() {
|
||
let mut d = doc_with_red_image();
|
||
let outline = RenderOptions { outline: true, ..Default::default() };
|
||
let centre = |d: &Document| Renderer::new().render(d, 40, 40, Affine::IDENTITY, &outline).pixel(20, 20);
|
||
assert_eq!(centre(&d)[3], 0, "outline mode draws only the image frame");
|
||
d.setup.outline_images = true;
|
||
let [r, g, b, a] = centre(&d);
|
||
// Red's luma (0.2126 × 255 ≈ 54) in every channel.
|
||
assert_eq!(a, 255);
|
||
assert!(r == g && g == b && (50..=58).contains(&r), "{:?}", [r, g, b]);
|
||
// Preview mode keeps the colours.
|
||
assert_eq!(Renderer::new().render(&d, 40, 40, Affine::IDENTITY, &RenderOptions::default()).pixel(20, 20), [255, 0, 0, 255]);
|
||
}
|