Skip to content

Commit 075e55a

Browse files
authored
WayVR: Add DashboardShown and DashboardHidden events, add WlxInputState support (#167)
Wlx: Fix various Clippy warnings
1 parent e66a8d2 commit 075e55a

File tree

11 files changed

+73
-20
lines changed

11 files changed

+73
-20
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ wayland-client = { version = "0.31.6", optional = true }
8686
wayland-egl = { version = "0.32.4", optional = true }
8787
interprocess = { version = "2.2.2", optional = true }
8888
bytes = { version = "1.9.0", optional = true }
89-
wayvr_ipc = { git = "https://github.com/olekolek1000/wayvr-ipc.git", rev = "3c411d09ba1bba2609288e29739c0f1ec736b012", default-features = false, optional = true }
89+
wayvr_ipc = { git = "https://github.com/olekolek1000/wayvr-ipc.git", rev = "a72587d23f3bb8624d9aeb1f13c0a21e65350f51", default-features = false, optional = true }
9090
################################
9191

9292
[build-dependencies]

src/backend/osc.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,24 +146,24 @@ impl OscSender {
146146

147147
// send device battery parameters
148148
self.send_message(
149-
format!("/avatar/parameters/{parameter}Battery").into(),
149+
format!("/avatar/parameters/{parameter}Battery"),
150150
vec![OscType::Float(level)],
151151
)?;
152152
self.send_message(
153-
format!("/avatar/parameters/{parameter}Charging").into(),
153+
format!("/avatar/parameters/{parameter}Charging"),
154154
vec![OscType::Bool(device.charging)],
155155
)?;
156156
}
157157

158158
// send average controller and tracker battery parameters
159159
self.send_message(
160-
format!("/avatar/parameters/averageControllerBattery").into(),
160+
String::from("/avatar/parameters/averageControllerBattery"),
161161
vec![OscType::Float(
162162
controller_total_bat / controller_count as f32,
163163
)],
164164
)?;
165165
self.send_message(
166-
format!("/avatar/parameters/averageTrackerBattery").into(),
166+
String::from("/avatar/parameters/averageTrackerBattery"),
167167
vec![OscType::Float(tracker_total_bat / tracker_count as f32)],
168168
)?;
169169
}

src/backend/wayvr/display.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,8 +291,7 @@ impl Display {
291291
renderer.bind(self.gles_texture.clone())?;
292292

293293
let size = Size::from((self.width as i32, self.height as i32));
294-
let damage: Rectangle<i32, smithay::utils::Physical> =
295-
Rectangle::from_loc_and_size((0, 0), size);
294+
let damage: Rectangle<i32, smithay::utils::Physical> = Rectangle::from_size(size);
296295

297296
let elements: Vec<WaylandSurfaceRenderElement<GlesRenderer>> = self
298297
.displayed_windows

src/backend/wayvr/mod.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ use std::{
4040
use time::get_millis;
4141
use wayvr_ipc::{packet_client, packet_server};
4242

43+
use crate::state::AppState;
44+
4345
const STR_INVALID_HANDLE_DISP: &str = "Invalid display handle";
4446
const STR_INVALID_HANDLE_PROCESS: &str = "Invalid process handle";
4547

@@ -277,12 +279,13 @@ impl WayVR {
277279
Ok(())
278280
}
279281

280-
pub fn tick_events(&mut self) -> anyhow::Result<Vec<TickTask>> {
282+
pub fn tick_events(&mut self, app: &AppState) -> anyhow::Result<Vec<TickTask>> {
281283
let mut tasks: Vec<TickTask> = Vec::new();
282284

283285
self.ipc_server.tick(&mut server_ipc::TickParams {
284286
state: &mut self.state,
285287
tasks: &mut tasks,
288+
app,
286289
})?;
287290

288291
// Check for redraw events

src/backend/wayvr/server_ipc.rs

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
1+
use crate::state::AppState;
2+
13
use super::{display, process, window, TickTask, WayVRSignal};
24
use bytes::BufMut;
5+
use glam::Vec3A;
36
use interprocess::local_socket::{self, traits::Listener, ToNsName};
47
use smallvec::SmallVec;
58
use std::io::{Read, Write};
69
use wayvr_ipc::{
710
ipc::{self},
811
packet_client::{self, PacketClient},
9-
packet_server::{self, PacketServer},
12+
packet_server::{self, PacketServer, WlxInputStatePointer},
1013
};
1114

1215
pub struct AuthInfo {
@@ -70,6 +73,7 @@ fn read_payload(conn: &mut local_socket::Stream, size: u32) -> Option<Payload> {
7073
pub struct TickParams<'a> {
7174
pub state: &'a mut super::WayVRState,
7275
pub tasks: &'a mut Vec<TickTask>,
76+
pub app: &'a AppState,
7377
}
7478

7579
pub fn gen_args_vec(input: &str) -> Vec<&str> {
@@ -177,6 +181,34 @@ impl Connection {
177181
Ok(())
178182
}
179183

184+
fn handle_wlx_input_state(
185+
&mut self,
186+
params: &TickParams,
187+
serial: ipc::Serial,
188+
) -> anyhow::Result<()> {
189+
let input_state = &params.app.input_state;
190+
191+
let to_arr = |vec: &Vec3A| -> [f32; 3] { [vec.x, vec.y, vec.z] };
192+
193+
send_packet(
194+
&mut self.conn,
195+
&ipc::data_encode(&PacketServer::WlxInputStateResponse(
196+
serial,
197+
packet_server::WlxInputState {
198+
hmd_pos: to_arr(&input_state.hmd.translation),
199+
left: WlxInputStatePointer {
200+
pos: to_arr(&input_state.pointers[0].raw_pose.translation),
201+
},
202+
right: WlxInputStatePointer {
203+
pos: to_arr(&input_state.pointers[0].raw_pose.translation),
204+
},
205+
},
206+
)),
207+
)?;
208+
209+
Ok(())
210+
}
211+
180212
fn handle_wvr_display_create(
181213
&mut self,
182214
params: &mut TickParams,
@@ -471,6 +503,9 @@ impl Connection {
471503

472504
match packet {
473505
PacketClient::Handshake(_) => unreachable!(), // handled previously
506+
PacketClient::WlxInputState(serial) => {
507+
self.handle_wlx_input_state(params, serial)?;
508+
}
474509
PacketClient::WvrDisplayList(serial) => {
475510
self.handle_wvr_display_list(params, serial)?;
476511
}
@@ -633,10 +668,11 @@ impl WayVRServer {
633668
Ok(())
634669
}
635670

636-
pub fn broadcast(&mut self, packet: packet_server::PacketServer) -> anyhow::Result<()> {
671+
pub fn broadcast(&mut self, packet: packet_server::PacketServer) {
637672
for connection in &mut self.connections {
638-
send_packet(&mut connection.conn, &ipc::data_encode(&packet))?;
673+
if let Err(e) = send_packet(&mut connection.conn, &ipc::data_encode(&packet)) {
674+
log::error!("failed to broadcast packet: {:?}", e);
675+
}
639676
}
640-
Ok(())
641677
}
642678
}

src/graphics/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -942,6 +942,7 @@ impl WlxGraphics {
942942
)?))
943943
}
944944

945+
#[allow(clippy::too_many_arguments)]
945946
pub fn create_pipeline_with_layouts(
946947
self: &Arc<Self>,
947948
render_target: Arc<ImageView>,
@@ -1304,6 +1305,7 @@ impl WlxPipeline<WlxPipelineLegacy> {
13041305
)
13051306
}
13061307

1308+
#[allow(clippy::too_many_arguments)]
13071309
fn new_with_layout(
13081310
render_target: Arc<ImageView>,
13091311
graphics: Arc<WlxGraphics>,

src/gui/canvas/builder.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ impl<D, S> CanvasBuilder<D, S> {
153153
&mut self.canvas.controls[idx]
154154
}
155155

156+
#[allow(clippy::too_many_arguments)]
156157
pub fn key_button(
157158
&mut self,
158159
x: f32,

src/gui/canvas/control.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ pub type ControlRendererHl<D, S> = fn(
1919
Vec4,
2020
) -> anyhow::Result<()>;
2121

22+
#[allow(clippy::type_complexity)]
2223
pub(crate) struct Control<D, S> {
2324
pub state: Option<S>,
2425
pub rect: Rect,

src/overlays/keyboard.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ where
9595
canvas.fg_color = color_parse("#cad3f5").unwrap(); //safe
9696
canvas.bg_color = color_parse("#1e2030").unwrap(); //safe
9797

98-
let has_altgr = keymap.as_ref().map_or(false, |k| k.has_altgr());
98+
let has_altgr = keymap.as_ref().is_some_and(|k| k.has_altgr());
9999

100100
if !LAYOUT.auto_labels.unwrap_or(true) {
101101
keymap = None;
@@ -125,7 +125,7 @@ where
125125
let label0 = keymap.label_for_key(vk, 0);
126126
let label1 = keymap.label_for_key(vk, SHIFT);
127127

128-
if label0.chars().next().map_or(false, |f| f.is_alphabetic()) {
128+
if label0.chars().next().is_some_and(|f| f.is_alphabetic()) {
129129
label.push(label1);
130130
if has_altgr {
131131
cap_type = KeyCapType::RegularAltGr;

0 commit comments

Comments
 (0)