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:
parent
c8b061959b
commit
02995f4153
24 changed files with 451 additions and 64 deletions
|
|
@ -15,9 +15,11 @@ public sealed class PairingWindow : Window
|
|||
{
|
||||
public PairingWindow(ServerHost server, string deviceName)
|
||||
{
|
||||
Title = "기기 연결 — Video Downloader";
|
||||
Title = "기기 연결 - MediaBrowser";
|
||||
Width = 420; Height = 560;
|
||||
WindowStartupLocation = WindowStartupLocation.CenterOwner;
|
||||
SetResourceReference(FontFamilyProperty, "UiFont"); // 암시 스타일 폰트 강제 제거 후 창 루트 상속으로 통일
|
||||
|
||||
Background = System.Windows.Media.Brushes.White;
|
||||
|
||||
var lanIp = GetLanIp();
|
||||
|
|
|
|||
|
|
@ -28,9 +28,11 @@ public sealed class PlayerWindow : Window
|
|||
_config = config;
|
||||
_playlist = playlist;
|
||||
|
||||
Title = "재생목록 — Video Downloader";
|
||||
Title = "재생목록 - MediaBrowser";
|
||||
Width = 900; Height = 620;
|
||||
WindowStartupLocation = WindowStartupLocation.CenterOwner;
|
||||
SetResourceReference(FontFamilyProperty, "UiFont"); // 암시 스타일 폰트 강제 제거 후 창 루트 상속으로 통일
|
||||
|
||||
|
||||
var bar = new Border { Background = System.Windows.Media.Brushes.Black, Padding = new Thickness(8, 6, 8, 6) };
|
||||
var dock = new DockPanel();
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@ public partial class MainWindow
|
|||
try
|
||||
{
|
||||
var current = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version?.ToString(3) ?? "0.0.0";
|
||||
var result = await new VideoDownloader.Core.Update.UpdateChecker().CheckAsync(repo, current, "win-x64");
|
||||
var result = await new VideoDownloader.Core.Update.UpdateChecker().CheckAsync(repo, current, "win-x64", _config.UpdateApiBase);
|
||||
if (result.IsNewer)
|
||||
{
|
||||
UpdateBadge.Visibility = Visibility.Visible;
|
||||
|
|
@ -656,7 +656,7 @@ public partial class MainWindow
|
|||
private void LibraryViewToggle_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
_libraryGrid = !_libraryGrid;
|
||||
LibraryViewToggle.Content = _libraryGrid ? "\uE8FD; 그리드" : "\uE71B; 리스트";
|
||||
LibraryViewToggle.Content = _libraryGrid ? "그리드" : "리스트";
|
||||
RefreshLibrary();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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="" 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=" 링크 붙여넣고 받기" 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="" FontSize="9" Padding="5,3" Margin="4,0,0,0"
|
||||
Content="" 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=" 모두 일시정지" 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=" 모두 재개" 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="" Click="ErrorBanner_Close"
|
||||
<Button DockPanel.Dock="Right" Style="{StaticResource CardActionButton}" Content="" 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=" 셔플" 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=" 그리드" 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">
|
||||
|
|
|
|||
|
|
@ -2208,7 +2208,7 @@ public partial class MainWindow : Window
|
|||
{
|
||||
public MainWindowAutomationPeer(Window owner) : base(owner) { }
|
||||
|
||||
protected override string GetNameCore() => "Video Downloader 메인 창";
|
||||
protected override string GetNameCore() => "MediaBrowser 메인 창";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ public partial class SettingsWindow : Window
|
|||
_sections.Add(SectionAbout);
|
||||
|
||||
// UC-S20 버전 정보
|
||||
VersionText.Text = $"Video Downloader {CurrentVersion()} · {MainWindow.ProfileFolder}";
|
||||
VersionText.Text = $"MediaBrowser {CurrentVersion()} · {MainWindow.ProfileFolder}";
|
||||
|
||||
// UC-S08 Ctrl+S 저장
|
||||
PreviewKeyDown += (_, e) =>
|
||||
|
|
@ -257,7 +257,7 @@ public partial class SettingsWindow : Window
|
|||
{
|
||||
var current = CurrentVersion();
|
||||
var rid = RuntimeInformation.ProcessArchitecture == Architecture.Arm64 ? "win-arm64" : "win-x64";
|
||||
var result = await new VideoDownloader.Core.Update.UpdateChecker().CheckAsync(repo, current, rid);
|
||||
var result = await new VideoDownloader.Core.Update.UpdateChecker().CheckAsync(repo, current, rid, Config.UpdateApiBase);
|
||||
if (result.IsNewer)
|
||||
{
|
||||
UpdateResultText.Text = $"새 버전 {result.LatestVersion} (현재 {current})";
|
||||
|
|
|
|||
|
|
@ -43,9 +43,10 @@
|
|||
<SolidColorBrush Color="#E91E8C"/>
|
||||
</x:Array>
|
||||
|
||||
<!-- 암시 스타일: 모든 텍스트가 UI 폰트로 통일(Foreground 는 상속 존중) -->
|
||||
<!-- 암시 스타일: FontFamily 를 여기서 강제하면 버튼 ContentPresenter 의 자동 TextBlock 이
|
||||
IconFont 상속을 잃어 모든 아이콘 글리프가 tofu(□)가 된다(2026-08-18 실결함).
|
||||
UI 폰트 통일은 각 창 루트의 FontFamily="{DynamicResource UiFont}" 상속으로 해결한다. -->
|
||||
<Style TargetType="TextBlock">
|
||||
<Setter Property="FontFamily" Value="{DynamicResource UiFont}"/>
|
||||
<Setter Property="SnapsToDevicePixels" Value="True"/>
|
||||
</Style>
|
||||
<Style TargetType="ToolTip">
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue