RetroGamingDetailView.xaml.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System;
  2. using System.Collections.Generic;
  3. using Avalonia.Controls;
  4. using Avalonia.Media;
  5. using Avalonia.Media.Imaging;
  6. using Avalonia.Platform;
  7. namespace ControlCatalog.Pages;
  8. public partial class RetroGamingDetailView : UserControl
  9. {
  10. static readonly Dictionary<string, string> GameAssets = new()
  11. {
  12. { "Cyber Ninja 2084", "hero.jpg" },
  13. { "Pixel Quest", "pixel_quest.jpg" },
  14. { "Neon Racer", "neon_racer.jpg" },
  15. { "Dungeon Bit", "dungeon_bit.jpg" },
  16. { "Forest Spirit", "forest_spirit.jpg" },
  17. { "Cyber City", "cyber_city.jpg" },
  18. { "Neon Ninja", "neon_ninja.jpg" },
  19. { "Space Voids", "space_voids.jpg" },
  20. };
  21. public RetroGamingDetailView() => InitializeComponent();
  22. public RetroGamingDetailView(string gameTitle)
  23. {
  24. InitializeComponent();
  25. DetailTitleText.Text = gameTitle.ToUpperInvariant();
  26. var filename = GameAssets.TryGetValue(gameTitle, out var f) ? f
  27. : (GameAssets.TryGetValue("Neon Ninja", out var fb) ? fb : null);
  28. if (filename != null)
  29. {
  30. try
  31. {
  32. var uri = new Uri($"avares://ControlCatalog/Assets/RetroGaming/{filename}");
  33. using var stream = AssetLoader.Open(uri);
  34. var bmp = new Bitmap(stream);
  35. DetailHeroImageBorder.Background = new ImageBrush(bmp)
  36. {
  37. Stretch = Stretch.UniformToFill,
  38. };
  39. }
  40. catch
  41. {
  42. SetFallbackBackground();
  43. }
  44. }
  45. else
  46. {
  47. SetFallbackBackground();
  48. }
  49. }
  50. void SetFallbackBackground()
  51. {
  52. var grad = new LinearGradientBrush
  53. {
  54. StartPoint = new Avalonia.RelativePoint(0, 0, Avalonia.RelativeUnit.Relative),
  55. EndPoint = new Avalonia.RelativePoint(1, 1, Avalonia.RelativeUnit.Relative),
  56. };
  57. grad.GradientStops.Add(new GradientStop(Avalonia.Media.Color.Parse("#3d2060"), 0));
  58. grad.GradientStops.Add(new GradientStop(Avalonia.Media.Color.Parse("#120a1f"), 1));
  59. DetailHeroImageBorder.Background = grad;
  60. }
  61. }