/ src / Ryujinx / UI / Views / User / UserFirmwareAvatarSelectorView.axaml.cs
UserFirmwareAvatarSelectorView.axaml.cs
 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 SkiaSharp;
10  using System.IO;
11  
12  namespace Ryujinx.Ava.UI.Views.User
13  {
14      public partial class UserFirmwareAvatarSelectorView : UserControl
15      {
16          private NavigationDialogHost _parent;
17          private TempProfile _profile;
18  
19          public UserFirmwareAvatarSelectorView(ContentManager contentManager)
20          {
21              ContentManager = contentManager;
22  
23              DataContext = ViewModel;
24  
25              InitializeComponent();
26          }
27  
28          public UserFirmwareAvatarSelectorView()
29          {
30              InitializeComponent();
31  
32              AddHandler(Frame.NavigatedToEvent, (s, e) =>
33              {
34                  NavigatedTo(e);
35              }, RoutingStrategies.Direct);
36          }
37  
38          private void NavigatedTo(NavigationEventArgs arg)
39          {
40              if (Program.PreviewerDetached)
41              {
42                  if (arg.NavigationMode == NavigationMode.New)
43                  {
44                      (_parent, _profile) = ((NavigationDialogHost, TempProfile))arg.Parameter;
45                      ContentManager = _parent.ContentManager;
46                      if (Program.PreviewerDetached)
47                      {
48                          ViewModel = new UserFirmwareAvatarSelectorViewModel();
49                      }
50  
51                      DataContext = ViewModel;
52                  }
53              }
54          }
55  
56          public ContentManager ContentManager { get; private set; }
57  
58          internal UserFirmwareAvatarSelectorViewModel ViewModel { get; set; }
59  
60          private void GoBack(object sender, RoutedEventArgs e)
61          {
62              _parent.GoBack();
63          }
64  
65          private void ChooseButton_OnClick(object sender, RoutedEventArgs e)
66          {
67              if (ViewModel.SelectedImage != null)
68              {
69                  using var streamJpg = new MemoryStream();
70                  using var bitmap = SKBitmap.Decode(ViewModel.SelectedImage);
71                  using var newBitmap = new SKBitmap(bitmap.Width, bitmap.Height);
72  
73                  using (var canvas = new SKCanvas(newBitmap))
74                  {
75                      canvas.Clear(new SKColor(
76                          ViewModel.BackgroundColor.R,
77                          ViewModel.BackgroundColor.G,
78                          ViewModel.BackgroundColor.B,
79                          ViewModel.BackgroundColor.A));
80                      canvas.DrawBitmap(bitmap, 0, 0);
81                  }
82  
83                  using (var image = SKImage.FromBitmap(newBitmap))
84                  using (var dataJpeg = image.Encode(SKEncodedImageFormat.Jpeg, 100))
85                  {
86                      dataJpeg.SaveTo(streamJpg);
87                  }
88  
89                  _profile.Image = streamJpg.ToArray();
90  
91                  _parent.GoBack();
92              }
93          }
94      }
95  }