From f149182290809270e8982de832736addd0155b9f Mon Sep 17 00:00:00 2001 From: stevedagiraffe Date: Wed, 2 Oct 2019 22:44:41 +1000 Subject: [PATCH 1/3] associated zoom inversion to GameplaySettings --- voxygen/src/settings.rs | 2 ++ voxygen/src/window.rs | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/voxygen/src/settings.rs b/voxygen/src/settings.rs index a7b54cde54..c1f4d3884f 100644 --- a/voxygen/src/settings.rs +++ b/voxygen/src/settings.rs @@ -95,6 +95,7 @@ impl Default for ControlSettings { pub struct GameplaySettings { pub pan_sensitivity: u32, pub zoom_sensitivity: u32, + pub zoom_inversion: bool, pub crosshair_transp: f32, pub crosshair_type: CrosshairType, pub xp_bar: XpBar, @@ -108,6 +109,7 @@ impl Default for GameplaySettings { Self { pan_sensitivity: 100, zoom_sensitivity: 100, + zoom_inversion: false, crosshair_transp: 0.6, crosshair_type: CrosshairType::Round, xp_bar: XpBar::OnGain, diff --git a/voxygen/src/window.rs b/voxygen/src/window.rs index 5564e86a04..b468a157b3 100644 --- a/voxygen/src/window.rs +++ b/voxygen/src/window.rs @@ -91,6 +91,7 @@ pub struct Window { cursor_grabbed: bool, pub pan_sensitivity: u32, pub zoom_sensitivity: u32, + pub zoom_inversion: bool, fullscreen: bool, needs_refresh_resize: bool, key_map: HashMap>, @@ -236,6 +237,7 @@ impl Window { cursor_grabbed: false, pan_sensitivity: settings.gameplay.pan_sensitivity, zoom_sensitivity: settings.gameplay.zoom_sensitivity, + zoom_inversion: settings.gameplay.zoom_inversion, fullscreen: false, needs_refresh_resize: false, key_map: map, @@ -271,6 +273,10 @@ impl Window { let keypress_map = &mut self.keypress_map; let pan_sensitivity = self.pan_sensitivity; let zoom_sensitivity = self.zoom_sensitivity; + let zoom_inversion = match self.zoom_inversion { + true => -1.0, + false => 1.0, + }; let mut toggle_fullscreen = false; let mut take_screenshot = false; @@ -373,7 +379,7 @@ impl Window { delta: glutin::MouseScrollDelta::LineDelta(_x, y), .. } if cursor_grabbed && *focused => { - events.push(Event::Zoom(y * (zoom_sensitivity as f32 / 100.0))) + events.push(Event::Zoom(y * (zoom_sensitivity as f32 / 100.0) * zoom_inversion)) } _ => {} }, From 8680e925480ac63c88d1798df32de02601db65a4 Mon Sep 17 00:00:00 2001 From: stevedagiraffe Date: Wed, 2 Oct 2019 23:09:05 +1000 Subject: [PATCH 2/3] Added ability to toggle zoom inversion in settings Displayed as checkbox under the Gameplay tab. --- voxygen/src/hud/mod.rs | 4 ++++ voxygen/src/hud/settings_window.rs | 27 +++++++++++++++++++++++++++ voxygen/src/session.rs | 5 +++++ 3 files changed, 36 insertions(+) diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index d18c58ab13..0d6195ba4d 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -152,6 +152,7 @@ pub enum Event { SendMessage(String), AdjustMousePan(u32), AdjustMouseZoom(u32), + ToggleZoomInvert(bool), AdjustViewDistance(u32), AdjustMusicVolume(f32), AdjustSfxVolume(f32), @@ -797,6 +798,9 @@ impl Hud { settings_window::Event::AdjustMouseZoom(sensitivity) => { events.push(Event::AdjustMouseZoom(sensitivity)); } + settings_window::Event::ToggleZoomInvert(zoom_inverted) => { + events.push(Event::ToggleZoomInvert(zoom_inverted)); + } settings_window::Event::AdjustViewDistance(view_distance) => { events.push(Event::AdjustViewDistance(view_distance)); } diff --git a/voxygen/src/hud/settings_window.rs b/voxygen/src/hud/settings_window.rs index 1fe4289c4b..0cce7bc7db 100644 --- a/voxygen/src/hud/settings_window.rs +++ b/voxygen/src/hud/settings_window.rs @@ -50,6 +50,8 @@ widget_ids! { mouse_zoom_slider, mouse_zoom_label, mouse_zoom_value, + mouse_zoom_invert_button, + mouse_zoom_invert_label, ch_title, ch_transp_slider, ch_transp_label, @@ -154,6 +156,7 @@ pub enum Event { Close, AdjustMousePan(u32), AdjustMouseZoom(u32), + ToggleZoomInvert(bool), AdjustViewDistance(u32), AdjustFOV(u16), ChangeAaMode(AaMode), @@ -885,6 +888,30 @@ impl<'a> Widget for SettingsWindow<'a> { .font_id(self.fonts.opensans) .color(TEXT_COLOR) .set(state.ids.mouse_zoom_value, ui); + + // Zoom Inversion + let zoom_inverted = ToggleButton::new( + self.global_state.settings.gameplay.zoom_inversion, + self.imgs.checkbox, + self.imgs.checkbox_checked, + ) + .w_h(18.0, 18.0) + .down_from(state.ids.mouse_zoom_slider, 20.0) + .hover_images(self.imgs.checkbox_mo, self.imgs.checkbox_checked_mo) + .press_images(self.imgs.checkbox_press, self.imgs.checkbox_checked) + .set(state.ids.mouse_zoom_invert_button, ui); + + if self.global_state.settings.gameplay.zoom_inversion != zoom_inverted { + events.push(Event::ToggleZoomInvert(!self.global_state.settings.gameplay.zoom_inversion)); + } + + Text::new("Invert Scroll Zoom") + .right_from(state.ids.mouse_zoom_invert_button, 10.0) + .font_size(14) + .font_id(self.fonts.opensans) + .graphics_for(state.ids.button_help) + .color(TEXT_COLOR) + .set(state.ids.mouse_zoom_invert_label, ui); } // 3) Controls Tab -------------------------------- diff --git a/voxygen/src/session.rs b/voxygen/src/session.rs index fbdd326786..613c19085a 100644 --- a/voxygen/src/session.rs +++ b/voxygen/src/session.rs @@ -392,6 +392,11 @@ impl PlayState for SessionState { global_state.settings.gameplay.zoom_sensitivity = sensitivity; global_state.settings.save_to_file_warn(); } + HudEvent::ToggleZoomInvert(zoom_inverted) => { + global_state.window.zoom_inversion = zoom_inverted; + global_state.settings.gameplay.zoom_inversion = zoom_inverted; + global_state.settings.save_to_file_warn(); + } HudEvent::AdjustViewDistance(view_distance) => { self.client.borrow_mut().set_view_distance(view_distance); From f1b78d21c8bd1d70b7f0a3bc1e6418eaeed1a134 Mon Sep 17 00:00:00 2001 From: stevedagiraffe Date: Thu, 3 Oct 2019 09:16:46 +1000 Subject: [PATCH 3/3] Formatted with fmt --- voxygen/src/hud/settings_window.rs | 4 +++- voxygen/src/window.rs | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/voxygen/src/hud/settings_window.rs b/voxygen/src/hud/settings_window.rs index 0cce7bc7db..0584dbdc99 100644 --- a/voxygen/src/hud/settings_window.rs +++ b/voxygen/src/hud/settings_window.rs @@ -902,7 +902,9 @@ impl<'a> Widget for SettingsWindow<'a> { .set(state.ids.mouse_zoom_invert_button, ui); if self.global_state.settings.gameplay.zoom_inversion != zoom_inverted { - events.push(Event::ToggleZoomInvert(!self.global_state.settings.gameplay.zoom_inversion)); + events.push(Event::ToggleZoomInvert( + !self.global_state.settings.gameplay.zoom_inversion, + )); } Text::new("Invert Scroll Zoom") diff --git a/voxygen/src/window.rs b/voxygen/src/window.rs index b468a157b3..8f74603abf 100644 --- a/voxygen/src/window.rs +++ b/voxygen/src/window.rs @@ -378,9 +378,9 @@ impl Window { glutin::DeviceEvent::MouseWheel { delta: glutin::MouseScrollDelta::LineDelta(_x, y), .. - } if cursor_grabbed && *focused => { - events.push(Event::Zoom(y * (zoom_sensitivity as f32 / 100.0) * zoom_inversion)) - } + } if cursor_grabbed && *focused => events.push(Event::Zoom( + y * (zoom_sensitivity as f32 / 100.0) * zoom_inversion, + )), _ => {} }, _ => {}