watch controls for edit mode

This commit is contained in:
galister
2025-11-25 23:13:14 +09:00
parent 8bd1097886
commit 3f907180f8
17 changed files with 424 additions and 130 deletions

View File

@@ -2,38 +2,38 @@ use std::{
collections::VecDeque,
ops::Add,
sync::{
Arc,
atomic::{AtomicBool, AtomicUsize, Ordering},
Arc,
},
time::{Duration, Instant},
};
use anyhow::{Result, anyhow};
use anyhow::{anyhow, Result};
use ovr_overlay::{
TrackedDeviceIndex,
sys::{ETrackedDeviceProperty, EVRApplicationType, EVREventType},
TrackedDeviceIndex,
};
use vulkano::{Handle, VulkanObject, device::physical::PhysicalDevice};
use vulkano::{device::physical::PhysicalDevice, Handle, VulkanObject};
use wlx_common::overlays::ToastTopic;
use crate::{
backend::{
BackendError,
input::interact,
openvr::{
helpers::adjust_gain,
input::{OpenVrInputSource, set_action_manifest},
input::{set_action_manifest, OpenVrInputSource},
lines::LinePool,
manifest::{install_manifest, uninstall_manifest},
overlay::OpenVrOverlayData,
},
task::{SystemTask, TaskType},
task::{ManagerTask, SystemTask, TaskType},
BackendError,
},
config::save_state,
graphics::{GpuFutures, init_openvr_graphics},
graphics::{init_openvr_graphics, GpuFutures},
overlays::{
toast::Toast,
watch::{WATCH_NAME, watch_fade},
watch::{watch_fade, WATCH_NAME},
},
state::AppState,
subsystem::notifications::NotificationManager,
@@ -107,7 +107,7 @@ pub fn openvr_run(
if show_by_default {
app.tasks.enqueue_at(
TaskType::System(SystemTask::ShowHide),
TaskType::Manager(ManagerTask::ShowHide),
Instant::now().add(Duration::from_secs(1)),
);
}
@@ -254,26 +254,9 @@ pub fn openvr_run(
SystemTask::ResetPlayspace => {
playspace.reset_offset(&mut chaperone_mgr, &app.input_state);
}
SystemTask::ShowHide => {
overlays.show_hide(&mut app);
}
},
TaskType::ToggleSet(set) => {
overlays.switch_or_toggle_set(&mut app, set);
}
TaskType::ToggleEditMode => {
if !overlays.get_edit_mode() {
Toast::new(
ToastTopic::System,
"Edit mode enabled".into(),
"Hover overlays to see their options".into(),
)
.with_timeout(5.)
.with_sound(true)
.submit(&mut app);
}
overlays.set_edit_mode(!overlays.get_edit_mode());
TaskType::Manager(task) => {
overlays.handle_task(&mut app, task)?;
}
#[cfg(feature = "wayvr")]
TaskType::WayVR(action) => {

View File

@@ -2,8 +2,8 @@ use std::{
collections::VecDeque,
ops::Add,
sync::{
Arc,
atomic::{AtomicBool, AtomicUsize, Ordering},
Arc,
},
time::{Duration, Instant},
};
@@ -18,16 +18,16 @@ use wlx_common::overlays::ToastTopic;
use crate::{
backend::{
BackendError,
input::interact,
openxr::{lines::LinePool, overlay::OpenXrOverlayData},
task::{SystemTask, TaskType},
task::{ManagerTask, SystemTask, TaskType},
BackendError,
},
config::save_state,
graphics::{GpuFutures, init_openxr_graphics},
graphics::{init_openxr_graphics, GpuFutures},
overlays::{
toast::Toast,
watch::{WATCH_NAME, watch_fade},
watch::{watch_fade, WATCH_NAME},
},
state::AppState,
subsystem::notifications::NotificationManager,
@@ -95,7 +95,7 @@ pub fn openxr_run(
if show_by_default {
app.tasks.enqueue_at(
TaskType::System(SystemTask::ShowHide),
TaskType::Manager(ManagerTask::ShowHide),
Instant::now().add(Duration::from_secs(1)),
);
}
@@ -537,27 +537,10 @@ pub fn openxr_run(
playspace.reset_offset(monado.as_mut().unwrap()); // safe
}
}
SystemTask::ShowHide => {
overlays.show_hide(&mut app);
}
_ => {}
},
TaskType::ToggleSet(set) => {
overlays.switch_or_toggle_set(&mut app, set);
}
TaskType::ToggleEditMode => {
if !overlays.get_edit_mode() {
Toast::new(
ToastTopic::System,
"Edit mode enabled".into(),
"Hover overlays to see their options".into(),
)
.with_timeout(5.)
.with_sound(true)
.submit(&mut app);
}
overlays.set_edit_mode(!overlays.get_edit_mode());
TaskType::Manager(task) => {
overlays.handle_task(&mut app, task)?;
}
#[cfg(feature = "wayvr")]
TaskType::WayVR(action) => {

View File

@@ -47,18 +47,23 @@ pub enum SystemTask {
ColorGain(ColorChannel, f32),
ResetPlayspace,
FixFloor,
ShowHide,
}
pub type OverlayTask = dyn FnOnce(&mut AppState, &mut OverlayWindowConfig) + Send;
pub type CreateOverlayTask = dyn FnOnce(&mut AppState) -> Option<OverlayWindowConfig> + Send;
pub enum ManagerTask {
AddSet,
ToggleSet(usize),
DeleteActiveSet,
ToggleEditMode,
ShowHide,
}
pub enum TaskType {
Overlay(OverlaySelector, Box<OverlayTask>),
CreateOverlay(OverlaySelector, Box<CreateOverlayTask>),
DropOverlay(OverlaySelector),
ToggleSet(usize),
ToggleEditMode,
Manager(ManagerTask),
System(SystemTask),
#[cfg(feature = "wayvr")]
WayVR(WayVRAction),