polish(ui): tooltip on the layout button + even Audio Devices spacing

- The top-bar room-layout button was an icon-only canvas with no label or
  tooltip, while the Settings button beside it is labeled — a discoverability
  and consistency gap. Wrap it in the existing tooltip pattern ("Room layout",
  Position::Bottom) so its purpose is discoverable on hover.
- The Audio Devices input/output columns used spacing(4) while every other
  Settings section uses spacing(8); bump both to 8 for an even vertical rhythm.

Pure presentational changes. Build + clippy clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-14 03:35:18 -04:00
co-authored by Claude Opus 4.8
parent 472e2b7230
commit bd57bdd1bc
+9 -2
View File
@@ -1000,6 +1000,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
let top_bar = row![
horizontal_space(),
tooltip(
button(
Canvas::new(LayoutIcon { fg: color_text })
.width(iced::Length::Fixed(18.0))
@@ -1008,6 +1009,12 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
.on_press(AppMessage::OpenLayoutPicker)
.style(b_style(color_surface, color_blue, color_text, 6.0))
.padding(8),
container(text("Room layout").size(11).color(color_text))
.padding(8)
.style(c_style(color_crust, color_surface, 6.0)),
iced::widget::tooltip::Position::Bottom,
)
.gap(8),
button(
row![
icon(IconKind::Settings, 15.0, color_text),
@@ -1222,7 +1229,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
slider(0.0..=2.0, state.config.input_volume, AppMessage::InputVolumeChanged)
.step(0.05)
.on_release(AppMessage::PersistConfig),
].spacing(4).width(iced::Length::Fill),
].spacing(8).width(iced::Length::Fill),
column![
text("Output Device").size(12).color(color_subtext),
pick_list(
@@ -1234,7 +1241,7 @@ fn view(state: &AppState) -> Element<'_, AppMessage> {
slider(0.0..=2.0, state.config.output_volume, AppMessage::OutputVolumeChanged)
.step(0.05)
.on_release(AppMessage::PersistConfig),
].spacing(4).width(iced::Length::Fill),
].spacing(8).width(iced::Length::Fill),
].spacing(20).align_y(iced::alignment::Vertical::Top).width(iced::Length::Fill),
vertical_space(section_gap),