Blame


1 6b2c26f4 2023-12-19 benni use genpdf::{
2 6b2c26f4 2023-12-19 benni elements::Text,
3 6b2c26f4 2023-12-19 benni style::{Style, StyledString},
4 6b2c26f4 2023-12-19 benni render::Area,
5 6b2c26f4 2023-12-19 benni error::Error,
6 6b2c26f4 2023-12-19 benni Element,
7 6b2c26f4 2023-12-19 benni RenderResult,
8 6b2c26f4 2023-12-19 benni Position,
9 6b2c26f4 2023-12-19 benni Context,
10 6b2c26f4 2023-12-19 benni };
11 6b2c26f4 2023-12-19 benni
12 6b2c26f4 2023-12-19 benni
13 6b2c26f4 2023-12-19 benni pub struct UnderlinedText {
14 6b2c26f4 2023-12-19 benni text: Text,
15 6b2c26f4 2023-12-19 benni }
16 6b2c26f4 2023-12-19 benni
17 6b2c26f4 2023-12-19 benni pub struct HorizontalLine;
18 6b2c26f4 2023-12-19 benni
19 6b2c26f4 2023-12-19 benni impl UnderlinedText {
20 6b2c26f4 2023-12-19 benni pub fn new(text: impl Into<String>, style: Style) -> Self {
21 6b2c26f4 2023-12-19 benni Self {
22 6b2c26f4 2023-12-19 benni text: Text::new(StyledString::new(text.into(), style)),
23 6b2c26f4 2023-12-19 benni }
24 6b2c26f4 2023-12-19 benni }
25 6b2c26f4 2023-12-19 benni }
26 6b2c26f4 2023-12-19 benni
27 6b2c26f4 2023-12-19 benni impl Element for UnderlinedText {
28 6b2c26f4 2023-12-19 benni fn render(
29 6b2c26f4 2023-12-19 benni &mut self,
30 6b2c26f4 2023-12-19 benni context: &Context,
31 6b2c26f4 2023-12-19 benni area: Area<'_>,
32 6b2c26f4 2023-12-19 benni style: Style,
33 6b2c26f4 2023-12-19 benni ) -> Result<RenderResult, Error> {
34 6b2c26f4 2023-12-19 benni let result = self.text.render(context, area.clone(), style)?;
35 6b2c26f4 2023-12-19 benni let points = vec![
36 6b2c26f4 2023-12-19 benni Position::new(0.0, result.size.height),
37 6b2c26f4 2023-12-19 benni Position::new(result.size.width, result.size.height),
38 6b2c26f4 2023-12-19 benni ];
39 6b2c26f4 2023-12-19 benni area.draw_line(points, style);
40 6b2c26f4 2023-12-19 benni Ok(result)
41 6b2c26f4 2023-12-19 benni }
42 6b2c26f4 2023-12-19 benni }
43 6b2c26f4 2023-12-19 benni
44 6b2c26f4 2023-12-19 benni impl Element for HorizontalLine {
45 6b2c26f4 2023-12-19 benni fn render(
46 6b2c26f4 2023-12-19 benni &mut self,
47 6b2c26f4 2023-12-19 benni context: &Context,
48 6b2c26f4 2023-12-19 benni area: Area<'_>,
49 6b2c26f4 2023-12-19 benni style: Style,
50 6b2c26f4 2023-12-19 benni ) -> Result<RenderResult, Error> {
51 6b2c26f4 2023-12-19 benni let s = area.size();
52 6b2c26f4 2023-12-19 benni let points = vec![
53 6b2c26f4 2023-12-19 benni Position::default(),
54 6b2c26f4 2023-12-19 benni Position::new(s.width, 0.0),
55 6b2c26f4 2023-12-19 benni ];
56 6b2c26f4 2023-12-19 benni area.draw_line(points, style);
57 6b2c26f4 2023-12-19 benni let mut result = RenderResult::default();
58 6b2c26f4 2023-12-19 benni result.size.width = s.width;
59 6b2c26f4 2023-12-19 benni result.size.height = style.line_height(&context.font_cache) * 0.5;
60 6b2c26f4 2023-12-19 benni Ok(result)
61 6b2c26f4 2023-12-19 benni }
62 6b2c26f4 2023-12-19 benni }