main.rs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #![feature(nll)]
  2. extern crate sdl2;
  3. use sdl2::pixels::{Color};
  4. use sdl2::event::{Event, WindowEvent};
  5. pub mod geom;
  6. pub mod frag;
  7. pub mod diff;
  8. use frag::{DrawFrag};
  9. fn main() {
  10. let sdl = sdl2::init().unwrap();
  11. let mut events = sdl.event_pump().unwrap();
  12. let vid = sdl.video().unwrap();
  13. let mut canvas: sdl2::render::Canvas<_> =
  14. vid.window("R", 800, 600)
  15. .build()
  16. .unwrap()
  17. .into_canvas()
  18. .build()
  19. .unwrap();
  20. let mut scene =
  21. {
  22. use geom::Dim;
  23. use frag::AlignH::*;
  24. use frag::AlignV::*;
  25. frag::pack_lr(vec![
  26. frag::rect(Dim(40, 40), Color::RGB(255, 0, 0)),
  27. frag::rect(Dim(40, 40), Color::RGB(0, 180, 220)),
  28. frag::rect(Dim(40, 40), Color::RGB(255, 255, 0)),
  29. frag::fill(Color::RGB(10, 90, 20)),
  30. ])
  31. .align(Left, Top)
  32. .spacing(3)
  33. .container_bg(20, Color::RGB(255, 255, 255))
  34. .width(600)
  35. .height(400)
  36. .align(Center, Middle)
  37. };
  38. scene.calculate_geometry(geom::Dim(800, 600));
  39. 'renderloop: loop {
  40. for evt in events.poll_iter() {
  41. match evt {
  42. Event::Quit { .. } =>
  43. break 'renderloop,
  44. Event::Window { win_event: WindowEvent::Resized(w, h), .. } => {
  45. scene.calculate_geometry(geom::Dim(w as u32, h as u32));
  46. }
  47. _ => (),
  48. }
  49. }
  50. canvas.set_draw_color(Color::RGB(0, 0, 0));
  51. canvas.clear();
  52. canvas.draw_frag(&scene);
  53. canvas.present();
  54. std::thread::sleep(
  55. std::time::Duration::from_micros(1000000 / 64)
  56. );
  57. }
  58. }