mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2025-07-31 18:19:57 -06:00
Compare commits
5 Commits
Canary-1.2
...
Canary-1.2
Author | SHA1 | Date | |
---|---|---|---|
617c03119f | |||
e43d899e1d | |||
0cd09ea0c5 | |||
4135d74e4d | |||
bd29f658b1 |
@ -15,7 +15,6 @@
|
|||||||
x:DataType="viewModels:MainWindowViewModel">
|
x:DataType="viewModels:MainWindowViewModel">
|
||||||
<UserControl.Resources>
|
<UserControl.Resources>
|
||||||
<helpers:BitmapArrayValueConverter x:Key="ByteImage" />
|
<helpers:BitmapArrayValueConverter x:Key="ByteImage" />
|
||||||
<controls:ApplicationContextMenu x:Key="ApplicationContextMenu" />
|
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
@ -26,10 +25,10 @@
|
|||||||
Padding="8"
|
Padding="8"
|
||||||
HorizontalAlignment="Stretch"
|
HorizontalAlignment="Stretch"
|
||||||
VerticalAlignment="Stretch"
|
VerticalAlignment="Stretch"
|
||||||
ContextFlyout="{StaticResource ApplicationContextMenu}"
|
SelectedItem="{Binding GridSelectedApplication}"
|
||||||
|
ContextFlyout="{Binding GridAppContextMenu}"
|
||||||
DoubleTapped="GameList_DoubleTapped"
|
DoubleTapped="GameList_DoubleTapped"
|
||||||
ItemsSource="{Binding AppsObservableList}"
|
ItemsSource="{Binding AppsObservableList}">
|
||||||
SelectionChanged="GameList_SelectionChanged">
|
|
||||||
<ListBox.ItemsPanel>
|
<ListBox.ItemsPanel>
|
||||||
<ItemsPanelTemplate>
|
<ItemsPanelTemplate>
|
||||||
<WrapPanel
|
<WrapPanel
|
||||||
|
@ -26,11 +26,5 @@ namespace Ryujinx.Ava.UI.Controls
|
|||||||
if (sender is ListBox { SelectedItem: ApplicationData selected })
|
if (sender is ListBox { SelectedItem: ApplicationData selected })
|
||||||
RaiseEvent(new ApplicationOpenedEventArgs(selected, ApplicationOpenedEvent));
|
RaiseEvent(new ApplicationOpenedEventArgs(selected, ApplicationOpenedEvent));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void GameList_SelectionChanged(object sender, SelectionChangedEventArgs args)
|
|
||||||
{
|
|
||||||
if (DataContext is MainWindowViewModel viewModel && sender is ListBox { SelectedItem: ApplicationData selected })
|
|
||||||
viewModel.GridSelectedApplication = selected;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
|
xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
|
xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
|
||||||
xmlns:converters="clr-namespace:Avalonia.Data.Converters;assembly=Avalonia.Base"
|
|
||||||
d:DesignHeight="450"
|
d:DesignHeight="450"
|
||||||
d:DesignWidth="800"
|
d:DesignWidth="800"
|
||||||
Focusable="True"
|
Focusable="True"
|
||||||
@ -16,7 +15,6 @@
|
|||||||
x:DataType="viewModels:MainWindowViewModel">
|
x:DataType="viewModels:MainWindowViewModel">
|
||||||
<UserControl.Resources>
|
<UserControl.Resources>
|
||||||
<helpers:BitmapArrayValueConverter x:Key="ByteImage" />
|
<helpers:BitmapArrayValueConverter x:Key="ByteImage" />
|
||||||
<controls:ApplicationContextMenu x:Key="ApplicationContextMenu" />
|
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
@ -28,10 +26,10 @@
|
|||||||
Padding="8"
|
Padding="8"
|
||||||
HorizontalAlignment="Stretch"
|
HorizontalAlignment="Stretch"
|
||||||
VerticalAlignment="Stretch"
|
VerticalAlignment="Stretch"
|
||||||
ContextFlyout="{StaticResource ApplicationContextMenu}"
|
SelectedItem="{Binding ListSelectedApplication}"
|
||||||
|
ContextFlyout="{Binding ListAppContextMenu}"
|
||||||
DoubleTapped="GameList_DoubleTapped"
|
DoubleTapped="GameList_DoubleTapped"
|
||||||
ItemsSource="{Binding AppsObservableList}"
|
ItemsSource="{Binding AppsObservableList}">
|
||||||
SelectionChanged="GameList_SelectionChanged">
|
|
||||||
<ListBox.ItemsPanel>
|
<ListBox.ItemsPanel>
|
||||||
<ItemsPanelTemplate>
|
<ItemsPanelTemplate>
|
||||||
<StackPanel
|
<StackPanel
|
||||||
|
@ -30,12 +30,6 @@ namespace Ryujinx.Ava.UI.Controls
|
|||||||
RaiseEvent(new ApplicationOpenedEventArgs(selected, ApplicationOpenedEvent));
|
RaiseEvent(new ApplicationOpenedEventArgs(selected, ApplicationOpenedEvent));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void GameList_SelectionChanged(object sender, SelectionChangedEventArgs args)
|
|
||||||
{
|
|
||||||
if (DataContext is MainWindowViewModel viewModel && sender is ListBox { SelectedItem: ApplicationData selected })
|
|
||||||
viewModel.ListSelectedApplication = selected;
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void IdString_OnClick(object sender, RoutedEventArgs e)
|
private async void IdString_OnClick(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
if (DataContext is not MainWindowViewModel mwvm)
|
if (DataContext is not MainWindowViewModel mwvm)
|
||||||
|
@ -93,10 +93,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
|
|
||||||
_applicationData = applicationData;
|
_applicationData = applicationData;
|
||||||
|
|
||||||
if (Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
_storageProvider = RyujinxApp.MainWindow.StorageProvider;
|
||||||
{
|
|
||||||
_storageProvider = desktop.MainWindow.StorageProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
LoadDownloadableContents();
|
LoadDownloadableContents();
|
||||||
}
|
}
|
||||||
|
@ -245,9 +245,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
|
|||||||
{
|
{
|
||||||
if (Program.PreviewerDetached)
|
if (Program.PreviewerDetached)
|
||||||
{
|
{
|
||||||
_mainWindow =
|
_mainWindow = RyujinxApp.MainWindow;
|
||||||
(MainWindow)((IClassicDesktopStyleApplicationLifetime)Application.Current
|
|
||||||
.ApplicationLifetime).MainWindow;
|
|
||||||
|
|
||||||
AvaloniaKeyboardDriver = new AvaloniaKeyboardDriver(owner);
|
AvaloniaKeyboardDriver = new AvaloniaKeyboardDriver(owner);
|
||||||
|
|
||||||
|
@ -123,8 +123,42 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
private bool _isActive;
|
private bool _isActive;
|
||||||
private bool _isSubMenuOpen;
|
private bool _isSubMenuOpen;
|
||||||
|
|
||||||
public ApplicationData ListSelectedApplication;
|
private ApplicationData _listSelectedApplication;
|
||||||
public ApplicationData GridSelectedApplication;
|
private ApplicationData _gridSelectedApplication;
|
||||||
|
private ApplicationContextMenu _listAppContextMenu;
|
||||||
|
private ApplicationContextMenu _gridAppContextMenu;
|
||||||
|
|
||||||
|
public ApplicationData ListSelectedApplication
|
||||||
|
{
|
||||||
|
get => _listSelectedApplication;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_listSelectedApplication = value;
|
||||||
|
|
||||||
|
if (_listSelectedApplication != null && _listAppContextMenu == null)
|
||||||
|
ListAppContextMenu = new ApplicationContextMenu();
|
||||||
|
else if (_listSelectedApplication == null && _listAppContextMenu != null)
|
||||||
|
ListAppContextMenu = null;
|
||||||
|
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ApplicationData GridSelectedApplication
|
||||||
|
{
|
||||||
|
get => _gridSelectedApplication;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gridSelectedApplication = value;
|
||||||
|
|
||||||
|
if (_gridSelectedApplication != null && _gridAppContextMenu == null)
|
||||||
|
GridAppContextMenu = new ApplicationContextMenu();
|
||||||
|
else if (_gridSelectedApplication == null && _gridAppContextMenu != null)
|
||||||
|
GridAppContextMenu = null;
|
||||||
|
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Key is Title ID
|
// Key is Title ID
|
||||||
public SafeDictionary<string, LdnGameData.Array> LdnData = [];
|
public SafeDictionary<string, LdnGameData.Array> LdnData = [];
|
||||||
@ -218,7 +252,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
|
|
||||||
public bool CanUpdate
|
public bool CanUpdate
|
||||||
{
|
{
|
||||||
get => _canUpdate && EnableNonGameRunningControls && Updater.CanUpdate(false);
|
get => _canUpdate && EnableNonGameRunningControls && Updater.CanUpdate();
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_canUpdate = value;
|
_canUpdate = value;
|
||||||
@ -247,6 +281,28 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ApplicationContextMenu ListAppContextMenu
|
||||||
|
{
|
||||||
|
get => _listAppContextMenu;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_listAppContextMenu = value;
|
||||||
|
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ApplicationContextMenu GridAppContextMenu
|
||||||
|
{
|
||||||
|
get => _gridAppContextMenu;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_gridAppContextMenu = value;
|
||||||
|
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public bool IsPaused
|
public bool IsPaused
|
||||||
{
|
{
|
||||||
get => _isPaused;
|
get => _isPaused;
|
||||||
@ -418,13 +474,13 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool OpenUserSaveDirectoryEnabled => !SelectedApplication.ControlHolder.ByteSpan.IsZeros() && SelectedApplication.ControlHolder.Value.UserAccountSaveDataSize > 0;
|
public bool OpenUserSaveDirectoryEnabled => SelectedApplication.HasControlHolder && SelectedApplication.ControlHolder.Value.UserAccountSaveDataSize > 0;
|
||||||
|
|
||||||
public bool OpenDeviceSaveDirectoryEnabled => !SelectedApplication.ControlHolder.ByteSpan.IsZeros() && SelectedApplication.ControlHolder.Value.DeviceSaveDataSize > 0;
|
public bool OpenDeviceSaveDirectoryEnabled => SelectedApplication.HasControlHolder && SelectedApplication.ControlHolder.Value.DeviceSaveDataSize > 0;
|
||||||
|
|
||||||
public bool TrimXCIEnabled => XCIFileTrimmer.CanTrim(SelectedApplication.Path, new XCITrimmerLog.MainWindow(this));
|
public bool TrimXCIEnabled => XCIFileTrimmer.CanTrim(SelectedApplication.Path, new XCITrimmerLog.MainWindow(this));
|
||||||
|
|
||||||
public bool OpenBcatSaveDirectoryEnabled => !SelectedApplication.ControlHolder.ByteSpan.IsZeros() && SelectedApplication.ControlHolder.Value.BcatDeliveryCacheStorageSize > 0;
|
public bool OpenBcatSaveDirectoryEnabled => SelectedApplication.HasControlHolder && SelectedApplication.ControlHolder.Value.BcatDeliveryCacheStorageSize > 0;
|
||||||
|
|
||||||
public string LoadHeading
|
public string LoadHeading
|
||||||
{
|
{
|
||||||
|
@ -86,10 +86,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
|
|
||||||
_modJsonPath = Path.Combine(AppDataManager.GamesDirPath, applicationId.ToString("x16"), "mods.json");
|
_modJsonPath = Path.Combine(AppDataManager.GamesDirPath, applicationId.ToString("x16"), "mods.json");
|
||||||
|
|
||||||
if (Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
_storageProvider = RyujinxApp.MainWindow.StorageProvider;
|
||||||
{
|
|
||||||
_storageProvider = desktop.MainWindow.StorageProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
LoadMods(applicationId);
|
LoadMods(applicationId);
|
||||||
}
|
}
|
||||||
|
@ -76,10 +76,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
|
|
||||||
ApplicationData = applicationData;
|
ApplicationData = applicationData;
|
||||||
|
|
||||||
if (Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
StorageProvider = RyujinxApp.MainWindow.StorageProvider;
|
||||||
{
|
|
||||||
StorageProvider = desktop.MainWindow.StorageProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
LoadUpdates();
|
LoadUpdates();
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ namespace Ryujinx.Ava.UI.Views.Main
|
|||||||
private void VSyncMode_PointerReleased(object sender, PointerReleasedEventArgs e)
|
private void VSyncMode_PointerReleased(object sender, PointerReleasedEventArgs e)
|
||||||
{
|
{
|
||||||
Window.ViewModel.ToggleVSyncMode();
|
Window.ViewModel.ToggleVSyncMode();
|
||||||
Logger.Info?.Print(LogClass.Application, $"VSync Mode toggled to: {Window.ViewModel.AppHost.Device.VSyncMode}");
|
Logger.Info?.PrintMsg(LogClass.Application, $"VSync Mode toggled to: {Window.ViewModel.AppHost.Device.VSyncMode}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DockedStatus_PointerReleased(object sender, PointerReleasedEventArgs e)
|
private void DockedStatus_PointerReleased(object sender, PointerReleasedEventArgs e)
|
||||||
|
@ -33,7 +33,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary
|
|||||||
public string Path { get; set; }
|
public string Path { get; set; }
|
||||||
public BlitStruct<ApplicationControlProperty> ControlHolder { get; set; }
|
public BlitStruct<ApplicationControlProperty> ControlHolder { get; set; }
|
||||||
|
|
||||||
public bool HasControlHolder => ControlHolder.ByteSpan.Length > 0;
|
public bool HasControlHolder => ControlHolder.ByteSpan.Length > 0 && !ControlHolder.ByteSpan.IsZeros();
|
||||||
|
|
||||||
public string TimePlayedString => ValueFormatUtils.FormatTimeSpan(TimePlayed);
|
public string TimePlayedString => ValueFormatUtils.FormatTimeSpan(TimePlayed);
|
||||||
|
|
||||||
|
@ -166,9 +166,7 @@ namespace Ryujinx.Ava.Utilities.Configuration
|
|||||||
Migrate(34, static cff => cff.EnableInternetAccess = false);
|
Migrate(34, static cff => cff.EnableInternetAccess = false);
|
||||||
Migrate(35, static cff =>
|
Migrate(35, static cff =>
|
||||||
{
|
{
|
||||||
foreach (StandardControllerInputConfig config in cff.InputConfig
|
foreach (StandardControllerInputConfig config in cff.InputConfig.OfType<StandardControllerInputConfig>())
|
||||||
.Where(it => it is StandardControllerInputConfig)
|
|
||||||
.Cast<StandardControllerInputConfig>())
|
|
||||||
{
|
{
|
||||||
config.RangeLeft = 1.0f;
|
config.RangeLeft = 1.0f;
|
||||||
config.RangeRight = 1.0f;
|
config.RangeRight = 1.0f;
|
||||||
|
Reference in New Issue
Block a user