summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMartin Haug <mhaug@live.de>2021-02-04 21:30:18 +0100
committerMartin Haug <mhaug@live.de>2021-02-04 21:30:18 +0100
commit8469bad7487e111c8e5a0ec542f0232a0ebb4bdc (patch)
tree6d2781a8c6e95a10de048d39f5bd6ebaa82bc6ea /tests
parentdacd7dadc04d4538f1063a86afd676695c7471ab (diff)
Add rectangle function 🎛
Diffstat (limited to 'tests')
-rw-r--r--tests/library/ref/geom.pngbin0 -> 5087 bytes
-rw-r--r--tests/library/typ/geom.typ23
-rw-r--r--tests/typeset.rs27
3 files changed, 49 insertions, 1 deletions
diff --git a/tests/library/ref/geom.png b/tests/library/ref/geom.png
new file mode 100644
index 00000000..37fd7d27
--- /dev/null
+++ b/tests/library/ref/geom.png
Binary files differ
diff --git a/tests/library/typ/geom.typ b/tests/library/typ/geom.typ
new file mode 100644
index 00000000..26ba7ca3
--- /dev/null
+++ b/tests/library/typ/geom.typ
@@ -0,0 +1,23 @@
+#[page "a5", flip: true]
+
+// Rectangle with width, should have paragraph height
+#[rect width: 2cm, color: #9650D6][aa]
+
+Sometimes there is no box
+
+// Rectangle with height, should span line
+#[rect height: 2cm, color: #734CED][bb]
+
+// Empty rectangle with width and height
+#[rect width: 6cm, height: 12pt, color: #CB4CED]
+
+// This empty rectangle should not be displayed
+#[rect width: 2in, color: #ff0000]
+
+// This one should be
+#[rect height: 15mm, color: #494DE3]
+
+// These are in a row!
+#[rect width: 2in, height: 10pt, color: #D6CD67]
+#[rect width: 2in, height: 10pt, color: #EDD466]
+#[rect width: 2in, height: 10pt, color: #E3BE62]
diff --git a/tests/typeset.rs b/tests/typeset.rs
index 807d55d9..432941ce 100644
--- a/tests/typeset.rs
+++ b/tests/typeset.rs
@@ -20,7 +20,7 @@ use typst::eval::{Args, EvalContext, Scope, State, Value, ValueFunc};
use typst::export::pdf;
use typst::font::FsIndexExt;
use typst::geom::{Length, Point, Sides, Size, Spec};
-use typst::layout::{Element, Expansion, Frame, Image};
+use typst::layout::{Element, Expansion, Fill, Frame, Geometry, Image, Shape};
use typst::library;
use typst::parse::{LineMap, Scanner};
use typst::pretty::{Pretty, Printer};
@@ -409,6 +409,9 @@ fn draw(frames: &[Frame], env: &Env, pixel_per_pt: f32) -> Canvas {
Element::Image(image) => {
draw_image(&mut canvas, pos, env, image);
}
+ Element::Geometry(geom) => {
+ draw_geometry(&mut canvas, pos, env, geom);
+ }
}
}
@@ -444,6 +447,28 @@ fn draw_text(canvas: &mut Canvas, pos: Point, env: &Env, shaped: &Shaped) {
}
}
+fn draw_geometry(canvas: &mut Canvas, pos: Point, _: &Env, element: &Geometry) {
+ let x = pos.x.to_pt() as f32;
+ let y = pos.y.to_pt() as f32;
+
+ let (w, h) = match &element.shape {
+ Shape::Rect(s) => (s.size.width.to_pt() as f32, s.size.height.to_pt() as f32),
+ };
+
+ let mut paint = Paint::default();
+
+ match &element.fill {
+ Fill::Color(c) => match c {
+ typst::color::Color::Rgba(c) => paint.set_color_rgba8(c.r, c.g, c.b, c.a),
+ },
+ Fill::Image(_) => todo!(),
+ };
+
+ if let Some(rect) = Rect::from_xywh(x, y, w, h) {
+ canvas.fill_rect(rect, &paint);
+ }
+}
+
fn draw_image(canvas: &mut Canvas, pos: Point, env: &Env, element: &Image) {
let img = &env.resources.loaded::<ImageResource>(element.res);