Blob


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