main.rs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. extern crate cairo;
  2. extern crate pango;
  3. extern crate pangocairo;
  4. extern crate rand;
  5. extern crate serde_json;
  6. use rand::Rng;
  7. use pango::LayoutExt;
  8. fn main() {
  9. let surf = cairo::ImageSurface::create(
  10. cairo::Format::Rgb24,
  11. 3840,
  12. 2160
  13. ).unwrap();
  14. let mut rng = rand::thread_rng();
  15. let ctx = cairo::Context::new(&surf);
  16. let w = rng.gen::<u8>() % 3;
  17. ctx.set_source_rgb(
  18. if w == 0 { 0.4 } else { 0.2 },
  19. if w == 1 { 0.4 } else { 0.2 },
  20. if w == 2 { 0.4 } else { 0.2 },
  21. );
  22. ctx.paint();
  23. let quips: Vec<String> = serde_json::from_str(include_str!("../quips.json")).unwrap();
  24. let quip: &str = &quips[rng.gen::<usize>() % quips.len()];
  25. println!("{}", quip);
  26. ctx.set_source_rgb(1.0, 1.0, 1.0);
  27. let layout = pangocairo::functions::create_layout(&ctx).unwrap();
  28. layout.set_width(2880 * 1024);
  29. let mut font = pango::FontDescription::from_string("Fira Sans 92");
  30. font.set_weight(pango::Weight::Bold);
  31. layout.set_font_description(&font);
  32. ctx.move_to(480.0, 480.0);
  33. layout.set_text(quip);
  34. pangocairo::functions::show_layout(&ctx, &layout);
  35. {
  36. let mut f = std::fs::File::create("/home/gdritter/.background.png").unwrap();
  37. surf.write_to_png(&mut f).unwrap();
  38. }
  39. }