summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2023-03-09 13:07:36 +0100
committerLaurenz <laurmaedje@gmail.com>2023-03-09 13:07:36 +0100
commit2c13ff9bfe9aea9537938fc957d90a2b798bba2f (patch)
tree2c6a1e07f3ec3bd37432b30d035cf0ef391219fa
parentab841188e3d2687ee8f436336e6fde337985a83e (diff)
Make render background color configurable
-rw-r--r--src/export/render.rs16
-rw-r--r--tests/src/benches.rs3
-rw-r--r--tests/src/tests.rs4
3 files changed, 15 insertions, 8 deletions
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/src/benches.rs b/tests/src/benches.rs
index 1628f32d..242f6e51 100644
--- a/tests/src/benches.rs
+++ b/tests/src/benches.rs
@@ -4,6 +4,7 @@ use comemo::{Prehashed, Track, Tracked};
use iai::{black_box, main, Iai};
use typst::diag::{FileError, FileResult};
use typst::font::{Font, FontBook};
+use typst::geom::Color;
use typst::model::Library;
use typst::syntax::{Source, SourceId};
use typst::util::Buffer;
@@ -95,7 +96,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 62e6f3f5..c319fe2f 100644
--- a/tests/src/tests.rs
+++ b/tests/src/tests.rs
@@ -14,7 +14,7 @@ use tiny_skia as sk;
use typst::diag::{bail, FileError, FileResult, SourceResult};
use typst::doc::{Document, Element, Frame, Meta};
use typst::font::{Font, FontBook};
-use typst::geom::{Abs, RgbaColor, Sides, Smart};
+use typst::geom::{Abs, Color, RgbaColor, Sides, Smart};
use typst::model::{func, Library, Value};
use typst::syntax::{Source, SourceId, Span, SyntaxNode};
use typst::util::{Buffer, PathExt};
@@ -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();