1. Stream Info + YPP rails are YouTube surfaces → new `youtube` token #ff0000. It is documented as brand-only: live state stays `primary`, so the two reds never mean the same thing. 2. EDIT toggle: the checked trigger set the SAME colour as the resting face, so clicking it changed nothing visible. Resting is now the neutral surface with muted text; armed is blue with dark text, and the label follows the fill. 3. Active scene outline is orange again (`attention`) — it marks the scene you work on, not a selection; blue made it read as "selected". Live stays red. 4. Scene names wear the same pill as the hotkey chips (black, 10px radius, 8×2 padding), so both labels stay readable over any thumbnail. 5. REC / ON-AIR pills and the running stop button read red while armed/live — including test mode, where the top bar is gold. New `RecordPillToggle` style (its own template, because SegmentToggle hard-codes a transparent face); the stop button's grey `#333` literal is gone. 6. The properties list had `MaxHeight="420"` inside an Auto row, so it scrolled while the window had space left. The row is `*` now and the cap is gone. Guard: UiShellTests pins all six to the markup and names the one that regresses.
88 lines
5.8 KiB
XML
88 lines
5.8 KiB
XML
<UserControl x:Class="ytLive.Controls.SceneThumbnailStrip"
|
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
|
<Border Background="{StaticResource Brush.SurfaceContainerLowest}" CornerRadius="4" Padding="4">
|
|
<ItemsControl ItemsSource="{Binding Scenes}" HorizontalAlignment="Center" VerticalAlignment="Center">
|
|
<ItemsControl.ItemsPanel>
|
|
<ItemsPanelTemplate>
|
|
<StackPanel Orientation="Horizontal"/>
|
|
</ItemsPanelTemplate>
|
|
</ItemsControl.ItemsPanel>
|
|
<ItemsControl.ItemTemplate>
|
|
<DataTemplate>
|
|
<Border Width="196" Height="130" CornerRadius="4" Margin="2" Padding="2"
|
|
BorderThickness="2"
|
|
Cursor="Hand"
|
|
MouseLeftButtonDown="Thumbnail_MouseLeftButtonDown">
|
|
<Border.Style>
|
|
<Style TargetType="Border">
|
|
<Setter Property="BorderBrush" Value="{StaticResource Brush.Outline}"/>
|
|
<Style.Triggers>
|
|
<!-- Active scene = orange (creator ruling 2026-10-30): it marks
|
|
the stage you are working on, not a selection — blue is
|
|
the interactive accent and read as "selected". Live
|
|
stays red. -->
|
|
<DataTrigger Binding="{Binding IsStaged}" Value="True">
|
|
<Setter Property="BorderBrush" Value="{StaticResource Brush.Attention}"/>
|
|
</DataTrigger>
|
|
<DataTrigger Binding="{Binding IsLive}" Value="True">
|
|
<Setter Property="BorderBrush" Value="{StaticResource Brush.Primary}"/>
|
|
</DataTrigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
</Border.Style>
|
|
<Grid>
|
|
<Border CornerRadius="3" Background="{StaticResource Brush.SurfaceContainerLowest}" ClipToBounds="True">
|
|
<Image Source="{Binding Snapshot}"
|
|
Stretch="UniformToFill"
|
|
RenderOptions.BitmapScalingMode="LowQuality"/>
|
|
</Border>
|
|
|
|
<Border HorizontalAlignment="Left" VerticalAlignment="Top" Margin="6" Padding="8,3"
|
|
CornerRadius="3" Background="{StaticResource Brush.Primary}">
|
|
<Border.Style>
|
|
<Style TargetType="Border">
|
|
<Setter Property="Visibility" Value="Collapsed"/>
|
|
<Style.Triggers>
|
|
<DataTrigger Binding="{Binding IsStaged}" Value="True">
|
|
<Setter Property="Visibility" Value="Visible"/>
|
|
</DataTrigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
</Border.Style>
|
|
<StackPanel Orientation="Horizontal">
|
|
<Ellipse Width="8" Height="8" Fill="{StaticResource Brush.Primary}" VerticalAlignment="Center" Margin="0,0,5,0">
|
|
<Ellipse.Triggers>
|
|
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
|
|
<BeginStoryboard>
|
|
<Storyboard RepeatBehavior="Forever" AutoReverse="True">
|
|
<DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0.15" Duration="0:0:0.6"/>
|
|
</Storyboard>
|
|
</BeginStoryboard>
|
|
</EventTrigger>
|
|
</Ellipse.Triggers>
|
|
</Ellipse>
|
|
<TextBlock Text="PROGRAM" Foreground="White" FontSize="11" FontWeight="Bold" VerticalAlignment="Center"/>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border HorizontalAlignment="Right" VerticalAlignment="Top" Margin="6" Padding="8,2"
|
|
CornerRadius="10" Background="#000000">
|
|
<TextBlock Text="{Binding HotkeyLabel, Mode=OneWay}" Foreground="White" FontSize="16" FontWeight="SemiBold"/>
|
|
</Border>
|
|
|
|
<!-- The scene name wears the same pill as the hotkey chip, so both
|
|
labels stay readable over any thumbnail. -->
|
|
<Border HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="6"
|
|
Padding="8,2" CornerRadius="10" Background="#000000">
|
|
<TextBlock Text="{Binding Name, Mode=OneWay}" Foreground="White" FontSize="15" FontWeight="SemiBold"
|
|
TextTrimming="CharacterEllipsis"/>
|
|
</Border>
|
|
</Grid>
|
|
</Border>
|
|
</DataTemplate>
|
|
</ItemsControl.ItemTemplate>
|
|
</ItemsControl>
|
|
</Border>
|
|
</UserControl>
|