makepad_draw/text/
mod.rs

1//pub mod builtins;
2pub mod color;
3pub mod font;
4pub mod font_atlas;
5pub mod font_face;
6pub mod font_family;
7pub mod fonts;
8pub mod geom;
9pub mod glyph_outline;
10pub mod glyph_raster_image;
11pub mod image;
12pub mod intern;
13pub mod layouter;
14pub mod loader;
15pub mod num;
16pub mod rasterizer;
17pub mod sdfer;
18pub mod selection;
19pub mod shaper;
20pub mod slice;
21pub mod substr;
22
23#[cfg(test)]
24mod tests {
25    #[test]
26    fn test() {
27        use {
28            super::{
29                color::Color,
30                layouter::{LayoutOptions, Layouter, OwnedLayoutParams, Settings, Span, Style},
31            },
32            std::{fs::File, io::BufWriter},
33        };
34
35        let mut layouter = Layouter::new(Settings::default());
36        let text = "\n\ntest";
37        let laidout_text = layouter.get_or_layout(OwnedLayoutParams {
38            text: text.into(),
39            spans: [Span {
40                style: Style {
41                    font_family_id: "Sans".into(),
42                    font_size_in_pts: 16.0,
43                    color: Some(Color::RED),
44                },
45                len: text.len(),
46            }]
47            .into(),
48            options: LayoutOptions {
49                max_width_in_lpxs: Some(1018.0),
50                ..LayoutOptions::default()
51            },
52        });
53        println!("{:?}", laidout_text.size_in_lpxs);
54
55        let mut layouter = Layouter::new(Settings::default());
56        let text = "The quick brown fox jumps over the lazy dog繁😊😔";
57        let text = layouter.get_or_layout(OwnedLayoutParams {
58            text: text.into(),
59            spans: [
60                Span {
61                    style: Style {
62                        font_family_id: "Sans".into(),
63                        font_size_in_pts: 16.0,
64                        color: Some(Color::RED),
65                    },
66                    len: 10,
67                },
68                Span {
69                    style: Style {
70                        font_family_id: "Sans".into(),
71                        font_size_in_pts: 16.0,
72                        color: Some(Color::GREEN),
73                    },
74                    len: 10,
75                },
76                Span {
77                    style: Style {
78                        font_family_id: "Sans".into(),
79                        font_size_in_pts: 16.0,
80                        color: Some(Color::BLUE),
81                    },
82                    len: text.len() - 20,
83                },
84            ]
85            .into(),
86            options: LayoutOptions {
87                max_width_in_lpxs: Some(256.0),
88                ..LayoutOptions::default()
89            },
90        });
91        for row in &text.rows {
92            for glyph in &row.glyphs {
93                glyph.font.rasterize_glyph(glyph.id, 64.0);
94            }
95        }
96
97        let file = File::create("/Users/ejpbruel/Desktop/grayscale.png").unwrap();
98        let writer = BufWriter::new(file);
99        let rasterizer = layouter.rasterizer().borrow();
100        let size = rasterizer.grayscale_atlas().size();
101        let mut encoder = png::Encoder::new(writer, size.width as u32, size.height as u32);
102        encoder.set_color(png::ColorType::Grayscale);
103        encoder.set_depth(png::BitDepth::Eight);
104        let mut writer = encoder.write_header().unwrap();
105        let pixels = rasterizer.grayscale_atlas().image().as_pixels();
106        let data =
107            unsafe { std::slice::from_raw_parts(pixels.as_ptr() as *const u8, pixels.len()) };
108        writer.write_image_data(&data).unwrap();
109
110        let file = File::create("/Users/ejpbruel/Desktop/color.png").unwrap();
111        let writer = BufWriter::new(file);
112        let size = rasterizer.color_atlas().size();
113        let mut encoder = png::Encoder::new(writer, size.width as u32, size.height as u32);
114        encoder.set_color(png::ColorType::Rgba);
115        encoder.set_depth(png::BitDepth::Eight);
116        let mut writer = encoder.write_header().unwrap();
117        let pixels = rasterizer.color_atlas().image().as_pixels();
118        let data =
119            unsafe { std::slice::from_raw_parts(pixels.as_ptr() as *const u8, pixels.len() * 4) };
120        writer.write_image_data(&data).unwrap();
121    }
122}