dash and wgui sounds

This commit is contained in:
Aleksander
2026-01-03 15:00:31 +01:00
parent 383bf3b11f
commit feba52c28f
34 changed files with 258 additions and 96 deletions

View File

@@ -0,0 +1 @@
../../../wlx-overlay-s/src/assets/sound/wgui_button_press.mp3

View File

@@ -0,0 +1 @@
../../../wlx-overlay-s/src/assets/sound/wgui_button_release.mp3

View File

@@ -0,0 +1 @@
../../../wlx-overlay-s/src/assets/sound/wgui_mouse_enter.mp3

View File

@@ -18,6 +18,7 @@ use vulkano::{
sync::GpuFuture,
};
use wgui::{
assets::AssetProvider,
event::{MouseButtonIndex, MouseDownEvent, MouseMotionEvent, MouseUpEvent, MouseWheelEvent},
gfx::{WGfx, cmd::WGfxClearMode},
renderer_vk::{self},
@@ -27,7 +28,7 @@ use winit::{
event_loop::ControlFlow,
keyboard::{KeyCode, PhysicalKey},
};
use wlx_common::timestep::Timestep;
use wlx_common::{audio, timestep::Timestep};
use crate::{
rate_limiter::RateLimiter,
@@ -59,12 +60,15 @@ fn init_logging() {
.init();
}
fn load_testbed() -> anyhow::Result<Box<dyn Testbed>> {
fn load_testbed(audio_sample_player: &mut audio::SamplePlayer) -> anyhow::Result<Box<dyn Testbed>> {
let mut assets = Box::new(assets::Asset {});
audio_sample_player.register_wgui_samples(assets.as_mut())?;
let name = std::env::var("TESTBED").unwrap_or_default();
Ok(match name.as_str() {
"dashboard" => Box::new(TestbedDashboard::new()?),
"" => Box::new(TestbedGeneric::new()?),
_ => Box::new(TestbedAny::new(&name)?),
"" => Box::new(TestbedGeneric::new(assets)?),
_ => Box::new(TestbedAny::new(assets, &name)?),
})
}
@@ -98,7 +102,9 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut scale = window.scale_factor() as f32;
let mut testbed = load_testbed()?;
let mut audio_system = audio::AudioSystem::new();
let mut audio_sample_player = audio::SamplePlayer::new();
let mut testbed = load_testbed(&mut audio_sample_player)?;
let mut mouse = Vec2::ZERO;
@@ -291,6 +297,8 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
width: (swapchain_size[0] as f32 / scale) as _,
height: (swapchain_size[1] as f32 / scale) as _,
timestep_alpha: timestep.alpha,
audio_system: &mut audio_system,
audio_sample_player: &mut audio_sample_player,
})
.unwrap();

View File

@@ -1,13 +1,24 @@
use wgui::layout::Layout;
use wgui::layout::{Layout, LayoutUpdateResult};
use wlx_common::audio;
pub mod testbed_any;
pub mod testbed_dashboard;
pub mod testbed_generic;
pub struct TestbedUpdateParams {
pub struct TestbedUpdateParams<'a> {
pub width: f32,
pub height: f32,
pub timestep_alpha: f32,
pub audio_system: &'a mut audio::AudioSystem,
pub audio_sample_player: &'a mut audio::SamplePlayer,
}
impl<'a> TestbedUpdateParams<'a> {
pub fn process_layout_result(&mut self, res: LayoutUpdateResult) {
self
.audio_sample_player
.play_wgui_samples(self.audio_system, res.sounds_to_play);
}
}
pub trait Testbed {

View File

@@ -9,7 +9,7 @@ use wgui::{
assets::AssetPath,
font_config::WguiFontConfig,
globals::WguiGlobals,
layout::{Layout, LayoutParams},
layout::{Layout, LayoutParams, LayoutUpdateParams},
parser::{ParseDocumentParams, ParserState},
};
@@ -21,7 +21,7 @@ pub struct TestbedAny {
}
impl TestbedAny {
pub fn new(name: &str) -> anyhow::Result<Self> {
pub fn new(assets: Box<assets::Asset>, name: &str) -> anyhow::Result<Self> {
let path = if name.ends_with(".xml") {
AssetPath::FileOrBuiltIn(name)
} else {
@@ -29,7 +29,7 @@ impl TestbedAny {
};
let globals = WguiGlobals::new(
Box::new(assets::Asset {}),
assets,
wgui::globals::Defaults::default(),
&WguiFontConfig::default(),
PathBuf::new(), // cwd
@@ -48,11 +48,12 @@ impl TestbedAny {
}
impl Testbed for TestbedAny {
fn update(&mut self, params: TestbedUpdateParams) -> anyhow::Result<()> {
self.layout.update(
Vec2::new(params.width, params.height),
params.timestep_alpha,
)?;
fn update(&mut self, mut params: TestbedUpdateParams) -> anyhow::Result<()> {
let res = self.layout.update(&mut LayoutUpdateParams {
size: Vec2::new(params.width, params.height),
timestep_alpha: params.timestep_alpha,
})?;
params.process_layout_result(res);
Ok(())
}

View File

@@ -1,6 +1,6 @@
use crate::testbed::{Testbed, TestbedUpdateParams};
use dash_frontend::{
frontend,
frontend::{self, FrontendUpdateParams},
settings::{self, SettingsIO},
};
use wgui::layout::Layout;
@@ -70,13 +70,15 @@ impl TestbedDashboard {
}
impl Testbed for TestbedDashboard {
fn update(&mut self, params: TestbedUpdateParams) -> anyhow::Result<()> {
self.frontend.update(
&mut (), /* nothing */
params.width,
params.height,
params.timestep_alpha,
)
fn update(&mut self, mut params: TestbedUpdateParams) -> anyhow::Result<()> {
let res = self.frontend.update(FrontendUpdateParams {
data: &mut (), /* nothing */
width: params.width,
height: params.height,
timestep_alpha: params.timestep_alpha,
})?;
params.process_layout_result(res);
Ok(())
}
fn layout(&mut self) -> &mut Layout {

View File

@@ -17,7 +17,7 @@ use wgui::{
font_config::WguiFontConfig,
globals::WguiGlobals,
i18n::Translation,
layout::{Layout, LayoutParams, Widget},
layout::{Layout, LayoutParams, LayoutUpdateParams, Widget},
parser::{Fetchable, ParseDocumentExtra, ParseDocumentParams, ParserState},
taffy,
task::Tasks,
@@ -73,11 +73,11 @@ fn handle_button_click(button: Rc<ComponentButton>, label: Widget, text: &'stati
}
impl TestbedGeneric {
pub fn new() -> anyhow::Result<Self> {
pub fn new(assets: Box<assets::Asset>) -> anyhow::Result<Self> {
const XML_PATH: AssetPath = AssetPath::BuiltIn("gui/various_widgets.xml");
let globals = WguiGlobals::new(
Box::new(assets::Asset {}),
assets,
wgui::globals::Defaults::default(),
&WguiFontConfig::default(),
PathBuf::new(), // cwd
@@ -223,10 +223,12 @@ impl Testbed for TestbedGeneric {
let data = self.data.clone();
let mut data = data.borrow_mut();
self.layout.update(
Vec2::new(params.width, params.height),
params.timestep_alpha,
)?;
let res = self.layout.update(&mut LayoutUpdateParams {
size: Vec2::new(params.width, params.height),
timestep_alpha: params.timestep_alpha,
})?;
params.process_layout_result(res);
for task in self.tasks.drain() {
self.process_task(&task, &mut params, &mut data)?;