makepad-draw 1.0.0

Makepad 2d drawing API
Documentation
//pub mod builtins;
pub mod color;
pub mod font;
pub mod font_atlas;
pub mod font_face;
pub mod font_family;
pub mod fonts;
pub mod geom;
pub mod glyph_outline;
pub mod glyph_raster_image;
pub mod image;
pub mod intern;
pub mod layouter;
pub mod loader;
pub mod num;
pub mod rasterizer;
pub mod sdfer;
pub mod selection;
pub mod shaper;
pub mod slice;
pub mod substr;

#[cfg(test)]
mod tests {
    #[test]
    fn test() {
        use {
            super::{
                color::Color,
                layouter::{LayoutOptions, Layouter, OwnedLayoutParams, Settings, Span, Style},
            },
            std::{fs::File, io::BufWriter},
        };

        let mut layouter = Layouter::new(Settings::default());
        let text = "\n\ntest";
        let laidout_text = layouter.get_or_layout(OwnedLayoutParams {
            text: text.into(),
            spans: [Span {
                style: Style {
                    font_family_id: "Sans".into(),
                    font_size_in_pts: 16.0,
                    color: Some(Color::RED),
                },
                len: text.len(),
            }]
            .into(),
            options: LayoutOptions {
                max_width_in_lpxs: Some(1018.0),
                ..LayoutOptions::default()
            },
        });
        println!("{:?}", laidout_text.size_in_lpxs);

        let mut layouter = Layouter::new(Settings::default());
        let text = "The quick brown fox jumps over the lazy dog繁😊😔";
        let text = layouter.get_or_layout(OwnedLayoutParams {
            text: text.into(),
            spans: [
                Span {
                    style: Style {
                        font_family_id: "Sans".into(),
                        font_size_in_pts: 16.0,
                        color: Some(Color::RED),
                    },
                    len: 10,
                },
                Span {
                    style: Style {
                        font_family_id: "Sans".into(),
                        font_size_in_pts: 16.0,
                        color: Some(Color::GREEN),
                    },
                    len: 10,
                },
                Span {
                    style: Style {
                        font_family_id: "Sans".into(),
                        font_size_in_pts: 16.0,
                        color: Some(Color::BLUE),
                    },
                    len: text.len() - 20,
                },
            ]
            .into(),
            options: LayoutOptions {
                max_width_in_lpxs: Some(256.0),
                ..LayoutOptions::default()
            },
        });
        for row in &text.rows {
            for glyph in &row.glyphs {
                glyph.font.rasterize_glyph(glyph.id, 64.0);
            }
        }

        let file = File::create("/Users/ejpbruel/Desktop/grayscale.png").unwrap();
        let writer = BufWriter::new(file);
        let rasterizer = layouter.rasterizer().borrow();
        let size = rasterizer.grayscale_atlas().size();
        let mut encoder = png::Encoder::new(writer, size.width as u32, size.height as u32);
        encoder.set_color(png::ColorType::Grayscale);
        encoder.set_depth(png::BitDepth::Eight);
        let mut writer = encoder.write_header().unwrap();
        let pixels = rasterizer.grayscale_atlas().image().as_pixels();
        let data =
            unsafe { std::slice::from_raw_parts(pixels.as_ptr() as *const u8, pixels.len()) };
        writer.write_image_data(&data).unwrap();

        let file = File::create("/Users/ejpbruel/Desktop/color.png").unwrap();
        let writer = BufWriter::new(file);
        let size = rasterizer.color_atlas().size();
        let mut encoder = png::Encoder::new(writer, size.width as u32, size.height as u32);
        encoder.set_color(png::ColorType::Rgba);
        encoder.set_depth(png::BitDepth::Eight);
        let mut writer = encoder.write_header().unwrap();
        let pixels = rasterizer.color_atlas().image().as_pixels();
        let data =
            unsafe { std::slice::from_raw_parts(pixels.as_ptr() as *const u8, pixels.len() * 4) };
        writer.write_image_data(&data).unwrap();
    }
}