Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
DashieTM committed Feb 7, 2025
1 parent 40d3e03 commit 6eaaf9c
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 39 deletions.
36 changes: 5 additions & 31 deletions src/audio/audio_impl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ use zbus::{Connection, Proxy};

use crate::{
components::{
audio_card::{card_from_audio_object, device_card_view, stream_card_view},
audio_card::{
card_from_audio_object, device_card_view, populate_audio_cards, stream_card_view,
},
comborow::{ComboPickerTitle, CustomPickList, PickerVariant},
},
utils::ignore,
Expand Down Expand Up @@ -287,36 +289,8 @@ impl AudioModel<'_> {
}
col.into()
};
let output: Element<ReSetMessage> = {
let sink_card = card_from_audio_object(self.default_sink, &self.sinks).view();
let input_streams_cards: Vec<Element<ReSetMessage>> = self
.input_streams
.values()
.filter_map(|value| {
stream_card_view::<InputStream, AudioSink>(value.clone(), &self.sinks)
})
.collect();
let mut col = column![];
col = col.push(sink_card);
col = col.push(iced::widget::Space::with_height(10));
col = col.push(iced::widget::Rule::horizontal(2));
col = col.push(iced::widget::Space::with_height(10));
let stream_count = if input_streams_cards.is_empty() {
0
} else {
input_streams_cards.len() - 1
};
for (i, elem) in input_streams_cards.into_iter().enumerate() {
col = col.push(elem);
if i != stream_count {
col = col.push(iced::widget::Rule::horizontal(2));
}
}
column!(text("Output").size(30), col.spacing(20))
.padding(20)
.spacing(20)
.into()
};
let output: Element<ReSetMessage> =
populate_audio_cards(self.default_sink, &self.sinks, &self.input_streams);
let input = {
let source_card = card_from_audio_object(self.default_source, &self.sources).view();
let output_stream_cards: Vec<Element<ReSetMessage>> = self
Expand Down
37 changes: 37 additions & 0 deletions src/components/audio_card.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,43 @@ where
}
}

pub fn populate_audio_cards<'a, OBJ, STREAM>(
index: u32,
object_map: &'a HashMap<u32, OBJ>,
stream_map: &'a HashMap<u32, STREAM>,
) -> Element<'a, ReSetMessage>
where
OBJ: TAudioObject + TCardUser + std::fmt::Display + Clone + PartialEq + 'a,
STREAM: TAudioObject + TStreamCardUser<OBJ> + Clone + PartialEq + 'a,
{
let object = card_from_audio_object::<OBJ>(index, object_map).view();
let stream_cards: Vec<Element<ReSetMessage>> = stream_map
.values()
.filter_map(|value| stream_card_view::<STREAM, OBJ>(value.clone(), object_map))
.collect();
let mut col = column!(
object,
iced::widget::Space::with_height(10),
iced::widget::Rule::horizontal(2),
iced::widget::Space::with_height(10),
);
let stream_count = if stream_cards.is_empty() {
0
} else {
stream_cards.len() - 1
};
for (i, elem) in stream_cards.into_iter().enumerate() {
col = col.push(elem);
if i != stream_count {
col = col.push(iced::widget::Rule::horizontal(2));
}
}
column!(text(OBJ::title()).size(30), col.spacing(20))
.padding(20)
.spacing(20)
.into()
}

fn get_volume_level(volume: &[u32]) -> u32 {
// TODO beforepr does this always exist?
*volume.first().unwrap()
Expand Down
27 changes: 19 additions & 8 deletions src/components/comborow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,12 @@ where

let label = selected.map(ToString::to_string);

let mut draw_text = |text: String, alignment: Vertical| {
enum TextVariant {
Strong,
Weak,
}

let mut draw_text = |text: String, alignment: Vertical, variant: TextVariant| {
let text_size = self.text_size.unwrap_or_else(|| renderer.default_size());
renderer.fill_text(
Text {
Expand All @@ -536,7 +541,10 @@ where
},
Point::new(bounds.x + self.padding.left, bounds.center_y()),
if selected.is_some() {
style.text_color
match variant {
TextVariant::Strong => style.text_color,
TextVariant::Weak => style.placeholder_color,
}
} else {
style.placeholder_color
},
Expand All @@ -546,17 +554,20 @@ where
match &self.variant {
PickerVariant::RegularPicker => {
if let Some(label) = label.or_else(|| self.placeholder.clone()) {
draw_text(label, alignment::Vertical::Center);
draw_text(label, alignment::Vertical::Center, TextVariant::Strong);
}
}
PickerVariant::ComboPicker(combo_title) => {
// TODO beforepr why is the wrong title at the top when the title is
// vertical::top????
draw_text(combo_title.title.clone(), alignment::Vertical::Bottom);
combo_title
.subtitle
.iter()
.for_each(|text| draw_text(text.clone(), alignment::Vertical::Top));
draw_text(
combo_title.title.clone(),
alignment::Vertical::Bottom,
TextVariant::Strong,
);
combo_title.subtitle.iter().for_each(|text| {
draw_text(text.clone(), alignment::Vertical::Top, TextVariant::Weak)
});
}
}
}
Expand Down

0 comments on commit 6eaaf9c

Please sign in to comment.