summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Haug <mhaug@live.de>2023-03-12 09:58:47 +0100
committerMartin Haug <mhaug@live.de>2023-03-12 09:58:47 +0100
commit2720a44b965d29e9c3453c732e38554fdb6413bb (patch)
tree10f888085c4b354773a5eb8cfe9aaad74564b109
parentca6edf5283c258d8410134d678347977cb273cdd (diff)
parent902c2ea1215ab98db7e7047ac7b8e5fc0b50c3fe (diff)
Merge branch 'main' into ng
-rw-r--r--library/src/text/shaping.rs2
-rw-r--r--src/export/render.rs16
-rw-r--r--tests/ref/layout/columns.pngbin107086 -> 107087 bytes
-rw-r--r--tests/ref/layout/par-bidi.pngbin25285 -> 25290 bytes
-rw-r--r--tests/ref/layout/par-indent.pngbin47226 -> 47225 bytes
-rw-r--r--tests/src/benches.rs3
-rw-r--r--tests/src/tests.rs2
7 files changed, 15 insertions, 8 deletions
diff --git a/library/src/text/shaping.rs b/library/src/text/shaping.rs
index a96238d9..53e90bc5 100644
--- a/library/src/text/shaping.rs
+++ b/library/src/text/shaping.rs
@@ -103,7 +103,7 @@ impl<'a> ShapedText<'a> {
for ((font, y_offset), group) in
self.glyphs.as_ref().group_by_key(|g| (g.font.clone(), g.y_offset))
{
- let pos = Point::new(offset, top + shift + y_offset.at(self.size));
+ let pos = Point::new(offset, top + shift - y_offset.at(self.size));
let glyphs = group
.iter()
.map(|glyph| Glyph {
diff --git a/src/export/render.rs b/src/export/render.rs
index fcf7458a..03160d97 100644
--- a/src/export/render.rs
+++ b/src/export/render.rs
@@ -11,7 +11,7 @@ use usvg::FitTo;
use crate::doc::{Element, Frame, Group, Meta, Text};
use crate::geom::{
- self, Abs, Geometry, Paint, PathElement, Shape, Size, Stroke, Transform,
+ self, Abs, Color, Geometry, Paint, PathElement, Shape, Size, Stroke, Transform,
};
use crate::image::{DecodedImage, Image};
@@ -19,13 +19,13 @@ use crate::image::{DecodedImage, Image};
///
/// This renders the frame at the given number of pixels per point and returns
/// the resulting `tiny-skia` pixel buffer.
-pub fn render(frame: &Frame, pixel_per_pt: f32) -> sk::Pixmap {
+pub fn render(frame: &Frame, pixel_per_pt: f32, fill: Color) -> sk::Pixmap {
let size = frame.size();
let pxw = (pixel_per_pt * size.x.to_f32()).round().max(1.0) as u32;
let pxh = (pixel_per_pt * size.y.to_f32()).round().max(1.0) as u32;
let mut canvas = sk::Pixmap::new(pxw, pxh).unwrap();
- canvas.fill(sk::Color::WHITE);
+ canvas.fill(fill.into());
let ts = sk::Transform::from_scale(pixel_per_pt, pixel_per_pt);
render_frame(&mut canvas, ts, None, frame);
@@ -432,13 +432,19 @@ impl From<Paint> for sk::Paint<'static> {
fn from(paint: Paint) -> Self {
let mut sk_paint = sk::Paint::default();
let Paint::Solid(color) = paint;
- let c = color.to_rgba();
- sk_paint.set_color_rgba8(c.r, c.g, c.b, c.a);
+ sk_paint.set_color(color.into());
sk_paint.anti_alias = true;
sk_paint
}
}
+impl From<Color> for sk::Color {
+ fn from(color: Color) -> Self {
+ let c = color.to_rgba();
+ sk::Color::from_rgba8(c.r, c.g, c.b, c.a)
+ }
+}
+
/// Allows to build tiny-skia paths from glyph outlines.
struct WrappedPathBuilder(sk::PathBuilder);
diff --git a/tests/ref/layout/columns.png b/tests/ref/layout/columns.png
index 4bf76146..51fd5b2c 100644
--- a/tests/ref/layout/columns.png
+++ b/tests/ref/layout/columns.png
Binary files differ
diff --git a/tests/ref/layout/par-bidi.png b/tests/ref/layout/par-bidi.png
index 0406fbf1..8751d93e 100644
--- a/tests/ref/layout/par-bidi.png
+++ b/tests/ref/layout/par-bidi.png
Binary files differ
diff --git a/tests/ref/layout/par-indent.png b/tests/ref/layout/par-indent.png
index 7aca22c1..269c0024 100644
--- a/tests/ref/layout/par-indent.png
+++ b/tests/ref/layout/par-indent.png
Binary files differ
diff --git a/tests/src/benches.rs b/tests/src/benches.rs
index ea53f602..21fdbc7a 100644
--- a/tests/src/benches.rs
+++ b/tests/src/benches.rs
@@ -5,6 +5,7 @@ use iai::{black_box, main, Iai};
use typst::diag::{FileError, FileResult};
use typst::eval::Library;
use typst::font::{Font, FontBook};
+use typst::geom::Color;
use typst::syntax::{Source, SourceId};
use typst::util::Buffer;
use typst::World;
@@ -90,7 +91,7 @@ fn bench_compile(iai: &mut Iai) {
fn bench_render(iai: &mut Iai) {
let world = BenchWorld::new();
let document = typst::compile(&world, &world.source).unwrap();
- iai.run(|| typst::export::render(&document.pages[0], 1.0))
+ iai.run(|| typst::export::render(&document.pages[0], 1.0, Color::WHITE))
}
struct BenchWorld {
diff --git a/tests/src/tests.rs b/tests/src/tests.rs
index 8a25af15..24b3431f 100644
--- a/tests/src/tests.rs
+++ b/tests/src/tests.rs
@@ -690,7 +690,7 @@ fn render(frames: &[Frame]) -> sk::Pixmap {
if frame.width() > limit || frame.height() > limit {
panic!("overlarge frame: {:?}", frame.size());
}
- typst::export::render(frame, pixel_per_pt)
+ typst::export::render(frame, pixel_per_pt, Color::WHITE)
})
.collect();