From 3fb1f59f1e56afd175fb48150a7a61c492ad6d58 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Tue, 23 Mar 2021 13:17:00 +0100 Subject: [PATCH] =?UTF-8?q?Bump=20tiny-skia=20to=200.5=20=F0=9F=94=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.toml | 5 ++- tests/ref/control/for.png | Bin 2724 -> 2723 bytes tests/ref/control/if.png | Bin 1637 -> 1637 bytes tests/ref/expr/call-invalid.png | Bin 2866 -> 2866 bytes tests/ref/expr/dict.png | Bin 1612 -> 1612 bytes tests/ref/library/circle.png | Bin 13617 -> 13617 bytes tests/ref/library/pagebreak.png | Bin 1357 -> 1357 bytes tests/ref/markup/linebreak.png | Bin 4307 -> 4308 bytes tests/ref/repr.png | Bin 10139 -> 10139 bytes tests/typeset.rs | 66 ++++++++++++++++---------------- 10 files changed, 36 insertions(+), 35 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 267a4bdaf..3f48c480a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,8 +6,9 @@ edition = "2018" [features] default = ["fs"] -cli = ["fs", "anyhow"] fs = ["fontdock/fs"] +cli = ["fs", "anyhow"] +# serde = [] [workspace] members = ["bench"] @@ -31,7 +32,7 @@ anyhow = { version = "1", optional = true } serde = { version = "1", features = ["derive"], optional = true } [dev-dependencies] -tiny-skia = "0.2" +tiny-skia = "0.5" walkdir = "2" [[bin]] diff --git a/tests/ref/control/for.png b/tests/ref/control/for.png index f3830b3412c30490c58c68d742d02a48e4f7867f..b37576928be77c0bfbca4899156011d310357ce9 100644 GIT binary patch delta 50 ycmZ1?x>$6A3S-tr)krQ?7Uv)P1$1EG+DHBe?^xo_^s@Fb0D-5gpUXO@geCx<-4Ja6 delta 51 zcmZ21x3S;(0)krS2mjA2=55Yi^tkNg`r-wxC8|_caF#v(5tDnm{r-UW|MFkZ^ diff --git a/tests/ref/control/if.png b/tests/ref/control/if.png index 0527754e290c9ec0a4624ec79c59a203d2dad52a..e38cf7c45ed28decadf00a9bf25d87f1df1bff10 100644 GIT binary patch delta 71 zcmaFL^OR@9e^%a>4_Pd(fg&LEbNb|Uj53q=Gjc;Qo8q7S0${1YDd&Ikhv#|(o^roA Qp8*IwUHx3vIVCg!0O#Wxr2qf` delta 71 zcmaFL^OR@9e^&mu?gbiMi$Lhqe%I@KlMUH~C+o3^0Wr7opLzii*FX?@T72e>J)={W Ua69Y6BnBYxboFyt=akR{0M*nPBme*a diff --git a/tests/ref/expr/call-invalid.png b/tests/ref/expr/call-invalid.png index eb192357ddb157ccaf08ae4b5ed259315f87f268..8e0c5eb6da3d766a2c97560ca8eb131ec4ba64c9 100644 GIT binary patch delta 639 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 J6$mTr{{Yzct)Bn@ delta 11272 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 diff --git a/tests/ref/library/pagebreak.png b/tests/ref/library/pagebreak.png index c5ac1f544184ce45f145b2cbf23025a0cb25a1f6..d513c963abf51dbf7130d17e3b5626f7fc72a536 100644 GIT binary patch delta 197 zcmV;$06PE83e5_zYXlJlA$&E0q9}@@D2k%|A}X7OlkWl-e}peZ*h0zcvmyY=SsgQJ zuB-4M&o+HE0+7m6(xbJuUP`uNlc`Sd6oh5RXmy(>K0CJA4S0La$&wB5$4Q6I- z*PX^gRg38NlkfrxwDwpEpF$`P0GCG}pBf>b9%ZADKZUS&g-6>Y;j0mVxjY*E%m_&c zZy%C>R)pIfbedOi?;W+?$IaL4v002ovPDHLkV1kDpR3HEV diff --git a/tests/ref/markup/linebreak.png b/tests/ref/markup/linebreak.png index aa01c99a52334acfd17b368b5424a8533e57a320..4dfca22fb70149dd54d05d092c4293bd4b14070c 100644 GIT binary patch delta 550 zcmcbtctvr73ghgJszrRlj)MQ#9Gzj{@#_nx(Ah`Clx@=k;q0}!*Ei`O-tV}fcy4vrKBGgMJg!BF+5J%GXg>1) z{o8*J<5)iIJX5-_e({oQ-Lk*y1^ZTd+-tV)@Tj_TRdV5D&aMR<2=rk#$MwB;?d>`q z%yyY{ZPp(VJDcA}`&t5{7WCg<{64keqhU+sQCFj#mG88bBskaiIe2WoZYLx)gRgMo z)o@pVWEVa2^LKY0Sj zzqV57lli=>_eLGonBS-S?$M@4aV#DwH-63j8_lvJRae^PpLWYmr;4?|XW4Qy8WaYn zNPIW_`r(9VvS4&;X8Kb7{yWw!QGRj-hLKN21rKaL7IN&1_3XxrA15}7PMpA|#^U-T hmxUJ!dT&qo&#Wd&$DHG`T6pJ=*p}4lC;k5Q zrY(+kBA?zq`BEvc@YfE<Y1ZCv6E7Sn>F8d& zPpe5nxoBtQyKAg+t~09JYpVXgS!)As`rzE+cx{*Yr(%Ju z152|boB!VAaH!CB?YrxE=G?ORa*i|B6z9p@mCIjN8sI7@;)px9?7P?BL~=BA&Q?0S zWBtl@_jMB8H?(}LwQDP%+*7<#^r@lyq}KWlhJB{XjF#QM$`@Fr;OXk;vd$@?2>={_2ZR6s diff --git a/tests/ref/repr.png b/tests/ref/repr.png index ad10705caf6c0a9ed51073a09e9a32f60ebe800d..a4a4c1267ecdf57da56551716f1b4ea481f9fee3 100644 GIT binary patch delta 65 zcmbR3KihwSqSy(J`Mndo^>#j)1SR%s?Yuc>@<$Gl$qh1`jEtL26oc7B?APReo$7kz QIRg-Qy85}Sb4q9e0G`AeD*ylh delta 66 zcmbR3KihwSqUev5mYAZGs?%Y_({NRL>&c3o;*;xTSee&5F>E$b3}zGY;HkUzW5%1! P3_#%N>gTe~DWM4fd43q& diff --git a/tests/typeset.rs b/tests/typeset.rs index 5a59a129c..1764b0459 100644 --- a/tests/typeset.rs +++ b/tests/typeset.rs @@ -8,8 +8,8 @@ use std::rc::Rc; use fontdock::FsIndex; use image::{GenericImageView, Rgba}; use tiny_skia::{ - Canvas, Color, ColorU8, FillRule, FilterQuality, Paint, Pattern, Pixmap, Rect, - SpreadMode, Transform, + Color, ColorU8, FillRule, FilterQuality, Paint, Pattern, Pixmap, Rect, SpreadMode, + Transform, }; use ttf_parser::OutlineBuilder; use walkdir::WalkDir; @@ -178,10 +178,10 @@ fn test( let canvas = draw(&env, &frames, 2.0); fs::create_dir_all(&png_path.parent().unwrap()).unwrap(); - canvas.pixmap.save_png(png_path).unwrap(); + canvas.save_png(png_path).unwrap(); if let Ok(ref_pixmap) = Pixmap::load_png(ref_path) { - if canvas.pixmap != ref_pixmap { + if canvas != ref_pixmap { println!(" Does not match reference image. ❌"); ok = false; } @@ -348,7 +348,7 @@ fn print_diag(diag: &Diag, map: &LineMap, lines: u32) { println!("{}: {}-{}: {}", diag.level, start, end, diag.message); } -fn draw(env: &Env, frames: &[Frame], pixel_per_pt: f32) -> Canvas { +fn draw(env: &Env, frames: &[Frame], pixel_per_pt: f32) -> Pixmap { let pad = Length::pt(5.0); let height = pad + frames.iter().map(|l| l.size.height + pad).sum::(); @@ -368,15 +368,14 @@ fn draw(env: &Env, frames: &[Frame], pixel_per_pt: f32) -> Canvas { ); } - let mut canvas = Canvas::new(pixel_width, pixel_height).unwrap(); - canvas.scale(pixel_per_pt, pixel_per_pt); - canvas.pixmap.fill(Color::BLACK); + let mut canvas = Pixmap::new(pixel_width, pixel_height).unwrap(); + let ts = Transform::from_scale(pixel_per_pt, pixel_per_pt); + canvas.fill(Color::BLACK); let mut origin = Point::new(pad, pad); for frame in frames { let mut paint = Paint::default(); paint.set_color(Color::WHITE); - canvas.fill_rect( Rect::from_xywh( origin.x.to_pt() as f32, @@ -386,19 +385,21 @@ fn draw(env: &Env, frames: &[Frame], pixel_per_pt: f32) -> Canvas { ) .unwrap(), &paint, + ts, + None, ); for &(pos, ref element) in &frame.elements { let pos = origin + pos; match element { Element::Text(shaped) => { - draw_text(env, &mut canvas, pos, shaped); + draw_text(&mut canvas, env, ts, pos, shaped); } Element::Image(image) => { - draw_image(env, &mut canvas, pos, image); + draw_image(&mut canvas, env, ts, pos, image); } Element::Geometry(geom) => { - draw_geometry(env, &mut canvas, pos, geom); + draw_geometry(&mut canvas, ts, pos, geom); } } } @@ -409,7 +410,7 @@ fn draw(env: &Env, frames: &[Frame], pixel_per_pt: f32) -> Canvas { canvas } -fn draw_text(env: &Env, canvas: &mut Canvas, pos: Point, shaped: &Shaped) { +fn draw_text(canvas: &mut Pixmap, env: &Env, ts: Transform, pos: Point, shaped: &Shaped) { let face = env.fonts.face(shaped.face).get(); for (&glyph, &offset) in shaped.glyphs.iter().zip(&shaped.offsets) { @@ -418,24 +419,20 @@ fn draw_text(env: &Env, canvas: &mut Canvas, pos: Point, shaped: &Shaped) { let x = (pos.x + offset).to_pt() as f32; let y = pos.y.to_pt() as f32; let scale = (shaped.font_size / units_per_em as f64).to_pt() as f32; + let ts = Transform::from_row(scale, 0.0, 0.0, -scale, x, y).post_concat(ts); let mut builder = WrappedPathBuilder::default(); face.outline_glyph(glyph, &mut builder); if let Some(path) = builder.0.finish() { - let placed = path - .transform(&Transform::from_row(scale, 0.0, 0.0, -scale, x, y).unwrap()) - .unwrap(); - let mut paint = convert_fill(shaped.color); paint.anti_alias = true; - - canvas.fill_path(&placed, &paint, FillRule::default()); + canvas.fill_path(&path, &paint, FillRule::default(), ts, None); } } } -fn draw_geometry(_: &Env, canvas: &mut Canvas, pos: Point, element: &Geometry) { +fn draw_geometry(canvas: &mut Pixmap, ts: Transform, pos: Point, element: &Geometry) { let x = pos.x.to_pt() as f32; let y = pos.y.to_pt() as f32; @@ -447,20 +444,26 @@ fn draw_geometry(_: &Env, canvas: &mut Canvas, pos: Point, element: &Geometry) { let w = width.to_pt() as f32; let h = height.to_pt() as f32; let rect = Rect::from_xywh(x, y, w, h).unwrap(); - canvas.fill_rect(rect, &paint); + canvas.fill_rect(rect, &paint, ts, None); } Shape::Ellipse(size) => { let path = convert_path(x, y, &geom::ellipse_path(size)); - canvas.fill_path(&path, &paint, rule); + canvas.fill_path(&path, &paint, rule, ts, None); } Shape::Path(ref path) => { let path = convert_path(x, y, path); - canvas.fill_path(&path, &paint, rule); + canvas.fill_path(&path, &paint, rule, ts, None); } }; } -fn draw_image(env: &Env, canvas: &mut Canvas, pos: Point, element: &Image) { +fn draw_image( + canvas: &mut Pixmap, + env: &Env, + ts: Transform, + pos: Point, + element: &Image, +) { let img = &env.resources.loaded::(element.res); let mut pixmap = Pixmap::new(img.buf.width(), img.buf.height()).unwrap(); @@ -469,27 +472,24 @@ fn draw_image(env: &Env, canvas: &mut Canvas, pos: Point, element: &Image) { *dest = ColorU8::from_rgba(r, g, b, a).premultiply(); } - let view_width = element.size.width.to_pt() as f32; - let view_height = element.size.height.to_pt() as f32; - let x = pos.x.to_pt() as f32; let y = pos.y.to_pt() as f32; + let view_width = element.size.width.to_pt() as f32; + let view_height = element.size.height.to_pt() as f32; let scale_x = view_width as f32 / pixmap.width() as f32; let scale_y = view_height as f32 / pixmap.height() as f32; let mut paint = Paint::default(); paint.shader = Pattern::new( - &pixmap, + pixmap.as_ref(), SpreadMode::Pad, FilterQuality::Bilinear, 1.0, - Transform::from_row(scale_x, 0.0, 0.0, scale_y, x, y).unwrap(), + Transform::from_row(scale_x, 0.0, 0.0, scale_y, x, y), ); - canvas.fill_rect( - Rect::from_xywh(x, y, view_width, view_height).unwrap(), - &paint, - ); + let rect = Rect::from_xywh(x, y, view_width, view_height).unwrap(); + canvas.fill_rect(rect, &paint, ts, None); } fn convert_fill(fill: Fill) -> Paint<'static> {