changeset 16: | af615d1895cb |
author: | ellis <ellis@rwest.io> |
date: | Fri, 26 May 2023 21:59:40 -0400 |
permissions: | -rw-r--r-- |
description: | refactoring, ui stuff (goin with slint for DSL power) |
16
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
1 | #[cfg(target_arch="wasm32")] |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
2 | use wasm_bindgen::prelude::*; |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
3 | use winit::{ |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
4 | event::*, |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
5 | event_loop::{ControlFlow, EventLoop}, |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
6 | window::WindowBuilder, |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
7 | }; |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
8 | |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
9 | #[cfg_attr(target_arch="wasm32", wasm_bindgen(start))] |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
10 | pub fn run() { |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
11 | cfg_if::cfg_if! { |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
12 | if #[cfg(target_arch = "wasm32")] { |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
13 | std::panic::set_hook(Box::new(console_error_panic_hook::hook)); |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
14 | console_log::init_with_level(log::Level::Warn).expect("Couldn't initialize logger"); |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
15 | } else { |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
16 | env_logger::init(); |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
17 | } |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
18 | } |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
19 | let event_loop = EventLoop::new(); |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
20 | let window = WindowBuilder::new().build(&event_loop).unwrap(); |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
21 | |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
22 | #[cfg(target_arch = "wasm32")] |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
23 | { |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
24 | // Winit prevents sizing with CSS, so we have to set |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
25 | // the size manually when on web. |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
26 | use winit::dpi::PhysicalSize; |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
27 | window.set_inner_size(PhysicalSize::new(450, 400)); |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
28 | |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
29 | use winit::platform::web::WindowExtWebSys; |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
30 | web_sys::window() |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
31 | .and_then(|win| win.document()) |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
32 | .and_then(|doc| { |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
33 | let dst = doc.get_element_by_id("wasm-example")?; |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
34 | let canvas = web_sys::Element::from(window.canvas()); |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
35 | dst.append_child(&canvas).ok()?; |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
36 | Some(()) |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
37 | }) |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
38 | .expect("Couldn't append canvas to document body."); |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
39 | } |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
40 | event_loop.run(move |event, _, control_flow| match event { |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
41 | Event::WindowEvent { |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
42 | ref event, |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
43 | window_id, |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
44 | } if window_id == window.id() => match event { |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
45 | WindowEvent::CloseRequested |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
46 | | WindowEvent::KeyboardInput { |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
47 | input: |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
48 | KeyboardInput { |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
49 | state: ElementState::Pressed, |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
50 | virtual_keycode: Some(VirtualKeyCode::Escape), |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
51 | .. |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
52 | }, |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
53 | .. |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
54 | } => *control_flow = ControlFlow::Exit, |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
55 | _ => {} |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
56 | }, |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
57 | _ => {} |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
58 | }); |
af615d1895cb
refactoring, ui stuff (goin with slint for DSL power)
ellis <ellis@rwest.io>
parents:
diff
changeset
|
59 | } |