wasm_game_lib/graphics/
window.rs1use super::image::Image;
2use super::canvas::Canvas;
3use crate::inputs::event::EventManager;
4use web_sys::{window, Window as WebSysWindow, Document};
5
6pub struct Window {
9 document: Document,
10 pub window: WebSysWindow,
11 events: EventManager
12}
13
14impl Window {
15 pub fn init() -> (Window, Canvas) {
18 let window = window().unwrap();
19 let document = window.document().unwrap();
20
21 let canvas = Canvas::new();
22 document
23 .body()
24 .unwrap()
25 .append_child(&canvas.element)
26 .unwrap();
27 canvas.element.set_width(document.document_element().unwrap().client_width() as u32);
28 canvas.element.set_height(document.document_element().unwrap().client_height() as u32);
29
30 (Window {
31 window,
32 document,
33 events: EventManager::new()
34 }, canvas)
35 }
36
37 #[allow(clippy::unreadable_literal)]
50 pub fn init_with_events(events: u8) -> (Window, Canvas) {
51 let mouse_events = 0b00000001 & events == 0b00000001;
52 let key_events = 0b00000010 & events == 0b00000010;
53 let size_events = 0b00000100 & events == 0b00000100;
54 let focus_events = 0b00001000 & events == 0b00001000;
55 let joystick_events = 0b00010000 & events == 0b00010000;
56
57 let (mut window, canvas) = Window::init();
58 if mouse_events {
59 window.events.start_recording_mouse_events();
60 }
61 if key_events {
62 window.events.start_recording_keyboard_events();
63 }
64 if size_events {
65 window.events.start_recording_size_events();
66 }
67 if focus_events {
68 window.events.start_recording_focus_events();
69 }
70 if joystick_events {
71 unimplemented!("joysticks are not implemented for now");
72 }
73
74 (window, canvas)
75 }
76
77 pub fn poll_events(&mut self) -> &mut EventManager {
96 &mut self.events
97 }
98
99 pub fn set_title(&mut self, title: &str) {
101 self.document.set_title(title)
102 }
103
104 pub fn get_title(&self) -> String {
106 self.document.title()
107 }
108
109 pub fn set_icon(&mut self, _icon: &Image) {
112 unimplemented!()
113 }
114
115 pub fn get_icon(&self) -> Image {
118 unimplemented!()
119 }
120
121 pub fn get_width(&self) -> u32 {
123 self.document.document_element().unwrap().client_width() as u32
124 }
125
126 pub fn get_height(&self) -> u32 {
128 self.document.document_element().unwrap().client_height() as u32
129 }
130}
131