Compare commits

..
Author SHA1 Message Date
Aleksander af733b6817 wgui: do not pass AttribPairs with empty values further, dash-frontend: xml refactor, use template children in various places, remove unused files 2026-08-29 11:40:22 +02:00
Aleksander 936c8bf27d wgui: Add <CHILDREN/> support in templates (Closes #550) 2026-08-29 11:40:22 +02:00
Aleksander 998c566fc6 Changes (wgui):
- All new layout xml files now are required to include this metadata
at the top, if they want to be parsed in the new layout v2 behavior:
```xml
<layout version="2">
    <!-- rest of the markup -->
</layout>
```

- Add path expansion using '@' for widget resources and includes
The '@' character is always expanded to the assets root directory
(builtin/internal), or the root xml directory (external).
Paths directing to the built-in resources like:
    `edit/mouse.svg`
are now required to be written as:
    `@/edit/mouse.svg`,
For example:
    ```xml
        <sprite src_builtin="@/edit/mouse.svg" />
    ```

- All paths without '/' at the start are now treated as relative
to the currently parsing XML (paths like `/usr/share/icons/...`
are still accessible)

- Add support for relative paths for widgets instantiated from
templates

- Rename `<theme>` to `<vars>`

Changes (dash-frontend):

- Adapt and refactor XML files

Changes (wayvr):

- Adapt and refactor XML files
2026-08-29 11:40:17 +02:00
Aleksander 6163328769 wayvr: fix space rotate quaternion/matrix feedback drift (Closes #636) 2026-08-27 21:35:23 +02:00
galister e79440d03d openvr: only should_render if initialized 2026-08-28 01:50:49 +09:00
galister e0f09d63c2 fix dirty handling in passthru overlay 2026-08-28 01:50:49 +09:00
galister 69dbf331c8 block input to xr-hotas even though headless 2026-08-22 21:33:51 +09:00
oo8dev 5079f31c40 wayvr: Whisper panel: Microphone feedback & processing progress (#631) 2026-08-16 14:58:17 +02:00
GK-Gaming 3c2d0d07f5 Fix x11 pipewire screencast (#609) 2026-08-16 20:40:27 +09:00
oo8dev a50ad00fb0 dash-frontend: Runtime statistics tab, head rotation count (Closes #222) (#627) 2026-08-16 11:12:17 +02:00
148 changed files with 1613 additions and 997 deletions

No files matched your search

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24"><!-- Icon from Material Symbols by Google - https://github.com/google/material-design-icons/blob/master/LICENSE --><path fill="currentColor" d="M2 21v-2h20v2zm1-3v-7h3v7zm5 0V6h3v12zm5 0V9h3v9zm5 0V3h3v15z"/></svg>

After

Width:  |  Height:  |  Size: 297 B

+11 -11
View File
@@ -1,10 +1,10 @@
<layout>
<theme>
<layout version="2">
<vars>
<var key="side_size" value="48" />
<var key="top_size" value="40" />
<var key="side_sprite_size" value="26" />
<var key="side_button_size" value="48" />
</theme>
</vars>
<template name="SideButton">
<Button
@@ -41,12 +41,12 @@
align_items="center"
gap="4"
>
<SideButton id="btn_side_home" src_builtin="dashboard/wayvr_dashboard_mono.svg" tooltip="HOME_SCREEN" tooltip_side="right" />
<SideButton id="btn_side_apps" src_builtin="dashboard/apps.svg" tooltip="APPLICATIONS" tooltip_side="right" />
<SideButton id="btn_side_games" src_builtin="dashboard/games.svg" tooltip="GAMES" tooltip_side="right" />
<SideButton id="btn_side_monado" src_builtin="dashboard/monado.svg" tooltip="MONADO_RUNTIME" tooltip_side="right" />
<SideButton id="btn_side_home" src_builtin="@/dashboard/wayvr_dashboard_mono.svg" tooltip="HOME_SCREEN" tooltip_side="right" />
<SideButton id="btn_side_apps" src_builtin="@/dashboard/apps.svg" tooltip="APPLICATIONS" tooltip_side="right" />
<SideButton id="btn_side_games" src_builtin="@/dashboard/games.svg" tooltip="GAMES" tooltip_side="right" />
<SideButton id="btn_side_monado" src_builtin="@/dashboard/monado.svg" tooltip="MONADO_RUNTIME" tooltip_side="right" />
<rectangle height="2" color="outline" width="~side_sprite_size" />
<SideButton id="btn_side_settings" src_builtin="dashboard/settings.svg" tooltip="SETTINGS" tooltip_side="right" />
<SideButton id="btn_side_settings" src_builtin="@/dashboard/settings.svg" tooltip="SETTINGS" tooltip_side="right" />
</rectangle>
</div>
<!-- REST -->
@@ -69,7 +69,7 @@
<!-- Close button -->
<Button position="absolute" id="btn_close" color="background_contrast" border_color="background_contrast" round="100%" width="~top_size" height="~top_size" tooltip="CLOSE_WINDOW" tooltip_side="left"
hover_color="danger" hover_border_color="danger(rgb-mult-0.5)" >
<sprite src_builtin="dashboard/close.svg" width="32" height="32" />
<sprite src_builtin="@/dashboard/close.svg" width="32" height="32" />
</Button>
</div>
@@ -137,10 +137,10 @@
<!-- Left bottom side -->
<div margin_left="8">
<Button id="btn_audio" color="background(transparent)" border_color="background(transparent)" tooltip="AUDIO.VOLUME" tooltip_side="top">
<sprite src_builtin="dashboard/volume.svg" width="24" height="24" margin="8" />
<sprite src_builtin="@/dashboard/volume.svg" width="24" height="24" margin="8" />
</Button>
<Button id="btn_recenter" color="background(transparent)" border_color="background(transparent)" tooltip="ACTIONS.RECENTER_PLAYSPACE" tooltip_side="top">
<sprite src_builtin="dashboard/recenter.svg" width="24" height="24" margin="8" />
<sprite src_builtin="@/dashboard/recenter.svg" width="24" height="24" margin="8" />
</Button>
</div>
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<macro name="dropdown_button"
flex_direction="row"
border="2"
@@ -17,7 +17,7 @@
<div padding_top="4" padding_bottom="4">
<rectangle width="2" height="100%" color="outline" />
</div>
<sprite margin_left="-4" width="30" height="30" src_builtin="dashboard/down.svg" />
<sprite margin_left="-4" width="30" height="30" src_builtin="@/dashboard/down.svg" />
</div>
</Button>
</template>
+8 -2
View File
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<macro name="group_box"
flex_direction="column"
align_items="baseline"
@@ -7,7 +7,13 @@
border_color="outline"
padding="12"
gap="8"
round="8" />
round="8"/>
<template name="GroupBox">
<rectangle macro="group_box">
<CHILDREN/>
</rectangle>
</template>
<!-- src_builtin, text, translation -->
<template name="GroupBoxTitle">
+3 -3
View File
@@ -1,8 +1,8 @@
<layout>
<layout version="2">
<template name="LoadingWithText">
<div id="root" width="100%" height="100%" align_items="center" justify_content="center">
<div flex_direction="row" gap="8" align_items="center" >
<sprite id="sprite_loading" src_builtin="dashboard/loading.svg" width="32" height="32" color="on_background"/>
<sprite id="sprite_loading" src_builtin="@/dashboard/loading.svg" width="32" height="32" color="on_background"/>
<label translation="LOADING" weight="bold"/>
</div>
</div>
@@ -10,7 +10,7 @@
<template name="LoadingWithoutText">
<div id="root" width="100%" height="100%" align_items="center" justify_content="center">
<sprite id="sprite_loading" src_builtin="dashboard/loading.svg" width="32" height="32" color="on_background"/>
<sprite id="sprite_loading" src_builtin="@/dashboard/loading.svg" width="32" height="32" color="on_background"/>
</div>
</template>
</layout>
+1 -1
View File
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<macro name="home_button" round="8" hover_color="primary" hover_border_color="on_primary" />
<template name="MenuButton">
+1 -1
View File
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<template name="Separator">
<rectangle width="100%" min_height="2" color="outline" />
</template>
+8 -8
View File
@@ -1,5 +1,5 @@
<layout>
<include src="../t_group_box.xml" />
<layout version="2">
<include src="@/gui/t_group_box.xml" />
<!-- tooltip, src, src_ext, name -->
<template name="AppEntry">
@@ -28,26 +28,26 @@
<!--
<div gap="4" align_items="center">
<Button width="48" height="38">
<sprite src_builtin="dashboard/alphabetical.svg" width="24" height="24" />
<sprite src_builtin="@/dashboard/alphabetical.svg" width="24" height="24" />
</Button>
<Button width="48" height="38">
<sprite src_builtin="dashboard/category_search.svg" width="24" height="24" />
<sprite src_builtin="@/dashboard/category_search.svg" width="24" height="24" />
</Button>
<sprite src_builtin="dashboard/search.svg" width="24" height="24" />
<sprite src_builtin="@/dashboard/search.svg" width="24" height="24" />
<rectangle flex_grow="1" height="100%" color="#1d2e51" border_color="#294774" border="2" round="4" align_items="center" padding_left="12">
<label text="Search" color="#FFFFFF88" weight="bold" />
</rectangle>
</div>
-->
<rectangle macro="group_box">
<GroupBox>
<div align_items="center" gap="8">
<sprite src_builtin="dashboard/heart_plus.svg" color="primary" min_width="24" min_height="24"/>
<sprite src_builtin="@/dashboard/heart_plus.svg" color="primary" min_width="24" min_height="24"/>
<label translation="PINNED_APPS"/>
</div>
<div id="pinned_apps_parent" flex_direction="row" flex_wrap="wrap" gap="4">
<!-- filled-in at runtime -->
</div>
</rectangle>
</GroupBox>
<div
id="app_list_parent"
flex_direction="row"
+8 -8
View File
@@ -1,16 +1,16 @@
<layout>
<include src="../t_separator.xml" />
<layout version="2">
<include src="@/gui/t_separator.xml" />
<template name="TierCell">
<div gap="8" align_items="center">
<sprite width="28" height="28" src_builtin="dashboard/medal.svg" color="${color}"/>
<sprite width="28" height="28" src_builtin="@/dashboard/medal.svg" color="${color}"/>
<label text="${text}" weight="bold" size="18" color="${color}" shadow="shadow"/>
</div>
</template>
<template name="SupporterCell">
<rectangle padding="8" color="background(transparent)" round="8" border="2" border_color="outline" gap="8" align_items="center" flex_direction="row" >
<sprite width="24" height="24" src_builtin="dashboard/person.svg"/>
<sprite width="24" height="24" src_builtin="@/dashboard/person.svg"/>
<label text="${username}" weight="bold"/>
</rectangle>
</template>
@@ -32,14 +32,14 @@
<elements>
<div flex_direction="row" width="100%" min_height="100%" gap="16">
<div macro="half">
<sprite color="#FFAAAA" src_builtin="dashboard/donate.svg" min_width="48" min_height="48"/>
<sprite color="#FFAAAA" src_builtin="@/dashboard/donate.svg" min_width="48" min_height="48"/>
<div gap="16" align_items="center" width="100%">
<label align="justified" wrap="1" size="15" translation="DONATE.DESCRIPTION" color="on_background"/>
</div>
<div flex_direction="column" gap="8" align_items="center">
<Button id="btn_donate" tooltip="DONATE.BUTTON_TOOLTIP" align_self="baseline">
<image src_builtin="dashboard/opencollective_logo.svg" width="200" height="32" margin="8" margin_left="16" margin_right="16"/>
<image src_builtin="@/dashboard/opencollective_logo.svg" width="200" height="32" margin="8" margin_left="16" margin_right="16"/>
</Button>
<label text="opencollective.com/wayvr-org"/>
</div>
@@ -47,8 +47,8 @@
<label weight="bold" size="20" translation="DONATE.THANK_YOU_WAYVR" color="on_background"/>
<div gap="32">
<Avatar icon="dashboard/avatars/galister.png" nickname="galister"/>
<Avatar icon="dashboard/avatars/oo8dev.png" nickname="oo8dev"/>
<Avatar icon="@/dashboard/avatars/galister.png" nickname="galister"/>
<Avatar icon="@/dashboard/avatars/oo8dev.png" nickname="oo8dev"/>
</div>
</div>
<!-- vertical separator -->
+2 -2
View File
@@ -1,6 +1,6 @@
<layout>
<layout version="2">
<elements>
<div id="running_games_list_parent" align_self="center" />
<div id="game_list_parent" align_items="center" flex_direction="column" gap="8" />
</elements>
</layout>
</layout>
+10 -10
View File
@@ -1,5 +1,5 @@
<layout>
<include src="../t_menu_button.xml" />
<layout version="2">
<include src="@/gui/t_menu_button.xml" />
<elements>
<div
@@ -9,7 +9,7 @@
flex_grow="1"
gap="8"
>
<image src_builtin="dashboard/splash.png" width="300" height="89" />
<image src_builtin="@/dashboard/splash.png" width="300" height="89" />
<!-- supporters -->
<Button
@@ -26,23 +26,23 @@
<!-- main button list -->
<div flex_direction="row" gap="8" margin_top="32">
<MenuButton id="btn_apps" icon="dashboard/apps.svg" translation="APPLICATIONS" />
<MenuButton id="btn_games" icon="dashboard/games.svg" translation="GAMES" />
<MenuButton id="btn_monado" icon="dashboard/monado.svg" text="Monado" />
<MenuButton id="btn_settings" icon="dashboard/settings.svg" translation="SETTINGS" />
<MenuButton id="btn_apps" icon="@/dashboard/apps.svg" translation="APPLICATIONS" />
<MenuButton id="btn_games" icon="@/dashboard/games.svg" translation="GAMES" />
<MenuButton id="btn_monado" icon="@/dashboard/monado.svg" text="Monado" />
<MenuButton id="btn_settings" icon="@/dashboard/settings.svg" translation="SETTINGS" />
</div>
<div gap="8">
<Button id="btn_welcome_screen" macro="home_button" tooltip="APP_SETTINGS.SHOW_WELCOME_SCREEN">
<sprite src_builtin="dashboard/welcome.svg" width="32" height="32" margin="16" />
<sprite src_builtin="@/dashboard/welcome.svg" width="32" height="32" margin="16" />
</Button>
<Button id="btn_website" macro="home_button" tooltip_str="wayvr.org">
<sprite src_builtin="dashboard/globe.svg" width="32" height="32" margin="16" />
<sprite src_builtin="@/dashboard/globe.svg" width="32" height="32" margin="16" />
</Button>
<Button id="btn_donate" macro="home_button" tooltip="DONATE.SUPPORT_US">
<sprite src_builtin="dashboard/opencollective.svg" width="32" height="32" margin="16" />
<sprite src_builtin="@/dashboard/opencollective.svg" width="32" height="32" margin="16" />
</Button>
</div>
</div>
+4 -4
View File
@@ -1,10 +1,10 @@
<layout>
<layout version="2">
<elements>
<div gap="4">
<Tabs id="tabs">
<Tab name="process_list" translation="PROCESS_LIST" sprite_src_builtin="dashboard/cpu.svg" />
<Tab name="general_settings" translation="GENERAL_SETTINGS" sprite_src_builtin="dashboard/settings.svg" />
<Tab name="debug_timings" translation="DEBUG_INFO" sprite_src_builtin="dashboard/not_a_bug.svg" />
<Tab name="process_list" translation="PROCESS_LIST" sprite_src_builtin="@/dashboard/cpu.svg" />
<Tab name="general_settings" translation="GENERAL_SETTINGS" sprite_src_builtin="@/dashboard/settings.svg" />
<Tab name="debug_timings" translation="DEBUG_INFO" sprite_src_builtin="@/dashboard/not_a_bug.svg" />
</Tabs>
<div gap="4" id="content" width="100%">
<!-- filled-in at runtime -->
@@ -1,5 +1,5 @@
<layout>
<include src="../t_group_box.xml" />
<layout version="2">
<include src="@/gui/t_group_box.xml" />
<!-- name, limit_min, limit_max -->
<template name="DebugGraph">
@@ -15,13 +15,13 @@
</template>
<elements>
<rectangle macro="group_box">
<GroupBoxTitle src_builtin="dashboard/apps.svg" text="Sessions" />
<GroupBox>
<GroupBoxTitle src_builtin="@/dashboard/apps.svg" text="Sessions" />
<div id="session_list_parent" flex_wrap="wrap" flex_direction="row" gap="8" />
<GroupBoxTitle src_builtin="dashboard/not_a_bug.svg" text="Debug timings" />
<GroupBoxTitle src_builtin="@/dashboard/not_a_bug.svg" text="Debug timings" />
<div id="timings_parent" flex_wrap="wrap" flex_direction="row" gap="8">
<label text="Please select which session you want to monitor" />
</div>
</rectangle>
</GroupBox>
</elements>
</layout>
</layout>
@@ -1,56 +1,57 @@
<layout>
<include src="../t_group_box.xml" />
<layout version="2">
<include src="@/gui/t_group_box.xml" />
<macro name="slider" width="100%" height="24"/>
<template name="CKRow">
<div gap="8" width="~s_width">
<CHILDREN/>
</div>
</template>
<theme>
<!-- title, id -->
<template name="CKSlider">
<div gap="8" flex_direction="column" width="100%">
<label text="${title}"/>
<Slider id="${id}" min_value="0" max_value="100" width="100%" height="24"/>
</div>
</template>
<!-- title, id -->
<template name="CKColSel">
<div gap="8" flex_direction="column" width="100%">
<label text="${title}"/>
<ColorSelector id="cs_keying" height="24" width="100%"/>
</div>
</template>
<vars>
<var key="s_width" value="500"/>
</theme>
</vars>
<elements>
<div flex_direction="column" gap="8">
<rectangle macro="group_box">
<GroupBoxTitle src_builtin="dashboard/settings.svg" translation="GENERAL_SETTINGS" />
<!-- headset brightness -->
<GroupBox>
<GroupBoxTitle src_builtin="@/dashboard/settings.svg" translation="GENERAL_SETTINGS" />
<label translation="DISPLAY_BRIGHTNESS" />
<Slider id="slider_brightness" width="300" height="24" min_value="0" max_value="140" />
</rectangle>
<rectangle macro="group_box">
<GroupBoxTitle src_builtin="dashboard/settings.svg" translation="APP_SETTINGS.COLOR_KEYING" />
<div gap="8" width="~s_width">
<div gap="8" flex_direction="column" width="100%">
<label text="Color"/>
<ColorSelector id="cs_keying" height="24" width="100%"/>
</div>
</GroupBox>
<div gap="8" flex_direction="column" width="100%">
<label text="Despill"/>
<Slider id="slider_keying_despill" min_value="0" max_value="100" macro="slider"/>
</div>
<div gap="8" flex_direction="column" width="100%">
<label text="Curve (0 = disabled)"/>
<Slider id="slider_keying_curve" min_value="0" max_value="100" macro="slider"/>
</div>
</div>
<!-- color keying -->
<GroupBox>
<GroupBoxTitle src_builtin="@/dashboard/settings.svg" translation="APP_SETTINGS.COLOR_KEYING" />
<CKRow>
<CKColSel title="Color" id="cs_keying"/>
<CKSlider title="Despill" id="slider_keying_despill"/>
<CKSlider title="Curve (0 = disabled)" id="slider_keying_curve"/>
</CKRow>
<div gap="8" width="~s_width">
<div gap="8" flex_direction="column" width="100%">
<label text="Hue range"/>
<Slider id="slider_keying_hue_range" min_value="0" max_value="100" macro="slider"/>
</div>
<div gap="8" flex_direction="column" width="100%">
<label text="Saturation range"/>
<Slider id="slider_keying_saturation_range" min_value="0" max_value="100" macro="slider"/>
</div>
<div gap="8" flex_direction="column" width="100%">
<label text="Value range"/>
<Slider id="slider_keying_value_range" min_value="0" max_value="100" macro="slider"/>
</div>
</div>
</rectangle>
<CKRow>
<CKSlider title="Hue range" id="slider_keying_hue_range"/>
<CKSlider title="Saturation range" id="slider_keying_saturation_range"/>
<CKSlider title="Value range" id="slider_keying_value_range"/>
</CKRow>
</GroupBox>
</div>
</elements>
</layout>
@@ -1,5 +1,5 @@
<layout>
<include src="../t_group_box.xml" />
<layout version="2">
<include src="@/gui/t_group_box.xml" />
<!-- key: str, value: str -->
<template name="BoolFlag">
@@ -11,7 +11,7 @@
<!-- name, checked, flag_* -->
<template name="Cell">
<rectangle macro="group_box">
<GroupBox>
<CheckBox id="checkbox" text="${name}" checked="${checked}" />
<div flex_direction="row" gap="8" flex_wrap="wrap">
<BoolFlag key="Active:" value="${flag_active}" />
@@ -21,15 +21,15 @@
<BoolFlag key="Primary:" value="${flag_primary}" />
<BoolFlag key="Visible:" value="${flag_visible}" />
</div>
</rectangle>
</GroupBox>
</template>
<elements>
<rectangle macro="group_box">
<GroupBoxTitle src_builtin="dashboard/cpu.svg" translation="PROCESS_LIST" />
<GroupBox>
<GroupBoxTitle src_builtin="@/dashboard/cpu.svg" translation="PROCESS_LIST" />
<div id="list_parent" flex_direction="column" gap="8">
<!-- filled at runtime -->
</div>
</rectangle>
</GroupBox>
</elements>
</layout>
</layout>
+20 -12
View File
@@ -1,6 +1,6 @@
<layout>
<include src="../t_group_box.xml" />
<include src="../t_dropdown_button.xml" />
<layout version="2">
<include src="@/gui/t_group_box.xml" />
<include src="@/gui/t_dropdown_button.xml" />
<template name="SettingsGroupBox">
<rectangle macro="group_box" id="${id}" flex_grow="1">
@@ -31,6 +31,13 @@
<RadioBox text="${text}" translation="${translation}" value="${value}" tooltip="${tooltip}" />
</template>
<template name="StatRow">
<div flex_direction="row" justify_content="space_between" align_items="center" gap="12" width="100%">
<label weight="bold" translation="${translation}" />
<label id="${id}" weight="bold" />
</div>
</template>
<template name="ButtonText">
<Button id="${id}" height="32" tooltip="${translation}_HELP" padding="4" gap="8">
<sprite src_builtin="${icon}" height="24" width="24" />
@@ -49,7 +56,7 @@
<div id="${id}_root" flex_direction="row">
<Button id="${id}" color="#AA3333" height="24" padding="4" margin_top="-2" margin_bottom="-2"
hover_color="danger" hover_border_color="danger(rgb-mult-0.5)" >
<sprite src_builtin="dashboard/close.svg" height="20" width="20" />
<sprite src_builtin="@/dashboard/close.svg" height="20" width="20" />
</Button>
<div padding_left="8">
<label align="left" text="${text}" weight="bold" overflow="hidden" />
@@ -62,14 +69,15 @@
<elements>
<div gap="4">
<Tabs id="tabs">
<Tab macro="tab_style" name="look_and_feel" translation="APP_SETTINGS.LOOK_AND_FEEL" sprite_src_builtin="dashboard/palette.svg" />
<Tab macro="tab_style" name="skybox" translation="APP_SETTINGS.SKYBOX" sprite_src_builtin="dashboard/globe.svg" />
<Tab macro="tab_style" name="features" translation="APP_SETTINGS.FEATURES" sprite_src_builtin="dashboard/options.svg" />
<Tab macro="tab_style" name="controls" translation="APP_SETTINGS.CONTROLS" sprite_src_builtin="dashboard/controller.svg" />
<Tab macro="tab_style" name="space_drag" translation="APP_SETTINGS.SPACE_DRAG" sprite_src_builtin="dashboard/drag.svg" />
<Tab macro="tab_style" name="misc" translation="APP_SETTINGS.MISC" sprite_src_builtin="dashboard/blocks.svg" />
<Tab macro="tab_style" name="autostart_apps" translation="APP_SETTINGS.AUTOSTART_APPS" sprite_src_builtin="dashboard/apps.svg" />
<Tab macro="tab_style" name="troubleshooting" translation="APP_SETTINGS.TROUBLESHOOTING" sprite_src_builtin="dashboard/cpu.svg" />
<Tab macro="tab_style" name="look_and_feel" translation="APP_SETTINGS.LOOK_AND_FEEL" sprite_src_builtin="@/dashboard/palette.svg" />
<Tab macro="tab_style" name="skybox" translation="APP_SETTINGS.SKYBOX" sprite_src_builtin="@/dashboard/globe.svg" />
<Tab macro="tab_style" name="features" translation="APP_SETTINGS.FEATURES" sprite_src_builtin="@/dashboard/options.svg" />
<Tab macro="tab_style" name="controls" translation="APP_SETTINGS.CONTROLS" sprite_src_builtin="@/dashboard/controller.svg" />
<Tab macro="tab_style" name="space_drag" translation="APP_SETTINGS.SPACE_DRAG" sprite_src_builtin="@/dashboard/drag.svg" />
<Tab macro="tab_style" name="misc" translation="APP_SETTINGS.MISC" sprite_src_builtin="@/dashboard/blocks.svg" />
<Tab macro="tab_style" name="autostart_apps" translation="APP_SETTINGS.AUTOSTART_APPS" sprite_src_builtin="@/dashboard/apps.svg" />
<Tab macro="tab_style" name="statistics" translation="APP_SETTINGS.STATISTICS" sprite_src_builtin="@/dashboard/barchart.svg" />
<Tab macro="tab_style" name="troubleshooting" translation="APP_SETTINGS.TROUBLESHOOTING" sprite_src_builtin="@/dashboard/cpu.svg" />
</Tabs>
<div flex_wrap="wrap" justify_content="stretch" gap="4" id="settings_root" width="100%">
<!-- filled-in at runtime -->
@@ -1,14 +1,14 @@
<layout>
<include src="../t_group_box.xml" />
<layout version="2">
<include src="@/gui/t_group_box.xml" />
<elements>
<div id="common_options_parent" flex_direction="column" gap="8"/>
<rectangle macro="group_box">
<GroupBoxTitle src_builtin="dashboard/gravity.svg" translation="APP_SETTINGS.SPACE_GRAVITY_GRAVITY" />
<GroupBox>
<GroupBoxTitle src_builtin="@/dashboard/gravity.svg" translation="APP_SETTINGS.SPACE_GRAVITY_GRAVITY" />
<div id="gravity_enabled_parent"/>
<div id="space_gravity_parent" flex_direction="column" gap="8">
<!-- filled-in at runtime -->
</div>
</rectangle>
</GroupBox>
</elements>
</layout>
+3 -3
View File
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<template name="Pip">
<rectangle id="pip" width="8" height="8" round="100%" color="${COLOR}"/>
</template>
@@ -12,11 +12,11 @@
<!-- Page buttons -->
<div position="absolute" align_self="end" justify_self="end" width="100%" flex_direction="column" align_items="center" margin_bottom="8">
<div flex_direction="row" gap="8" align_items="center">
<Button id="btn_prev" width="32" height="32" round="100%" sprite_src_builtin="dashboard/arrow_left.svg" />
<Button id="btn_prev" width="32" height="32" round="100%" sprite_src_builtin="@/dashboard/arrow_left.svg" />
<div id="pips" gap="4" align_items="center">
<!-- filled-in at runtime -->
</div>
<Button id="btn_next" width="32" height="32" round="100%" sprite_src_builtin="dashboard/arrow_right.svg" />
<Button id="btn_next" width="32" height="32" round="100%" sprite_src_builtin="@/dashboard/arrow_right.svg" />
</div>
</div>
</div>
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<!-- icon, title -->
<template name="PageTitle">
<div position="absolute" align_self="start" justify_self="center" width="100%" margin_top="16" gap="8" align_items="center" justify_content="center">
@@ -19,4 +19,13 @@
<macro name="video_overlay_component" looping="1" width="100%" height="auto" max_height="100%" aspect_ratio="1.777777" position="relative"/>
<macro name="video_overlay_content" new_pass="1" position="absolute" width="100%" height="100%" padding_bottom="32"/>
<!-- src_builtin, aspect_ratio -->
<template name="WelcomeVideo">
<Video macro="video_overlay_component" src_builtin="${src_builtin}" aspect_ratio="${aspect_ratio}">
<div macro="video_overlay_content">
<CHILDREN/>
</div>
</Video>
</template>
</layout>
@@ -1,6 +1,6 @@
<layout>
<layout version="2">
<elements>
<image src_builtin="dashboard/splash.png" min_width="336" min_height="100" />
<image src_builtin="@/dashboard/splash.png" min_width="336" min_height="100" />
<rectangle color="#FFFFFF11" width="100%" height="2"/>
@@ -10,12 +10,12 @@
<label size="20" translation="WELCOME.GUIDE_INTRO"/>
<div gap="4" align_items="center" margin_top="8">
<sprite min_width="16" min_height="16" src_builtin="dashboard/info.svg" color="on_background"/>
<sprite min_width="16" min_height="16" src_builtin="@/dashboard/info.svg" color="on_background"/>
<label wrap="1" size="14" translation="WELCOME.REPOSITION_THIS_WINDOW_BY_GRABBING"/>
</div>
<div gap="4" align_items="center">
<sprite min_width="16" min_height="16" src_builtin="dashboard/info.svg" color="on_background"/>
<sprite min_width="16" min_height="16" src_builtin="@/dashboard/info.svg" color="on_background"/>
<label wrap="1" size="14" translation="WELCOME.LAST_PAGE_INFO"/>
</div>
@@ -1,15 +1,14 @@
<layout>
<layout version="2">
<include src_builtin="welcome_common.xml"/>
<elements>
<rectangle color="#103142" width="100%" height="100%" position="absolute"/>
<Video macro="video_overlay_component" src_builtin="video/onboarding_watch.ivf" aspect_ratio="1.0">
<div macro="video_overlay_content">
<PageTitle icon="dashboard/watch.svg" translation="WELCOME.WATCH"/>
<div position="relative" align_self="end" padding="16">
<TextDesc translation="WELCOME.LOOK_AT_LEFT_WRIST"/>
</div>
<WelcomeVideo src_builtin="@/video/onboarding_watch.ivf" aspect_ratio="1.0">
<PageTitle icon="@/dashboard/watch.svg" translation="WELCOME.WATCH"/>
<div position="relative" align_self="end" padding="16">
<TextDesc translation="WELCOME.LOOK_AT_LEFT_WRIST"/>
</div>
</Video>
</WelcomeVideo>
</elements>
</layout>
@@ -1,14 +1,12 @@
<layout>
<layout version="2">
<include src_builtin="welcome_common.xml"/>
<elements>
<Video macro="video_overlay_component" src_builtin="video/onboarding_double_press.ivf">
<div macro="video_overlay_content">
<PageTitle icon="dashboard/panorama.svg" translation="WELCOME.WORKING_SET"/>
<div position="relative" align_self="end" padding="16">
<TextDesc translation="WELCOME.DOUBLE_PRESS_TO_TOGGLE"/>
</div>
<WelcomeVideo src_builtin="@/video/onboarding_double_press.ivf">
<PageTitle icon="@/dashboard/panorama.svg" translation="WELCOME.WORKING_SET"/>
<div position="relative" align_self="end" padding="16">
<TextDesc translation="WELCOME.DOUBLE_PRESS_TO_TOGGLE"/>
</div>
</Video>
</WelcomeVideo>
</elements>
</layout>
+11 -13
View File
@@ -1,19 +1,17 @@
<layout>
<layout version="2">
<include src_builtin="welcome_common.xml"/>
<elements>
<Video macro="video_overlay_component" src_builtin="video/onboarding_laser_colors.ivf">
<div macro="video_overlay_content">
<PageTitle icon="dashboard/click.svg" translation="WELCOME.LASER_COLORS"/>
<div position="relative" flex_direction="row" gap="16" margin="16" align_self="end" justify_self="end" align_items="center">
<rectangle flex_direction="column" gap="8" padding="8" round="4" border_color="outline" border="2" >
<label size="12" weight="bold" color="#00FFFF" translation="WELCOME.REGULAR_MODE_BLUE_LASER"/>
<label size="12" weight="bold" color="#FFAA00" translation="WELCOME.RIGHT_CLICK_MODE_ORANGE_LASER"/>
<label size="12" weight="bold" color="#FF88FF" translation="WELCOME.MIDDLE_CLICK_MODE_PURPLE_LASER"/>
</rectangle>
<label wrap="1" size="18" width="450" weight="bold" color="#ffffff" shadow="#000000" translation="WELCOME.LASER_FUNCTIONALITY"/>
</div>
<WelcomeVideo src_builtin="@/video/onboarding_laser_colors.ivf">
<PageTitle icon="@/dashboard/click.svg" translation="WELCOME.LASER_COLORS"/>
<div position="relative" flex_direction="row" gap="16" margin="16" align_self="end" justify_self="end" align_items="center">
<rectangle flex_direction="column" gap="8" padding="8" round="4" border_color="outline" border="2" >
<label size="12" weight="bold" color="#00FFFF" translation="WELCOME.REGULAR_MODE_BLUE_LASER"/>
<label size="12" weight="bold" color="#FFAA00" translation="WELCOME.RIGHT_CLICK_MODE_ORANGE_LASER"/>
<label size="12" weight="bold" color="#FF88FF" translation="WELCOME.MIDDLE_CLICK_MODE_PURPLE_LASER"/>
</rectangle>
<label wrap="1" size="18" width="450" weight="bold" color="#ffffff" shadow="#000000" translation="WELCOME.LASER_FUNCTIONALITY"/>
</div>
</Video>
</WelcomeVideo>
</elements>
</layout>
+10 -12
View File
@@ -1,20 +1,18 @@
<layout>
<layout version="2">
<include src_builtin="welcome_common.xml"/>
<elements>
<rectangle color="#0A2939" width="100%" height="100%" position="absolute"/>
<Video macro="video_overlay_component" src_builtin="video/onboarding_center_marker.ivf" aspect_ratio="1.33333">
<div macro="video_overlay_content">
<PageTitle icon="dashboard/panorama.svg" translation="WELCOME.MOVING_YOUR_SET"/>
<div position="relative" align_self="end" padding="16" flex_direction="column" gap="4">
<label shadow="#000000" size="14" weight="bold" wrap="1" color="#aaffcc" translation="WELCOME.GRAB_ONE_HAND"/>
<label shadow="#000000" size="14" weight="bold" wrap="1" color="#ccaaff" translation="WELCOME.GRAB_BOTH_HANDS"/>
<div align_items="center" gap="8">
<sprite src_builtin="dashboard/info.svg" min_width="48" min_height="48" max_width="48" max_height="48" color="#ffff00"/>
<label shadow="#000000" size="16" weight="bold" wrap="1" color="#ffff00" translation="WELCOME.CENTER_MARKER"/>
</div>
<WelcomeVideo src_builtin="@/video/onboarding_center_marker.ivf" aspect_ratio="1.33333">
<PageTitle icon="@/dashboard/panorama.svg" translation="WELCOME.MOVING_YOUR_SET"/>
<div position="relative" align_self="end" padding="16" flex_direction="column" gap="4">
<label shadow="#000000" size="14" weight="bold" wrap="1" color="#aaffcc" translation="WELCOME.GRAB_ONE_HAND"/>
<label shadow="#000000" size="14" weight="bold" wrap="1" color="#ccaaff" translation="WELCOME.GRAB_BOTH_HANDS"/>
<div align_items="center" gap="8">
<sprite src_builtin="@/dashboard/info.svg" min_width="48" min_height="48" max_width="48" max_height="48" color="#ffff00"/>
<label shadow="#000000" size="16" weight="bold" wrap="1" color="#ffff00" translation="WELCOME.CENTER_MARKER"/>
</div>
</div>
</Video>
</WelcomeVideo>
</elements>
</layout>
@@ -1,9 +1,9 @@
<layout>
<layout version="2">
<include src_builtin="welcome_common.xml"/>
<elements>
<div flex_direction="row" align_items="center">
<image src_builtin="dashboard/check_3d.png" width="256" height="256"/>
<image src_builtin="@/dashboard/check_3d.png" width="256" height="256"/>
<div flex_direction="column" gap="16" max_width="480">
<TextDescBig translation="WELCOME.ALL_SET" color="tertiary"/>
@@ -12,14 +12,14 @@
<label size="16" wrap="1" translation="WELCOME.BASICS"/>
<label size="16" wrap="1" translation="WELCOME.FEATURES_DOCUMENTATION"/>
<Button id="btn_wayvr_org" align_self="baseline" min_height="32">
<sprite src_builtin="dashboard/globe.svg" width="24" height="24" margin="8"/>
<sprite src_builtin="@/dashboard/globe.svg" width="24" height="24" margin="8"/>
<label size="18" weight="bold" text="wayvr.org" margin_right="8" />
</Button>
<rectangle color="#FFFFFF33" width="100%" min_height="2"/>
<Button id="btn_home_screen" min_height="48" >
<sprite src_builtin="dashboard/check.svg" width="32" height="32" margin="8"/>
<sprite src_builtin="@/dashboard/check.svg" width="32" height="32" margin="8"/>
<label color="on_background" size="20" weight="bold" translation="WELCOME.FINISH_TUTORIAL" margin_right="8" />
</Button>
</div>
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<template name="Subtext">
<div flex_direction="row" gap="8" max_width="100%">
<label weight="bold" text="${title}" wrap="1" />
@@ -10,8 +10,8 @@
<sprite src_ext="${path}" width="96" height="96" />
</template>
<include src="../t_separator.xml" />
<include src="../t_group_box.xml" />
<include src="@/gui/t_separator.xml" />
<include src="@/gui/t_group_box.xml" />
<elements>
<div flex_direction="row" gap="16" flex_grow="1">
@@ -45,15 +45,15 @@
<CheckBox id="cb_autostart" translation="APP_LAUNCHER.AUTOSTART" align_self="baseline"/>
<div flex_direction="row" align_items="end" justify_content="center" gap="8" margin_top="8">
<Button id="btn_unpin" color="danger" padding_left="8" padding_right="8" round="8" min_height="40">
<sprite src_builtin="dashboard/heart_minus.svg" width="32" height="32" />
<sprite src_builtin="@/dashboard/heart_minus.svg" width="32" height="32" />
<label translation="REMOVE_FROM_FAVOURITES" weight="bold" size="17" />
</Button>
<Button id="btn_pin" color="secondary" padding_left="8" padding_right="8" round="8" min_height="40" tooltip="ADD_TO_FAVOURITES_HINT">
<sprite src_builtin="dashboard/heart_plus.svg" width="32" height="32" />
<sprite src_builtin="@/dashboard/heart_plus.svg" width="32" height="32" />
<label translation="ADD_TO_FAVOURITES" weight="bold" size="17" />
</Button>
<Button id="btn_launch" color="primary" padding_left="8" padding_right="8" round="8" min_width="200" min_height="40">
<sprite src_builtin="dashboard/play.svg" width="32" height="32" />
<sprite src_builtin="@/dashboard/play.svg" width="32" height="32" />
<label translation="APP_LAUNCHER.LAUNCH" weight="bold" size="17" />
</Button>
</div>
@@ -1,9 +1,9 @@
<layout>
<include src_builtin="../t_group_box.xml" />
<layout version="2">
<include src_builtin="@/gui/t_group_box.xml" />
<!-- device_name, device_icon -->
<template name="DeviceSlider">
<rectangle macro="group_box">
<GroupBox>
<div width="100%" align_items="center" justify_content="center" gap="8">
<sprite src_builtin="${device_icon}" width="16" height="16" color="on_background" />
<label text="${device_name}" margin_right="8" size="12" weight="bold" color="on_background" />
@@ -13,23 +13,23 @@
<Button sprite_src_builtin="${volume_icon}" id="btn_mute" width="32" />
<Slider id="slider" flex_grow="1" height="16" min_value="0" max_value="150" margin_left="8" />
</div>
</rectangle>
</GroupBox>
</template>
<!-- card_name, profile_name -->
<template name="Card">
<rectangle macro="group_box">
<GroupBox>
<div width="100%" align_items="center" justify_content="center">
<label text="${card_name}" size="12" weight="bold" color="on_background" />
</div>
<Button id="btn_card" text="${profile_name}" width="100%" height="32" />
</rectangle>
</GroupBox>
</template>
<template name="SelectAudioProfileText">
<div align_items="center" gap="8">
<Button width="48" height="32" id="btn_back">
<sprite src_builtin="dashboard/back.svg" width="24" height="24" color="on_background" />
<sprite src_builtin="@/dashboard/back.svg" width="24" height="24" color="on_background" />
</Button>
<label translation="AUDIO.SELECT_AUDIO_CARD_PROFILE" size="14" weight="bold" />
</div>
@@ -55,16 +55,16 @@
<div flex_direction="row" gap="4">
<Button
id="btn_auto"
sprite_src_builtin="dashboard/magic_wand.svg"
sprite_src_builtin="@/dashboard/magic_wand.svg"
min_width="32"
tooltip="AUDIO.AUTO_SWITCH_TO_VR_AUDIO"
color="primary"
sprite_color="on_primary"
tooltip_side="right" />
<BottomButton id="btn_sinks" src_builtin="dashboard/volume.svg" translation="AUDIO.SPEAKERS" />
<BottomButton id="btn_sources" src_builtin="dashboard/microphone.svg" translation="AUDIO.MICROPHONES" />
<BottomButton id="btn_cards" src_builtin="dashboard/cpu.svg" translation="AUDIO.CARDS" />
<BottomButton id="btn_sinks" src_builtin="@/dashboard/volume.svg" translation="AUDIO.SPEAKERS" />
<BottomButton id="btn_sources" src_builtin="@/dashboard/microphone.svg" translation="AUDIO.MICROPHONES" />
<BottomButton id="btn_cards" src_builtin="@/dashboard/cpu.svg" translation="AUDIO.CARDS" />
</div>
</div>
</elements>
+6 -6
View File
@@ -1,8 +1,8 @@
<layout>
<include src="../t_group_box.xml" />
<layout version="2">
<include src="@/gui/t_group_box.xml" />
<!-- used at runtime [!!!] -->
<include src="../t_dropdown_button.xml" />
<include src="@/gui/t_dropdown_button.xml" />
<!-- id, min, max, step, value, value2, tooltip -->
<template name="ThresholdSlider">
@@ -14,7 +14,7 @@
<rectangle macro="group_box" id="${id}">
<!-- top row -->
<div flex_direction="row" gap="8" align_items="center">
<sprite src_builtin="dashboard/controller.svg" width="24" height="24" color="on_background"/>
<sprite src_builtin="@/dashboard/controller.svg" width="24" height="24" color="on_background"/>
<label translation="${translation}" color="primary" weight="bold" size="14" />
</div>
<!-- filled-in at runtime -->
@@ -27,8 +27,8 @@
<div id="list_parent" flex_direction="column" gap="6" width="100%"></div>
</div>
<rectangle color="background_contrast" flex_direction="row" gap="8" justify_content="end" padding="8">
<Button id="btn_cancel" sprite_src_builtin="dashboard/cancel.svg" min_width="100" height="32" translation="APP_SETTINGS.CANCEL" />
<Button id="btn_save" sprite_src_builtin="dashboard/check.svg" min_width="100" height="32" translation="APP_SETTINGS.SAVE" />
<Button id="btn_cancel" sprite_src_builtin="@/dashboard/cancel.svg" min_width="100" height="32" translation="APP_SETTINGS.CANCEL" />
<Button id="btn_save" sprite_src_builtin="@/dashboard/check.svg" min_width="100" height="32" translation="APP_SETTINGS.SAVE" />
</rectangle>
</div>
</elements>
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<template name="ColorPaletteButton">
<Button id="${id}" width="350" flex_direction="column" justify_content="space_around" tooltip="${tooltip}" tooltip_side="bottom"
color="${background}" hover_color="${background_variant}" border_color="${outline}" hover_border_color="${highlight}" padding="16" margin="4" >
+1 -1
View File
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<template name="DialogBoxButton">
<Button id="btn" translation="CLOSE_WINDOW" align_self="start" sprite_src_builtin="${icon}"/>
</template>
@@ -1,8 +1,8 @@
<layout>
<include src="../t_separator.xml"/>
<layout version="2">
<include src="@/gui/t_separator.xml"/>
<template name="btn_close">
<Button id="btn" translation="CLOSE_WINDOW" align_self="start" sprite_src_builtin="dashboard/check.svg"/>
<Button id="btn" translation="CLOSE_WINDOW" align_self="start" sprite_src_builtin="@/dashboard/check.svg"/>
</template>
<elements>
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<elements>
<div flex_direction="row" gap="16" align_items="center">
<div id="cover_art_parent" />
@@ -10,7 +10,7 @@
</div>
<label id="label_description" wrap="1" text="No description available" />
<Button id="btn_launch" align_self="baseline" color="primary" border_color="primary(rgb-mult-0.5)" padding_top="4" padding_bottom="4" round="8" padding_right="12" min_width="200" min_height="40">
<sprite src_builtin="dashboard/play.svg" width="32" height="32" />
<sprite src_builtin="@/dashboard/play.svg" width="32" height="32" />
<label text="Launch" weight="bold" size="17" />
</Button>
</div>
+4 -4
View File
@@ -1,12 +1,12 @@
<layout>
<layout version="2">
<elements>
<div flex_direction="column" padding_top="8" padding_bottom="8">
<div id="list_parent" gap="8" flex_direction="row" flex_wrap="wrap" justify_content="center" />
</div>
<div align_items="center" justify_content="center" gap="16">
<Button id="btn_prev" sprite_src_builtin="dashboard/arrow_left.svg" width="32" height="32" />
<Button id="btn_prev" sprite_src_builtin="@/dashboard/arrow_left.svg" width="32" height="32" />
<label id="label_page" text="Page X" weight="bold" />
<Button id="btn_next" sprite_src_builtin="dashboard/arrow_right.svg" width="32" height="32" />
<Button id="btn_next" sprite_src_builtin="@/dashboard/arrow_right.svg" width="32" height="32" />
</div>
</elements>
</layout>
</layout>
@@ -1,8 +1,8 @@
<layout>
<layout version="2">
<!-- id, text -->
<template name="InputProfileButton">
<Button id="${id}" width="350" gap="8" justify_content="start" >
<sprite margin_left="8" src_builtin="dashboard/controller.svg" min_width="24" min_height="24" />
<sprite margin_left="8" src_builtin="@/dashboard/controller.svg" min_width="24" min_height="24" />
<label text="${text}" weight="bold"/>
</Button>
</template>
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<elements>
<div
consume_mouse_events="1"
@@ -23,7 +23,7 @@
<div gap="16" align_items="center">
<!-- Back button -->
<Button id="but_back" width="48" height="48" color="on_background_contrast(transparent)" border_color="on_background_contrast(transparent)">
<sprite src_builtin="dashboard/back.svg" width="24" height="24" color="on_background_contrast" />
<sprite src_builtin="@/dashboard/back.svg" width="24" height="24" color="on_background_contrast" />
</Button>
<!-- Title -->
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<!--
parameters:
@@ -12,7 +12,7 @@
<Button id="button" sprite_src_builtin="${sprite}" text="${text}"/>
</template>
<include src="../t_separator.xml"/>
<include src="@/gui/t_separator.xml"/>
<elements>
<div gap="8" flex_direction="column" min_width="100%" overflow_y="scroll">
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<elements>
<div id="list" gap="8" flex_wrap="wrap" align_self="baseline">
<!-- filled-in at runtime -->
@@ -1,20 +1,20 @@
<layout>
<include src="../t_group_box.xml" />
<layout version="2">
<include src="@/gui/t_group_box.xml" />
<template name="RunningGameCell">
<rectangle macro="group_box" flex_direction="row">
<Button id="btn_stop" sprite_src_builtin="dashboard/remove_circle.svg" tooltip="PROCESS.STOP" />
<Button id="btn_kill" sprite_src_builtin="dashboard/knife.svg" tooltip="PROCESS.FORCE_KILL" />
<GroupBox>
<Button id="btn_stop" sprite_src_builtin="@/dashboard/remove_circle.svg" tooltip="PROCESS.STOP" />
<Button id="btn_kill" sprite_src_builtin="@/dashboard/knife.svg" tooltip="PROCESS.FORCE_KILL" />
<label id="label_name" weight="bold" />
</rectangle>
</GroupBox>
</template>
<elements>
<div align_items="center" gap="8">
<Button id="btn_refresh" tooltip="REFRESH" width="32" height="32" sprite_src_builtin="dashboard/refresh.svg" />
<sprite src_builtin="dashboard/cpu.svg" width="24" height="24" />
<Button id="btn_refresh" tooltip="REFRESH" width="32" height="32" sprite_src_builtin="@/dashboard/refresh.svg" />
<sprite src_builtin="@/dashboard/cpu.svg" width="24" height="24" />
<label translation="GAME_LIST.RUNNING_GAMES_LIST" />
</div>
<div id="list_parent" gap="8" />
</elements>
</layout>
</layout>
@@ -1,9 +1,9 @@
<layout>
<layout version="2">
<elements>
<div flex_direction="column" gap="8" width="100%" align_items="center">
<div flex_direction="row" gap="4" align_self="end">
<Button id="btn_refresh" tooltip="RELOAD_FROM_DISK" width="32" height="32" sprite_src_builtin="dashboard/refresh.svg" />
<Button id="btn_download_skymaps" height="32" translation="APP_SETTINGS.BROWSE_ONLINE_CATALOG" sprite_src_builtin="dashboard/download.svg"/>
<Button id="btn_refresh" tooltip="RELOAD_FROM_DISK" width="32" height="32" sprite_src_builtin="@/dashboard/refresh.svg" />
<Button id="btn_download_skymaps" height="32" translation="APP_SETTINGS.BROWSE_ONLINE_CATALOG" sprite_src_builtin="@/dashboard/download.svg"/>
</div>
<div id="list_parent" gap="8" flex_direction="row" flex_wrap="wrap" />
</div>
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<!--
ids:
@@ -1,9 +0,0 @@
<layout>
<include src="../t_group_box.xml" />
<elements>
<rectangle macro="group_box" flex_direction="row" align_items="center">
<div id="list_parent" gap="8" flex_direction="row" flex_wrap="wrap" flex_grow="1" />
</rectangle>
</elements>
</layout>
@@ -1,16 +0,0 @@
<layout>
<include src="../t_group_box.xml" />
<elements>
<div gap="16" flex_direction="column" width="100%" justify_self="center" align_items="center" justify_content="center">
<rectangle macro="group_box" align_items="center">
<div id="window_parent" />
<div gap="8">
<Button id="btn_show_hide" text="showhide" sprite_src_builtin="dashboard/eye.svg" />
<Button id="btn_close" translation="CLOSE_WINDOW" sprite_src_builtin="dashboard/remove_circle.svg" />
<Button id="btn_kill" translation="TERMINATE_PROCESS" sprite_src_builtin="dashboard/remove_circle.svg" />
</div>
</rectangle>
</div>
</elements>
</layout>
+6 -2
View File
@@ -243,7 +243,11 @@
"GRID_OPACITY_HELP": "Deckkraft des Bodengitters, wenn die Skymap aktiviert ist",
"XWAYLAND_BY_DEFAULT": "Apps standardmäßig im Kompatibilitätsmodus starten",
"SAVE": "Speichern",
"CANCEL": "Abbrechen"
"CANCEL": "Abbrechen",
"STATISTICS": "Statistiken",
"ROTATIONS": "HMD-Rotationen",
"SESSION_TIME": "Sitzungszeit",
"LENS_SEPARATION_MM": "Linsenabstand (mm)"
},
"APPLICATION_LAUNCHER": "Programmstarter",
"APPLICATION_STARTED": "Anwendung gestartet",
@@ -346,4 +350,4 @@
"ADD_TO_FAVOURITES_HINT": "Voreinstellung speichern und an die App-Schublade anheften",
"REMOVE_FROM_FAVOURITES": "Aus angehefteten Anwendungen entfernen",
"EMPTY": "Leer"
}
}
+4
View File
@@ -132,6 +132,7 @@ APP_SETTINGS.INPUT_PROFILES,Change Input Bindings,Button label in Settings > Con
APP_SETTINGS.INPUT_PROFILES_HELP,OpenXR controller input bindings,Tooltip for the Change Input Bindings button.
APP_SETTINGS.INVERT_SCROLL_DIRECTION_X,Invert horizontal scroll direction,Checkbox label in Settings > Features tab. Inverts the horizontal scroll direction.
APP_SETTINGS.INVERT_SCROLL_DIRECTION_Y,Invert vertical scroll direction,Checkbox label in Settings > Features tab. Inverts the vertical scroll direction.
APP_SETTINGS.LENS_SEPARATION_MM,Lens separation (mm),"Distance between lens, in milimeters."
APP_SETTINGS.KEYBOARD_MIDDLE_CLICK,Keyboard middle click,Dropdown label in Settings > Features tab. Selects the modifier key used for middle-click when typing with the laser pointer.
APP_SETTINGS.KEYBOARD_MIDDLE_CLICK_HELP,"Modifier to use when typing
with purple laser",Tooltip for the keyboard middle-click setting.
@@ -225,6 +226,9 @@ APP_SETTINGS.SPACE_GRAVITY_GROUND_FRICTION_HELP,"Amount of friction slowing you
APP_SETTINGS.SPACE_GRAVITY_FLOOR_HEIGHT,Floor height,Setting in the space gravity physics panel. The Y position where the virtual floor is.
APP_SETTINGS.SPACE_GRAVITY_FLOOR_HEIGHT_HELP,The Y position where the floor is. Gravity stops when you reach this height.,Tooltip for the floor height setting.
APP_SETTINGS.SPACE_ROTATE_UNLOCKED,Allow space rotate on all axes,"Checkbox in Settings > Space Drag tab. Unlocks space rotate to work on all axes. ""Space"" in this context refers to ""Playspace"" which was translated as ""${DEFINITIONS.PLAYSPACE}""."
APP_SETTINGS.ROTATIONS,HMD rotations,Number of full 360-degree rotations of the HMD since startup. Shown in Settings > Statistics.
APP_SETTINGS.SESSION_TIME,Session time,Time since WayVR started. Shown in Settings > Statistics.
APP_SETTINGS.STATISTICS,Statistics,Category header in Settings.
APP_SETTINGS.TROUBLESHOOTING,Troubleshooting,"Category header in Settings. Groups diagnostic/reset actions like clearing tokens, wiping config, and restarting."
APP_SETTINGS.UI_GRADIENT_INTENSITY,UI Gradient intensity,Slider in Settings > Look & Feel tab. Controls the intensity of gradient effects on the UI (range 0.0-1.0).
APP_SETTINGS.UPRIGHT_SCREEN_FIX,Upright screen fix,Checkbox in Settings > Miscellaneous tab. Fixes upright screen orientation on some desktop environments.
1 DEFINITIONS.ANCHORED Anchored A movement option that makes this window move together with the rest of the workspace. Emphasize the "moving together" part as opposed to "not moving at all".
132 APP_SETTINGS.LEFT_HANDED_MOUSE_HELP APP_SETTINGS.LEFT_HANDED_MOUSE Use this if mouse buttons are swapped Left-handed mouse Tooltip for the left-handed mouse checkbox. Checkbox label in Settings > Features tab. Swaps mouse buttons for left-handed users.
133 APP_SETTINGS.LONG_PRESS_DURATION APP_SETTINGS.LEFT_HANDED_MOUSE_HELP Long press duration Use this if mouse buttons are swapped Setting in Settings > Features tab. Controls how long a press must be held to register as a long press. Tooltip for the left-handed mouse checkbox.
134 APP_SETTINGS.LOOK_AND_FEEL APP_SETTINGS.LONG_PRESS_DURATION Look & Feel Long press duration Category header in Settings. Groups visual/customization settings like language, opacity, animation speed, color palettes. Setting in Settings > Features tab. Controls how long a press must be held to register as a long press.
135 APP_SETTINGS.LOOK_AND_FEEL Look & Feel Category header in Settings. Groups visual/customization settings like language, opacity, animation speed, color palettes.
136 APP_SETTINGS.MISC Miscellaneous Category header in Settings. Groups troubleshooting and system-level settings like capture method, input emulation, xwayland.
137 APP_SETTINGS.NOTIFICATIONS_ENABLED Enable notifications Checkbox label in Settings > Features tab. Enables or disables system notifications within WayVR.
138 APP_SETTINGS.NOTIFICATIONS_SOUND_ENABLED Notification sounds Checkbox label in Settings > Features tab. Enables or disables sound effects for notifications.
226 AUDIO.CARDS APPLICATION_STARTED Cards Application started Button label in the audio settings popup for selecting audio card profiles. Toast notification shown after a successful app launch.
227 AUDIO.FAILED_TO_SWITCH_MICROPHONE APPLICATIONS Failed to switch microphone Applications Error toast shown when switching to a VR microphone fails. Tab label in the dashboard sidebar for the Apps tab.
228 AUDIO.MICROPHONE_SET_SUCCESSFULLY AUDIO.AUTO_SWITCH_TO_VR_AUDIO Microphone set successfully Auto-switch to VR audio Toast notification after successfully switching the microphone. Tooltip on the auto-switch audio button in the audio settings popup.
229 AUDIO.CARDS Cards Button label in the audio settings popup for selecting audio card profiles.
230 AUDIO.FAILED_TO_SWITCH_MICROPHONE Failed to switch microphone Error toast shown when switching to a VR microphone fails.
231 AUDIO.MICROPHONE_SET_SUCCESSFULLY Microphone set successfully Toast notification after successfully switching the microphone.
232 AUDIO.MICROPHONES Microphones Button label in the audio settings popup for selecting microphone sources.
233 AUDIO.NO_VR_MICROPHONE_SWITCH_MANUALLY No VR microphone found. Switch it manually. Toast shown when no VR microphone is detected and manual switching is needed.
234 AUDIO.NO_VR_SPEAKERS_FOUND_SWITCH_MANUALLY No VR speakers found. Switch them manually. Toast shown when no VR speakers are detected after auto-switch.
+6 -2
View File
@@ -146,6 +146,7 @@
"INPUT_PROFILES_HELP": "OpenXR controller input bindings",
"INVERT_SCROLL_DIRECTION_X": "Invert horizontal scroll direction",
"INVERT_SCROLL_DIRECTION_Y": "Invert vertical scroll direction",
"LENS_SEPARATION_MM": "Lens separation (mm)",
"KEYBOARD_MIDDLE_CLICK": "Keyboard middle click",
"KEYBOARD_MIDDLE_CLICK_HELP": "Modifier to use when typing\nwith purple laser",
"KEYBOARD_SOUND_ENABLED": "Keyboard sounds",
@@ -223,6 +224,9 @@
"SPACE_GRAVITY_FLOOR_HEIGHT": "Floor height",
"SPACE_GRAVITY_FLOOR_HEIGHT_HELP": "The Y position where the floor is. Gravity stops when you reach this height.",
"SPACE_ROTATE_UNLOCKED": "Allow space rotate on all axes",
"ROTATIONS": "HMD rotations",
"SESSION_TIME": "Session time",
"STATISTICS": "Statistics",
"TROUBLESHOOTING": "Troubleshooting",
"UI_GRADIENT_INTENSITY": "UI Gradient intensity",
"UPRIGHT_SCREEN_FIX": "Upright screen fix",
@@ -274,7 +278,7 @@
"CURRENT_SUPPORTERS": "Current Supporters",
"BROUGHT_TO_YOU_VARIANTS_OFTEN": "Supported by {USER}|Special thanks to {USER}|Sponsored by {USER}|Backed by {USER}|Driven by community members like {USER}|Made possible by {USER}|Sustained by {USER}|Contributed by {USER}|Funded by {USER}",
"BROUGHT_TO_YOU_VARIANTS_RARE": "Coffee provided by {USER}|Fuelled by {USER}|Shoutout to {USER}!|Keeping us going: {USER}|Helping us grow: {USER}|Keeping the servers running: {USER}|With gratitude to {USER}|Powered by {USER}|Supported by friends like {USER}",
"BROUGHT_TO_YOU_VARIANTS_VERY_RARE": "Supported by legends like {USER}|Caffeine supplied by {USER}|A true legend: {USER}|Our hero of the day: {USER}|An absolute superstar: {USER}|Paying for the electricity bill: {USER}|Leading the way: {USER}|Caffeine-to-code converter provided by {USER}|Keeping the production stable: {USER}|The one and only: {USER}|Passing dmabuf buffers: {USER}"
"BROUGHT_TO_YOU_VARIANTS_VERY_RARE": "Supported by legends like {USER}|Caffeine supplied by {USER}|A true legend: {USER}|Our hero of the day: {USER}|An absolute superstar: {USER}|Paying for the electricity bill: {USER}|The savior of our sanity: {USER}|Leading the way: {USER}|Caffeine-to-code converter provided by {USER}|Keeping the production stable: {USER}|The one and only: {USER}|Passing dmabuf buffers: {USER}"
},
"DOWNLOAD": "Download",
"DOWNLOADER": "Downloader",
@@ -346,4 +350,4 @@
"ADD_TO_FAVOURITES_HINT": "Save preset and pin it to the app drawer",
"REMOVE_FROM_FAVOURITES": "Remove from pinned apps",
"EMPTY": "Empty"
}
}
+6 -2
View File
@@ -243,7 +243,11 @@
"GRID_OPACITY_HELP": "Opacidad de la rejilla del suelo cuando el skymap está activado",
"XWAYLAND_BY_DEFAULT": "Ejecutar apps en modo de compatibilidad por defecto",
"SAVE": "Guardar",
"CANCEL": "Cancelar"
"CANCEL": "Cancelar",
"STATISTICS": "Estadísticas",
"ROTATIONS": "Rotaciones del HMD",
"SESSION_TIME": "Tiempo de sesión",
"LENS_SEPARATION_MM": "Separación de lentes (mm)"
},
"APPLICATION_LAUNCHER": "Lanzador de aplicaciones",
"APPLICATION_STARTED": "Aplicación iniciada",
@@ -346,4 +350,4 @@
"ADD_TO_FAVOURITES_HINT": "Guardar ajuste y fijarlo al cajón de aplicaciones",
"REMOVE_FROM_FAVOURITES": "Quitar de aplicaciones fijadas",
"EMPTY": "Vacío"
}
}
+6 -2
View File
@@ -243,7 +243,11 @@
"GRID_OPACITY_HELP": "Opacità della griglia del pavimento quando lo skymap è attivo",
"XWAYLAND_BY_DEFAULT": "Avvia le app in modalità compatibilità per impostazione predefinita",
"SAVE": "Salva",
"CANCEL": "Annulla"
"CANCEL": "Annulla",
"STATISTICS": "Statistiche",
"ROTATIONS": "Rotazioni HMD",
"SESSION_TIME": "Tempo sessione",
"LENS_SEPARATION_MM": "Distanza lenti (mm)"
},
"APPLICATION_LAUNCHER": "Avvio applicazioni",
"APPLICATION_STARTED": "Applicazione avviata",
@@ -346,4 +350,4 @@
"ADD_TO_FAVOURITES_HINT": "Salva il preset e fissalo al cassetto delle app",
"REMOVE_FROM_FAVOURITES": "Rimuovi dalle app fissate",
"EMPTY": "Vuoto"
}
}
+6 -2
View File
@@ -243,7 +243,11 @@
"GRID_OPACITY_HELP": "スカイマップ有効時のフロアグリッドの不透明度",
"XWAYLAND_BY_DEFAULT": "デフォルトで互換モードでアプリを起動",
"SAVE": "保存",
"CANCEL": "キャンセル"
"CANCEL": "キャンセル",
"STATISTICS": "統計",
"ROTATIONS": "HMD回転数",
"SESSION_TIME": "セッション時間",
"LENS_SEPARATION_MM": "レンズ間隔 (mm)"
},
"APPLICATION_LAUNCHER": "アプリランチャー",
"APPLICATION_STARTED": "アプリが起動しました",
@@ -346,4 +350,4 @@
"ADD_TO_FAVOURITES_HINT": "プリセットを保存し、アプリドロワーに固定する",
"REMOVE_FROM_FAVOURITES": "固定済みアプリから外す",
"EMPTY": "なし"
}
}
+6 -2
View File
@@ -243,7 +243,11 @@
"GRID_OPACITY_HELP": "Przezroczystość siatki podłogi przy włączonym Skymapie",
"XWAYLAND_BY_DEFAULT": "Uruchamiaj aplikacje domyślnie w trybie kompatybilności",
"SAVE": "Zapisz",
"CANCEL": "Anuluj"
"CANCEL": "Anuluj",
"STATISTICS": "Statystyki",
"ROTATIONS": "Obroty HMD",
"SESSION_TIME": "Czas sesji",
"LENS_SEPARATION_MM": "Rozstaw soczewek (mm)"
},
"APPLICATION_LAUNCHER": "Launcher aplikacji",
"APPLICATION_STARTED": "Uruchomiono aplikację",
@@ -346,4 +350,4 @@
"ADD_TO_FAVOURITES_HINT": "Zapisz preset i przypnij go do szuflady aplikacji",
"REMOVE_FROM_FAVOURITES": "Usuń z przypiętych aplikacji",
"EMPTY": "Puste"
}
}
+6 -2
View File
@@ -243,7 +243,11 @@
"GRID_OPACITY_HELP": "启用天空盒时地面网格的不透明度",
"XWAYLAND_BY_DEFAULT": "默认以兼容模式运行应用程序",
"SAVE": "保存",
"CANCEL": "取消"
"CANCEL": "取消",
"STATISTICS": "统计数据",
"ROTATIONS": "HMD 旋转次数",
"SESSION_TIME": "会话时间",
"LENS_SEPARATION_MM": "瞳距 (mm)"
},
"APPLICATION_LAUNCHER": "应用启动器",
"APPLICATION_STARTED": "应用程序已启动",
@@ -346,4 +350,4 @@
"ADD_TO_FAVOURITES_HINT": "保存预设并将其固定到应用抽屉",
"REMOVE_FROM_FAVOURITES": "从固定应用中移除",
"EMPTY": "暂无"
}
}
+6 -3
View File
@@ -4,7 +4,7 @@ use chrono::Timelike;
use glam::Vec2;
use strum::EnumCount;
use wgui::{
assets::{AssetPath, AssetProvider},
assets::{AssetPathRef, AssetProvider},
components::button::ComponentButton,
event::{CallbackDataCommon, StyleSetRequest},
font_config::WguiFontConfig,
@@ -151,7 +151,7 @@ impl<T: 'static> Frontend<T> {
let (layout, state) = wgui::parser::new_layout_from_assets(
&ParseDocumentParams {
globals: globals.clone(),
path: AssetPath::BuiltIn("gui/dashboard.xml"),
path: AssetPathRef::BuiltIn("gui/dashboard.xml"),
extra: Default::default(),
},
LayoutParams {
@@ -401,7 +401,10 @@ impl<T: 'static> Frontend<T> {
.cast_as::<WidgetSprite>(self.widgets.id_sprite_titlebar_icon)?;
sprite.set_content(
common.alterables,
Some(CustomGlyphData::from_assets(&self.globals, AssetPath::BuiltIn(icon))?),
Some(CustomGlyphData::from_assets(
&self.globals,
AssetPathRef::BuiltIn(icon),
)?),
);
}
+3 -3
View File
@@ -1,6 +1,6 @@
use std::{cell::RefCell, collections::VecDeque, marker::PhantomData, rc::Rc};
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
components::button::{ButtonClickCallback, ComponentButton},
globals::WguiGlobals,
i18n::Translation,
@@ -170,7 +170,7 @@ fn on_app_click(
fn doc_params(globals: WguiGlobals) -> ParseDocumentParams<'static> {
ParseDocumentParams {
globals,
path: AssetPath::BuiltIn("gui/tab/apps.xml"),
path: AssetPathRef::BuiltIn("gui/tab/apps.xml"),
extra: Default::default(),
}
}
@@ -359,7 +359,7 @@ fn mount_entry<T>(
params.insert(
"src",
if entry.icon_path.is_none() {
"dashboard/terminal.svg"
"@/dashboard/terminal.svg"
} else {
""
},
+2 -2
View File
@@ -1,7 +1,7 @@
use std::{marker::PhantomData, rc::Rc};
use wgui::{
assets::AssetPath,
assets::{AssetPathRef},
components::button::ComponentButton,
globals::WguiGlobals,
layout::{Layout, WidgetID},
@@ -53,7 +53,7 @@ impl<T> Tab<T> for TabDonate<T> {
fn doc_params(globals: &WguiGlobals) -> ParseDocumentParams<'_> {
ParseDocumentParams {
globals: globals.clone(),
path: AssetPath::BuiltIn("gui/tab/donate.xml"),
path: AssetPathRef::BuiltIn("gui/tab/donate.xml"),
extra: Default::default(),
}
}
+2 -2
View File
@@ -1,7 +1,7 @@
use std::marker::PhantomData;
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
layout::WidgetID,
parser::{Fetchable, ParseDocumentParams, ParserState},
};
@@ -53,7 +53,7 @@ impl<T> TabGames<T> {
let state = wgui::parser::parse_from_assets(
&ParseDocumentParams {
globals: globals.clone(),
path: AssetPath::BuiltIn("gui/tab/games.xml"),
path: AssetPathRef::BuiltIn("gui/tab/games.xml"),
extra: Default::default(),
},
&mut frontend.layout,
+2 -2
View File
@@ -2,7 +2,7 @@ use std::{marker::PhantomData, rc::Rc};
use wgui::{
animation::{Animation, AnimationEasing},
assets::AssetPath,
assets::AssetPathRef,
color::{WguiColor, WguiColorName, WguiNamedColor},
components::{ComponentTrait, button::ComponentButton},
event::CallbackDataCommon,
@@ -142,7 +142,7 @@ impl<T> TabHome<T> {
let state = wgui::parser::parse_from_assets(
&ParseDocumentParams {
globals: frontend.layout.state.globals.clone(),
path: AssetPath::BuiltIn("gui/tab/home.xml"),
path: AssetPathRef::BuiltIn("gui/tab/home.xml"),
extra: Default::default(),
},
&mut frontend.layout,
+5 -5
View File
@@ -1,7 +1,7 @@
use std::{collections::HashMap, marker::PhantomData, rc::Rc};
use wgui::{
assets::AssetPath,
assets::{AssetPathRef},
components::{
bar_graph::{ComponentBarGraph, ValueCell},
button::ComponentButton,
@@ -229,7 +229,7 @@ impl<T> Tab<T> for TabMonado<T> {
fn doc_params_monado(globals: &'_ WguiGlobals) -> ParseDocumentParams<'_> {
ParseDocumentParams {
globals: globals.clone(),
path: AssetPath::BuiltIn("gui/tab/monado.xml"),
path: AssetPathRef::BuiltIn("gui/tab/monado.xml"),
extra: Default::default(),
}
}
@@ -237,7 +237,7 @@ fn doc_params_monado(globals: &'_ WguiGlobals) -> ParseDocumentParams<'_> {
fn doc_params_tab_process_list(globals: &'_ WguiGlobals) -> ParseDocumentParams<'_> {
ParseDocumentParams {
globals: globals.clone(),
path: AssetPath::BuiltIn("gui/tab/monado_tab_process_list.xml"),
path: AssetPathRef::BuiltIn("gui/tab/monado_tab_process_list.xml"),
extra: Default::default(),
}
}
@@ -245,7 +245,7 @@ fn doc_params_tab_process_list(globals: &'_ WguiGlobals) -> ParseDocumentParams<
fn doc_params_tab_general_settings(globals: &'_ WguiGlobals) -> ParseDocumentParams<'_> {
ParseDocumentParams {
globals: globals.clone(),
path: AssetPath::BuiltIn("gui/tab/monado_tab_general_settings.xml"),
path: AssetPathRef::BuiltIn("gui/tab/monado_tab_general_settings.xml"),
extra: Default::default(),
}
}
@@ -253,7 +253,7 @@ fn doc_params_tab_general_settings(globals: &'_ WguiGlobals) -> ParseDocumentPar
fn doc_params_tab_debug_timings(globals: &'_ WguiGlobals) -> ParseDocumentParams<'_> {
ParseDocumentParams {
globals: globals.clone(),
path: AssetPath::BuiltIn("gui/tab/monado_tab_debug_timings.xml"),
path: AssetPathRef::BuiltIn("gui/tab/monado_tab_debug_timings.xml"),
extra: Default::default(),
}
}
+14
View File
@@ -35,6 +35,20 @@ pub fn options_category(
mp.parser_state.get_widget_id(&id)
}
pub fn options_stat_row(mp: &mut MacroParams, parent: WidgetID, translation: &str) -> anyhow::Result<WidgetID> {
let id = mp.idx.to_string();
mp.idx += 1;
let mut params = TemplateParams::new();
params.insert("id", &id);
params.insert("translation", translation);
mp.parser_state
.instantiate_template(mp.doc_params, "StatRow", mp.layout, parent, params)?;
mp.parser_state.get_widget_id(&id)
}
pub fn options_checkbox(mp: &mut MacroParams, parent: WidgetID, setting: SettingType) -> anyhow::Result<()> {
let id = mp.idx.to_string();
mp.idx += 1;
+26 -11
View File
@@ -2,7 +2,7 @@ use glam::Vec2;
use std::{marker::PhantomData, rc::Rc, str::FromStr};
use strum::{AsRefStr, EnumProperty, EnumString};
use wgui::{
assets::AssetPath,
assets::{AssetPathRef},
color::WguiColorName,
components::tabs::ComponentTabs,
event::StyleSetRequest,
@@ -23,7 +23,7 @@ use wgui::{
use wlx_common::{
config::GeneralConfig,
config_io::ConfigRoot,
dash_interface::{ConfigChangeKind, DashPlayspaceTask, InterfaceFeats},
dash_interface::{ConfigChangeKind, DashPlayspaceTask, HmdStats, InterfaceFeats},
};
use crate::{
@@ -40,6 +40,7 @@ mod tab_look_and_feel;
mod tab_misc;
mod tab_skybox;
mod tab_space_drag;
mod tab_statistics;
mod tab_troubleshooting;
#[derive(Clone)]
@@ -51,6 +52,7 @@ pub(crate) enum TabNameEnum {
Misc,
Skybox,
SpaceDrag,
Statistics,
Troubleshooting,
}
@@ -64,6 +66,7 @@ impl TabNameEnum {
"misc" => Some(TabNameEnum::Misc),
"skybox" => Some(TabNameEnum::Skybox),
"space_drag" => Some(TabNameEnum::SpaceDrag),
"statistics" => Some(TabNameEnum::Statistics),
"troubleshooting" => Some(TabNameEnum::Troubleshooting),
_ => None,
}
@@ -101,8 +104,12 @@ struct SettingUpdatedParams<'a> {
setting_type: SettingType,
}
struct UpdateExtra {
hmd_stats: HmdStats,
}
trait SettingsTab {
fn update(&mut self, _par: &mut ViewUpdateParams) -> anyhow::Result<()> {
fn update(&mut self, _par: &mut ViewUpdateParams, _extra: &UpdateExtra) -> anyhow::Result<()> {
Ok(())
}
@@ -144,12 +151,17 @@ impl<T> Tab<T> for TabSettings<T> {
if let Some(tab) = &mut self.current_tab {
let mut config_change_kind = None;
tab.update(&mut ViewUpdateParams {
layout: &mut frontend.layout,
executor: &frontend.executor,
general_config: frontend.interface.general_config(data),
config_change_kind: &mut config_change_kind,
})?;
let hmd_stats = frontend.interface.hmd_stats(data);
tab.update(
&mut ViewUpdateParams {
layout: &mut frontend.layout,
executor: &frontend.executor,
general_config: frontend.interface.general_config(data),
config_change_kind: &mut config_change_kind,
},
&UpdateExtra { hmd_stats },
)?;
if let Some(kind) = config_change_kind {
frontend.interface.config_changed(data, kind);
@@ -675,7 +687,7 @@ fn mount_requires_restart(layout: &mut Layout, parent: WidgetID) -> anyhow::Resu
fn doc_params(globals: &'_ WguiGlobals) -> ParseDocumentParams<'_> {
ParseDocumentParams {
globals: globals.clone(),
path: AssetPath::BuiltIn("gui/tab/settings.xml"),
path: AssetPathRef::BuiltIn("gui/tab/settings.xml"),
extra: Default::default(),
}
}
@@ -734,6 +746,9 @@ impl<T> TabSettings<T> {
TabNameEnum::Skybox => {
self.current_tab = Some(Box::new(tab_skybox::State::mount(settings_mount_params)?));
}
TabNameEnum::Statistics => {
self.current_tab = Some(Box::new(tab_statistics::State::mount(settings_mount_params)?));
}
}
Ok(())
@@ -742,7 +757,7 @@ impl<T> TabSettings<T> {
pub fn new(frontend: &mut Frontend<T>, parent_id: WidgetID, data: &mut T) -> anyhow::Result<Self> {
let doc_params = ParseDocumentParams {
globals: frontend.layout.state.globals.clone(),
path: AssetPath::BuiltIn("gui/tab/settings.xml"),
path: AssetPathRef::BuiltIn("gui/tab/settings.xml"),
extra: Default::default(),
};
@@ -18,7 +18,7 @@ impl State {
par.mp,
par.id_parent,
"APP_SETTINGS.AUTOSTART_APPS",
"dashboard/apps.svg",
"@/dashboard/apps.svg",
)?;
// todo: prevent clone
@@ -4,7 +4,7 @@ use wgui::{
components::button::ComponentButton, globals::WguiGlobals, layout::WidgetID, parser::Fetchable, task::Tasks,
};
use crate::tab::settings::{horiz_cell, mount_requires_restart};
use crate::tab::settings::{UpdateExtra, horiz_cell, mount_requires_restart};
use crate::util::popup_manager::PopupHolder;
use crate::{
@@ -29,7 +29,7 @@ pub struct State {
}
impl SettingsTab for State {
fn update(&mut self, par: &mut ViewUpdateParams) -> anyhow::Result<()> {
fn update(&mut self, par: &mut ViewUpdateParams, _extra: &UpdateExtra) -> anyhow::Result<()> {
self.popup_input_profiles.update(par)?;
for task in self.tasks.drain() {
@@ -62,7 +62,7 @@ fn create_input_profiles_button(
let mut params = TemplateParams::new();
params.insert("id", &id);
params.insert("translation", "APP_SETTINGS.INPUT_PROFILES");
params.insert("icon", "dashboard/controller.svg");
params.insert("icon", "@/dashboard/controller.svg");
mp.parser_state
.instantiate_template(mp.doc_params, "ButtonText", mp.layout, id_cell, params)?;
@@ -90,7 +90,7 @@ impl State {
par.mp,
par.id_parent,
"APP_SETTINGS.CONTROLS",
"dashboard/controller.svg",
"@/dashboard/controller.svg",
)?;
if par.feats.xr_backend.is_open_xr() {
create_input_profiles_button(par.mp, c, tasks.clone(), &popup)?;
+13 -8
View File
@@ -16,7 +16,7 @@ use wlx_common::{async_executor::AsyncExecutor, config::GeneralConfig, dash_inte
use crate::{
frontend::FrontendTasks,
tab::settings::{
SettingType, SettingsMountParams, SettingsTab, TabNameEnum, Task as ParentTask, horiz_cell,
SettingType, SettingsMountParams, SettingsTab, TabNameEnum, Task as ParentTask, UpdateExtra, horiz_cell,
macros::{MacroParams, options_category, options_checkbox, options_range_f32},
},
util::{
@@ -50,7 +50,7 @@ pub struct State {
}
impl SettingsTab for State {
fn update(&mut self, par: &mut ViewUpdateParams) -> anyhow::Result<()> {
fn update(&mut self, par: &mut ViewUpdateParams, _extra: &UpdateExtra) -> anyhow::Result<()> {
self.popup_download.update(par)?;
self.popup_dialog.update(par)?;
@@ -79,7 +79,7 @@ impl SettingsTab for State {
par.general_config.whisper_model = model.file_name.into();
par.config_change_kind.replace(ConfigChangeKind::Other);
// reload tab so that the downloaded checkmarks get populated
// reload tab so that the downloaded check marks get populated
self.parent_tasks.push(ParentTask::SetTab(TabNameEnum::Features));
}
}
@@ -143,7 +143,12 @@ impl State {
let popup_download = PopupHolder::<views::download_file::View>::default();
let popup_dialog = PopupHolder::<views::dialog_box::View>::default();
let c = options_category(par.mp, par.id_parent, "APP_SETTINGS.FEATURES", "dashboard/options.svg")?;
let c = options_category(
par.mp,
par.id_parent,
"APP_SETTINGS.FEATURES",
"@/dashboard/options.svg",
)?;
if par.feats.whisper {
whisper_models_dropdown(par.mp, c)?;
@@ -213,12 +218,12 @@ impl State {
entries: vec![
views::dialog_box::ButtonEntry {
content: Translation::from_translation_key("APP_SETTINGS.CANCEL"),
icon: "dashboard/close.svg",
icon: "@/dashboard/close.svg",
action: ACTION_CANCEL,
},
views::dialog_box::ButtonEntry {
content: Translation::from_translation_key("DOWNLOAD"),
icon: "dashboard/download.svg",
icon: "@/dashboard/download.svg",
action: ACTION_DOWNLOAD,
},
],
@@ -254,12 +259,12 @@ impl State {
entries: vec![
views::dialog_box::ButtonEntry {
content: Translation::from_translation_key("APP_SETTINGS.CANCEL"),
icon: "dashboard/close.svg",
icon: "@/dashboard/close.svg",
action: ACTION_CANCEL,
},
views::dialog_box::ButtonEntry {
content: Translation::from_translation_key("REMOVE"),
icon: "dashboard/trash.svg",
icon: "@/dashboard/trash.svg",
action: ACTION_REMOVE,
},
],
@@ -11,7 +11,7 @@ use wgui::{
use crate::{
frontend::FrontendTasks,
tab::settings::{
SettingType, SettingsMountParams, SettingsTab, horiz_cell,
SettingType, SettingsMountParams, SettingsTab, UpdateExtra, horiz_cell,
macros::{options_category, options_checkbox, options_dropdown, options_slider_f32},
mount_requires_restart,
},
@@ -32,7 +32,7 @@ pub struct State {
}
impl SettingsTab for State {
fn update(&mut self, par: &mut ViewUpdateParams) -> anyhow::Result<()> {
fn update(&mut self, par: &mut ViewUpdateParams, _extra: &UpdateExtra) -> anyhow::Result<()> {
self.popup_color_palettes.update(par)?;
for task in self.tasks.drain() {
@@ -60,7 +60,7 @@ impl State {
par.mp,
par.id_parent,
"APP_SETTINGS.LOOK_AND_FEEL",
"dashboard/palette.svg",
"@/dashboard/palette.svg",
)?;
create_color_palettes_button(par.mp, c, tasks.clone(), &popup)?;
options_dropdown::<wlx_common::locale::Language>(par.mp, c, &SettingType::Language)?;
@@ -100,7 +100,7 @@ fn create_color_palettes_button(
let mut params = TemplateParams::new();
params.insert("id", &id);
params.insert("translation", "APP_SETTINGS.COLOR_PALETTE");
params.insert("icon", "dashboard/palette.svg");
params.insert("icon", "@/dashboard/palette.svg");
mp.parser_state
.instantiate_template(mp.doc_params, "ButtonText", mp.layout, id_cell, params)?;
+1 -1
View File
@@ -9,7 +9,7 @@ impl SettingsTab for State {}
impl State {
pub fn mount(par: SettingsMountParams) -> anyhow::Result<State> {
let c = options_category(par.mp, par.id_parent, "APP_SETTINGS.MISC", "dashboard/blocks.svg")?;
let c = options_category(par.mp, par.id_parent, "APP_SETTINGS.MISC", "@/dashboard/blocks.svg")?;
options_dropdown::<wlx_common::config::InputEmulationMethod>(par.mp, c, &SettingType::InputEmulationMethod)?;
options_dropdown::<wlx_common::config::InputCaptureMethod>(par.mp, c, &SettingType::InputCaptureMethod)?;
options_dropdown::<wlx_common::config::CaptureMethod>(par.mp, c, &SettingType::CaptureMethod)?;
+5 -5
View File
@@ -1,9 +1,9 @@
use wgui::{assets::AssetPath, i18n::Translation, layout::Layout, task::Tasks};
use wgui::{assets::AssetPathRef, i18n::Translation, layout::Layout, task::Tasks};
use crate::{
frontend::FrontendTasks,
tab::settings::{
SettingType, SettingsMountParams, SettingsTab,
SettingType, SettingsMountParams, SettingsTab, UpdateExtra,
macros::{options_category, options_checkbox, options_slider_f32},
},
util::{popup_manager::PopupHolder, wgui_simple},
@@ -22,7 +22,7 @@ pub struct State {
}
impl SettingsTab for State {
fn update(&mut self, par: &mut ViewUpdateParams) -> anyhow::Result<()> {
fn update(&mut self, par: &mut ViewUpdateParams, _extra: &UpdateExtra) -> anyhow::Result<()> {
self.popup_skymap_list.update(par)?;
for task in self.tasks.drain() {
@@ -37,7 +37,7 @@ impl SettingsTab for State {
impl State {
pub fn mount(par: SettingsMountParams) -> anyhow::Result<Self> {
let id_category = options_category(par.mp, par.id_parent, "APP_SETTINGS.SKYBOX", "dashboard/globe.svg")?;
let id_category = options_category(par.mp, par.id_parent, "APP_SETTINGS.SKYBOX", "@/dashboard/globe.svg")?;
options_checkbox(par.mp, id_category, SettingType::UseSkybox)?;
options_checkbox(par.mp, id_category, SettingType::UsePassthrough)?;
options_slider_f32(par.mp, id_category, SettingType::GridOpacity, 0.0, 1.0, 0.05)?;
@@ -49,7 +49,7 @@ impl State {
id_parent: id_category,
layout: par.mp.layout,
content: Translation::from_translation_key("APP_SETTINGS.BROWSE_SKYMAPS"),
icon_builtin: AssetPath::BuiltIn("dashboard/globe.svg"),
icon_builtin: AssetPathRef::BuiltIn("dashboard/globe.svg"),
on_click: tasks.get_button_click_callback(Task::ShowSkymapList),
})?;
@@ -1,5 +1,5 @@
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
i18n::Translation,
layout::{Layout, LayoutTask, WidgetID},
parser::{Fetchable, ParseDocumentParams},
@@ -36,14 +36,14 @@ impl SettingsTab for State {
impl State {
pub fn mount(par: SettingsMountParams) -> anyhow::Result<State> {
let c = options_category(par.mp, par.id_parent, "APP_SETTINGS.SPACE_DRAG", "dashboard/drag.svg")?;
let c = options_category(par.mp, par.id_parent, "APP_SETTINGS.SPACE_DRAG", "@/dashboard/drag.svg")?;
let globals = par.mp.layout.state.globals.clone();
let tab_state = wgui::parser::parse_from_assets(
&ParseDocumentParams {
globals,
path: AssetPath::BuiltIn("gui/tab/settings_tab_space_drag.xml"),
path: AssetPathRef::BuiltIn("gui/tab/settings_tab_space_drag.xml"),
extra: Default::default(),
},
par.mp.layout,
@@ -61,7 +61,7 @@ impl State {
par.mp,
c,
"APP_SETTINGS.RESET_PLAYSPACE",
"dashboard/refresh.svg",
"@/dashboard/refresh.svg",
super::Task::ResetPlayspace,
)?;
@@ -69,7 +69,7 @@ impl State {
par.mp,
c,
"APP_SETTINGS.SAVE_PLAYSPACE_CENTER",
"dashboard/recenter.svg",
"@/dashboard/recenter.svg",
super::Task::SavePlayspaceCenter,
)?;
@@ -77,7 +77,7 @@ impl State {
par.mp,
c,
"APP_SETTINGS.RESET_PLAYSPACE_CENTER",
"dashboard/trash.svg",
"@/dashboard/trash.svg",
super::Task::ResetPlayspaceCenter,
)?;
@@ -0,0 +1,102 @@
use crate::{
tab::settings::{
SettingsMountParams, SettingsTab, UpdateExtra,
macros::{options_category, options_stat_row},
},
views::ViewUpdateParams,
};
use std::f32::consts::TAU;
use wgui::{i18n::Translation, layout::WidgetID, widget::label::WidgetLabel};
pub struct State {
id_label_rotations: WidgetID,
id_label_session_time: WidgetID,
id_label_lens_separation: WidgetID,
last_rotations: f32,
last_session_time_ms: u64,
last_ipd: f32,
}
impl SettingsTab for State {
fn update(&mut self, par: &mut ViewUpdateParams, extra: &UpdateExtra) -> anyhow::Result<()> {
let hmd_stats = &extra.hmd_stats;
let mut common = par.layout.common();
// 1 - one rotation, 2 - two rotations
// accuracy up to 0.01 rotations
let rotations = (hmd_stats.rotations_rad / TAU * 100.0).round() / 100.0;
if rotations != self.last_rotations {
self.last_rotations = rotations;
let mut label = common.state.widgets.cast_as::<WidgetLabel>(self.id_label_rotations)?;
label.set_text(&mut common, Translation::from_raw_text_string(rotations.to_string()));
}
if hmd_stats.session_time_ms != self.last_session_time_ms {
self.last_session_time_ms = hmd_stats.session_time_ms;
let mut label = common
.state
.widgets
.cast_as::<WidgetLabel>(self.id_label_session_time)?;
label.set_text(
&mut common,
Translation::from_raw_text_string(format_duration(hmd_stats.session_time_ms)),
);
}
if hmd_stats.ipd != self.last_ipd {
self.last_ipd = hmd_stats.ipd;
let mut label = common
.state
.widgets
.cast_as::<WidgetLabel>(self.id_label_lens_separation)?;
label.set_text(
&mut common,
Translation::from_raw_text_string(format!("{:.2}", hmd_stats.ipd)),
);
}
Ok(())
}
}
fn format_duration(ms: u64) -> String {
let total_secs = ms / 1000;
let h = total_secs / 3600;
let m = (total_secs % 3600) / 60;
let s = total_secs % 60;
if h > 0 {
format!("{h}:{m:02}:{s:02}")
} else {
format!("{m}:{s:02}")
}
}
impl State {
pub fn mount(par: SettingsMountParams) -> anyhow::Result<State> {
let c = options_category(
par.mp,
par.id_parent,
"APP_SETTINGS.STATISTICS",
"@/dashboard/barchart.svg",
)?;
let id_label_rotations = options_stat_row(par.mp, c, "APP_SETTINGS.ROTATIONS")?;
let id_label_session_time = options_stat_row(par.mp, c, "APP_SETTINGS.SESSION_TIME")?;
let id_label_lens_separation = options_stat_row(par.mp, c, "APP_SETTINGS.LENS_SEPARATION_MM")?;
Ok(State {
id_label_rotations,
id_label_session_time,
id_label_lens_separation,
last_rotations: f32::MIN,
last_session_time_ms: u64::MAX,
last_ipd: f32::MIN,
})
}
}
@@ -13,34 +13,34 @@ impl State {
par.mp,
par.id_parent,
"APP_SETTINGS.TROUBLESHOOTING",
"dashboard/cpu.svg",
"@/dashboard/cpu.svg",
)?;
options_danger_button(
par.mp,
c,
"APP_SETTINGS.CLEAR_PIPEWIRE_TOKENS",
"dashboard/display.svg",
"@/dashboard/display.svg",
Task::ClearPipewireTokens,
)?;
options_danger_button(
par.mp,
c,
"APP_SETTINGS.CLEAR_SAVED_STATE",
"dashboard/binary.svg",
"@/dashboard/binary.svg",
Task::ClearSavedState,
)?;
options_danger_button(
par.mp,
c,
"APP_SETTINGS.DELETE_ALL_CONFIGS",
"dashboard/circle.svg",
"@/dashboard/circle.svg",
Task::DeleteAllConfigs,
)?;
options_danger_button(
par.mp,
c,
"APP_SETTINGS.RESTART_SOFTWARE",
"dashboard/refresh.svg",
"@/dashboard/refresh.svg",
Task::RestartSoftware,
)?;
Ok(State {})
+3 -3
View File
@@ -1,7 +1,7 @@
use std::{marker::PhantomData, rc::Rc};
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
components::button::ComponentButton,
globals::WguiGlobals,
layout::{Layout, WidgetID},
@@ -68,7 +68,7 @@ impl<T> Tab<T> for TabWelcome<T> {
fn doc_params(globals: &WguiGlobals) -> ParseDocumentParams<'_> {
ParseDocumentParams {
globals: globals.clone(),
path: AssetPath::BuiltIn("gui/tab/welcome.xml"),
path: AssetPathRef::BuiltIn("gui/tab/welcome.xml"),
extra: Default::default(),
}
}
@@ -135,7 +135,7 @@ impl<T> TabWelcome<T> {
let state = wgui::parser::parse_from_assets(
&ParseDocumentParams {
globals,
path: AssetPath::BuiltIn(&format!("gui/tab/welcome_page_{}.xml", self.current_page)),
path: AssetPathRef::BuiltIn(&format!("gui/tab/welcome_page_{}.xml", self.current_page)),
extra: Default::default(),
},
layout,
+2 -2
View File
@@ -4,7 +4,7 @@ use std::{
};
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
components::button::ComponentButton,
event::{EventAlterables, StyleSetRequest},
globals::WguiGlobals,
@@ -276,7 +276,7 @@ impl PopupManager {
) -> anyhow::Result<(PopupHandle, WidgetID /* content widget ID */)> {
let doc_params = &ParseDocumentParams {
globals: globals.clone(),
path: AssetPath::BuiltIn("gui/view/popup_window.xml"),
path: AssetPathRef::BuiltIn("gui/view/popup_window.xml"),
extra: Default::default(),
};
let state = wgui::parser::parse_from_assets(doc_params, layout, self.parent_id)?;
+9 -4
View File
@@ -1,7 +1,7 @@
use glam::{Mat4, Vec2};
use wgui::{
animation::{Animation, AnimationEasing},
assets::AssetPath,
assets::AssetPathRef,
color::WguiColorName,
components::{self, button::ButtonClickCallback},
i18n::Translation,
@@ -23,7 +23,7 @@ pub struct CreateButtonParams<'a> {
pub id_parent: WidgetID,
pub layout: &'a mut Layout,
pub content: Translation,
pub icon_builtin: AssetPath<'a>,
pub icon_builtin: AssetPathRef<'a>,
pub on_click: ButtonClickCallback,
}
@@ -84,7 +84,12 @@ pub fn create_label_error(layout: &mut Layout, parent: WidgetID, content: String
Ok(())
}
pub fn create_icon(layout: &mut Layout, id_parent: WidgetID, size: Vec2, path: AssetPath) -> anyhow::Result<WidgetID> {
pub fn create_icon(
layout: &mut Layout,
id_parent: WidgetID,
size: Vec2,
path: AssetPathRef,
) -> anyhow::Result<WidgetID> {
let widget_sprite = WidgetSprite::create(WidgetSpriteParams {
color: Some(WguiColorName::OnBackground.into()),
glyph_data: Some(CustomGlyphData::from_assets(&layout.state.globals, path)?),
@@ -119,7 +124,7 @@ pub struct CreateLoadingParams<'a> {
pub fn create_loading(par: CreateLoadingParams) -> anyhow::Result<WidgetID> {
let doc_params = ParseDocumentParams {
globals: par.layout.state.globals.clone(),
path: AssetPath::BuiltIn("gui/t_loading.xml"),
path: AssetPathRef::BuiltIn("gui/t_loading.xml"),
extra: Default::default(),
};
+2 -2
View File
@@ -2,7 +2,7 @@ use std::{collections::HashMap, rc::Rc, str::FromStr};
use strum::VariantNames;
use wayvr_ipc::packet_client::{PositionMode, WvrProcessLaunchParams};
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
components::{
ComponentTrait, button::ComponentButton, checkbox::ComponentCheckbox, radio_group::ComponentRadioGroup,
},
@@ -100,7 +100,7 @@ impl View {
pub fn new(params: Params) -> anyhow::Result<Self> {
let doc_params = &ParseDocumentParams {
globals: params.globals.clone(),
path: AssetPath::BuiltIn("gui/view/app_launcher.xml"),
path: AssetPathRef::BuiltIn("gui/view/app_launcher.xml"),
extra: Default::default(),
};
+18 -18
View File
@@ -1,7 +1,7 @@
use std::rc::Rc;
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
color::{WguiColor, WguiColorName},
components::{
self,
@@ -124,7 +124,7 @@ fn mount_multi_selector(params: MultiSelectorParams) -> anyhow::Result<()> {
params.ess,
components::button::Params {
text: Some(Translation::from_raw_text(&cell.display_text)),
sprite_src: Some(AssetPath::BuiltIn(cell.icon_path)),
sprite_src: Some(AssetPathRef::BuiltIn(cell.icon_path)),
color,
..Default::default()
},
@@ -211,7 +211,7 @@ fn get_profile_display_name(profile_name: &str, card: &pactl_wrapper::Card) -> P
// fallback
return ProfileDisplayName {
name: profile_name.into(),
icon_path: "dashboard/binary.svg",
icon_path: "@/dashboard/binary.svg",
is_vr: false,
};
};
@@ -221,26 +221,26 @@ fn get_profile_display_name(profile_name: &str, card: &pactl_wrapper::Card) -> P
let prof = profile_name.to_lowercase();
if prof.contains("analog") {
out_icon_path = "dashboard/minijack.svg";
out_icon_path = "@/dashboard/minijack.svg";
} else if prof.contains("iec" /* digital */) {
out_icon_path = "dashboard/binary.svg";
out_icon_path = "@/dashboard/binary.svg";
} else if prof.contains("hdmi") {
out_icon_path = "dashboard/displayport.svg";
out_icon_path = "@/dashboard/displayport.svg";
} else if prof.contains("off") {
out_icon_path = "dashboard/sleep.svg";
out_icon_path = "@/dashboard/sleep.svg";
} else if prof.contains("input") {
out_icon_path = "dashboard/microphone.svg";
out_icon_path = "@/dashboard/microphone.svg";
} else {
out_icon_path = "dashboard/volume.svg"; // Default fallback
out_icon_path = "@/dashboard/volume.svg"; // Default fallback
}
// All ports are tied to this VR headset, assign all of them to the VR icon
if is_card_mentioning_hmd(card) {
if prof.contains("mic") {
// Probably microphone
out_icon_path = "dashboard/microphone.svg";
out_icon_path = "@/dashboard/microphone.svg";
} else {
out_icon_path = "dashboard/vr.svg";
out_icon_path = "@/dashboard/vr.svg";
}
}
@@ -266,11 +266,11 @@ fn get_profile_display_name(profile_name: &str, card: &pactl_wrapper::Card) -> P
if does_string_mention_hmd_sink(product_name) {
// VR icon
out_icon_path = "dashboard/vr.svg";
out_icon_path = "@/dashboard/vr.svg";
is_vr = true;
} else {
// Monitor icon
out_icon_path = "dashboard/displayport.svg";
out_icon_path = "@/dashboard/displayport.svg";
}
break;
@@ -291,7 +291,7 @@ fn get_profile_display_name(profile_name: &str, card: &pactl_wrapper::Card) -> P
fn doc_params(globals: &WguiGlobals) -> ParseDocumentParams<'_> {
ParseDocumentParams {
globals: globals.clone(),
path: AssetPath::BuiltIn("gui/view/audio_settings.xml"),
path: AssetPathRef::BuiltIn("gui/view/audio_settings.xml"),
extra: Default::default(),
}
}
@@ -776,9 +776,9 @@ impl View {
par.insert("device_icon", disp.icon_path);
} else {
let icon_path = if params.alt_desc.contains("WiVRn") {
"dashboard/wivrn_head_symbolic.svg"
"@/dashboard/wivrn_head_symbolic.svg"
} else {
"dashboard/binary.svg"
"@/dashboard/binary.svg"
};
par.insert("device_name", &params.alt_desc);
@@ -788,9 +788,9 @@ impl View {
par.insert(
"volume_icon",
if params.muted {
"dashboard/volume_off.svg"
"@/dashboard/volume_off.svg"
} else {
"dashboard/volume.svg"
"@/dashboard/volume.svg"
},
);
+4 -4
View File
@@ -2,7 +2,7 @@ use glam::Vec2;
use std::rc::Rc;
use strum::EnumProperty;
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
components::{
button::{ButtonClickEvent, ComponentButton},
slider::ComponentSlider,
@@ -157,7 +157,7 @@ impl View {
pub fn new(params: Params) -> anyhow::Result<Self> {
let doc_params = &ParseDocumentParams {
globals: params.globals.clone(),
path: AssetPath::BuiltIn("gui/view/bindings.xml"),
path: AssetPathRef::BuiltIn("gui/view/bindings.xml"),
extra: Default::default(),
};
@@ -228,7 +228,7 @@ impl View {
parser_state: &mut self.parser_state,
doc_params: &ParseDocumentParams {
globals: self.globals.clone(),
path: AssetPath::BuiltIn("gui/view/bindings.xml"),
path: AssetPathRef::BuiltIn("gui/view/bindings.xml"),
extra: Default::default(),
},
layout,
@@ -501,7 +501,7 @@ fn subpath_dropdown(
mp.layout,
parent,
Vec2::new(32.0, 32.0),
AssetPath::BuiltIn(&format!("dashboard/hand_{}.svg", side.as_ref())),
AssetPathRef::BuiltIn(&format!("@/dashboard/hand_{}.svg", side.as_ref())),
)?;
let current_text = current
+2 -2
View File
@@ -7,7 +7,7 @@ use crate::{
use std::{rc::Rc, sync::Arc};
use wgui::color::WguiColorName;
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
components::button::ComponentButton,
globals::WguiGlobals,
i18n::Translation,
@@ -93,7 +93,7 @@ impl View {
pub fn new(params: Params) -> anyhow::Result<Self> {
let doc_params = &ParseDocumentParams {
globals: params.globals.clone(),
path: AssetPath::BuiltIn("gui/view/color_palettes.xml"),
path: AssetPathRef::BuiltIn("gui/view/color_palettes.xml"),
extra: Default::default(),
};
+2 -2
View File
@@ -4,7 +4,7 @@ use crate::{
views::{ViewTrait, ViewUpdateParams},
};
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
components::button::ComponentButton,
globals::WguiGlobals,
i18n::Translation,
@@ -45,7 +45,7 @@ pub struct View {
fn doc_params(globals: &WguiGlobals) -> ParseDocumentParams<'_> {
ParseDocumentParams {
globals: globals.clone(),
path: AssetPath::BuiltIn("gui/view/dialog_box.xml"),
path: AssetPathRef::BuiltIn("gui/view/dialog_box.xml"),
extra: Default::default(),
}
}
+4 -4
View File
@@ -10,7 +10,7 @@ use crate::{
use glam::Vec2;
use std::path::PathBuf;
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
components::button::ComponentButton,
globals::WguiGlobals,
i18n::Translation,
@@ -59,7 +59,7 @@ pub struct View {
fn doc_params(globals: &WguiGlobals) -> ParseDocumentParams<'_> {
ParseDocumentParams {
globals: globals.clone(),
path: AssetPath::BuiltIn("gui/view/download_file.xml"),
path: AssetPathRef::BuiltIn("gui/view/download_file.xml"),
extra: Default::default(),
}
}
@@ -92,7 +92,7 @@ impl ViewTrait for View {
par.layout,
self.id_loading_parent,
Vec2::splat(32.0),
AssetPath::BuiltIn("dashboard/check.svg"),
AssetPathRef::BuiltIn("@/dashboard/check.svg"),
)?;
// "Close window" button
@@ -114,7 +114,7 @@ impl ViewTrait for View {
par.layout,
self.id_loading_parent,
Vec2::splat(32.0),
AssetPath::BuiltIn("dashboard/error.svg"),
AssetPathRef::BuiltIn("@/dashboard/error.svg"),
)?;
}
Task::Close => {
+2 -2
View File
@@ -1,7 +1,7 @@
use std::rc::Rc;
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
components::{
self,
button::ComponentButton,
@@ -311,7 +311,7 @@ impl ViewCommon {
fn get_placeholder_image(&mut self) -> anyhow::Result<&CustomGlyphData> {
if self.img_placeholder.is_none() {
let c = CustomGlyphData::from_assets(&self.globals, AssetPath::BuiltIn("dashboard/placeholder_cover.png"))?;
let c = CustomGlyphData::from_assets(&self.globals, AssetPathRef::BuiltIn("dashboard/placeholder_cover.png"))?;
self.img_placeholder = Some(c);
}
+2 -2
View File
@@ -10,7 +10,7 @@ use crate::{
views::{ViewTrait, ViewUpdateParams, game_cover},
};
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
components::button::ComponentButton,
globals::WguiGlobals,
i18n::Translation,
@@ -82,7 +82,7 @@ impl View {
pub fn new(params: Params) -> anyhow::Result<Self> {
let doc_params = &ParseDocumentParams {
globals: params.globals.clone(),
path: AssetPath::BuiltIn("gui/view/game_launcher.xml"),
path: AssetPathRef::BuiltIn("gui/view/game_launcher.xml"),
extra: Default::default(),
};
+2 -2
View File
@@ -1,7 +1,7 @@
use std::{collections::HashMap, rc::Rc};
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
components::button::ComponentButton,
globals::WguiGlobals,
i18n::Translation,
@@ -92,7 +92,7 @@ impl View {
pub fn new(params: Params) -> anyhow::Result<Self> {
let doc_params = &ParseDocumentParams {
globals: params.globals.clone(),
path: AssetPath::BuiltIn("gui/view/game_list.xml"),
path: AssetPathRef::BuiltIn("gui/view/game_list.xml"),
extra: Default::default(),
};
+2 -2
View File
@@ -1,6 +1,6 @@
use std::rc::Rc;
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
components::button::ComponentButton,
globals::WguiGlobals,
i18n::Translation,
@@ -59,7 +59,7 @@ impl View {
pub fn new(params: Params) -> anyhow::Result<Self> {
let doc_params = &ParseDocumentParams {
globals: params.globals.clone(),
path: AssetPath::BuiltIn("gui/view/input_profiles.xml"),
path: AssetPathRef::BuiltIn("gui/view/input_profiles.xml"),
extra: Default::default(),
};
@@ -10,7 +10,7 @@ use crate::{
};
use anyhow::Context;
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
color::WguiColorName,
components::button::ComponentButton,
globals::WguiGlobals,
@@ -78,8 +78,8 @@ fn mount_resolution_button(
t.insert(
"sprite",
match already_downloaded {
true => "dashboard/check.svg",
false => "dashboard/download.svg",
true => "@/dashboard/check.svg",
false => "@/dashboard/download.svg",
},
);
let data = parser_state.realize_template(doc_params, "ResolutionButton", layout, parent_id, t)?;
@@ -135,7 +135,7 @@ impl ViewTrait for View {
fn doc_params(globals: &WguiGlobals) -> ParseDocumentParams<'_> {
ParseDocumentParams {
globals: globals.clone(),
path: AssetPath::BuiltIn("gui/view/remote_skymap_downloader.xml"),
path: AssetPathRef::BuiltIn("gui/view/remote_skymap_downloader.xml"),
extra: Default::default(),
}
}
@@ -264,17 +264,17 @@ impl View {
entries: vec![
views::dialog_box::ButtonEntry {
content: Translation::from_translation_key("REMOVE"),
icon: "dashboard/trash.svg",
icon: "@/dashboard/trash.svg",
action: ACTION_REMOVE,
},
views::dialog_box::ButtonEntry {
content: Translation::from_translation_key("DOWNLOAD_AGAIN"),
icon: "dashboard/download.svg",
icon: "@/dashboard/download.svg",
action: ACTION_DOWNLOAD_AGAIN,
},
views::dialog_box::ButtonEntry {
content: Translation::from_translation_key("APPLY"),
icon: "dashboard/check.svg",
icon: "@/dashboard/check.svg",
action: ACTION_APPLY,
},
],
@@ -2,7 +2,7 @@ use std::rc::Rc;
use uuid::Uuid;
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
globals::WguiGlobals,
i18n::Translation,
layout::{Layout, WidgetID},
@@ -178,7 +178,7 @@ impl View {
) -> anyhow::Result<()> {
let doc_params = &ParseDocumentParams {
globals: self.globals.clone(),
path: AssetPath::BuiltIn("gui/view/remote_skymap_list.xml"),
path: AssetPathRef::BuiltIn("gui/view/remote_skymap_list.xml"),
extra: Default::default(),
};
@@ -1,5 +1,5 @@
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
components::button::ComponentButton,
event::StyleSetRequest,
globals::WguiGlobals,
@@ -44,7 +44,7 @@ pub struct View {
fn doc_params(globals: WguiGlobals) -> ParseDocumentParams<'static> {
ParseDocumentParams {
globals,
path: AssetPath::BuiltIn("gui/view/running_games_list.xml"),
path: AssetPathRef::BuiltIn("gui/view/running_games_list.xml"),
extra: Default::default(),
}
}
+3 -3
View File
@@ -1,6 +1,6 @@
use anyhow::Context;
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
components::button::ComponentButton,
globals::WguiGlobals,
i18n::Translation,
@@ -89,7 +89,7 @@ impl View {
pub fn new(params: Params) -> anyhow::Result<Self> {
let doc_params = &ParseDocumentParams {
globals: params.globals.clone(),
path: AssetPath::BuiltIn("gui/view/skymap_list.xml"),
path: AssetPathRef::BuiltIn("gui/view/skymap_list.xml"),
extra: Default::default(),
};
@@ -162,7 +162,7 @@ impl View {
if entry.is_downloaded(resolution).unwrap_or(false) {
entries.push(views::dialog_box::ButtonEntry {
content: Translation::from_raw_text(resolution.get_display_str()),
icon: "dashboard/globe.svg",
icon: "@/dashboard/globe.svg",
action: resolution.get_display_str_simple(),
});
}
+2 -2
View File
@@ -1,5 +1,5 @@
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
components::button::{ButtonClickCallback, ComponentButton},
event::EventAlterables,
globals::WguiGlobals,
@@ -37,7 +37,7 @@ pub struct View {
fn doc_params(globals: &'_ WguiGlobals) -> ParseDocumentParams<'_> {
ParseDocumentParams {
globals: globals.clone(),
path: AssetPath::BuiltIn("gui/view/skymap_list_cell.xml"),
path: AssetPathRef::BuiltIn("gui/view/skymap_list_cell.xml"),
extra: Default::default(),
}
}
+2 -2
View File
@@ -15,10 +15,10 @@ cd "$(dirname "$0")"
bun install
# model URL:
# https://huggingface.co/unsloth/gemma-4-26B-A4B-it-GGUF
# https://huggingface.co/unsloth/gemma-4-31B-it-GGUF
# you can specify your own if you want to.
if [ -z "${MODEL}" ]; then
export MODEL="gemma-4-26B-A4B-it-UD-Q3_K_M"
export MODEL="gemma-4-31B-it-Q4_K_M"
fi
if [ -z "${LLAMA_BASE_URL}" ]; then
+2 -2
View File
@@ -1,5 +1,5 @@
<layout>
<layout version="2">
<elements>
<!-- TODO -->
</elements>
</layout>
</layout>
+4 -4
View File
@@ -1,9 +1,9 @@
<layout>
<theme>
<layout version="2">
<vars>
<var key="aqua1" value="#00AAFF" />
<var key="aqua2" value="#00CCFF" />
<var key="aqua3" value="#00FFFF" />
</theme>
</vars>
<elements>
<rectangle width="750" height="550" color="#FFFFFF" flex_direction="column" overflow_y="scroll">
@@ -33,7 +33,7 @@
</rectangle>
<!-- Embed sprites -->
<sprite width="64" height="64" src="raster.png" />
<sprite width="64" height="64" src="@/raster.png" />
</rectangle>
<!-- 2/3 green rects -->
<div flex_direction="column">
+1 -1
View File
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<elements>
<sprite width="32" height="32" src="/usr/share/icons/nvtop.svg" />
<sprite width="64" height="64" src="/usr/share/icons/nvtop.svg" />
+25 -1
View File
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<macro name="rect"
color="#000000aa"
round="4" border="2"
@@ -18,6 +18,8 @@
</context_menu>
</blueprint>
<include src="various_widgets_inc.xml"/>
<elements>
<rectangle position="absolute" width="100%" height="100%" color="#1e3a3eee" />
<div
@@ -26,11 +28,33 @@
flex_direction="column"
overflow_y="scroll">
<ElementWithChildren>
<label text="Foo bar"/>
<BoxRight>
<BoldText text="1"/>
<BoldText text="2"/>
<BoldText text="3"/>
</BoxRight>
</ElementWithChildren>
<rectangle macro="rect">
<label text="Raw text" color="#FFFFFF" />
<label translation="TESTBED.HELLO_WORLD" color="#FFFFFF" />
<div>
<!-- find from expanded path -->
<sprite width="64" height="64" src="@/raster.png">
<label size="9" weight="bold" color="#000000" text="@/raster.png"/>
</sprite>
<!-- find from upper dir -->
<sprite width="64" height="64" src="../raster.png">
<label size="9" weight="bold" color="#000000" text="../raster.png"/>
</sprite>
</div>
</rectangle>
<rectangle macro="rect">
<label id="label_current_option" text="Click any of these buttons" size="20" weight="bold" />
<div gap="4">
+19
View File
@@ -0,0 +1,19 @@
<layout version="2">
<!-- text -->
<template name="BoldText">
<label text="${text}" weight="bold"/>
</template>
<template name="BoxRight">
<div gap="16">
<CHILDREN/>
</div>
</template>
<!-- children support! -->
<template name="ElementWithChildren">
<rectangle color="#2299FF" padding="8" align_self="start" round="4" border="2" border_color="#ffffff" flex_direction="column">
<CHILDREN/>
</rectangle>
</template>
</layout>
+8 -8
View File
@@ -1,24 +1,24 @@
<layout>
<theme>
<layout version="2">
<vars>
<var key="width" value="426.666" />
<var key="height" value="133.333" />
</theme>
</vars>
<elements>
<rectangle position="absolute" width="10000" height="10000" color="#112233"/>
<div flex_direction="row">
<div margin="16" gap="8" flex_direction="column" overflow_y="scroll" >
<label text="640x200, looping"/>
<Video src_builtin="video.ivf" width="~width" height="~height" looping="1"/>
<Video src_builtin="@/video.ivf" width="~width" height="~height" looping="1"/>
<label text="640x200, non-looping "/>
<Video src_builtin="video.ivf" width="~width" height="~height" looping="0"/>
<Video src_builtin="@/video.ivf" width="~width" height="~height" looping="0"/>
</div>
<div margin="16" gap="8" flex_direction="column" overflow_y="scroll" >
<label text="640x200, looping, speed 2x"/>
<Video src_builtin="video.ivf" width="~width" height="~height" looping="1" speed="2"/>
<Video src_builtin="@/video.ivf" width="~width" height="~height" looping="1" speed="2"/>
<label text="640x200, looping, speed 0.5x"/>
<Video src_builtin="video.ivf" width="~width" height="~height" looping="1" speed="0.5"/>
<Video src_builtin="@/video.ivf" width="~width" height="~height" looping="1" speed="0.5"/>
<label text="640x200, looping, speed 4x"/>
<Video src_builtin="video.ivf" width="~width" height="~height" looping="1" speed="4"/>
<Video src_builtin="@/video.ivf" width="~width" height="~height" looping="1" speed="4"/>
</div>
</div>
</elements>
+8 -5
View File
@@ -6,12 +6,12 @@ use crate::{
};
use glam::Vec2;
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
font_config::WguiFontConfig,
globals::WguiGlobals,
layout::{Layout, LayoutParams, LayoutUpdateParams},
palette::WguiColorPalette,
parser::{ParseDocumentParams, ParserState},
parser::{ParseDocumentExtra, ParseDocumentParams, ParserState},
};
use wlx_common::locale::WayVRLangProvider;
@@ -25,9 +25,9 @@ pub struct TestbedAny {
impl TestbedAny {
pub fn new(assets: Box<assets::Asset>, name: &str) -> anyhow::Result<Self> {
let path = if name.ends_with(".xml") {
AssetPath::FileOrBuiltIn(name)
AssetPathRef::FileOrBuiltIn(name)
} else {
AssetPath::BuiltIn(&format!("gui/{name}.xml"))
AssetPathRef::BuiltIn(&format!("gui/{name}.xml"))
};
let lang_provider = WayVRLangProvider::default();
@@ -45,7 +45,10 @@ impl TestbedAny {
&ParseDocumentParams {
globals,
path,
extra: Default::default(),
extra: ParseDocumentExtra {
root_dir: Some(path.to_rc().strip_filename()),
..Default::default()
},
},
LayoutParams::default(),
)?;
+2 -2
View File
@@ -6,7 +6,7 @@ use crate::{
};
use glam::Vec2;
use wgui::{
assets::AssetPath,
assets::AssetPathRef,
components::{
Component,
button::{ButtonClickCallback, ComponentButton},
@@ -80,7 +80,7 @@ impl TestbedGeneric {
fn doc_params(globals: &'_ WguiGlobals, extra: ParseDocumentExtra) -> ParseDocumentParams<'_> {
ParseDocumentParams {
globals: globals.clone(),
path: AssetPath::BuiltIn("gui/various_widgets.xml"),
path: AssetPathRef::BuiltIn("gui/various_widgets.xml"),
extra,
}
}
+1 -1
View File
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<elements>
<div interactable="0">
<rectangle
+1 -2
View File
@@ -1,5 +1,4 @@
<layout>
<layout version="2">
<elements>
<div width="192" height="192" padding="8">
<rectangle
+3 -3
View File
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<macro name="window_button" min_width="40" min_height="40" padding="4" align_items="center" />
<macro name="window_button_icon" width="32" height="32" />
@@ -17,13 +17,13 @@
<label id="title" text="~title" margin_left="8" color="on_background" size="22" weight="bold" />
<div gap="4">
<Button macro="window_button" _release="::EditToggle">
<sprite macro="window_button_icon" src="watch/edit.svg" />
<sprite macro="window_button_icon" src="@/watch/edit.svg" />
</Button>
<Button macro="window_button" _release="::DecorCloseWindow"
color="danger" border_color="danger(rgb-mult-0.5)"
hover_color="danger(rgb-add-0.2)" hover_border_color="danger">
<sprite macro="window_button_icon" src="edit/close.svg" />
<sprite macro="window_button_icon" src="@/edit/close.svg" />
</Button>
</div>
+33 -33
View File
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<macro name="button_style"
margin="2" overflow="hidden" box_sizing="border_box" align_items="center" justify_content="center"
border="2" round="50%" padding="8" gradient="vertical" tooltip_side="bottom" />
@@ -35,30 +35,30 @@
<rectangle padding="16" gap="8" round="32" color="background(opacity-0.9)" border="2" border_color="outline" justify_content="center">
<div flex_direction="column" gap="8">
<div flex_direction="row" gap="4">
<TopButton sticky="0" id="top_lock" src="edit/lock_open.svg" tooltip="EDIT_MODE.LOCK_INTERACTION" press="::EditModeToggleLock" />
<TopButton sticky="1" id="top_grab" src="edit/disable-grab.svg" tooltip="EDIT_MODE.DISABLE_GRAB" press="::EditModeToggleGrab" />
<TopButton sticky="0" id="top_pos" src="edit/anchor.svg" tooltip="EDIT_MODE.POSITIONING" press="::EditModeTab pos" />
<TopButton sticky="0" id="top_alpha" src="edit/fade.svg" tooltip="EDIT_MODE.OPACITY" press="::EditModeTab alpha" />
<TopButton sticky="0" id="top_curve" src="edit/curve.svg" tooltip="EDIT_MODE.ADJUST_CURVATURE" press="::EditModeTab curve" />
<TopButton sticky="0" id="top_stereo" src="edit/3d.svg" tooltip="EDIT_MODE.STEREO_3D_MODE.TITLE" press="::EditModeTab stereo" />
<TopButton sticky="0" id="top_mouse" src="edit/normal.svg" tooltip="EDIT_MODE.MOUSE.TITLE" press="::EditModeTab mouse" />
<!-- TopButton sticky="0" id="top_move" src="edit/move-all.svg" tooltip="EDIT_MODE.MOVE_PRESS_AND_DRAG" / -->
<!-- TopButton sticky="0" id="top_resize" src="edit/resize.svg" tooltip="EDIT_MODE.RESIZE_PRESS_AND_DRAG" / -->
<TopButtonDanger src="edit/delete.svg" tooltip="EDIT_MODE.DELETE" release="::EditModeDelete" />
<TopButton sticky="0" id="top_lock" src="@/edit/lock_open.svg" tooltip="EDIT_MODE.LOCK_INTERACTION" press="::EditModeToggleLock" />
<TopButton sticky="1" id="top_grab" src="@/edit/disable-grab.svg" tooltip="EDIT_MODE.DISABLE_GRAB" press="::EditModeToggleGrab" />
<TopButton sticky="0" id="top_pos" src="@/edit/anchor.svg" tooltip="EDIT_MODE.POSITIONING" press="::EditModeTab pos" />
<TopButton sticky="0" id="top_alpha" src="@/edit/fade.svg" tooltip="EDIT_MODE.OPACITY" press="::EditModeTab alpha" />
<TopButton sticky="0" id="top_curve" src="@/edit/curve.svg" tooltip="EDIT_MODE.ADJUST_CURVATURE" press="::EditModeTab curve" />
<TopButton sticky="0" id="top_stereo" src="@/edit/3d.svg" tooltip="EDIT_MODE.STEREO_3D_MODE.TITLE" press="::EditModeTab stereo" />
<TopButton sticky="0" id="top_mouse" src="@/edit/normal.svg" tooltip="EDIT_MODE.MOUSE.TITLE" press="::EditModeTab mouse" />
<!-- TopButton sticky="0" id="top_move" src="@/edit/move-all.svg" tooltip="EDIT_MODE.MOVE_PRESS_AND_DRAG" / -->
<!-- TopButton sticky="0" id="top_resize" src="@/edit/resize.svg" tooltip="EDIT_MODE.RESIZE_PRESS_AND_DRAG" / -->
<TopButtonDanger src="@/edit/delete.svg" tooltip="EDIT_MODE.DELETE" release="::EditModeDelete" />
<div width="8" height="100%" />
<TopButtonTertiary src="edit/check.svg" tooltip="EDIT_MODE.LEAVE" press="::EditToggle" />
<TopButtonTertiary src="@/edit/check.svg" tooltip="EDIT_MODE.LEAVE" press="::EditToggle" />
</div>
<div id="tab_none" display="none" height="100">
<label align="center" translation="EDIT_MODE.HINT_POINT_WINDOW" />
</div>
<div id="tab_pos" display="none" height="100" flex_direction="column">
<div padding="8" gap="8" justify_content="center" align_items="center">
<PosButton id="pos_static" src="edit/pin.svg" tooltip="EDIT_MODE.POS_STATIC" press="::EditModeSetPos static" />
<PosButton id="pos_anchored" src="edit/anchor.svg" tooltip="EDIT_MODE.POS_ANCHORED" press="::EditModeSetPos anchored" />
<PosButton id="pos_floating" src="edit/float.svg" tooltip="EDIT_MODE.POS_FLOATING" press="::EditModeSetPos floating" />
<PosButton id="pos_hmd" src="watch/hmd.svg" tooltip="EDIT_MODE.POS_HMD" press="::EditModeSetPos hmd" />
<PosButton id="pos_hand_l" src="watch/controller_l.svg" tooltip="EDIT_MODE.POS_HAND_L" press="::EditModeSetPos hand_l" />
<PosButton id="pos_hand_r" src="watch/controller_r.svg" tooltip="EDIT_MODE.POS_HAND_R" press="::EditModeSetPos hand_r" />
<PosButton id="pos_static" src="@/edit/pin.svg" tooltip="EDIT_MODE.POS_STATIC" press="::EditModeSetPos static" />
<PosButton id="pos_anchored" src="@/edit/anchor.svg" tooltip="EDIT_MODE.POS_ANCHORED" press="::EditModeSetPos anchored" />
<PosButton id="pos_floating" src="@/edit/float.svg" tooltip="EDIT_MODE.POS_FLOATING" press="::EditModeSetPos floating" />
<PosButton id="pos_hmd" src="@/watch/hmd.svg" tooltip="EDIT_MODE.POS_HMD" press="::EditModeSetPos hmd" />
<PosButton id="pos_hand_l" src="@/watch/controller_l.svg" tooltip="EDIT_MODE.POS_HAND_L" press="::EditModeSetPos hand_l" />
<PosButton id="pos_hand_r" src="@/watch/controller_r.svg" tooltip="EDIT_MODE.POS_HAND_R" press="::EditModeSetPos hand_r" />
</div>
<div flex_direction="row" gap="8" justify_content="center" align_items="center">
<div id="pos_interpolation" gap="6">
@@ -74,11 +74,11 @@
</div>
<div id="tab_stereo" display="none" height="100" flex_direction="column">
<div padding="8" gap="8" justify_content="center" align_items="center">
<PosButton id="stereo_none" src="edit/close.svg" tooltip="DISABLED" press="::EditModeSetStereo none" />
<PosButton id="stereo_leftright" src="edit/3d_leftright.svg" tooltip="EDIT_MODE.STEREO_3D_MODE.SPLIT_LEFT_RIGHT" press="::EditModeSetStereo leftright" />
<PosButton id="stereo_rightleft" src="edit/3d_rightleft.svg" tooltip="EDIT_MODE.STEREO_3D_MODE.SPLIT_RIGHT_LEFT" press="::EditModeSetStereo rightleft" />
<PosButton id="stereo_topbottom" src="edit/3d_topbottom.svg" tooltip="EDIT_MODE.STEREO_3D_MODE.SPLIT_TOP_BOTTOM" press="::EditModeSetStereo topbottom" />
<PosButton id="stereo_bottomtop" src="edit/3d_bottomtop.svg" tooltip="EDIT_MODE.STEREO_3D_MODE.SPLIT_BOTTOM_TOP" press="::EditModeSetStereo bottomtop" />
<PosButton id="stereo_none" src="@/edit/close.svg" tooltip="DISABLED" press="::EditModeSetStereo none" />
<PosButton id="stereo_leftright" src="@/edit/3d_leftright.svg" tooltip="EDIT_MODE.STEREO_3D_MODE.SPLIT_LEFT_RIGHT" press="::EditModeSetStereo leftright" />
<PosButton id="stereo_rightleft" src="@/edit/3d_rightleft.svg" tooltip="EDIT_MODE.STEREO_3D_MODE.SPLIT_RIGHT_LEFT" press="::EditModeSetStereo rightleft" />
<PosButton id="stereo_topbottom" src="@/edit/3d_topbottom.svg" tooltip="EDIT_MODE.STEREO_3D_MODE.SPLIT_TOP_BOTTOM" press="::EditModeSetStereo topbottom" />
<PosButton id="stereo_bottomtop" src="@/edit/3d_bottomtop.svg" tooltip="EDIT_MODE.STEREO_3D_MODE.SPLIT_BOTTOM_TOP" press="::EditModeSetStereo bottomtop" />
</div>
<div justify_content="center" align_items="center" flex_direction="row" gap="16">
<CheckBox id="stereo_full_frame_box" translation="EDIT_MODE.STEREO_3D_MODE.FULL_FRAME" tooltip_side="top" />
@@ -87,15 +87,15 @@
</div>
<div id="tab_mouse" display="none" height="100" flex_direction="column">
<div padding_left="8" padding_right="8" gap="8" justify_content="center" align_items="center">
<PosButton id="mouse_default" src="edit/close.svg" tooltip="DEFAULT" press="::EditModeSetMouse default" />
<PosButton id="mouse_normal" src="edit/normal.svg" tooltip="EDIT_MODE.MOUSE.NORMAL" press="::EditModeSetMouse normal" />
<PosButton id="mouse_rotate90" src="edit/rotate90.svg" tooltip="EDIT_MODE.MOUSE.ROTATE90" press="::EditModeSetMouse rotate90" />
<PosButton id="mouse_rotate180" src="edit/rotate180.svg" tooltip="EDIT_MODE.MOUSE.ROTATE180" press="::EditModeSetMouse rotate180" />
<PosButton id="mouse_rotate270" src="edit/rotate270.svg" tooltip="EDIT_MODE.MOUSE.ROTATE270" press="::EditModeSetMouse rotate270" />
<PosButton id="mouse_flipped" src="edit/flipped.svg" tooltip="EDIT_MODE.MOUSE.FLIPPED" press="::EditModeSetMouse flipped" />
<PosButton id="mouse_flip90" src="edit/flip90.svg" tooltip="EDIT_MODE.MOUSE.FLIP90" press="::EditModeSetMouse flip90" />
<PosButton id="mouse_flip180" src="edit/flip180.svg" tooltip="EDIT_MODE.MOUSE.FLIP180" press="::EditModeSetMouse flip180" />
<PosButton id="mouse_flip270" src="edit/flip270.svg" tooltip="EDIT_MODE.MOUSE.FLIP270" press="::EditModeSetMouse flip270" />
<PosButton id="mouse_default" src="@/edit/close.svg" tooltip="DEFAULT" press="::EditModeSetMouse default" />
<PosButton id="mouse_normal" src="@/edit/normal.svg" tooltip="EDIT_MODE.MOUSE.NORMAL" press="::EditModeSetMouse normal" />
<PosButton id="mouse_rotate90" src="@/edit/rotate90.svg" tooltip="EDIT_MODE.MOUSE.ROTATE90" press="::EditModeSetMouse rotate90" />
<PosButton id="mouse_rotate180" src="@/edit/rotate180.svg" tooltip="EDIT_MODE.MOUSE.ROTATE180" press="::EditModeSetMouse rotate180" />
<PosButton id="mouse_rotate270" src="@/edit/rotate270.svg" tooltip="EDIT_MODE.MOUSE.ROTATE270" press="::EditModeSetMouse rotate270" />
<PosButton id="mouse_flipped" src="@/edit/flipped.svg" tooltip="EDIT_MODE.MOUSE.FLIPPED" press="::EditModeSetMouse flipped" />
<PosButton id="mouse_flip90" src="@/edit/flip90.svg" tooltip="EDIT_MODE.MOUSE.FLIP90" press="::EditModeSetMouse flip90" />
<PosButton id="mouse_flip180" src="@/edit/flip180.svg" tooltip="EDIT_MODE.MOUSE.FLIP180" press="::EditModeSetMouse flip180" />
<PosButton id="mouse_flip270" src="@/edit/flip270.svg" tooltip="EDIT_MODE.MOUSE.FLIP270" press="::EditModeSetMouse flip270" />
</div>
<div justify_content="center" align_items="center">
<label align="center" translation="EDIT_MODE.MOUSE.WRONG_SCREEN_SELECTION_HELP" />
@@ -123,7 +123,7 @@
<div width="100%" justify_content="end" flex_direction="row">
<div>
<Button id="resize_corner" macro="button_style" tooltip="EDIT_MODE.RESIZE_CORNER" tooltip_side="left" _press="::EditModeResizeStart" _release="::EditModeResizeStop">
<sprite width="48" height="48" src="edit/resize-corner.svg" />
<sprite width="48" height="48" src="@/edit/resize-corner.svg" />
</Button>
</div>
</div>
+4 -4
View File
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<elements>
<div interactable="0">
<rectangle
@@ -10,15 +10,15 @@
<div flex_direction="row" padding="8" justify_content="space_between">
<div flex_direction="column" align_items="center" gap="8" max_width="160" min_width="160">
<sprite src="grab-help/controller-grip-joy.svg" min_width="128" min_height="128" max_width="128" max_height="128" flex_grow="1" color="primary" />
<sprite src="@/grab-help/controller-grip-joy.svg" min_width="128" min_height="128" max_width="128" max_height="128" flex_grow="1" color="primary" />
<label wrap="1" size="25" padding_left="16" padding_right="16" translation="GRAB.ADJUST_DISTANCE" align="center" />
</div>
<div flex_direction="column" align_items="center" gap="8" max_width="160" min_width="160">
<sprite src="grab-help/controller-grip-trigger-joy.svg" min_width="128" min_height="128" max_width="128" max_height="128" flex_grow="1" color="primary" />
<sprite src="@/grab-help/controller-grip-trigger-joy.svg" min_width="128" min_height="128" max_width="128" max_height="128" flex_grow="1" color="primary" />
<label wrap="1" size="25" padding_left="16" padding_right="16" translation="GRAB.ADJUST_SIZE" align="center" />
</div>
<div flex_direction="column" align_items="center" gap="8" max_width="160" min_width="160">
<sprite src="grab-help/controller-grip-b.svg" min_width="128" min_height="128" max_width="128" max_height="128" flex_grow="1" color="primary" />
<sprite src="@/grab-help/controller-grip-b.svg" min_width="128" min_height="128" max_width="128" max_height="128" flex_grow="1" color="primary" />
<label wrap="1" size="25" padding_left="16" padding_right="16" translation="GRAB.UNRESTRICTED_MOVEMENT" align="center" />
</div>
</div>
+10 -10
View File
@@ -1,4 +1,4 @@
<layout>
<layout version="2">
<macro name="keycap_rect"
margin="2" width="100%" overflow="hidden" box_sizing="border_box"
border_color="outline" border="2" round="6" color="background_variant" color2="background" gradient="vertical"
@@ -13,9 +13,9 @@
width="${width}" height="${height}" min_width="${width}" min_height="${height}" max_width="${width}" max_height="${height}"
/>
<theme>
<vars>
<var key="text_size" value="20" />
</theme>
</vars>
<template name="VerticalSeparator">
<rectangle width="2" height="100%" color="primary" />
@@ -28,7 +28,7 @@
<template name="KeySpecial">
<div macro="keycap_div">
<rectangle id="${id}" macro="keycap_rect">
<sprite color="on_background" width="24" height="24" src="keyboard/${text}.svg" />
<sprite color="on_background" width="24" height="24" src="@/keyboard/${text}.svg" />
</rectangle>
</div>
</template>
@@ -127,7 +127,7 @@
<!-- A screen with a shortened connector name, e.g. "H1" for HDMI-A-1 or "D2" for DP-2 -->
<template name="Screen">
<Button macro="button_style" id="overlay_${idx}" tooltip_str="${name}" _context_name="${name}" _press_left="::ContextMenuOpen menu_screen" _press_right="::OverlayToggle ${name}">
<sprite width="38" height="38" src_builtin="edit/screen.svg" />
<sprite width="38" height="38" src_builtin="@/edit/screen.svg" />
<div position="absolute" margin_top="-7" margin_left="-1">
<label text="${display}" size="~text_size" weight="bold" parent_color="background" />
</div>
@@ -160,7 +160,7 @@
<template name="Mirror">
<Button macro="button_style" id="overlay_${idx}" tooltip_str="${name}" _context_name="${name}" _press_left="::ContextMenuOpen menu_mirror" _press_right="::OverlayToggle ${name}">
<sprite width="38" height="38" src_builtin="edit/mirror.svg" />
<sprite width="38" height="38" src_builtin="@/edit/mirror.svg" />
<div position="absolute" margin_top="5" margin_left="13">
<label text="${display}" size="20" weight="bold" parent_color="background" />
</div>
@@ -170,7 +170,7 @@
<!-- mirror with a different icon -->
<template name="Passthru">
<Button macro="button_style" id="overlay_${idx}" tooltip_str="${name}" _context_name="${name}" _press_left="::ContextMenuOpen menu_mirror" _press_right="::OverlayToggle ${name}">
<sprite width="38" height="38" src_builtin="icons/landscape.svg" />
<sprite width="38" height="38" src_builtin="@/icons/landscape.svg" />
<div position="absolute" margin_top="5" margin_left="13">
<label text="${display}" size="20" weight="bold" parent_color="background" />
</div>
@@ -200,7 +200,7 @@
<template name="Set">
<Button macro="button_style" id="set_${idx}" _press="::SetSwitch ${idx}" tooltip="WATCH.SWITCH_TO_SET" tooltip_side="bottom">
<sprite width="38" height="38" src_builtin="watch/set2.svg" />
<sprite width="38" height="38" src_builtin="@/watch/set2.svg" />
<div position="absolute" margin_top="10" margin_left="-7">
<label text="${display}" size="20" weight="bold" parent_color="background" />
</div>
@@ -220,7 +220,7 @@
<rectangle macro="bg_rect" padding="10" align_items="center" justify_content="space_between">
<div gap="10">
<Button macro="button_style" id="btn_dashboard" _press="::DashToggle">
<sprite width="38" height="38" src="watch/wayvr_dashboard_mono.svg" />
<sprite width="38" height="38" src="@/watch/wayvr_dashboard_mono.svg" />
</Button>
<VerticalSeparator />
<div id="panels_root" gap="6">
@@ -231,7 +231,7 @@
</div>
<div id="tray_root" flex_direction="row" gap="10">
<Button macro="button_style" _press="::ContextMenuOpen menu_burger">
<sprite width="38" height="38" src_builtin="keyboard/burger.svg" />
<sprite width="38" height="38" src_builtin="@/keyboard/burger.svg" />
</Button>
<VerticalSeparator />
Loaded 100 of 148 files, more files were not shown because too many files have changed in this diff. Show more