This commit is contained in:
galister
2024-02-20 20:55:14 +01:00
parent d31b3ca6c0
commit e7b415ae4e
12 changed files with 34 additions and 45 deletions

View File

@@ -57,20 +57,20 @@ where
crate::overlays::screen::get_screens_x11(&app.session)? crate::overlays::screen::get_screens_x11(&app.session)?
}; };
let mut watch = create_watch::<T>(&app, &screens)?; let mut watch = create_watch::<T>(app, &screens)?;
watch.state.want_visible = true; watch.state.want_visible = true;
overlays.insert(watch.state.id, watch); overlays.insert(watch.state.id, watch);
let mut keyboard = create_keyboard(&app)?; let mut keyboard = create_keyboard(app)?;
keyboard.state.show_hide = true; keyboard.state.show_hide = true;
keyboard.state.want_visible = false; keyboard.state.want_visible = false;
overlays.insert(keyboard.state.id, keyboard); overlays.insert(keyboard.state.id, keyboard);
let mut show_screens = app.session.config.show_screens.clone(); let mut show_screens = app.session.config.show_screens.clone();
if show_screens.is_empty() { if show_screens.is_empty() {
screens.first().and_then(|s| { screens.first().map(|s| {
show_screens.push(s.state.name.clone()); show_screens.push(s.state.name.clone());
Some(())
}); });
} }
@@ -102,17 +102,17 @@ where
.iter() .iter()
.find(|(_, o)| *o.state.name == **name) .find(|(_, o)| *o.state.name == **name)
.map(|(id, _)| *id); .map(|(id, _)| *id);
id.and_then(|id| self.overlays.remove(&id)); id.and_then(|id| self.overlays.remove(id));
} }
}; };
} }
pub fn get_by_id<'a>(&'a mut self, id: usize) -> Option<&'a OverlayData<T>> { pub fn get_by_id(&mut self, id: usize) -> Option<&OverlayData<T>> {
self.overlays.get(&id) self.overlays.get(id)
} }
pub fn mut_by_id<'a>(&'a mut self, id: usize) -> Option<&'a mut OverlayData<T>> { pub fn mut_by_id(&mut self, id: usize) -> Option<&mut OverlayData<T>> {
self.overlays.get_mut(&id) self.overlays.get_mut(id)
} }
pub fn get_by_name<'a>(&'a mut self, name: &str) -> Option<&'a OverlayData<T>> { pub fn get_by_name<'a>(&'a mut self, name: &str) -> Option<&'a OverlayData<T>> {
@@ -123,11 +123,11 @@ where
self.overlays.values_mut().find(|o| *o.state.name == *name) self.overlays.values_mut().find(|o| *o.state.name == *name)
} }
pub fn iter<'a>(&'a self) -> impl Iterator<Item = &'a OverlayData<T>> { pub fn iter(&self) -> impl Iterator<Item = &'_ OverlayData<T>> {
self.overlays.values() self.overlays.values()
} }
pub fn iter_mut<'a>(&'a mut self) -> impl Iterator<Item = &'a mut OverlayData<T>> { pub fn iter_mut(&mut self) -> impl Iterator<Item = &'_ mut OverlayData<T>> {
self.overlays.values_mut() self.overlays.values_mut()
} }

View File

@@ -128,15 +128,13 @@ impl OpenVrInputSource {
system: &mut SystemManager, system: &mut SystemManager,
app: &mut AppState, app: &mut AppState,
) { ) {
let aas = ActiveActionSet { let aas = ActiveActionSet(ovr_overlay::sys::VRActiveActionSet_t {
0: ovr_overlay::sys::VRActiveActionSet_t {
ulActionSet: self.set_hnd.0, ulActionSet: self.set_hnd.0,
ulRestrictedToDevice: 0, ulRestrictedToDevice: 0,
ulSecondaryActionSet: 0, ulSecondaryActionSet: 0,
unPadding: 0, unPadding: 0,
nPriority: 0, nPriority: 0,
}, });
};
let _ = input.update_actions(&mut [aas]); let _ = input.update_actions(&mut [aas]);
@@ -155,10 +153,10 @@ impl OpenVrInputSource {
0.005, 0.005,
INPUT_ANY, INPUT_ANY,
) )
.and_then(|pose| { .map(|pose| {
app_hand.pose = pose.0.pose.mDeviceToAbsoluteTracking.to_affine(); app_hand.pose = pose.0.pose.mDeviceToAbsoluteTracking.to_affine();
hand.has_pose = true; hand.has_pose = true;
Ok(())
}); });
app_hand.now.click = input app_hand.now.click = input
@@ -237,9 +235,9 @@ impl OpenVrInputSource {
_ => continue, _ => continue,
}; };
get_tracked_device(system, device, role).and_then(|device| { get_tracked_device(system, device, role).map(|device| {
app.input_state.devices.push(device); app.input_state.devices.push(device);
Some(())
}); });
} }

View File

@@ -95,7 +95,7 @@ impl LinePool {
) { ) {
let rotation = Affine3A::from_axis_angle(Vec3::X, -PI * 0.5); let rotation = Affine3A::from_axis_angle(Vec3::X, -PI * 0.5);
from.translation = from.translation + from.transform_vector3a(Vec3A::NEG_Z) * (len * 0.5); from.translation += from.transform_vector3a(Vec3A::NEG_Z) * (len * 0.5);
let mut transform = from * rotation * Affine3A::from_scale(Vec3::new(1., len / 0.002, 1.)); let mut transform = from * rotation * Affine3A::from_scale(Vec3::new(1., len / 0.002, 1.));
let to_hmd = hmd.translation - from.translation; let to_hmd = hmd.translation - from.translation;
@@ -114,7 +114,7 @@ impl LinePool {
} }
} }
transform = transform * rotations[closest.0]; transform *= rotations[closest.0];
debug_assert!(color < self.colors.len()); debug_assert!(color < self.colors.len());

View File

@@ -73,8 +73,8 @@ impl OpenXrInputSource {
Ok(Self { Ok(Self {
action_set, action_set,
hands: [ hands: [
OpenXrHand::new(&xr, left_source)?, OpenXrHand::new(xr, left_source)?,
OpenXrHand::new(&xr, right_source)?, OpenXrHand::new(xr, right_source)?,
], ],
}) })
} }

View File

@@ -94,14 +94,14 @@ impl LinePool {
debug_assert!(color < self.colors.len()); debug_assert!(color < self.colors.len());
let Some(line) = self.lines.get_mut(&id) else { let Some(line) = self.lines.get_mut(id) else {
log::warn!("Line {} not found", id); log::warn!("Line {} not found", id);
return; return;
}; };
let rotation = Affine3A::from_axis_angle(Vec3::X, PI * 1.5); let rotation = Affine3A::from_axis_angle(Vec3::X, PI * 1.5);
from.translation = from.translation + from.transform_vector3a(Vec3A::NEG_Z) * (len * 0.5); from.translation += from.transform_vector3a(Vec3A::NEG_Z) * (len * 0.5);
let mut transform = from * rotation; let mut transform = from * rotation;
let to_hmd = hmd.translation - from.translation; let to_hmd = hmd.translation - from.translation;
@@ -120,7 +120,7 @@ impl LinePool {
} }
} }
transform = transform * rotations[closest.0]; transform *= rotations[closest.0];
let posef = helpers::transform_to_posef(&transform); let posef = helpers::transform_to_posef(&transform);

View File

@@ -221,11 +221,8 @@ pub fn openxr_run(running: Arc<AtomicBool>) -> Result<(), BackendError> {
.input_state .input_state
.pointers .pointers
.iter() .iter()
.any(|p| p.now.show_hide && !p.before.show_hide) .any(|p| p.now.show_hide && !p.before.show_hide) && show_hide_counter.click() {
{ overlays.show_hide(&mut app_state);
if show_hide_counter.click() {
overlays.show_hide(&mut app_state);
}
} }
watch_fade(&mut app_state, overlays.mut_by_id(watch_id).unwrap()); // want panic watch_fade(&mut app_state, overlays.mut_by_id(watch_id).unwrap()); // want panic

View File

@@ -153,7 +153,6 @@ impl WlxGraphics {
instance_extensions.khr_get_physical_device_properties2 = true; instance_extensions.khr_get_physical_device_properties2 = true;
let instance_extensions_raw = instance_extensions let instance_extensions_raw = instance_extensions
.clone()
.into_iter() .into_iter()
.filter_map(|(name, enabled)| { .filter_map(|(name, enabled)| {
if enabled { if enabled {
@@ -241,7 +240,6 @@ impl WlxGraphics {
}; };
let device_extensions_raw = device_extensions let device_extensions_raw = device_extensions
.clone()
.into_iter() .into_iter()
.filter_map(|(name, enabled)| { .filter_map(|(name, enabled)| {
if enabled { if enabled {
@@ -590,7 +588,6 @@ impl WlxGraphics {
let format = fourcc_to_vk(frame.format.fourcc)?; let format = fourcc_to_vk(frame.format.fourcc)?;
let layouts: Vec<SubresourceLayout> = (0..frame.num_planes) let layouts: Vec<SubresourceLayout> = (0..frame.num_planes)
.into_iter()
.map(|i| { .map(|i| {
let plane = &frame.planes[i]; let plane = &frame.planes[i];
SubresourceLayout { SubresourceLayout {

View File

@@ -188,7 +188,7 @@ impl FontCache {
let bmp = glyph.bitmap(); let bmp = glyph.bitmap();
let buf = bmp.buffer().to_vec(); let buf = bmp.buffer().to_vec();
if buf.len() == 0 { if buf.is_empty() {
return Ok(font.glyphs[0].clone()); return Ok(font.glyphs[0].clone());
} }

View File

@@ -145,7 +145,7 @@ fn key_press(
data.key_click(&app.session); data.key_click(&app.session);
if let PointerMode::Right = mode { if let PointerMode::Right = mode {
data.modifiers = data.modifiers | SHIFT; data.modifiers |= SHIFT;
app.hid_provider.set_modifiers(data.modifiers); app.hid_provider.set_modifiers(data.modifiers);
} }

View File

@@ -82,7 +82,7 @@ impl OverlayRenderer for MirrorRenderer {
if let Some(view) = renderer.view() { if let Some(view) = renderer.view() {
let extent = view.image().extent(); let extent = view.image().extent();
if self.last_extent != extent { if self.last_extent != extent {
self.last_extent = extent.clone(); self.last_extent = extent;
// resized // resized
app.tasks.enqueue(TaskType::Overlay( app.tasks.enqueue(TaskType::Overlay(
OverlaySelector::Name(self.name.clone()), OverlaySelector::Name(self.name.clone()),

View File

@@ -356,7 +356,7 @@ impl OverlayRenderer for ScreenRenderer {
} }
}); });
self.capture.init(&drm_formats); self.capture.init(drm_formats);
self.capture.request_new_frame(); self.capture.request_new_frame();
}; };
@@ -407,7 +407,7 @@ impl OverlayRenderer for ScreenRenderer {
let data = unsafe { slice::from_raw_parts(map, len) }; let data = unsafe { slice::from_raw_parts(map, len) };
let image = let image =
upload.texture2d(frame.format.width, frame.format.height, format, &data)?; upload.texture2d(frame.format.width, frame.format.height, format, data)?;
upload.build_and_execute_now()?; upload.build_and_execute_now()?;
unsafe { libc::munmap(map as *mut _, len) }; unsafe { libc::munmap(map as *mut _, len) };
@@ -426,7 +426,7 @@ impl OverlayRenderer for ScreenRenderer {
let data = unsafe { slice::from_raw_parts(frame.ptr as *const u8, frame.size) }; let data = unsafe { slice::from_raw_parts(frame.ptr as *const u8, frame.size) };
let image = let image =
upload.texture2d(frame.format.width, frame.format.height, format, &data)?; upload.texture2d(frame.format.width, frame.format.height, format, data)?;
let mut pipeline = None; let mut pipeline = None;
if frame.mouse.is_some() { if frame.mouse.is_some() {

View File

@@ -80,14 +80,11 @@ where
canvas.font_size = font_size; canvas.font_size = font_size;
canvas.fg_color = color_parse(&fg_color).unwrap_or(FALLBACK_COLOR); canvas.fg_color = color_parse(&fg_color).unwrap_or(FALLBACK_COLOR);
let tz: Option<Tz> = match timezone { let tz: Option<Tz> = timezone.map(|tz| tz.parse().unwrap_or_else(|_| {
Some(tz) => Some(tz.parse().unwrap_or_else(|_| {
log::error!("Failed to parse timezone '{}'", &tz); log::error!("Failed to parse timezone '{}'", &tz);
canvas.fg_color = FALLBACK_COLOR; canvas.fg_color = FALLBACK_COLOR;
Tz::UTC Tz::UTC
})), }));
None => None,
};
let label = canvas.label(x, y, w, h, empty_str.clone()); let label = canvas.label(x, y, w, h, empty_str.clone());
label.state = Some(ElemState::Clock { label.state = Some(ElemState::Clock {