MEDIABROWSER 개명·업데이트 채널 전환·아이콘 tofu 근본 수정 (BACKLOG 13차) — ①개명: installer.iss AppName/출력 MediaBrowser-Setup-*(AppId·exe·데이터 경로 유지로 업그레이드 호환), 워크플로 산출물명(mediabrowser-*.tar.gz, MediaBrowser-<ver>-arm64.apk), 창 타이틀·모바일 표시명·obtainium.json·README. ②UpdateChecker: apiBase 주입(기본=자체 Forgejo /api/v1, GitHub 는 apiBase 로 호환), osx 자산 tar.gz 허용(기존 dmg 만 → mac 영원히 자산 없음 결함 수정), AppConfig 기본 UpdateRepo=Video-Downloader/releases+UpdateApiBase — 테스트 4건. ③아이콘 tofu(사용자 보고 "절대 안고쳐지네") 근본 원인: Shared.xaml 암시적 TextBlock 스타일의 FontFamily=UiFont 강제가 버튼 ContentPresenter 자동 TextBlock 의 IconFont 상속을 덮어 모든 PUA 글리프가 notdef — 폰트 설치/글리프 존재/HW·SW 렌더/RTB/DPI/런타임 8·10/자체포함·공유 전부 배제 후 실창 픽셀 비교로 격리, 콘텐츠 TextBlock 의 실폰트가 Pretendard 체인임을 테스트로 실증. 수정: 암시 스타일 FontFamily 제거(창 루트 상속으로 통일, PairingWindow/PlayerWindow 는 SetResourceReference), PUA+텍스트 혼합 콘텐츠 7곳+코드 1곳 정리, 순수 글리프 2곳 IconFont 명시. 회귀 방어: IconGlyphXamlTests(정적 스캔)·IconContentFontTests(실창 폰트 단정)·IconGlyphRenderTests(픽셀 비교) — 462/462 GREEN, 수정 전후 실창 캡처로 글리프 렌더 확인

This commit is contained in:
Yun Chan 2026-08-18 07:13:18 +09:00
parent c8b061959b
commit 02995f4153
24 changed files with 451 additions and 64 deletions

View file

@ -9,13 +9,13 @@
xmlns:feat="clr-namespace:VideoDownloader.App.Browser.Features"
mc:Ignorable="d"
FontFamily="{DynamicResource UiFont}"
Title="Video Downloader" Height="820" Width="1300"
Title="MediaBrowser" Height="820" Width="1300"
Background="{DynamicResource WindowBgGradient}"
WindowStartupLocation="CenterScreen"
UseLayoutRounding="True"
ToolTipService.InitialShowDelay="400"
ToolTipService.ShowDuration="8000"
AutomationProperties.Name="Video Downloader 메인 창"
AutomationProperties.Name="MediaBrowser 메인 창"
WindowStyle="None" ResizeMode="CanResize">
<!-- 보더리스: WindowChrome 이 실제 엣지 리사이즈 + 올바른 최대화(작업표시줄 존중) + DWM 그림자 담당 -->
@ -273,7 +273,7 @@
<Border Width="26" Height="26" CornerRadius="7" Background="{DynamicResource AccentGradient}">
<TextBlock Text="&#xE896;" Style="{StaticResource FluentIcon}" Foreground="White" FontSize="14"/>
</Border>
<TextBlock Text="Video Downloader" Foreground="{DynamicResource TextPrimary}"
<TextBlock Text="MediaBrowser" Foreground="{DynamicResource TextPrimary}"
FontWeight="SemiBold" FontSize="13.5" VerticalAlignment="Center" Margin="9,0,0,0"/>
</StackPanel>
@ -389,7 +389,7 @@
Background="Transparent" BorderThickness="0" Padding="0"
AutomationProperties.Name="클립보드 링크 받기 제안">
<Border Background="{DynamicResource AccentFadeBrush}" CornerRadius="9" Padding="9,3">
<TextBlock Text="&#xE71B; 링크 붙여넣고 받기" FontSize="10.5" Foreground="{DynamicResource TextPrimary}"/>
<TextBlock Text="링크 붙여넣고 받기" FontSize="10.5" Foreground="{DynamicResource TextPrimary}"/>
</Border>
</Button>
</Grid>
@ -500,7 +500,7 @@
Foreground="{DynamicResource TextMuted}" Visibility="Collapsed"
AutomationProperties.Name="잠긴 탭"/>
<Button DockPanel.Dock="Right" Style="{StaticResource CardActionButton}"
Content="&#xE711;" FontSize="9" Padding="5,3" Margin="4,0,0,0"
Content="&#xE711;" FontFamily="{DynamicResource IconFont}" FontSize="9" Padding="5,3" Margin="4,0,0,0"
Click="TabClose_Click" ToolTip="탭 닫기 (Ctrl+W)"
VerticalAlignment="Center"
AutomationProperties.Name="탭 닫기"/>
@ -676,9 +676,9 @@
<DockPanel>
<!-- UC-D06/D07 모두 일시정지/재개 -->
<StackPanel DockPanel.Dock="Right" Orientation="Horizontal">
<Button Style="{StaticResource CardActionButton}" Content="&#xE769; 모두 일시정지" Click="PauseAllDownloads_Click" Margin="0,0,5,0"
<Button Style="{StaticResource CardActionButton}" Content="모두 일시정지" Click="PauseAllDownloads_Click" Margin="0,0,5,0"
AutomationProperties.Name="모두 일시정지"/>
<Button Style="{StaticResource CardActionButton}" Content="&#xE768; 모두 재개" Click="ResumeAllDownloads_Click" Margin="0,0,5,0"
<Button Style="{StaticResource CardActionButton}" Content="모두 재개" Click="ResumeAllDownloads_Click" Margin="0,0,5,0"
AutomationProperties.Name="모두 재개"/>
<Button Style="{StaticResource CardActionButton}" Content="CSV" Click="ExportDownloads_Click"
ToolTip="다운로드 목록 CSV 내보내기" AutomationProperties.Name="목록 CSV 내보내기"/>
@ -762,7 +762,7 @@
Background="{DynamicResource CardBg}" BorderBrush="{DynamicResource ErrorBrush}" BorderThickness="1"
CornerRadius="10" Padding="12,8" Visibility="Collapsed" Panel.ZIndex="41">
<DockPanel>
<Button DockPanel.Dock="Right" Style="{StaticResource CardActionButton}" Content="&#xE711;" Click="ErrorBanner_Close"
<Button DockPanel.Dock="Right" Style="{StaticResource CardActionButton}" Content="&#xE711;" FontFamily="{DynamicResource IconFont}" Click="ErrorBanner_Close"
AutomationProperties.Name="오류 배너 닫기"/>
<Expander x:Name="ErrorDetailExpander" Header="오류가 발생했습니다 — 펼쳐서 상세 보기"
Foreground="{DynamicResource ErrorBrush}" FontSize="12"
@ -778,7 +778,7 @@
<Border Style="{StaticResource EmptyStateStyle}" Background="{DynamicResource CardBg}" MaxWidth="460"
VerticalAlignment="Center" HorizontalAlignment="Center" Padding="28">
<StackPanel>
<TextBlock Text="Video Downloader 에 오세요" Style="{StaticResource Type.H1}" Margin="0,0,0,8"/>
<TextBlock Text="MediaBrowser 에 오세요" Style="{StaticResource Type.H1}" Margin="0,0,0,8"/>
<TextBlock Style="{StaticResource Type.Body}"
Text="영상을 재생하면 자동으로 감지해 오른쪽 패널에 카드가 생깁니다. 받기 버튼으로 저장하고, 휴대폰 QR 페어링으로 밖에서도 볼 수 있어요."/>
<TextBlock Style="{StaticResource Type.Caption}" Margin="0,10,0,0"
@ -1073,7 +1073,7 @@
<TextBlock Text="미디어 재생목록" Foreground="{DynamicResource TextPrimary}" FontWeight="SemiBold" VerticalAlignment="Center"/>
<StackPanel DockPanel.Dock="Right" Orientation="Horizontal" HorizontalAlignment="Right">
<!-- UC-M11 셔플 -->
<Button x:Name="PlaylistShuffle" Style="{StaticResource CardActionButton}" Content="&#xE8B1; 셔플" Click="PlaylistShuffle_Click" Margin="0,0,5,0"
<Button x:Name="PlaylistShuffle" Style="{StaticResource CardActionButton}" Content="셔플" Click="PlaylistShuffle_Click" Margin="0,0,5,0"
AutomationProperties.Name="재생목록 셔플"/>
<!-- UC-M12 반복 모드 -->
<Button x:Name="PlaylistLoop" Style="{StaticResource CardActionButton}" Content="반복 끔" Click="PlaylistLoop_Click" Margin="0,0,5,0"
@ -1158,7 +1158,7 @@
<TextBlock Text="라이브러리" Style="{StaticResource Type.H1}" FontSize="15" VerticalAlignment="Center"/>
<StackPanel DockPanel.Dock="Right" Orientation="Horizontal" HorizontalAlignment="Right">
<!-- UC-M02 그리드/리스트 전환 -->
<Button x:Name="LibraryViewToggle" Style="{StaticResource CardActionButton}" Content="&#xE8FD; 그리드" Click="LibraryViewToggle_Click"
<Button x:Name="LibraryViewToggle" Style="{StaticResource CardActionButton}" Content="그리드" Click="LibraryViewToggle_Click"
Margin="0,0,6,0" AutomationProperties.Name="라이브러리 보기 전환"/>
<!-- UC-M04 정렬 메뉴 -->
<Menu x:Name="LibrarySortMenu" Background="Transparent">