using Avalonia; using Avalonia.Controls; using Avalonia.Media.Imaging; namespace LANCommander.Launcher.Views.Components; public partial class GameBannerView : UserControl { public static readonly StyledProperty TitleProperty = AvaloniaProperty.Register(nameof(Title)); public static readonly StyledProperty BannerPathProperty = AvaloniaProperty.Register(nameof(BannerPath)); public static readonly StyledProperty BackgroundPathProperty = AvaloniaProperty.Register(nameof(BackgroundPath)); public string? Title { get => GetValue(TitleProperty); set => SetValue(TitleProperty, value); } public string? BannerPath { get => GetValue(BannerPathProperty); set => SetValue(BannerPathProperty, value); } public string? BackgroundPath { get => GetValue(BackgroundPathProperty); set => SetValue(BackgroundPathProperty, value); } public GameBannerView() { InitializeComponent(); } protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) { base.OnPropertyChanged(change); if (change.Property == TitleProperty) { var fallbackTitle = this.FindControl("FallbackTitle"); if (fallbackTitle != null) fallbackTitle.Text = Title; } else if (change.Property == BannerPathProperty) { UpdateImages(); } else if (change.Property == BackgroundPathProperty) { UpdateImages(); } } private void UpdateImages() { var bannerImage = this.FindControl("BannerImage"); var backgroundImage = this.FindControl("BackgroundImage"); var fallbackBanner = this.FindControl("FallbackBanner"); if (bannerImage != null) { if (!string.IsNullOrEmpty(BannerPath)) { try { bannerImage.Source = new Bitmap(BannerPath); bannerImage.IsVisible = true; if (fallbackBanner != null) fallbackBanner.IsVisible = false; } catch { bannerImage.IsVisible = false; if (fallbackBanner != null) fallbackBanner.IsVisible = true; } } else { bannerImage.IsVisible = false; if (fallbackBanner != null) fallbackBanner.IsVisible = true; } } if (backgroundImage != null && !string.IsNullOrEmpty(BackgroundPath)) { try { backgroundImage.Source = new Bitmap(BackgroundPath); backgroundImage.IsVisible = true; } catch { backgroundImage.IsVisible = false; } } } }