From 807a27328c392670d3e28055b15eed1b0ba6e59d Mon Sep 17 00:00:00 2001 From: Joshua Barretto Date: Sat, 26 Oct 2019 15:50:01 +0100 Subject: [PATCH] Updated to winit 20 --- Cargo.lock | 163 ++++++++++++++++++++++++++++++++++------ voxygen/Cargo.toml | 8 +- voxygen/src/settings.rs | 2 +- voxygen/src/ui/event.rs | 12 +-- voxygen/src/window.rs | 96 ++++++++++++----------- 5 files changed, 204 insertions(+), 77 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a847fa1d48..6155708ef3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -428,6 +428,17 @@ dependencies = [ "winapi 0.3.8", ] +[[package]] +name = "calloop" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aa2097be53a00de9e8fc349fea6d76221f398f5c4fa550d420669906962d160" +dependencies = [ + "mio", + "mio-extras", + "nix 0.14.1", +] + [[package]] name = "cast" version = "0.2.3" @@ -471,6 +482,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" +dependencies = [ + "libc", +] + [[package]] name = "chrono" version = "0.4.11" @@ -536,8 +556,8 @@ checksum = "1706996401131526e36b3b49f0c4d912639ce110996f3ca144d78946727bce54" dependencies = [ "bitflags", "block", - "core-foundation", - "core-graphics", + "core-foundation 0.6.4", + "core-graphics 0.17.3", "foreign-types", "libc", "objc", @@ -551,8 +571,8 @@ checksum = "f29f7768b2d1be17b96158e3285951d366b40211320fb30826a76cb7a0da6400" dependencies = [ "bitflags", "block", - "core-foundation", - "core-graphics", + "core-foundation 0.6.4", + "core-graphics 0.17.3", "foreign-types", "libc", "objc", @@ -561,7 +581,7 @@ dependencies = [ [[package]] name = "conrod_core" version = "0.63.0" -source = "git+https://gitlab.com/veloren/conrod.git?branch=pre-winit-20#46b374edc9537300e5278905ebd14dff45cfd927" +source = "git+https://gitlab.com/veloren/conrod.git?branch=hide_text#92925b122dfed139169c7d7687b3ca15c0cb5a2e" dependencies = [ "conrod_derive", "copypasta", @@ -576,7 +596,7 @@ dependencies = [ [[package]] name = "conrod_derive" version = "0.63.0" -source = "git+https://gitlab.com/veloren/conrod.git?branch=pre-winit-20#46b374edc9537300e5278905ebd14dff45cfd927" +source = "git+https://gitlab.com/veloren/conrod.git?branch=hide_text#92925b122dfed139169c7d7687b3ca15c0cb5a2e" dependencies = [ "proc-macro2 0.4.30", "quote 0.6.13", @@ -586,7 +606,7 @@ dependencies = [ [[package]] name = "conrod_winit" version = "0.63.0" -source = "git+https://gitlab.com/veloren/conrod.git?branch=pre-winit-20#46b374edc9537300e5278905ebd14dff45cfd927" +source = "git+https://gitlab.com/veloren/conrod.git?branch=hide_text#92925b122dfed139169c7d7687b3ca15c0cb5a2e" [[package]] name = "const-random" @@ -673,7 +693,17 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" dependencies = [ - "core-foundation-sys", + "core-foundation-sys 0.6.2", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +dependencies = [ + "core-foundation-sys 0.7.0", "libc", ] @@ -683,6 +713,12 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" +[[package]] +name = "core-foundation-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" + [[package]] name = "core-graphics" version = "0.17.3" @@ -690,11 +726,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56790968ab1c8a1202a102e6de05fc6e1ec87da99e4e93e9a7d13efbfc1e95a9" dependencies = [ "bitflags", - "core-foundation", + "core-foundation 0.6.4", "foreign-types", "libc", ] +[[package]] +name = "core-graphics" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" +dependencies = [ + "bitflags", + "core-foundation 0.7.0", + "foreign-types", + "libc", +] + +[[package]] +name = "core-video-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" +dependencies = [ + "cfg-if", + "core-foundation-sys 0.7.0", + "core-graphics 0.19.2", + "libc", + "objc", +] + [[package]] name = "coreaudio-rs" version = "0.9.1" @@ -721,7 +782,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b55d55d69f403f62a95bd3c04b431e0aedf5120c70f15d07a8edd234443dd59" dependencies = [ "alsa-sys", - "core-foundation-sys", + "core-foundation-sys 0.6.2", "coreaudio-rs", "lazy_static", "libc", @@ -1513,7 +1574,7 @@ checksum = "310ff66f08b5a55854b18fea2f48bdbb75c94458207ba574c9723be78e97a646" dependencies = [ "gfx_core", "gfx_device_gl", - "glutin", + "glutin 0.21.2", ] [[package]] @@ -1537,7 +1598,7 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43c758daf46af26d6872fe55507e3b2339779a160a06ad7a9b2a082f221209cd" dependencies = [ - "core-foundation", + "core-foundation 0.6.4", "io-kit-sys", "libc", "libudev-sys", @@ -1677,10 +1738,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5371b35b309dace06be1b81b5f6adb1c9de578b7dbe1e74bf7e4ef762cf6febd" dependencies = [ "android_glue", - "cgl", + "cgl 0.2.3", "cocoa 0.18.5", - "core-foundation", - "core-graphics", + "core-foundation 0.6.4", + "core-graphics 0.17.3", "glutin_egl_sys", "glutin_emscripten_sys", "glutin_gles2_sys", @@ -1693,7 +1754,34 @@ dependencies = [ "parking_lot 0.9.0", "wayland-client 0.21.13", "winapi 0.3.8", - "winit", + "winit 0.19.5", +] + +[[package]] +name = "glutin" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "639246c8838b02a83b9339bd87da3714e73e52ecfaa758e15d761eb77b2290b5" +dependencies = [ + "android_glue", + "cgl 0.3.2", + "cocoa 0.19.1", + "core-foundation 0.6.4", + "core-graphics 0.17.3", + "glutin_egl_sys", + "glutin_emscripten_sys", + "glutin_gles2_sys", + "glutin_glx_sys", + "glutin_wgl_sys", + "lazy_static", + "libloading 0.5.2", + "log", + "objc", + "osmesa-sys", + "parking_lot 0.10.2", + "wayland-client 0.23.6", + "winapi 0.3.8", + "winit 0.20.0", ] [[package]] @@ -2048,7 +2136,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f21dcc74995dd4cd090b147e79789f8d65959cbfb5f0b118002db869ea3bd0a0" dependencies = [ - "core-foundation-sys", + "core-foundation-sys 0.6.2", "mach", ] @@ -4516,7 +4604,7 @@ dependencies = [ "gilrs", "git2", "glsl-include", - "glutin", + "glutin 0.22.1", "guillotiere", "hashbrown", "image", @@ -4541,7 +4629,7 @@ dependencies = [ "veloren-server", "veloren-voxygen-anim", "veloren-world", - "winit", + "winit 0.20.0", "winres", ] @@ -4728,8 +4816,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1080ebe0efabcf12aef2132152f616038f2d7dcbbccf7b2d8c5270fe14bcda" dependencies = [ "bitflags", + "calloop", "downcast-rs", "libc", + "mio", "nix 0.14.1", "wayland-commons 0.23.6", "wayland-scanner 0.23.6", @@ -4905,8 +4995,8 @@ dependencies = [ "backtrace", "bitflags", "cocoa 0.18.5", - "core-foundation", - "core-graphics", + "core-foundation 0.6.4", + "core-graphics 0.17.3", "lazy_static", "libc", "log", @@ -4914,13 +5004,42 @@ dependencies = [ "parking_lot 0.9.0", "percent-encoding 2.1.0", "raw-window-handle", - "serde", "smithay-client-toolkit 0.4.6", "wayland-client 0.21.13", "winapi 0.3.8", "x11-dl", ] +[[package]] +name = "winit" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ba128780050481f453bec2a115b916dbc6ae79c303dee9bad8b9080bdccd4f5" +dependencies = [ + "android_glue", + "bitflags", + "cocoa 0.19.1", + "core-foundation 0.6.4", + "core-graphics 0.17.3", + "core-video-sys", + "dispatch", + "instant", + "lazy_static", + "libc", + "log", + "mio", + "mio-extras", + "objc", + "parking_lot 0.10.2", + "percent-encoding 2.1.0", + "raw-window-handle", + "serde", + "smithay-client-toolkit 0.6.6", + "wayland-client 0.23.6", + "winapi 0.3.8", + "x11-dl", +] + [[package]] name = "winres" version = "0.1.11" diff --git a/voxygen/Cargo.toml b/voxygen/Cargo.toml index 9fcc062af1..2e8e64ad7e 100644 --- a/voxygen/Cargo.toml +++ b/voxygen/Cargo.toml @@ -26,10 +26,10 @@ anim = { package = "veloren-voxygen-anim", path = "src/anim", default-features = gfx = "0.18.2" gfx_device_gl = { version = "0.16.2", optional = true } gfx_window_glutin = "0.31.0" -glutin = "0.21.1" -winit = { version = "0.19.4", features = ["serde"] } -conrod_core = { git = "https://gitlab.com/veloren/conrod.git", branch = "pre-winit-20" } -conrod_winit = { git = "https://gitlab.com/veloren/conrod.git", branch = "pre-winit-20" } +glutin = "0.22.0-alpha3" +winit = { version = "0.20.0-alpha4", features = ["serde"] } +conrod_core = { git = "https://gitlab.com/veloren/conrod.git", branch = "hide_text" } +conrod_winit = { git = "https://gitlab.com/veloren/conrod.git", branch = "hide_text" } euc = { git = "https://github.com/zesterer/euc.git" } # ECS diff --git a/voxygen/src/settings.rs b/voxygen/src/settings.rs index fb6f787e96..3aec021d4c 100644 --- a/voxygen/src/settings.rs +++ b/voxygen/src/settings.rs @@ -6,11 +6,11 @@ use crate::{ window::{GameInput, KeyMouse}, }; use directories_next::{ProjectDirs, UserDirs}; -use glutin::{MouseButton, VirtualKeyCode}; use hashbrown::{HashMap, HashSet}; use serde_derive::{Deserialize, Serialize}; use std::{fs, io::prelude::*, path::PathBuf}; use tracing::warn; +use winit::event::{MouseButton, VirtualKeyCode}; // ControlSetting-like struct used by Serde, to handle not serializing/building // post-deserializing the inverse_keybindings hashmap diff --git a/voxygen/src/ui/event.rs b/voxygen/src/ui/event.rs index b6a6dc20d7..e7c3b6f2bb 100644 --- a/voxygen/src/ui/event.rs +++ b/voxygen/src/ui/event.rs @@ -5,24 +5,24 @@ use vek::*; pub struct Event(pub Input); impl Event { pub fn try_from( - event: glutin::Event, - window: &glutin::ContextWrapper, + event: glutin::event::Event<()>, + window: &glutin::ContextWrapper, ) -> Option { use conrod_winit::*; // A wrapper around the winit window that allows us to implement the trait // necessary for enabling the winit <-> conrod conversion functions. - struct WindowRef<'a>(&'a winit::Window); + struct WindowRef<'a>(&'a winit::window::Window); // Implement the `WinitWindow` trait for `WindowRef` to allow for generating // compatible conversion functions. impl<'a> conrod_winit::WinitWindow for WindowRef<'a> { fn get_inner_size(&self) -> Option<(u32, u32)> { - winit::Window::get_inner_size(&self.0).map(Into::into) + Some(winit::window::Window::inner_size(&self.0).into()) } - fn hidpi_factor(&self) -> f32 { winit::Window::get_hidpi_factor(&self.0) as _ } + fn hidpi_factor(&self) -> f32 { winit::window::Window::get_hidpi_factor(&self.0) as _ } } - convert_event!(event, &WindowRef(window.window())).map(Self) + convert_event!(event, &WindowRef(window.window())).map(|input| Self(input)) } pub fn is_keyboard_or_mouse(&self) -> bool { diff --git a/voxygen/src/window.rs b/voxygen/src/window.rs index 73b75de715..e5f078253f 100644 --- a/voxygen/src/window.rs +++ b/voxygen/src/window.rs @@ -280,19 +280,19 @@ pub enum Event { ScreenshotMessage(String), } -pub type MouseButton = winit::MouseButton; -pub type PressState = winit::ElementState; +pub type MouseButton = winit::event::MouseButton; +pub type PressState = winit::event::ElementState; #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Deserialize, Serialize)] pub enum KeyMouse { - Key(glutin::VirtualKeyCode), - Mouse(glutin::MouseButton), + Key(glutin::event::VirtualKeyCode), + Mouse(glutin::event::MouseButton), } impl fmt::Display for KeyMouse { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { use self::KeyMouse::*; - use glutin::{MouseButton, VirtualKeyCode::*}; + use glutin::event::{MouseButton, VirtualKeyCode::*}; write!(f, "{}", match self { Key(Key1) => "1", Key(Key2) => "2", @@ -466,9 +466,9 @@ impl fmt::Display for KeyMouse { } pub struct Window { - events_loop: glutin::EventsLoop, + events_loop: glutin::event_loop::EventLoop<()>, renderer: Renderer, - window: glutin::ContextWrapper, + window: glutin::ContextWrapper, cursor_grabbed: bool, pub pan_sensitivity: u32, pub zoom_sensitivity: u32, @@ -476,7 +476,7 @@ pub struct Window { pub mouse_y_inversion: bool, fullscreen: bool, needs_refresh_resize: bool, - keypress_map: HashMap, + keypress_map: HashMap, pub remapping_keybindings: Option, supplement_events: Vec, focused: bool, @@ -491,11 +491,11 @@ pub struct Window { impl Window { pub fn new(settings: &Settings) -> Result { - let events_loop = glutin::EventsLoop::new(); + let events_loop = glutin::event_loop::EventLoop::new(); let size = settings.graphics.window_size; - let win_builder = glutin::WindowBuilder::new() + let win_builder = glutin::window::WindowBuilder::new() .with_title("Veloren") .with_dimensions(glutin::dpi::LogicalSize::new( size[0] as f64, @@ -644,19 +644,22 @@ impl Window { } match event { - glutin::Event::WindowEvent { event, .. } => match event { - glutin::WindowEvent::CloseRequested => events.push(Event::Close), - glutin::WindowEvent::Resized(glutin::dpi::LogicalSize { width, height }) => { + glutin::event::Event::WindowEvent { event, .. } => match event { + glutin::event::WindowEvent::CloseRequested => events.push(Event::Close), + glutin::event::WindowEvent::Resized(glutin::dpi::LogicalSize { + width, + height, + }) => { let (mut color_view, mut depth_view) = renderer.win_views_mut(); gfx_window_glutin::update_views(window, &mut color_view, &mut depth_view); renderer.on_resize().unwrap(); events.push(Event::Resize(Vec2::new(width as u32, height as u32))); }, - glutin::WindowEvent::Moved(glutin::dpi::LogicalPosition { x, y }) => { + glutin::event::WindowEvent::Moved(glutin::dpi::LogicalPosition { x, y }) => { events.push(Event::Moved(Vec2::new(x as u32, y as u32))) }, - glutin::WindowEvent::ReceivedCharacter(c) => events.push(Event::Char(c)), - glutin::WindowEvent::MouseInput { button, state, .. } => { + glutin::event::WindowEvent::ReceivedCharacter(c) => events.push(Event::Char(c)), + glutin::event::WindowEvent::MouseInput { button, state, .. } => { if let (true, Some(game_inputs)) = ( cursor_grabbed, Window::map_input( @@ -668,13 +671,13 @@ impl Window { for game_input in game_inputs { events.push(Event::InputUpdate( *game_input, - state == glutin::ElementState::Pressed, + state == glutin::event::ElementState::Pressed, )); } } events.push(Event::MouseButton(button, state)); }, - glutin::WindowEvent::KeyboardInput { input, .. } => { + glutin::event::WindowEvent::KeyboardInput { input, .. } => { if let Some(key) = input.virtual_keycode { if let Some(game_inputs) = Window::map_input( KeyMouse::Key(key), @@ -684,7 +687,7 @@ impl Window { for game_input in game_inputs { match game_input { GameInput::Fullscreen => { - if input.state == glutin::ElementState::Pressed + if input.state == glutin::event::ElementState::Pressed && !Self::is_pressed( keypress_map, GameInput::Fullscreen, @@ -700,7 +703,7 @@ impl Window { }, GameInput::Screenshot => { take_screenshot = input.state - == glutin::ElementState::Pressed + == glutin::event::ElementState::Pressed && !Self::is_pressed( keypress_map, GameInput::Screenshot, @@ -713,25 +716,24 @@ impl Window { }, _ => events.push(Event::InputUpdate( *game_input, - input.state == glutin::ElementState::Pressed, + input.state == glutin::event::ElementState::Pressed, )), } } } } }, - - glutin::WindowEvent::Focused(state) => { + glutin::event::WindowEvent::Focused(state) => { *focused = state; events.push(Event::Focused(state)); }, - glutin::WindowEvent::CursorMoved { position, .. } => { + glutin::event::WindowEvent::CursorMoved { position, .. } => { cursor_position = Some(position); }, _ => {}, }, - glutin::Event::DeviceEvent { event, .. } => match event { - glutin::DeviceEvent::MouseMotion { + glutin::event::Event::DeviceEvent { event, .. } => match event { + glutin::event::DeviceEvent::MouseMotion { delta: (dx, dy), .. } if *focused => { let delta = Vec2::new( @@ -745,7 +747,9 @@ impl Window { events.push(Event::CursorMove(delta)); } }, - glutin::DeviceEvent::MouseWheel { delta, .. } if cursor_grabbed && *focused => { + glutin::event::DeviceEvent::MouseWheel { delta, .. } + if cursor_grabbed && *focused => + { events.push(Event::Zoom({ // Since scrolling apparently acts different depending on platform #[cfg(target_os = "windows")] @@ -754,17 +758,19 @@ impl Window { const PLATFORM_FACTOR: f32 = 1.0; let y = match delta { - glutin::MouseScrollDelta::LineDelta(_x, y) => y, + glutin::event::MouseScrollDelta::LineDelta(_x, y) => y, // TODO: Check to see if there is a better way to find the "line // height" than just hardcoding 16.0 pixels. Alternately we could // get rid of this and have the user set zoom sensitivity, since // it's unlikely people would expect a configuration file to work // across operating systems. - glutin::MouseScrollDelta::PixelDelta(pos) => (pos.y / 16.0) as f32, + glutin::event::MouseScrollDelta::PixelDelta(pos) => { + (pos.y / 16.0) as f32 + }, }; y * (zoom_sensitivity as f32 / 100.0) * zoom_inversion * PLATFORM_FACTOR })) - }, + } _ => {}, }, _ => {}, @@ -1004,8 +1010,8 @@ impl Window { pub fn grab_cursor(&mut self, grab: bool) { self.cursor_grabbed = grab; - self.window.window().hide_cursor(grab); - let _ = self.window.window().grab_cursor(grab); + self.window.window().set_cursor_visible(!grab); + let _ = self.window.window().set_cursor_grab(grab); } pub fn toggle_fullscreen(&mut self, settings: &mut Settings) { @@ -1020,7 +1026,9 @@ impl Window { let window = self.window.window(); self.fullscreen = fullscreen; if fullscreen { - window.set_fullscreen(Some(window.get_current_monitor())); + window.set_fullscreen(Some(winit::window::Fullscreen::Borderless( + window.current_monitor(), + ))); } else { window.set_fullscreen(None); } @@ -1030,12 +1038,7 @@ impl Window { #[allow(clippy::or_fun_call)] // TODO: Pending review in #587 pub fn logical_size(&self) -> Vec2 { - let (w, h) = self - .window - .window() - .get_inner_size() - .unwrap_or(glutin::dpi::LogicalSize::new(0.0, 0.0)) - .into(); + let (w, h) = self.window.window().inner_size().into(); Vec2::new(w, h) } @@ -1086,15 +1089,20 @@ impl Window { } } - fn is_pressed(map: &mut HashMap, input: GameInput) -> bool { - *(map.entry(input).or_insert(glutin::ElementState::Released)) - == glutin::ElementState::Pressed + fn is_pressed( + map: &mut HashMap, + input: GameInput, + ) -> bool { + *(map + .entry(input) + .or_insert(glutin::event::ElementState::Released)) + == glutin::event::ElementState::Pressed } fn set_pressed( - map: &mut HashMap, + map: &mut HashMap, input: GameInput, - state: glutin::ElementState, + state: glutin::event::ElementState, ) { map.insert(input, state); }