Move mic to preview row + restructure bottom bar + hide avatar when signed out
Mic button/sound bar/slider moved from footer into the preview pane (vertically below the Socials+TRAX row). Bottom bar reduced to a single row: gear icon left, stream stats centered under preview, resolution dropdown right. Avatar image only loads when IsConnected fires true — no stale image from a previous session on startup. Build 0w, 247 tests.
This commit is contained in:
+34
-58
@@ -1287,9 +1287,13 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<!-- ═══ SOCIALS + TRAX METER (below preview, never overlaps) ═══ -->
|
<!-- ═══ LIVE CONTROLS (below preview, never overlaps) ═══
|
||||||
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center"
|
Line 1: Socials + TRAX meter (desktop/game audio)
|
||||||
|
Line 2: Mic meter + volume -->
|
||||||
|
<StackPanel Grid.Row="2" Orientation="Vertical" HorizontalAlignment="Center"
|
||||||
VerticalAlignment="Center" Margin="0,4">
|
VerticalAlignment="Center" Margin="0,4">
|
||||||
|
<!-- Line 1: Socials + TRAX -->
|
||||||
|
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,0,0,4">
|
||||||
<!-- Socials button: hover glows the social bar in the preview -->
|
<!-- Socials button: hover glows the social bar in the preview -->
|
||||||
<Button x:Name="SocialsButton"
|
<Button x:Name="SocialsButton"
|
||||||
Command="{Binding OpenSocialDialogCommand}"
|
Command="{Binding OpenSocialDialogCommand}"
|
||||||
@@ -1307,10 +1311,6 @@
|
|||||||
<!-- TRAX meter -->
|
<!-- TRAX meter -->
|
||||||
<Border Background="#D9000000" CornerRadius="6" Padding="12,8">
|
<Border Background="#D9000000" CornerRadius="6" Padding="12,8">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal">
|
||||||
<!-- TRAX sits left of the "Desktop Audio" label
|
|
||||||
(the creator's pick): it rides the desktop
|
|
||||||
channel, so the music control lives with the
|
|
||||||
desktop audio controls. -->
|
|
||||||
<Button Style="{StaticResource YtButtonSecondary}" Padding="8,2"
|
<Button Style="{StaticResource YtButtonSecondary}" Padding="8,2"
|
||||||
FontSize="11" VerticalAlignment="Center" Margin="0,0,8,0"
|
FontSize="11" VerticalAlignment="Center" Margin="0,0,8,0"
|
||||||
ToolTipService.ToolTip="{Binding TraxToolTip}"
|
ToolTipService.ToolTip="{Binding TraxToolTip}"
|
||||||
@@ -1375,32 +1375,8 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
<!-- Line 2: Mic meter + volume -->
|
||||||
</Border>
|
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
|
||||||
</Grid>
|
|
||||||
|
|
||||||
<!-- ═══ BOTTOM BAR: Stream Health + Audio ═══ -->
|
|
||||||
<Border Grid.Row="3" Background="#0f3460" Padding="16,6">
|
|
||||||
<Grid>
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition Height="Auto"/>
|
|
||||||
<RowDefinition Height="Auto"/>
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
|
|
||||||
<!-- Line 1: Mic meter + volume control CENTERED beneath the preview panel.
|
|
||||||
Audio is KISS: desktop/game audio is automatic (WASAPI loopback);
|
|
||||||
the mic meter is the creator's only footer audio control (the
|
|
||||||
game audio bar lives INSIDE the preview window, overlaid at its
|
|
||||||
bottom edge while a full-screen game is up, and carries the
|
|
||||||
TRAX button left of its "Desktop Audio" label). -->
|
|
||||||
<Grid Grid.Row="0">
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition Width="*"/>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
|
|
||||||
<!-- Mic meter + volume: centered under the preview panel -->
|
|
||||||
<StackPanel Grid.Column="0" Orientation="Horizontal"
|
|
||||||
HorizontalAlignment="Center" VerticalAlignment="Center">
|
|
||||||
<Button Command="{Binding OpenMicPickerCommand}"
|
<Button Command="{Binding OpenMicPickerCommand}"
|
||||||
Style="{StaticResource YtButtonSecondary}" Padding="12,4"
|
Style="{StaticResource YtButtonSecondary}" Padding="12,4"
|
||||||
FontSize="11" VerticalAlignment="Center" Margin="0,0,8,0"
|
FontSize="11" VerticalAlignment="Center" Margin="0,0,8,0"
|
||||||
@@ -1411,9 +1387,6 @@
|
|||||||
<TextBlock Text="MIC"/>
|
<TextBlock Text="MIC"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Button>
|
</Button>
|
||||||
<!-- Sound meter: muted track with a ruler scale, zone tints at
|
|
||||||
the yellow (60%) and red (80%) starts. READ-ONLY realtime
|
|
||||||
level display (fill = live level scaled by volume). -->
|
|
||||||
<Border Width="288" Height="14" CornerRadius="7" Background="#3a3b52" Margin="0,0,8,0"
|
<Border Width="288" Height="14" CornerRadius="7" Background="#3a3b52" Margin="0,0,8,0"
|
||||||
ClipToBounds="True" VerticalAlignment="Center">
|
ClipToBounds="True" VerticalAlignment="Center">
|
||||||
<Grid>
|
<Grid>
|
||||||
@@ -1421,8 +1394,6 @@
|
|||||||
VerticalAlignment="Stretch"/>
|
VerticalAlignment="Stretch"/>
|
||||||
<Rectangle Width="58" Fill="#4a2222" HorizontalAlignment="Left" Margin="230,0,0,0"
|
<Rectangle Width="58" Fill="#4a2222" HorizontalAlignment="Left" Margin="230,0,0,0"
|
||||||
VerticalAlignment="Stretch"/>
|
VerticalAlignment="Stretch"/>
|
||||||
<!-- Mic source name, left-justified inside the bar; the
|
|
||||||
semi-transparent fill lets it (and the markings) show through. -->
|
|
||||||
<TextBlock Text="{Binding MicSourceName}" Foreground="#b8b8c8" FontSize="10"
|
<TextBlock Text="{Binding MicSourceName}" Foreground="#b8b8c8" FontSize="10"
|
||||||
VerticalAlignment="Center" Margin="6,0,0,0" MaxWidth="270"
|
VerticalAlignment="Center" Margin="6,0,0,0" MaxWidth="270"
|
||||||
TextTrimming="CharacterEllipsis"
|
TextTrimming="CharacterEllipsis"
|
||||||
@@ -1461,18 +1432,38 @@
|
|||||||
PreviewMouseLeftButtonUp="VolumeSlider_PreviewMouseLeftButtonUp"
|
PreviewMouseLeftButtonUp="VolumeSlider_PreviewMouseLeftButtonUp"
|
||||||
LostMouseCapture="VolumeSlider_LostMouseCapture"/>
|
LostMouseCapture="VolumeSlider_LostMouseCapture"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<!-- Line 2: everything else — stream stats on the left, quality +
|
<!-- ═══ BOTTOM BAR: Stream stats + controls ═══ -->
|
||||||
gear on the right. -->
|
<Border Grid.Row="3" Background="#0f3460" Padding="16,4">
|
||||||
<Grid Grid.Row="1" Margin="0,6,0,0">
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="Auto"/>
|
<ColumnDefinition Width="Auto"/>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
<ColumnDefinition Width="Auto"/>
|
<ColumnDefinition Width="Auto"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<StackPanel Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center">
|
<!-- Gear icon: far left -->
|
||||||
|
<Button Grid.Column="0" ToolTip="Menu" Style="{StaticResource IconButton}"
|
||||||
|
VerticalAlignment="Center" Click="GearButton_Click">
|
||||||
|
<Button.ContextMenu>
|
||||||
|
<ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
|
||||||
|
<MenuItem Header="App Settings" Command="{Binding OpenSettingsCommand}"/>
|
||||||
|
<Separator/>
|
||||||
|
<MenuItem Header="Report Bug" Command="{Binding OpenBugCommand}"/>
|
||||||
|
<MenuItem Header="Feature Request" Command="{Binding OpenFeatureCommand}"/>
|
||||||
|
<MenuItem Header="About" Command="{Binding OpenAboutCommand}"/>
|
||||||
|
</ContextMenu>
|
||||||
|
</Button.ContextMenu>
|
||||||
|
<Path Data="M19.14,12.94c0.04,-0.3 0.06,-0.61 0.06,-0.94c0,-0.32 -0.02,-0.64 -0.07,-0.94l2.03,-1.58c0.18,-0.14 0.23,-0.41 0.12,-0.61l-1.92,-3.32c-0.12,-0.22 -0.37,-0.29 -0.59,-0.22l-2.39,0.96c-0.5,-0.38 -1.03,-0.7 -1.62,-0.94L14.4,2.81c-0.04,-0.24 -0.24,-0.41 -0.48,-0.41h-3.84c-0.24,0 -0.43,0.17 -0.47,0.41L9.25,5.35C8.66,5.59 8.12,5.92 7.63,6.29L5.24,5.33c-0.22,-0.08 -0.47,0 -0.59,0.22L2.74,8.87C2.62,9.08 2.66,9.34 2.86,9.48l2.03,1.58C4.84,11.36 4.8,11.69 4.8,12s0.02,0.64 0.07,0.94l-2.03,1.58c-0.18,0.14 -0.23,0.41 -0.12,0.61l1.92,3.32c0.12,0.22 0.37,0.29 0.59,0.22l2.39,-0.96c0.5,0.38 1.03,0.7 1.62,0.94l0.36,2.54c0.05,0.24 0.24,0.41 0.48,0.41h3.84c0.24,0 0.44,-0.17 0.47,-0.41l0.36,-2.54c0.59,-0.24 1.13,-0.56 1.62,-0.94l2.39,0.96c0.22,0.08 0.47,0 0.59,-0.22l1.92,-3.32c0.12,-0.22 0.07,-0.47 -0.12,-0.61L19.14,12.94zM12,15.6c-1.98,0 -3.6,-1.62 -3.6,-3.6s1.62,-3.6 3.6,-3.6s3.6,1.62 3.6,3.6S13.98,15.6 12,15.6z"
|
||||||
|
Fill="#d0d0d0" Width="16" Height="16" Stretch="Uniform"/>
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
<!-- Stream stats: centered under the preview pane -->
|
||||||
|
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
|
||||||
<TextBlock Text="Bitrate:" Style="{StaticResource YtLabel}" Margin="0,0,4,0"/>
|
<TextBlock Text="Bitrate:" Style="{StaticResource YtLabel}" Margin="0,0,4,0"/>
|
||||||
<TextBlock Style="{StaticResource YtLabel}"
|
<TextBlock Style="{StaticResource YtLabel}"
|
||||||
Foreground="White" Margin="0,0,20,0">
|
Foreground="White" Margin="0,0,20,0">
|
||||||
@@ -1498,28 +1489,13 @@
|
|||||||
Foreground="#e94560" Margin="20,0,0,0"/>
|
Foreground="#e94560" Margin="20,0,0,0"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
|
||||||
<StackPanel Grid.Column="2" Orientation="Horizontal" VerticalAlignment="Center">
|
<!-- Resolution dropdown: far right -->
|
||||||
<ComboBox Style="{StaticResource YtComboBox}" MinWidth="150"
|
<ComboBox Grid.Column="2" Style="{StaticResource YtComboBox}" MinWidth="150"
|
||||||
ItemsSource="{Binding QualityOptions}"
|
ItemsSource="{Binding QualityOptions}"
|
||||||
SelectedItem="{Binding SelectedQuality}"
|
SelectedItem="{Binding SelectedQuality}"
|
||||||
DisplayMemberPath="Label"
|
DisplayMemberPath="Label"
|
||||||
ToolTip="{Binding ResolutionHelp}"
|
ToolTip="{Binding ResolutionHelp}"
|
||||||
IsEnabled="{Binding IsOffline}"/>
|
IsEnabled="{Binding IsOffline}"/>
|
||||||
<Button ToolTip="Menu" Style="{StaticResource IconButton}" Click="GearButton_Click">
|
|
||||||
<Button.ContextMenu>
|
|
||||||
<ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
|
|
||||||
<MenuItem Header="App Settings" Command="{Binding OpenSettingsCommand}"/>
|
|
||||||
<Separator/>
|
|
||||||
<MenuItem Header="Report Bug" Command="{Binding OpenBugCommand}"/>
|
|
||||||
<MenuItem Header="Feature Request" Command="{Binding OpenFeatureCommand}"/>
|
|
||||||
<MenuItem Header="About" Command="{Binding OpenAboutCommand}"/>
|
|
||||||
</ContextMenu>
|
|
||||||
</Button.ContextMenu>
|
|
||||||
<Path Data="M19.14,12.94c0.04,-0.3 0.06,-0.61 0.06,-0.94c0,-0.32 -0.02,-0.64 -0.07,-0.94l2.03,-1.58c0.18,-0.14 0.23,-0.41 0.12,-0.61l-1.92,-3.32c-0.12,-0.22 -0.37,-0.29 -0.59,-0.22l-2.39,0.96c-0.5,-0.38 -1.03,-0.7 -1.62,-0.94L14.4,2.81c-0.04,-0.24 -0.24,-0.41 -0.48,-0.41h-3.84c-0.24,0 -0.43,0.17 -0.47,0.41L9.25,5.35C8.66,5.59 8.12,5.92 7.63,6.29L5.24,5.33c-0.22,-0.08 -0.47,0 -0.59,0.22L2.74,8.87C2.62,9.08 2.66,9.34 2.86,9.48l2.03,1.58C4.84,11.36 4.8,11.69 4.8,12s0.02,0.64 0.07,0.94l-2.03,1.58c-0.18,0.14 -0.23,0.41 -0.12,0.61l1.92,3.32c0.12,0.22 0.37,0.29 0.59,0.22l2.39,-0.96c0.5,0.38 1.03,0.7 1.62,0.94l0.36,2.54c0.05,0.24 0.24,0.41 0.48,0.41h3.84c0.24,0 0.44,-0.17 0.47,-0.41l0.36,-2.54c0.59,-0.24 1.13,-0.56 1.62,-0.94l2.39,0.96c0.22,0.08 0.47,0 0.59,-0.22l1.92,-3.32c0.12,-0.22 0.07,-0.47 -0.12,-0.61L19.14,12.94zM12,15.6c-1.98,0 -3.6,-1.62 -3.6,-3.6s1.62,-3.6 3.6,-3.6s3.6,1.62 3.6,3.6S13.98,15.6 12,15.6z"
|
|
||||||
Fill="#d0d0d0" Width="16" Height="16" Stretch="Uniform"/>
|
|
||||||
</Button>
|
|
||||||
</StackPanel>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</Border>
|
</Border>
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -34,7 +34,8 @@ public partial class MainWindow : Window
|
|||||||
_viewModel.ChatMessages.CollectionChanged += OnChatMessagesChanged;
|
_viewModel.ChatMessages.CollectionChanged += OnChatMessagesChanged;
|
||||||
UpdateTaskbarOverlay();
|
UpdateTaskbarOverlay();
|
||||||
UpdateSelectionOverlay();
|
UpdateSelectionOverlay();
|
||||||
LoadAvatarImage();
|
AvatarImage.Source = null;
|
||||||
|
AvatarInitial.Visibility = Visibility.Collapsed;
|
||||||
RestoreWindowGeometry();
|
RestoreWindowGeometry();
|
||||||
AppLog.Write("MainWindow ctor: end");
|
AppLog.Write("MainWindow ctor: end");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user