gdritter repos quippy / master src / main.rs
master

Tree @master (Download .tar.gz)

main.rs @masterraw · history · blame

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::<u8>() % 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<String> = serde_json::from_str(include_str!("../quips.json")).unwrap();
    let quip: &str = &quips[rng.gen::<usize>() % 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();
    }
}