Add baby steps for audio device choice support

Former-commit-id: 8c1d623b2a28997e7705ba2775b382b38e9a34ed
This commit is contained in:
Louis Pearson 2019-05-20 08:53:12 -06:00
parent 7cfd3ad1cd
commit 50fc7549b9
2 changed files with 78 additions and 1 deletions

View File

@ -92,6 +92,7 @@ pub enum Event {
SendMessage(String),
AdjustViewDistance(u32),
AdjustVolume(f32),
ChangeAudioDevice(String),
Logout,
Quit,
}
@ -212,10 +213,13 @@ pub struct Hud {
// TODO: move to settings
current_vd: u32,
current_volume: f32,
audio_devices: Vec<String>,
current_audio_device: String,
}
impl Hud {
pub fn new(window: &mut Window, settings: Settings) -> Self {
let settings = global_state.settings;
let mut ui = Ui::new(window).unwrap();
// TODO: Adjust/remove this, right now it is used to demonstrate window scaling functionality.
ui.scaling_mode(ScaleMode::RelativeToWindow([1920.0, 1080.0].into()));
@ -385,6 +389,8 @@ impl Hud {
&self.fonts,
self.current_vd,
self.current_volume,
self.audio_devices,
self.current_audio_device,
)
.set(self.ids.settings_window, ui_widgets)
{
@ -403,6 +409,10 @@ impl Hud {
self.current_volume = volume;
events.push(Event::AdjustVolume(volume));
}
settings_window::Event::ChangeAudioDevice(name) => {
self.current_audio_device = name;
events.push(Event::ChangeAudioDevice(name));
}
}
}
}

View File

@ -10,7 +10,7 @@ use crate::{
};
use conrod_core::{
color,
widget::{self, Button, Image, Rectangle, Scrollbar, Text},
widget::{self, Button, Image, List, Rectangle, Scrollbar, Text},
widget_ids, Colorable, Labelable, Positionable, Sizeable, Widget, WidgetCommon,
};
widget_ids! {
@ -45,6 +45,8 @@ widget_ids! {
vd_slider_text,
audio_volume_slider,
audio_volume_text,
audio_device_list,
audio_device_text,
}
}
@ -65,6 +67,8 @@ pub struct SettingsWindow<'a> {
current_vd: u32,
current_volume: f32,
audio_devices: Vec<String>,
current_audio_device: String,
#[conrod(common_builder)]
common: widget::CommonBuilder,
@ -77,6 +81,8 @@ impl<'a> SettingsWindow<'a> {
fonts: &'a Fonts,
current_vd: u32,
current_volume: f32,
audio_devices: Vec<String>,
current_audio_device: String,
) -> Self {
Self {
show,
@ -84,6 +90,8 @@ impl<'a> SettingsWindow<'a> {
fonts,
current_vd,
current_volume,
audio_devices,
current_audio_device,
common: widget::CommonBuilder::default(),
}
}
@ -102,6 +110,7 @@ pub enum Event {
Close,
AdjustViewDistance(u32),
AdjustVolume(f32),
ChangeAudioDevice(String),
}
impl<'a> Widget for SettingsWindow<'a> {
@ -535,6 +544,7 @@ impl<'a> Widget for SettingsWindow<'a> {
}
// Contents
if let SettingsTab::Sound = state.settings_tab {
// Volume Slider ----------------------------------------------------
Text::new("Volume")
.top_left_with_margins_on(state.ids.settings_content, 10.0, 10.0)
.font_size(14)
@ -558,6 +568,63 @@ impl<'a> Widget for SettingsWindow<'a> {
{
events.push(Event::AdjustVolume(new_val));
}
// Audio Device Selector --------------------------------------------
Text::new("Volume")
.down_from(state.ids.audio_volume_slider, 10.0)
.font_size(14)
.font_id(self.fonts.opensans)
.color(TEXT_COLOR)
.set(state.ids.audio_device_text, ui);
// TODO: Draw scroll bar or remove it.
let (mut items, scrollbar) = List::flow_down(self.audio_devices.len())
.down_from(state.ids.audio_device_text, 10.0)
.w_h(400.0, 300.0)
.scrollbar_next_to()
.scrollbar_thickness(18.0)
.scrollbar_color(TEXT_COLOR)
.set(state.ids.audio_device_list, ui);
while let Some(item) = items.next(ui) {
let mut text = "".to_string();
if &self.audio_devices[item.i] == &self.current_audio_device {
text.push_str("* ")
} else {
text.push_str(" ")
}
text.push_str(&self.audio_devices[item.i]);
// TODO: Use buttons to allow changing audio devices
item.set(
Text::new(&text)
.down_from(state.ids.audio_device_text, 10.0)
.font_size(14)
.font_id(self.fonts.opensans)
.color(TEXT_COLOR),
ui,
);
/*
if item
.set(
Button::image(self.imgs.button)
.w_h(100.0, 53.0)
.mid_bottom_with_margin_on(self.ids.servers_frame, 5.0)
.hover_image(self.imgs.button_hover)
.press_image(self.imgs.button_press)
.label_y(Relative::Scalar(2.0))
.label(&text)
.label_font_size(20)
.label_color(TEXT_COLOR),
ui,
)
.was_clicked()
{
events.push(Event::ChangeAudioDevice(self.audio_devices[item.i]));
}
*/
}
}
events