implement spawn positioning
This commit is contained in:
@@ -169,7 +169,7 @@ impl View {
|
||||
//radio_orientation.set_value(orientation_mode.as_ref())?;
|
||||
//tasks.push(Task::SetOrientation(orientation_mode));
|
||||
|
||||
let pos_mode = PosMode::Floating;
|
||||
let pos_mode = PosMode::Anchored;
|
||||
// TODO: configurable defaults ?
|
||||
//radio_pos.set_value(pos_mode.as_ref())?;
|
||||
//tasks.push(Task::SetPos(pos_mode));
|
||||
@@ -359,7 +359,7 @@ impl View {
|
||||
};
|
||||
|
||||
let pos_mode = match params.pos_mode {
|
||||
PosMode::Floating => PositionMode::Anchor,
|
||||
PosMode::Floating => PositionMode::Float,
|
||||
PosMode::Anchored => PositionMode::Anchor,
|
||||
PosMode::Static => PositionMode::Static,
|
||||
};
|
||||
|
||||
@@ -13,7 +13,7 @@ pub struct Handshake {
|
||||
pub client_name: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Deserialize, Serialize)]
|
||||
#[derive(Debug, Clone, Copy, Deserialize, Serialize)]
|
||||
pub enum PositionMode {
|
||||
Float,
|
||||
Anchor,
|
||||
|
||||
@@ -32,7 +32,7 @@ use std::{
|
||||
};
|
||||
use time::get_millis;
|
||||
use vulkano::image::view::ImageView;
|
||||
use wayvr_ipc::packet_server;
|
||||
use wayvr_ipc::{packet_client::PositionMode, packet_server};
|
||||
use wgui::gfx::WGfx;
|
||||
use wlx_capture::frame::Transform;
|
||||
use wlx_common::desktop_finder::DesktopFinder;
|
||||
@@ -300,15 +300,16 @@ impl WvrServerState {
|
||||
};
|
||||
|
||||
// Size, icon & fallback title comes from process
|
||||
let ([size_x, size_y], fallback_title, icon, is_cage) =
|
||||
let ([size_x, size_y], pos, fallback_title, icon, is_cage) =
|
||||
match wvr_server.processes.get(&process_handle) {
|
||||
Some(Process::Managed(p)) => (
|
||||
p.resolution,
|
||||
p.pos_mode,
|
||||
Some(p.app_name.clone()),
|
||||
p.icon.as_ref().cloned(),
|
||||
p.exec_path.ends_with("cage"),
|
||||
),
|
||||
_ => ([1920, 1080], None, None, false),
|
||||
_ => ([1920, 1080], PositionMode::Float, None, None, false),
|
||||
};
|
||||
|
||||
let window_handle = wvr_server.wm.create_window(
|
||||
@@ -373,6 +374,7 @@ impl WvrServerState {
|
||||
window_handle,
|
||||
icon,
|
||||
[size_x, size_y],
|
||||
pos,
|
||||
)
|
||||
.context("Could not create WvrWindow overlay")
|
||||
.inspect_err(|e| log::warn!("{e:?}"))
|
||||
@@ -571,6 +573,7 @@ impl WvrServerState {
|
||||
args: &[&str],
|
||||
env: &[(&str, &str)],
|
||||
resolution: [u32; 2],
|
||||
pos_mode: PositionMode,
|
||||
working_dir: Option<&str>,
|
||||
icon: Option<&str>,
|
||||
userdata: HashMap<String, String>,
|
||||
@@ -606,6 +609,7 @@ impl WvrServerState {
|
||||
.collect(),
|
||||
icon: icon.map(Arc::from),
|
||||
resolution,
|
||||
pos_mode,
|
||||
}));
|
||||
|
||||
self.signals.send(WayVRSignal::BroadcastStateChanged(
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use std::{collections::HashMap, io::Read, sync::Arc};
|
||||
|
||||
use wayvr_ipc::packet_server;
|
||||
use wayvr_ipc::{packet_client, packet_server};
|
||||
|
||||
use crate::gen_id;
|
||||
|
||||
@@ -15,6 +15,7 @@ pub struct WayVRProcess {
|
||||
pub env: Vec<(String, String)>,
|
||||
pub working_dir: Option<String>,
|
||||
pub resolution: [u32; 2],
|
||||
pub pos_mode: packet_client::PositionMode,
|
||||
pub icon: Option<Arc<str>>,
|
||||
|
||||
pub userdata: HashMap<String, String>,
|
||||
|
||||
@@ -244,6 +244,7 @@ impl Connection {
|
||||
&args_vec,
|
||||
&env_vec,
|
||||
packet_params.resolution,
|
||||
packet_params.pos_mode,
|
||||
None,
|
||||
packet_params.icon.as_deref(),
|
||||
packet_params.userdata,
|
||||
|
||||
@@ -365,6 +365,7 @@ impl DashInterface<AppState> for DashInterfaceLive {
|
||||
&args_vec,
|
||||
&env_vec,
|
||||
params.resolution,
|
||||
params.pos_mode,
|
||||
None,
|
||||
params.icon.as_deref(),
|
||||
params.userdata,
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
use chrono_tz::PST8PDT;
|
||||
use glam::{Affine2, Affine3A, Quat, Vec2, Vec3, vec2, vec3};
|
||||
use smithay::{
|
||||
desktop::PopupManager,
|
||||
@@ -7,6 +8,7 @@ use std::{ops::RangeInclusive, sync::Arc};
|
||||
use vulkano::{
|
||||
buffer::BufferUsage, image::view::ImageView, pipeline::graphics::color_blend::AttachmentBlend,
|
||||
};
|
||||
use wayvr_ipc::packet_client::PositionMode;
|
||||
use wgui::{
|
||||
components::button::ComponentButton,
|
||||
event::EventCallback,
|
||||
@@ -58,21 +60,32 @@ pub fn create_wl_window_overlay(
|
||||
window: wayvr::window::WindowHandle,
|
||||
icon: Arc<str>,
|
||||
size: [u32; 2],
|
||||
pos_mode: PositionMode,
|
||||
) -> anyhow::Result<OverlayWindowConfig> {
|
||||
let scale = size[0].max(size[1]) as f32 / 1920.0;
|
||||
let curve_scale = size[0] as f32 / 1920.0;
|
||||
|
||||
let z_dist = if matches!(pos_mode, PositionMode::Anchor) {
|
||||
0.0
|
||||
} else {
|
||||
-0.95
|
||||
};
|
||||
|
||||
Ok(OverlayWindowConfig {
|
||||
name: name.clone(),
|
||||
default_state: OverlayWindowState {
|
||||
grabbable: true,
|
||||
interactable: true,
|
||||
positioning: Positioning::Floating,
|
||||
positioning: match pos_mode {
|
||||
PositionMode::Float => Positioning::Floating,
|
||||
PositionMode::Anchor => Positioning::Anchored,
|
||||
PositionMode::Static => Positioning::Static,
|
||||
},
|
||||
curvature: Some(0.15 * curve_scale),
|
||||
transform: Affine3A::from_scale_rotation_translation(
|
||||
Vec3::ONE * scale,
|
||||
Quat::IDENTITY,
|
||||
vec3(0.0, 0.0, -0.95),
|
||||
vec3(0.0, 0.0, z_dist),
|
||||
),
|
||||
..OverlayWindowState::default()
|
||||
},
|
||||
|
||||
@@ -204,7 +204,13 @@ impl OverlayWindowConfig {
|
||||
hand, align_to_hmd, ..
|
||||
} => (app.input_state.pointers[hand as usize].pose, align_to_hmd),
|
||||
Positioning::Anchored => (app.anchor, false),
|
||||
Positioning::Static => return,
|
||||
Positioning::Static => {
|
||||
if hard_reset {
|
||||
(app.input_state.hmd, false)
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if hard_reset {
|
||||
|
||||
Reference in New Issue
Block a user