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:
@@ -6,6 +6,7 @@ use glam::{Affine3A, Vec2, Vec3A};
|
|||||||
use ovr_overlay::TrackedDeviceIndex;
|
use ovr_overlay::TrackedDeviceIndex;
|
||||||
use smallvec::{smallvec, SmallVec};
|
use smallvec::{smallvec, SmallVec};
|
||||||
|
|
||||||
|
use crate::config::GeneralConfig;
|
||||||
use crate::state::AppState;
|
use crate::state::AppState;
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
@@ -287,7 +288,7 @@ where
|
|||||||
let mut pointer = &mut app.input_state.pointers[idx];
|
let mut pointer = &mut app.input_state.pointers[idx];
|
||||||
if let Some(grab_data) = pointer.interaction.grabbed {
|
if let Some(grab_data) = pointer.interaction.grabbed {
|
||||||
if let Some(grabbed) = overlays.mut_by_id(grab_data.grabbed_id) {
|
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 {
|
} else {
|
||||||
log::warn!("Grabbed overlay {} does not exist", grab_data.grabbed_id);
|
log::warn!("Grabbed overlay {} does not exist", grab_data.grabbed_id);
|
||||||
pointer.interaction.grabbed = None;
|
pointer.interaction.grabbed = None;
|
||||||
@@ -472,7 +473,7 @@ impl Pointer {
|
|||||||
log::info!("Hand {}: grabbed {}", self.idx, overlay.state.name);
|
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
|
where
|
||||||
O: Default,
|
O: Default,
|
||||||
{
|
{
|
||||||
@@ -494,8 +495,10 @@ impl Pointer {
|
|||||||
.matrix3
|
.matrix3
|
||||||
.mul_scalar(1.0 - 0.025 * self.now.scroll);
|
.mul_scalar(1.0 - 0.025 * self.now.scroll);
|
||||||
} else {
|
} else {
|
||||||
|
if config.allow_sliding && self.now.scroll.is_finite() {
|
||||||
grab_data.offset.z -= self.now.scroll * 0.05;
|
grab_data.offset.z -= self.now.scroll * 0.05;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
overlay.state.transform.translation = self.pose.transform_point3a(grab_data.offset);
|
overlay.state.transform.translation = self.pose.transform_point3a(grab_data.offset);
|
||||||
overlay.state.realign(hmd);
|
overlay.state.realign(hmd);
|
||||||
overlay.state.dirty = true;
|
overlay.state.dirty = true;
|
||||||
|
|||||||
@@ -150,6 +150,9 @@ pub struct GeneralConfig {
|
|||||||
|
|
||||||
#[serde(default = "def_half")]
|
#[serde(default = "def_half")]
|
||||||
pub xr_alt_click_sensitivity_release: f32,
|
pub xr_alt_click_sensitivity_release: f32,
|
||||||
|
|
||||||
|
#[serde(default = "def_true")]
|
||||||
|
pub allow_sliding: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GeneralConfig {
|
impl GeneralConfig {
|
||||||
|
|||||||
@@ -11,3 +11,7 @@ keyboard_sound_enabled: true
|
|||||||
keyboard_scale: 1.0
|
keyboard_scale: 1.0
|
||||||
desktop_view_scale: 1.0
|
desktop_view_scale: 1.0
|
||||||
watch_scale: 1.0
|
watch_scale: 1.0
|
||||||
|
|
||||||
|
# Enable / disable sliding windows back and forth with the scroll action
|
||||||
|
# Default: true
|
||||||
|
allow_sliding: true
|
||||||
|
|||||||
Reference in New Issue
Block a user