extern crate cairo; extern crate pango; extern crate pangocairo; extern crate rand; extern crate serde_json; use rand::Rng; use pango::LayoutExt; fn main() { let surf = cairo::ImageSurface::create( cairo::Format::Rgb24, 3840, 2160 ).unwrap(); let mut rng = rand::thread_rng(); let ctx = cairo::Context::new(&surf); let w = rng.gen::() % 3; ctx.set_source_rgb( if w == 0 { 0.4 } else { 0.2 }, if w == 1 { 0.4 } else { 0.2 }, if w == 2 { 0.4 } else { 0.2 }, ); ctx.paint(); let quips: Vec = serde_json::from_str(include_str!("../quips.json")).unwrap(); let quip: &str = &quips[rng.gen::() % quips.len()]; println!("{}", quip); ctx.set_source_rgb(1.0, 1.0, 1.0); let layout = pangocairo::functions::create_layout(&ctx).unwrap(); layout.set_width(2880 * 1024); let mut font = pango::FontDescription::from_string("Fira Sans 92"); font.set_weight(pango::Weight::Bold); layout.set_font_description(&font); ctx.move_to(480.0, 480.0); layout.set_text(quip); pangocairo::functions::show_layout(&ctx, &layout); { let mut f = std::fs::File::create("/home/gdritter/.background.png").unwrap(); surf.write_to_png(&mut f).unwrap(); } }