diff options
| author | Martin Haug <mhaug@live.de> | 2021-02-04 21:30:18 +0100 |
|---|---|---|
| committer | Martin Haug <mhaug@live.de> | 2021-02-04 21:30:18 +0100 |
| commit | 8469bad7487e111c8e5a0ec542f0232a0ebb4bdc (patch) | |
| tree | 6d2781a8c6e95a10de048d39f5bd6ebaa82bc6ea /tests | |
| parent | dacd7dadc04d4538f1063a86afd676695c7471ab (diff) | |
Add rectangle function 🎛
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/library/ref/geom.png | bin | 0 -> 5087 bytes | |||
| -rw-r--r-- | tests/library/typ/geom.typ | 23 | ||||
| -rw-r--r-- | tests/typeset.rs | 27 |
3 files changed, 49 insertions, 1 deletions
diff --git a/tests/library/ref/geom.png b/tests/library/ref/geom.png Binary files differnew file mode 100644 index 00000000..37fd7d27 --- /dev/null +++ b/tests/library/ref/geom.png 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); |
