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 }