fix features
This commit is contained in:
@@ -1,28 +0,0 @@
|
|||||||
name: Check Wayland+OpenXR+OpenVR+WayVR
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
#branches: [ "main" ]
|
|
||||||
|
|
||||||
env:
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
SCCACHE_GHA_ENABLED: "true"
|
|
||||||
RUSTC_WRAPPER: "sccache"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
working-directory: ./wlx-overlay-s
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Setup sccache
|
|
||||||
uses: mozilla-actions/sccache-action@v0.0.9
|
|
||||||
- name: Prepare Environment
|
|
||||||
run: |
|
|
||||||
../.github/workflows/scripts/appimage_prepare_env.sh
|
|
||||||
- name: Build
|
|
||||||
run: cargo build --verbose --no-default-features --features=wayland,openxr,openvr,wayvr
|
|
||||||
- name: Run tests
|
|
||||||
run: cargo test --verbose --no-default-features --features=wayland,openxr,openvr,wayvr
|
|
||||||
@@ -24,3 +24,7 @@ hyper = { version = "1.8.1", features = ["client", "http1", "http2"] }
|
|||||||
http-body-util = "0.1.3"
|
http-body-util = "0.1.3"
|
||||||
async-native-tls = "0.5.0"
|
async-native-tls = "0.5.0"
|
||||||
smol-hyper = "0.1.1"
|
smol-hyper = "0.1.1"
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = ["monado" ]
|
||||||
|
monado = []
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ use wlx_common::{audio, dash_interface::BoxDashInterface, timestep::Timestep};
|
|||||||
use crate::{
|
use crate::{
|
||||||
assets,
|
assets,
|
||||||
tab::{
|
tab::{
|
||||||
Tab, TabType, apps::TabApps, games::TabGames, home::TabHome, monado::TabMonado, processes::TabProcesses,
|
apps::TabApps, games::TabGames, home::TabHome, monado::TabMonado, processes::TabProcesses, settings::TabSettings,
|
||||||
settings::TabSettings,
|
Tab, TabType,
|
||||||
},
|
},
|
||||||
util::{
|
util::{
|
||||||
popup_manager::{MountPopupParams, PopupManager, PopupManagerParams},
|
popup_manager::{MountPopupParams, PopupManager, PopupManagerParams},
|
||||||
@@ -79,6 +79,7 @@ pub struct FrontendUpdateResult {
|
|||||||
|
|
||||||
pub struct InitParams<T> {
|
pub struct InitParams<T> {
|
||||||
pub interface: BoxDashInterface<T>,
|
pub interface: BoxDashInterface<T>,
|
||||||
|
pub has_monado: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ impl TestbedDashboard {
|
|||||||
let frontend = frontend::Frontend::new(
|
let frontend = frontend::Frontend::new(
|
||||||
frontend::InitParams {
|
frontend::InitParams {
|
||||||
interface: Box::new(interface),
|
interface: Box::new(interface),
|
||||||
|
has_monado: true,
|
||||||
},
|
},
|
||||||
&mut (),
|
&mut (),
|
||||||
)?;
|
)?;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use std::os::fd::RawFd;
|
use std::os::fd::RawFd;
|
||||||
|
|
||||||
use drm_fourcc::{DrmFormat, DrmModifier};
|
use drm_fourcc::{DrmFormat, DrmFourcc, DrmModifier};
|
||||||
|
|
||||||
#[cfg(feature = "egl")]
|
#[cfg(feature = "egl")]
|
||||||
#[rustfmt::skip]
|
#[rustfmt::skip]
|
||||||
@@ -136,3 +136,12 @@ pub struct MouseMeta {
|
|||||||
pub x: f32,
|
pub x: f32,
|
||||||
pub y: f32,
|
pub y: f32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub trait DmaExporter {
|
||||||
|
fn next_frame(
|
||||||
|
&mut self,
|
||||||
|
width: u32,
|
||||||
|
height: u32,
|
||||||
|
fourcc: DrmFourcc,
|
||||||
|
) -> Option<(FramePlane, DrmModifier)>;
|
||||||
|
}
|
||||||
|
|||||||
@@ -20,19 +20,10 @@ use smithay_client_toolkit::reexports::protocols_wlr::screencopy::v1::client::zw
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
WlxCapture,
|
WlxCapture,
|
||||||
frame::{FrameFormat, FramePlane, MemFdFrame, WlxFrame},
|
frame::{DmaExporter, FrameFormat, FramePlane, MemFdFrame, WlxFrame},
|
||||||
wayland::WlxClient,
|
wayland::WlxClient,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub trait DmaExporter {
|
|
||||||
fn next_frame(
|
|
||||||
&mut self,
|
|
||||||
width: u32,
|
|
||||||
height: u32,
|
|
||||||
fourcc: DrmFourcc,
|
|
||||||
) -> Option<(FramePlane, DrmModifier)>;
|
|
||||||
}
|
|
||||||
|
|
||||||
enum BufData {
|
enum BufData {
|
||||||
Shm {
|
Shm {
|
||||||
wl_buffer: WlBuffer,
|
wl_buffer: WlBuffer,
|
||||||
|
|||||||
@@ -2,24 +2,6 @@
|
|||||||
<img src="https://raw.githubusercontent.com/galister/wlx-overlay-s/refs/heads/guide/wayvr/logo.svg" height="120"/>
|
<img src="https://raw.githubusercontent.com/galister/wlx-overlay-s/refs/heads/guide/wayvr/logo.svg" height="120"/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
**WayVR acts as a bridge between Wayland applications and wlx-overlay-s panels, allowing you to display your applications within a VR environment. Internally, WayVR utilizes Smithay to run a Wayland compositor.**
|
|
||||||
|
|
||||||
# >> Quick setup <<
|
|
||||||
|
|
||||||
#### Configure your applications list
|
|
||||||
|
|
||||||
Go to `src/res/wayvr.yaml` to configure your desired application list. This configuration file represents all currently available WayVR options. Feel free to adjust it to your liking.
|
|
||||||
|
|
||||||
#### Add WayVR Launcher to your watch
|
|
||||||
|
|
||||||
Copy `watch_wayvr_example.yaml` to `~/.config/wlxoverlay/watch.yaml`. This file contains pre-configured **WayVRLauncher** and **WayVRDisplayList** widget types. By default, the _default_catalog_ is used.
|
|
||||||
|
|
||||||
That's it; you're all set!
|
|
||||||
|
|
||||||
###### _Make sure you have `wayvr` feature enabled in Cargo.toml (enabled by default)_
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
# Overview
|
# Overview
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
@@ -33,28 +15,6 @@ That's it; you're all set!
|
|||||||
- Basically all Qt and GTK applications (they work out of the box)
|
- Basically all Qt and GTK applications (they work out of the box)
|
||||||
- Most XWayland applications via `cage`
|
- Most XWayland applications via `cage`
|
||||||
|
|
||||||
### XWayland
|
|
||||||
|
|
||||||
WayVR does not have native XWayland support. You can run X11 applications (or these who require DISPLAY set) by wrapping them in a `cage` program, like so:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- name: "Xeyes"
|
|
||||||
target_display: "Disp1"
|
|
||||||
exec: "cage"
|
|
||||||
args: "xeyes -- -fg blue"
|
|
||||||
```
|
|
||||||
|
|
||||||
instead of:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- name: "Xeyes"
|
|
||||||
target_display: "Disp1"
|
|
||||||
exec: "xeyes"
|
|
||||||
args: "-fg blue"
|
|
||||||
```
|
|
||||||
|
|
||||||
in `wayvr.yaml` configuration file, in your desired catalog.
|
|
||||||
|
|
||||||
### Launching external apps inside WayVR
|
### Launching external apps inside WayVR
|
||||||
|
|
||||||
To launch your app externally:
|
To launch your app externally:
|
||||||
@@ -77,14 +37,6 @@ Setting `DISPLAY` to an empty string forces various apps to use Wayland instead
|
|||||||
|
|
||||||
Even though some applications support Wayland, some still check for the `DISPLAY` environment variable and an available X11 server, throwing an error. This can also be fixed by running `cage` on top of them.
|
Even though some applications support Wayland, some still check for the `DISPLAY` environment variable and an available X11 server, throwing an error. This can also be fixed by running `cage` on top of them.
|
||||||
|
|
||||||
### Image corruption
|
|
||||||
|
|
||||||
dma-buf textures may display various graphical glitches due to unsupported dma-buf tiling modifiers between GLES<->Vulkan on Radeon RDNA3 graphics cards. Current situation: https://gitlab.freedesktop.org/mesa/mesa/-/issues/11629). Nvidia should work out of the box, without any isues. Alternatively, you can run wlx-overlay-s with `LIBGL_ALWAYS_SOFTWARE=1` to mitigate that (only the Smithay compositor will run in software renderer mode, wlx will still be accelerated).
|
|
||||||
|
|
||||||
### Floating windows
|
### Floating windows
|
||||||
|
|
||||||
Context menus are not functional in most cases yet, including drag & drop support.
|
Context menus are not functional in most cases yet, including drag & drop support.
|
||||||
|
|
||||||
### Forced window shadows in GTK
|
|
||||||
|
|
||||||
GNOME still insists on rendering client-side decorations instead of server-side ones. This results in all GTK applications looking odd due to additional window shadows. [Fix here, "Client-side decorations"](https://wiki.archlinux.org/title/GTK)
|
|
||||||
|
|||||||
@@ -1,207 +0,0 @@
|
|||||||
# looking to make changes?
|
|
||||||
# drop me in ~/.config/wlxoverlay/watch.yaml
|
|
||||||
#
|
|
||||||
|
|
||||||
width: 0.115
|
|
||||||
|
|
||||||
size: [400, 272]
|
|
||||||
|
|
||||||
elements:
|
|
||||||
# background panel
|
|
||||||
- type: Panel
|
|
||||||
rect: [0, 30, 400, 130]
|
|
||||||
corner_radius: 20
|
|
||||||
bg_color: "#24273a"
|
|
||||||
|
|
||||||
- type: Button
|
|
||||||
rect: [2, 162, 26, 36]
|
|
||||||
corner_radius: 4
|
|
||||||
font_size: 15
|
|
||||||
bg_color: "#c6a0f6"
|
|
||||||
fg_color: "#24273a"
|
|
||||||
text: "C"
|
|
||||||
click_up: # destroy if exists, otherwise create
|
|
||||||
- type: Window
|
|
||||||
target: settings
|
|
||||||
action: ShowUi # only triggers if not exists
|
|
||||||
- type: Window
|
|
||||||
target: settings
|
|
||||||
action: Destroy # only triggers if exists since before current frame
|
|
||||||
|
|
||||||
# Dashboard toggle button
|
|
||||||
- type: Button
|
|
||||||
rect: [32, 162, 48, 36]
|
|
||||||
corner_radius: 4
|
|
||||||
font_size: 15
|
|
||||||
bg_color: "#2288FF"
|
|
||||||
fg_color: "#24273a"
|
|
||||||
text: "Dash"
|
|
||||||
click_up:
|
|
||||||
- type: WayVR
|
|
||||||
action: ToggleDashboard
|
|
||||||
|
|
||||||
# Keyboard button
|
|
||||||
- type: Button
|
|
||||||
rect: [84, 162, 48, 36]
|
|
||||||
corner_radius: 4
|
|
||||||
font_size: 15
|
|
||||||
fg_color: "#24273a"
|
|
||||||
bg_color: "#a6da95"
|
|
||||||
text: Kbd
|
|
||||||
click_up:
|
|
||||||
- type: Overlay
|
|
||||||
target: "kbd"
|
|
||||||
action: ToggleVisible
|
|
||||||
long_click_up:
|
|
||||||
- type: Overlay
|
|
||||||
target: "kbd"
|
|
||||||
action: Reset
|
|
||||||
right_up:
|
|
||||||
- type: Overlay
|
|
||||||
target: "kbd"
|
|
||||||
action: ToggleImmovable
|
|
||||||
middle_up:
|
|
||||||
- type: Overlay
|
|
||||||
target: "kbd"
|
|
||||||
action: ToggleInteraction
|
|
||||||
scroll_up:
|
|
||||||
- type: Overlay
|
|
||||||
target: "kbd"
|
|
||||||
action:
|
|
||||||
Opacity: { delta: 0.025 }
|
|
||||||
scroll_down:
|
|
||||||
- type: Overlay
|
|
||||||
target: "kbd"
|
|
||||||
action:
|
|
||||||
Opacity: { delta: -0.025 }
|
|
||||||
|
|
||||||
# bottom row, of keyboard + overlays
|
|
||||||
- type: OverlayList
|
|
||||||
rect: [134, 160, 266, 40]
|
|
||||||
corner_radius: 4
|
|
||||||
font_size: 15
|
|
||||||
fg_color: "#cad3f5"
|
|
||||||
bg_color: "#1e2030"
|
|
||||||
layout: Horizontal
|
|
||||||
click_up: ToggleVisible
|
|
||||||
long_click_up: Reset
|
|
||||||
right_up: ToggleImmovable
|
|
||||||
middle_up: ToggleInteraction
|
|
||||||
scroll_up:
|
|
||||||
Opacity: { delta: 0.025 }
|
|
||||||
scroll_down:
|
|
||||||
Opacity: { delta: -0.025 }
|
|
||||||
|
|
||||||
- type: WayVRLauncher
|
|
||||||
rect: [0, 200, 400, 36]
|
|
||||||
corner_radius: 4
|
|
||||||
font_size: 15
|
|
||||||
fg_color: "#24273a"
|
|
||||||
bg_color: "#e590c4"
|
|
||||||
catalog_name: "default_catalog"
|
|
||||||
|
|
||||||
- type: WayVRDisplayList
|
|
||||||
rect: [0, 236, 400, 36]
|
|
||||||
corner_radius: 4
|
|
||||||
font_size: 15
|
|
||||||
fg_color: "#24273a"
|
|
||||||
bg_color: "#ca68a4"
|
|
||||||
|
|
||||||
# local clock
|
|
||||||
- type: Label
|
|
||||||
rect: [19, 90, 200, 50]
|
|
||||||
corner_radius: 4
|
|
||||||
font_size: 46 # Use 32 for 12-hour time
|
|
||||||
fg_color: "#cad3f5"
|
|
||||||
source: Clock
|
|
||||||
format: "%H:%M" # 23:59
|
|
||||||
#format: "%I:%M %p" # 11:59 PM
|
|
||||||
|
|
||||||
# local date
|
|
||||||
- type: Label
|
|
||||||
rect: [20, 117, 200, 20]
|
|
||||||
corner_radius: 4
|
|
||||||
font_size: 14
|
|
||||||
fg_color: "#cad3f5"
|
|
||||||
source: Clock
|
|
||||||
format: "%x" # local date representation
|
|
||||||
|
|
||||||
# local day-of-week
|
|
||||||
- type: Label
|
|
||||||
rect: [20, 137, 200, 50]
|
|
||||||
corner_radius: 4
|
|
||||||
font_size: 14
|
|
||||||
fg_color: "#cad3f5"
|
|
||||||
source: Clock
|
|
||||||
format: "%A" # Tuesday
|
|
||||||
#format: "%a" # Tue
|
|
||||||
|
|
||||||
# alt clock 1
|
|
||||||
- type: Label
|
|
||||||
rect: [210, 90, 200, 50]
|
|
||||||
corner_radius: 4
|
|
||||||
font_size: 24 # Use 18 for 12-hour time
|
|
||||||
fg_color: "#8bd5ca"
|
|
||||||
source: Clock
|
|
||||||
timezone: 0 # change TZ1 here
|
|
||||||
format: "%H:%M" # 23:59
|
|
||||||
#format: "%I:%M %p" # 11:59 PM
|
|
||||||
- type: Label
|
|
||||||
rect: [210, 60, 200, 50]
|
|
||||||
corner_radius: 4
|
|
||||||
font_size: 14
|
|
||||||
fg_color: "#8bd5ca"
|
|
||||||
source: Timezone
|
|
||||||
timezone: 0 # change TZ1 label here
|
|
||||||
|
|
||||||
# alt clock 2
|
|
||||||
- type: Label
|
|
||||||
rect: [210, 150, 200, 50]
|
|
||||||
corner_radius: 4
|
|
||||||
font_size: 24 # Use 18 for 12-hour time
|
|
||||||
fg_color: "#b7bdf8"
|
|
||||||
source: Clock
|
|
||||||
timezone: 1 # change TZ2 here
|
|
||||||
format: "%H:%M" # 23:59
|
|
||||||
#format: "%I:%M %p" # 11:59 PM
|
|
||||||
- type: Label
|
|
||||||
rect: [210, 120, 200, 50]
|
|
||||||
corner_radius: 4
|
|
||||||
font_size: 14
|
|
||||||
fg_color: "#b7bdf8"
|
|
||||||
source: Timezone
|
|
||||||
timezone: 1 # change TZ2 label here
|
|
||||||
|
|
||||||
# batteries
|
|
||||||
- type: BatteryList
|
|
||||||
rect: [0, 5, 400, 30]
|
|
||||||
corner_radius: 4
|
|
||||||
font_size: 16
|
|
||||||
fg_color: "#8bd5ca"
|
|
||||||
fg_color_low: "#B06060"
|
|
||||||
fg_color_charging: "#6080A0"
|
|
||||||
num_devices: 9
|
|
||||||
layout: Horizontal
|
|
||||||
low_threshold: 33
|
|
||||||
|
|
||||||
# volume buttons
|
|
||||||
- type: Button
|
|
||||||
rect: [315, 52, 70, 32]
|
|
||||||
corner_radius: 4
|
|
||||||
font_size: 13
|
|
||||||
fg_color: "#cad3f5"
|
|
||||||
bg_color: "#5b6078"
|
|
||||||
text: "Vol +"
|
|
||||||
click_down:
|
|
||||||
- type: Exec
|
|
||||||
command: ["pactl", "set-sink-volume", "@DEFAULT_SINK@", "+5%"]
|
|
||||||
- type: Button
|
|
||||||
rect: [315, 116, 70, 32]
|
|
||||||
corner_radius: 4
|
|
||||||
font_size: 13
|
|
||||||
fg_color: "#cad3f5"
|
|
||||||
bg_color: "#5b6078"
|
|
||||||
text: "Vol -"
|
|
||||||
click_down:
|
|
||||||
- type: Exec
|
|
||||||
command: ["pactl", "set-sink-volume", "@DEFAULT_SINK@", "-5%"]
|
|
||||||
@@ -12,12 +12,9 @@ use wlx_common::{
|
|||||||
overlays::BackendAttribValue,
|
overlays::BackendAttribValue,
|
||||||
};
|
};
|
||||||
|
|
||||||
const FALLBACKS: [&str; 2] = [
|
const FALLBACKS: [&str; 1] = [include_str!("res/keyboard.yaml")];
|
||||||
include_str!("res/keyboard.yaml"),
|
|
||||||
include_str!("res/wayvr.yaml"),
|
|
||||||
];
|
|
||||||
|
|
||||||
const FILES: [&str; 2] = ["keyboard.yaml", "wayvr.yaml"];
|
const FILES: [&str; 1] = ["keyboard.yaml"];
|
||||||
|
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
#[repr(usize)]
|
#[repr(usize)]
|
||||||
@@ -26,8 +23,6 @@ pub enum ConfigType {
|
|||||||
Watch,
|
Watch,
|
||||||
Settings,
|
Settings,
|
||||||
Anchor,
|
Anchor,
|
||||||
#[allow(dead_code)]
|
|
||||||
WayVR,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn load_known_yaml<T>(config_type: ConfigType) -> T
|
pub fn load_known_yaml<T>(config_type: ConfigType) -> T
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ use wlx_common::{
|
|||||||
use crate::{
|
use crate::{
|
||||||
RESTART, RUNNING,
|
RESTART, RUNNING,
|
||||||
backend::{
|
backend::{
|
||||||
|
XrBackend,
|
||||||
input::{Haptics, HoverResult, PointerHit, PointerMode},
|
input::{Haptics, HoverResult, PointerHit, PointerMode},
|
||||||
task::{OverlayTask, PlayspaceTask, TaskType, ToggleMode},
|
task::{OverlayTask, PlayspaceTask, TaskType, ToggleMode},
|
||||||
wayvr::{
|
wayvr::{
|
||||||
@@ -75,6 +76,7 @@ impl DashFrontend {
|
|||||||
let frontend = frontend::Frontend::new(
|
let frontend = frontend::Frontend::new(
|
||||||
frontend::InitParams {
|
frontend::InitParams {
|
||||||
interface: Box::new(interface),
|
interface: Box::new(interface),
|
||||||
|
has_monado: matches!(app.xr_backend, XrBackend::OpenXR),
|
||||||
},
|
},
|
||||||
app,
|
app,
|
||||||
)?;
|
)?;
|
||||||
@@ -445,6 +447,7 @@ impl DashInterface<AppState> for DashInterfaceLive {
|
|||||||
RESTART.store(true, Ordering::Relaxed);
|
RESTART.store(true, Ordering::Relaxed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "openxr")]
|
||||||
fn monado_client_list(
|
fn monado_client_list(
|
||||||
&mut self,
|
&mut self,
|
||||||
app: &mut AppState,
|
app: &mut AppState,
|
||||||
@@ -475,6 +478,7 @@ impl DashInterface<AppState> for DashInterfaceLive {
|
|||||||
Ok(res)
|
Ok(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "openxr")]
|
||||||
fn monado_client_focus(&mut self, app: &mut AppState, name: &str) -> anyhow::Result<()> {
|
fn monado_client_focus(&mut self, app: &mut AppState, name: &str) -> anyhow::Result<()> {
|
||||||
let Some(monado) = &mut app.monado else {
|
let Some(monado) = &mut app.monado else {
|
||||||
return Ok(()); // no monado avoilable
|
return Ok(()); // no monado avoilable
|
||||||
@@ -488,6 +492,7 @@ impl DashInterface<AppState> for DashInterfaceLive {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "openxr")]
|
||||||
fn monado_brightness_get(&mut self, app: &mut AppState) -> Option<f32> {
|
fn monado_brightness_get(&mut self, app: &mut AppState) -> Option<f32> {
|
||||||
let Some(monado) = &mut app.monado else {
|
let Some(monado) = &mut app.monado else {
|
||||||
return None;
|
return None;
|
||||||
@@ -496,6 +501,7 @@ impl DashInterface<AppState> for DashInterfaceLive {
|
|||||||
monado_get_brightness(monado)
|
monado_get_brightness(monado)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "openxr")]
|
||||||
fn monado_brightness_set(&mut self, app: &mut AppState, brightness: f32) -> Option<()> {
|
fn monado_brightness_set(&mut self, app: &mut AppState, brightness: f32) -> Option<()> {
|
||||||
let Some(monado) = &mut app.monado else {
|
let Some(monado) = &mut app.monado else {
|
||||||
return None;
|
return None;
|
||||||
@@ -503,21 +509,44 @@ impl DashInterface<AppState> for DashInterfaceLive {
|
|||||||
|
|
||||||
monado_set_brightness(monado, brightness).ok()
|
monado_set_brightness(monado, brightness).ok()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(not(feature = "openxr"))]
|
||||||
|
fn monado_client_list(
|
||||||
|
&mut self,
|
||||||
|
_: &mut AppState,
|
||||||
|
) -> anyhow::Result<Vec<dash_interface::MonadoClient>> {
|
||||||
|
anyhow::bail!("Not supported in this build.")
|
||||||
|
}
|
||||||
|
#[cfg(not(feature = "openxr"))]
|
||||||
|
fn monado_client_focus(&mut self, _: &mut AppState, _: &str) -> anyhow::Result<()> {
|
||||||
|
anyhow::bail!("Not supported in this build.")
|
||||||
|
}
|
||||||
|
#[cfg(not(feature = "openxr"))]
|
||||||
|
fn monado_brightness_get(&mut self, _: &mut AppState) -> Option<f32> {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
#[cfg(not(feature = "openxr"))]
|
||||||
|
fn monado_brightness_set(&mut self, _: &mut AppState, _: f32) -> Option<()> {
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const CLIENT_NAME_BLACKLIST: [&str; 2] = ["wlx-overlay-s", "libmonado"];
|
const CLIENT_NAME_BLACKLIST: [&str; 2] = ["wlx-overlay-s", "libmonado"];
|
||||||
|
|
||||||
|
#[cfg(feature = "openxr")]
|
||||||
fn monado_get_brightness(monado: &mut libmonado::Monado) -> Option<f32> {
|
fn monado_get_brightness(monado: &mut libmonado::Monado) -> Option<f32> {
|
||||||
let device = monado.device_from_role(libmonado::DeviceRole::Head).ok()?;
|
let device = monado.device_from_role(libmonado::DeviceRole::Head).ok()?;
|
||||||
device.brightness().ok()
|
device.brightness().ok()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "openxr")]
|
||||||
fn monado_set_brightness(monado: &mut libmonado::Monado, brightness: f32) -> anyhow::Result<()> {
|
fn monado_set_brightness(monado: &mut libmonado::Monado, brightness: f32) -> anyhow::Result<()> {
|
||||||
let device = monado.device_from_role(libmonado::DeviceRole::Head)?;
|
let device = monado.device_from_role(libmonado::DeviceRole::Head)?;
|
||||||
device.set_brightness(brightness, false)?;
|
device.set_brightness(brightness, false)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "openxr")]
|
||||||
fn monado_list_clients_filtered(
|
fn monado_list_clients_filtered(
|
||||||
monado: &mut libmonado::Monado,
|
monado: &mut libmonado::Monado,
|
||||||
) -> anyhow::Result<Vec<libmonado::Client<'_>>> {
|
) -> anyhow::Result<Vec<libmonado::Client<'_>>> {
|
||||||
@@ -544,6 +573,7 @@ fn monado_list_clients_filtered(
|
|||||||
Ok(clients)
|
Ok(clients)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "openxr")]
|
||||||
fn monado_client_focus(monado: &mut libmonado::Monado, name: &str) -> anyhow::Result<()> {
|
fn monado_client_focus(monado: &mut libmonado::Monado, name: &str) -> anyhow::Result<()> {
|
||||||
let clients = monado_list_clients_filtered(monado)?;
|
let clients = monado_list_clients_filtered(monado)?;
|
||||||
|
|
||||||
|
|||||||
@@ -27,8 +27,7 @@ use wgui::{
|
|||||||
};
|
};
|
||||||
use wlx_capture::{
|
use wlx_capture::{
|
||||||
DrmFormat, DrmFourcc, DrmModifier, WlxCapture,
|
DrmFormat, DrmFourcc, DrmModifier, WlxCapture,
|
||||||
frame::{self as wlx_frame, FrameFormat, MouseMeta, WlxFrame},
|
frame::{self as wlx_frame, DmaExporter, FrameFormat, MouseMeta, WlxFrame},
|
||||||
wlr_screencopy::DmaExporter,
|
|
||||||
};
|
};
|
||||||
use wlx_common::{config::GeneralConfig, overlays::StereoMode};
|
use wlx_common::{config::GeneralConfig, overlays::StereoMode};
|
||||||
|
|
||||||
|
|||||||
@@ -1,75 +0,0 @@
|
|||||||
# This is an example WayVR panel configuration. It demonstrates all the capabilities of this module.
|
|
||||||
# looking to make changes?
|
|
||||||
# drop me in ~/.config/wlxoverlay/wayvr.yaml
|
|
||||||
#
|
|
||||||
|
|
||||||
version: 1
|
|
||||||
|
|
||||||
# If your gpu has some issues with zero-copy textures, you can set this option to "software".
|
|
||||||
#
|
|
||||||
# Possible options:
|
|
||||||
# "dmabuf": Use zero-copy texture access (from EGL to Vulkan) - no performance impact
|
|
||||||
# "software": Read pixel data to memory via glReadPixels() every time a content has been updated. Minor performance impact on large resolutions
|
|
||||||
blit_method: "dmabuf"
|
|
||||||
|
|
||||||
# Automatically close overlays with zero window count?
|
|
||||||
auto_hide: true
|
|
||||||
|
|
||||||
# For how long an overlay should be visible in case if there are no windows present? (in milliseconds, auto_hide needs to be enabled)
|
|
||||||
# This value shouldn't be set at 0, because some programs could re-initialize a window during startup (splash screens for example)
|
|
||||||
auto_hide_delay: 750
|
|
||||||
|
|
||||||
# In milliseconds
|
|
||||||
keyboard_repeat_delay: 200
|
|
||||||
|
|
||||||
# Chars per second
|
|
||||||
keyboard_repeat_rate: 50
|
|
||||||
|
|
||||||
# WayVR-compatible dashboard.
|
|
||||||
# For now, there is only one kind of dashboard with WayVR IPC support (WayVR Dashboard).
|
|
||||||
#
|
|
||||||
# Build instructions: https://github.com/olekolek1000/wayvr-dashboard
|
|
||||||
#
|
|
||||||
# exec: Executable path, for example "/home/USER/wayvr-dashboard/src-tauri/target/release/wayvr-dashboard"
|
|
||||||
# or just "wayvr-dashboard" if you have it installed from your package manager.
|
|
||||||
dashboard:
|
|
||||||
exec: "wayvr-dashboard"
|
|
||||||
args: ""
|
|
||||||
env: []
|
|
||||||
|
|
||||||
displays:
|
|
||||||
watch:
|
|
||||||
width: 400
|
|
||||||
height: 600
|
|
||||||
scale: 0.4
|
|
||||||
attach_to: "HandRight" # HandLeft, HandRight
|
|
||||||
pos: [0.0, 0.0, 0.125]
|
|
||||||
rotation: {axis: [1.0, 0.0, 0.0], angle: -45.0}
|
|
||||||
disp1:
|
|
||||||
width: 640
|
|
||||||
height: 480
|
|
||||||
primary: true # Required if you want to attach external processes (not spawned by WayVR itself) without WAYVR_DISPLAY_NAME set
|
|
||||||
disp2:
|
|
||||||
width: 1280
|
|
||||||
height: 720
|
|
||||||
scale: 2.0
|
|
||||||
|
|
||||||
catalogs:
|
|
||||||
default_catalog:
|
|
||||||
apps:
|
|
||||||
- name: "Calc"
|
|
||||||
target_display: "disp1"
|
|
||||||
exec: "kcalc"
|
|
||||||
env: ["FOO=bar"]
|
|
||||||
shown_at_start: false
|
|
||||||
|
|
||||||
- name: "htop"
|
|
||||||
target_display: "watch"
|
|
||||||
exec: "konsole"
|
|
||||||
args: "-e htop"
|
|
||||||
|
|
||||||
- name: "Browser"
|
|
||||||
target_display: "disp2"
|
|
||||||
exec: "cage"
|
|
||||||
args: "chromium -- --incognito"
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user