feat: allow disabling the sliding of screens back and forth (#20)

fix: sliding screens with smooth trackpad scrolling
knuckles smooth trackpad scrolling can return NaN
This commit is contained in:
alexdenerqal
2024-03-29 12:49:45 +01:00
committed by GitHub
parent 7f6e8909e6
commit ab0d91ea20
3 changed files with 13 additions and 3 deletions

View File

@@ -6,6 +6,7 @@ use glam::{Affine3A, Vec2, Vec3A};
use ovr_overlay::TrackedDeviceIndex;
use smallvec::{smallvec, SmallVec};
use crate::config::GeneralConfig;
use crate::state::AppState;
use super::{
@@ -287,7 +288,7 @@ where
let mut pointer = &mut app.input_state.pointers[idx];
if let Some(grab_data) = pointer.interaction.grabbed {
if let Some(grabbed) = overlays.mut_by_id(grab_data.grabbed_id) {
pointer.handle_grabbed(grabbed, hmd);
pointer.handle_grabbed(grabbed, hmd, &app.session.config);
} else {
log::warn!("Grabbed overlay {} does not exist", grab_data.grabbed_id);
pointer.interaction.grabbed = None;
@@ -472,7 +473,7 @@ impl Pointer {
log::info!("Hand {}: grabbed {}", self.idx, overlay.state.name);
}
fn handle_grabbed<O>(&mut self, overlay: &mut OverlayData<O>, hmd: &Affine3A)
fn handle_grabbed<O>(&mut self, overlay: &mut OverlayData<O>, hmd: &Affine3A, config: &GeneralConfig)
where
O: Default,
{
@@ -494,7 +495,9 @@ impl Pointer {
.matrix3
.mul_scalar(1.0 - 0.025 * self.now.scroll);
} else {
grab_data.offset.z -= self.now.scroll * 0.05;
if config.allow_sliding && self.now.scroll.is_finite() {
grab_data.offset.z -= self.now.scroll * 0.05;
}
}
overlay.state.transform.translation = self.pose.transform_point3a(grab_data.offset);
overlay.state.realign(hmd);

View File

@@ -150,6 +150,9 @@ pub struct GeneralConfig {
#[serde(default = "def_half")]
pub xr_alt_click_sensitivity_release: f32,
#[serde(default = "def_true")]
pub allow_sliding: bool,
}
impl GeneralConfig {

View File

@@ -11,3 +11,7 @@ keyboard_sound_enabled: true
keyboard_scale: 1.0
desktop_view_scale: 1.0
watch_scale: 1.0
# Enable / disable sliding windows back and forth with the scroll action
# Default: true
allow_sliding: true