multi_window/
multi_window.rs

1extern crate glfw;
2extern crate gust_render as gust;
3
4use gust::prelude::*;
5use std::cell::RefCell;
6use std::error::Error;
7use std::rc::Rc;
8
9fn window1() -> Result<(), Box<Error>> {
10    let mut window = Window::new(600, 600, "Hello1");
11    let tex_leave = Rc::new(Texture::from_path("examples/texture/Z.png").unwrap());
12    let tex_dirt = Rc::new(Texture::from_path("examples/texture/Dirt.png").unwrap());
13    let mut sprite = Sprite::from(&tex_dirt);
14    let mut leave = Sprite::from(&tex_leave);
15    leave.set_position(Point::new(500.0, 500.0));
16    sprite.set_position(Point::new(10.0, 10.0));
17    leave.set_scale(Vector::new(0.5, 0.5));
18    leave.set_origin_to_center()?;
19
20    let event_handler = EventHandler::new(&window);
21
22    window.set_clear_color(Color::new(0.45, 0.0, 1.0));
23    window.enable_cursor();
24    window.poll(None);
25
26    while window.is_open() {
27        window.poll_events();
28        leave.rotate(1.0);
29        leave.update();
30        sprite.update();
31
32        for event in event_handler.fetch() {
33            event_process(event, &mut window);
34        }
35
36        window.clear();
37        window.draw(&mut sprite);
38        window.draw(&mut leave);
39        window.display();
40    }
41    Ok(())
42}
43
44fn window2() -> Result<(), Box<Error>> {
45    let mut window = Window::new(500, 500, "Hello2");
46    let font = Rc::new(RefCell::new(
47        Font::from_path("examples/font/terminus.ttf").unwrap(),
48    ));
49    let mut text = Text::from_str(&font, "I've been looking forward to this.");
50    text.set_position(Vector::new(5.0, 40.0));
51    let event_handler = EventHandler::new(&window);
52
53    window.set_clear_color(Color::new(1.0, 0.0, 1.0));
54    window.enable_cursor();
55    window.poll(None);
56
57    while window.is_open() {
58        text.update();
59        window.poll_events();
60
61        for event in event_handler.fetch() {
62            event_process(event, &mut window);
63        }
64
65        window.clear();
66        window.draw(&mut text);
67        window.display();
68    }
69    Ok(())
70}
71
72fn main() {
73    use std::thread;
74
75    // launch first window
76    let waiter = thread::spawn(|| {
77        window1().unwrap();
78    });
79
80    // launch second one
81    let waiter2 = thread::spawn(|| {
82        window2().unwrap();
83    });
84
85    // Wait for the two other thread to end before ending main
86    waiter.join().unwrap();
87    waiter2.join().unwrap();
88}
89
90fn event_process(event: Event, window: &mut Window) {
91    match event.1 {
92        Events::Key(Key::Escape, _, _, _) => {
93            window.close();
94        }
95        Events::MouseButton(_, _, _) => {
96            println!("Mouse button !");
97        }
98        Events::CursorPos(x, y) => {
99            println!("x: {}, y: {}", x, y);
100        }
101        _ => println!("Another event !"),
102    }
103}