UserFirmwareAvatarSelectorView.axaml.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using Avalonia.Controls;
  2. using Avalonia.Interactivity;
  3. using FluentAvalonia.UI.Controls;
  4. using FluentAvalonia.UI.Navigation;
  5. using Ryujinx.Ava.UI.Controls;
  6. using Ryujinx.Ava.UI.Models;
  7. using Ryujinx.Ava.UI.ViewModels;
  8. using Ryujinx.HLE.FileSystem;
  9. using SixLabors.ImageSharp;
  10. using SixLabors.ImageSharp.Formats.Png;
  11. using SixLabors.ImageSharp.PixelFormats;
  12. using SixLabors.ImageSharp.Processing;
  13. using System.IO;
  14. namespace Ryujinx.Ava.UI.Views.User
  15. {
  16. public partial class UserFirmwareAvatarSelectorView : UserControl
  17. {
  18. private NavigationDialogHost _parent;
  19. private TempProfile _profile;
  20. public UserFirmwareAvatarSelectorView(ContentManager contentManager)
  21. {
  22. ContentManager = contentManager;
  23. DataContext = ViewModel;
  24. InitializeComponent();
  25. }
  26. public UserFirmwareAvatarSelectorView()
  27. {
  28. InitializeComponent();
  29. AddHandler(Frame.NavigatedToEvent, (s, e) =>
  30. {
  31. NavigatedTo(e);
  32. }, RoutingStrategies.Direct);
  33. }
  34. private void NavigatedTo(NavigationEventArgs arg)
  35. {
  36. if (Program.PreviewerDetached)
  37. {
  38. if (arg.NavigationMode == NavigationMode.New)
  39. {
  40. (_parent, _profile) = ((NavigationDialogHost, TempProfile))arg.Parameter;
  41. ContentManager = _parent.ContentManager;
  42. if (Program.PreviewerDetached)
  43. {
  44. ViewModel = new UserFirmwareAvatarSelectorViewModel();
  45. }
  46. DataContext = ViewModel;
  47. }
  48. }
  49. }
  50. public ContentManager ContentManager { get; private set; }
  51. internal UserFirmwareAvatarSelectorViewModel ViewModel { get; set; }
  52. private void GoBack(object sender, RoutedEventArgs e)
  53. {
  54. _parent.GoBack();
  55. }
  56. private void ChooseButton_OnClick(object sender, RoutedEventArgs e)
  57. {
  58. if (ViewModel.SelectedImage != null)
  59. {
  60. MemoryStream streamJpg = new();
  61. SixLabors.ImageSharp.Image avatarImage = SixLabors.ImageSharp.Image.Load(ViewModel.SelectedImage, new PngDecoder());
  62. avatarImage.Mutate(x => x.BackgroundColor(new Rgba32(
  63. ViewModel.BackgroundColor.R,
  64. ViewModel.BackgroundColor.G,
  65. ViewModel.BackgroundColor.B,
  66. ViewModel.BackgroundColor.A)));
  67. avatarImage.SaveAsJpeg(streamJpg);
  68. _profile.Image = streamJpg.ToArray();
  69. _parent.GoBack();
  70. }
  71. }
  72. }
  73. }