Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
d1a093e5ca | |||
dfb14a5607 | |||
904a5ffcb4 | |||
946633276b | |||
baf94e0e3e | |||
cf6201a4a6 | |||
18909195d1 | |||
f06d22d6f0 |
2
.github/labeler.yml
vendored
2
.github/labeler.yml
vendored
@ -20,7 +20,7 @@ gpu:
|
|||||||
|
|
||||||
gui:
|
gui:
|
||||||
- changed-files:
|
- changed-files:
|
||||||
- any-glob-to-any-file: ['src/Ryujinx/**', 'src/Ryujinx.Ui.Common/**', 'src/Ryujinx.Ui.LocaleGenerator/**', 'src/Ryujinx.Ava/**']
|
- any-glob-to-any-file: ['src/Ryujinx/**', 'src/Ryujinx.UI.Common/**', 'src/Ryujinx.UI.LocaleGenerator/**', 'src/Ryujinx.Ava/**']
|
||||||
|
|
||||||
horizon:
|
horizon:
|
||||||
- changed-files:
|
- changed-files:
|
||||||
|
64
.github/workflows/flatpak.yml
vendored
64
.github/workflows/flatpak.yml
vendored
@ -51,37 +51,75 @@ jobs:
|
|||||||
- name: Restore Nuget packages
|
- name: Restore Nuget packages
|
||||||
# With .NET 8.0.100, Microsoft.NET.ILLink.Tasks isn't restored by default and only seems to appears when publishing.
|
# With .NET 8.0.100, Microsoft.NET.ILLink.Tasks isn't restored by default and only seems to appears when publishing.
|
||||||
# So we just publish to grab the dependencies
|
# So we just publish to grab the dependencies
|
||||||
run: dotnet publish -c Release -r linux-x64 Ryujinx/${{ env.RYUJINX_PROJECT_FILE }} --self-contained
|
run: |
|
||||||
|
dotnet publish -c Release -r linux-x64 Ryujinx/${{ env.RYUJINX_PROJECT_FILE }} --self-contained
|
||||||
|
dotnet publish -c Release -r linux-arm64 Ryujinx/${{ env.RYUJINX_PROJECT_FILE }} --self-contained
|
||||||
|
|
||||||
- name: Generate nuget_sources.json
|
- name: Generate nuget_sources.json
|
||||||
shell: python
|
shell: python
|
||||||
run: |
|
run: |
|
||||||
|
import hashlib
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import base64
|
import base64
|
||||||
import binascii
|
import binascii
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
import urllib.request
|
||||||
|
|
||||||
sources = []
|
sources = []
|
||||||
|
|
||||||
for path in Path(os.environ['NUGET_PACKAGES']).glob('**/*.nupkg.sha512'):
|
|
||||||
|
def create_source_from_external(name, version):
|
||||||
|
full_dir_path = Path(os.environ["NUGET_PACKAGES"]).joinpath(name).joinpath(version)
|
||||||
|
os.makedirs(full_dir_path, exist_ok=True)
|
||||||
|
|
||||||
|
filename = "{}.{}.nupkg".format(name, version)
|
||||||
|
url = "https://api.nuget.org/v3-flatcontainer/{}/{}/{}".format(
|
||||||
|
name, version, filename
|
||||||
|
)
|
||||||
|
|
||||||
|
print(f"Processing {url}...")
|
||||||
|
response = urllib.request.urlopen(url)
|
||||||
|
sha512 = hashlib.sha512(response.read()).hexdigest()
|
||||||
|
|
||||||
|
return {
|
||||||
|
"type": "file",
|
||||||
|
"url": url,
|
||||||
|
"sha512": sha512,
|
||||||
|
"dest": os.environ["NUGET_SOURCES_DESTDIR"],
|
||||||
|
"dest-filename": filename,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
has_added_x64_apphost = False
|
||||||
|
|
||||||
|
for path in Path(os.environ["NUGET_PACKAGES"]).glob("**/*.nupkg.sha512"):
|
||||||
name = path.parent.parent.name
|
name = path.parent.parent.name
|
||||||
version = path.parent.name
|
version = path.parent.name
|
||||||
filename = '{}.{}.nupkg'.format(name, version)
|
filename = "{}.{}.nupkg".format(name, version)
|
||||||
url = 'https://api.nuget.org/v3-flatcontainer/{}/{}/{}'.format(name, version, filename)
|
url = "https://api.nuget.org/v3-flatcontainer/{}/{}/{}".format(
|
||||||
|
name, version, filename
|
||||||
|
)
|
||||||
|
|
||||||
with path.open() as fp:
|
with path.open() as fp:
|
||||||
sha512 = binascii.hexlify(base64.b64decode(fp.read())).decode('ascii')
|
sha512 = binascii.hexlify(base64.b64decode(fp.read())).decode("ascii")
|
||||||
|
|
||||||
sources.append({
|
sources.append(
|
||||||
'type': 'file',
|
{
|
||||||
'url': url,
|
"type": "file",
|
||||||
'sha512': sha512,
|
"url": url,
|
||||||
'dest': os.environ['NUGET_SOURCES_DESTDIR'],
|
"sha512": sha512,
|
||||||
'dest-filename': filename,
|
"dest": os.environ["NUGET_SOURCES_DESTDIR"],
|
||||||
})
|
"dest-filename": filename,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
with open('flathub/nuget_sources.json', 'w') as fp:
|
# .NET will not add current installed application host to the list, force inject it here.
|
||||||
|
if not has_added_x64_apphost and name.startswith('microsoft.netcore.app.host'):
|
||||||
|
sources.append(create_source_from_external("microsoft.netcore.app.host.linux-x64", version))
|
||||||
|
has_added_x64_apphost = True
|
||||||
|
|
||||||
|
with open("flathub/nuget_sources.json", "w") as fp:
|
||||||
json.dump(sources, fp, indent=4)
|
json.dump(sources, fp, indent=4)
|
||||||
|
|
||||||
- name: Update flatpak metadata
|
- name: Update flatpak metadata
|
||||||
|
@ -71,7 +71,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.FFmp
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Ava", "src\Ryujinx.Ava\Ryujinx.Ava.csproj", "{7C1B2721-13DA-4B62-B046-C626605ECCE6}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Ava", "src\Ryujinx.Ava\Ryujinx.Ava.csproj", "{7C1B2721-13DA-4B62-B046-C626605ECCE6}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Ui.Common", "src\Ryujinx.Ui.Common\Ryujinx.Ui.Common.csproj", "{BA161CA0-CD65-4E6E-B644-51C8D1E542DC}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.UI.Common", "src\Ryujinx.UI.Common\Ryujinx.UI.Common.csproj", "{BA161CA0-CD65-4E6E-B644-51C8D1E542DC}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Generators", "src\Ryujinx.Horizon.Generators\Ryujinx.Horizon.Generators.csproj", "{6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Generators", "src\Ryujinx.Horizon.Generators\Ryujinx.Horizon.Generators.csproj", "{6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}"
|
||||||
EndProject
|
EndProject
|
||||||
@ -79,7 +79,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Vulkan", "
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spv.Generator", "src\Spv.Generator\Spv.Generator.csproj", "{2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spv.Generator", "src\Spv.Generator\Spv.Generator.csproj", "{2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Ui.LocaleGenerator", "src\Ryujinx.Ui.LocaleGenerator\Ryujinx.Ui.LocaleGenerator.csproj", "{77D01AD9-2C98-478E-AE1D-8F7100738FB4}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.UI.LocaleGenerator", "src\Ryujinx.UI.LocaleGenerator\Ryujinx.UI.LocaleGenerator.csproj", "{77D01AD9-2C98-478E-AE1D-8F7100738FB4}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Common", "src\Ryujinx.Horizon.Common\Ryujinx.Horizon.Common.csproj", "{77F96ECE-4952-42DB-A528-DED25572A573}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Common", "src\Ryujinx.Horizon.Common\Ryujinx.Horizon.Common.csproj", "{77F96ECE-4952-42DB-A528-DED25572A573}"
|
||||||
EndProject
|
EndProject
|
||||||
|
@ -8,8 +8,8 @@ using Ryujinx.Ava.UI.Helpers;
|
|||||||
using Ryujinx.Ava.UI.Windows;
|
using Ryujinx.Ava.UI.Windows;
|
||||||
using Ryujinx.Common;
|
using Ryujinx.Common;
|
||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
|
||||||
@ -42,9 +42,9 @@ namespace Ryujinx.Ava
|
|||||||
{
|
{
|
||||||
ApplyConfiguredTheme();
|
ApplyConfiguredTheme();
|
||||||
|
|
||||||
ConfigurationState.Instance.Ui.BaseStyle.Event += ThemeChanged_Event;
|
ConfigurationState.Instance.UI.BaseStyle.Event += ThemeChanged_Event;
|
||||||
ConfigurationState.Instance.Ui.CustomThemePath.Event += ThemeChanged_Event;
|
ConfigurationState.Instance.UI.CustomThemePath.Event += ThemeChanged_Event;
|
||||||
ConfigurationState.Instance.Ui.EnableCustomTheme.Event += CustomThemeChanged_Event;
|
ConfigurationState.Instance.UI.EnableCustomTheme.Event += CustomThemeChanged_Event;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,13 +88,13 @@ namespace Ryujinx.Ava
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string baseStyle = ConfigurationState.Instance.Ui.BaseStyle;
|
string baseStyle = ConfigurationState.Instance.UI.BaseStyle;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(baseStyle))
|
if (string.IsNullOrWhiteSpace(baseStyle))
|
||||||
{
|
{
|
||||||
ConfigurationState.Instance.Ui.BaseStyle.Value = "Dark";
|
ConfigurationState.Instance.UI.BaseStyle.Value = "Dark";
|
||||||
|
|
||||||
baseStyle = ConfigurationState.Instance.Ui.BaseStyle;
|
baseStyle = ConfigurationState.Instance.UI.BaseStyle;
|
||||||
}
|
}
|
||||||
|
|
||||||
RequestedThemeVariant = baseStyle switch
|
RequestedThemeVariant = baseStyle switch
|
||||||
|
@ -34,10 +34,10 @@ using Ryujinx.HLE.HOS.Services.Account.Acc;
|
|||||||
using Ryujinx.HLE.HOS.SystemState;
|
using Ryujinx.HLE.HOS.SystemState;
|
||||||
using Ryujinx.Input;
|
using Ryujinx.Input;
|
||||||
using Ryujinx.Input.HLE;
|
using Ryujinx.Input.HLE;
|
||||||
using Ryujinx.Ui.App.Common;
|
using Ryujinx.UI.App.Common;
|
||||||
using Ryujinx.Ui.Common;
|
using Ryujinx.UI.Common;
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using Silk.NET.Vulkan;
|
using Silk.NET.Vulkan;
|
||||||
using SixLabors.ImageSharp;
|
using SixLabors.ImageSharp;
|
||||||
using SixLabors.ImageSharp.Formats.Png;
|
using SixLabors.ImageSharp.Formats.Png;
|
||||||
@ -1070,7 +1070,7 @@ namespace Ryujinx.Ava
|
|||||||
case KeyboardHotkeyState.Screenshot:
|
case KeyboardHotkeyState.Screenshot:
|
||||||
ScreenshotRequested = true;
|
ScreenshotRequested = true;
|
||||||
break;
|
break;
|
||||||
case KeyboardHotkeyState.ShowUi:
|
case KeyboardHotkeyState.ShowUI:
|
||||||
_viewModel.ShowMenuAndStatusBar = !_viewModel.ShowMenuAndStatusBar;
|
_viewModel.ShowMenuAndStatusBar = !_viewModel.ShowMenuAndStatusBar;
|
||||||
break;
|
break;
|
||||||
case KeyboardHotkeyState.Pause:
|
case KeyboardHotkeyState.Pause:
|
||||||
@ -1160,9 +1160,9 @@ namespace Ryujinx.Ava
|
|||||||
{
|
{
|
||||||
state = KeyboardHotkeyState.Screenshot;
|
state = KeyboardHotkeyState.Screenshot;
|
||||||
}
|
}
|
||||||
else if (_keyboardInterface.IsPressed((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.ShowUi))
|
else if (_keyboardInterface.IsPressed((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.ShowUI))
|
||||||
{
|
{
|
||||||
state = KeyboardHotkeyState.ShowUi;
|
state = KeyboardHotkeyState.ShowUI;
|
||||||
}
|
}
|
||||||
else if (_keyboardInterface.IsPressed((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.Pause))
|
else if (_keyboardInterface.IsPressed((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.Pause))
|
||||||
{
|
{
|
||||||
|
@ -73,6 +73,10 @@
|
|||||||
"GameListContextMenuCreateShortcut": "Create Application Shortcut",
|
"GameListContextMenuCreateShortcut": "Create Application Shortcut",
|
||||||
"GameListContextMenuCreateShortcutToolTip": "Create a Desktop Shortcut that launches the selected Application",
|
"GameListContextMenuCreateShortcutToolTip": "Create a Desktop Shortcut that launches the selected Application",
|
||||||
"GameListContextMenuCreateShortcutToolTipMacOS": "Create a shortcut in macOS's Applications folder that launches the selected Application",
|
"GameListContextMenuCreateShortcutToolTipMacOS": "Create a shortcut in macOS's Applications folder that launches the selected Application",
|
||||||
|
"GameListContextMenuOpenModsDirectory": "Open Mods Directory",
|
||||||
|
"GameListContextMenuOpenModsDirectoryToolTip": "Opens the directory which contains Application's Mods",
|
||||||
|
"GameListContextMenuOpenSdModsDirectory": "Open Atmosphere Mods Directory",
|
||||||
|
"GameListContextMenuOpenSdModsDirectoryToolTip": "Opens the alternative SD card Atmosphere directory which contains Application's Mods. Useful for mods that are packaged for real hardware.",
|
||||||
"StatusBarGamesLoaded": "{0}/{1} Games Loaded",
|
"StatusBarGamesLoaded": "{0}/{1} Games Loaded",
|
||||||
"StatusBarSystemVersion": "System Version: {0}",
|
"StatusBarSystemVersion": "System Version: {0}",
|
||||||
"LinuxVmMaxMapCountDialogTitle": "Low limit for memory mappings detected",
|
"LinuxVmMaxMapCountDialogTitle": "Low limit for memory mappings detected",
|
||||||
@ -329,8 +333,6 @@
|
|||||||
"DialogUpdaterAddingFilesMessage": "Adding New Update...",
|
"DialogUpdaterAddingFilesMessage": "Adding New Update...",
|
||||||
"DialogUpdaterCompleteMessage": "Update Complete!",
|
"DialogUpdaterCompleteMessage": "Update Complete!",
|
||||||
"DialogUpdaterRestartMessage": "Do you want to restart Ryujinx now?",
|
"DialogUpdaterRestartMessage": "Do you want to restart Ryujinx now?",
|
||||||
"DialogUpdaterArchNotSupportedMessage": "You are not running a supported system architecture!",
|
|
||||||
"DialogUpdaterArchNotSupportedSubMessage": "(Only x64 systems are supported!)",
|
|
||||||
"DialogUpdaterNoInternetMessage": "You are not connected to the Internet!",
|
"DialogUpdaterNoInternetMessage": "You are not connected to the Internet!",
|
||||||
"DialogUpdaterNoInternetSubMessage": "Please verify that you have a working Internet connection!",
|
"DialogUpdaterNoInternetSubMessage": "Please verify that you have a working Internet connection!",
|
||||||
"DialogUpdaterDirtyBuildMessage": "You Cannot update a Dirty build of Ryujinx!",
|
"DialogUpdaterDirtyBuildMessage": "You Cannot update a Dirty build of Ryujinx!",
|
||||||
|
@ -18,8 +18,8 @@ using Ryujinx.Ava.UI.Helpers;
|
|||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.HLE.FileSystem;
|
using Ryujinx.HLE.FileSystem;
|
||||||
using Ryujinx.HLE.HOS.Services.Account.Acc;
|
using Ryujinx.HLE.HOS.Services.Account.Acc;
|
||||||
using Ryujinx.Ui.App.Common;
|
using Ryujinx.UI.App.Common;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using System;
|
using System;
|
||||||
using System.Buffers;
|
using System.Buffers;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
@ -5,7 +5,7 @@ namespace Ryujinx.Ava.Common
|
|||||||
None,
|
None,
|
||||||
ToggleVSync,
|
ToggleVSync,
|
||||||
Screenshot,
|
Screenshot,
|
||||||
ShowUi,
|
ShowUI,
|
||||||
Pause,
|
Pause,
|
||||||
ToggleMute,
|
ToggleMute,
|
||||||
ResScaleUp,
|
ResScaleUp,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
using Ryujinx.Ava.UI.ViewModels;
|
using Ryujinx.Ava.UI.ViewModels;
|
||||||
using Ryujinx.Common;
|
using Ryujinx.Common;
|
||||||
using Ryujinx.Common.Utilities;
|
using Ryujinx.Common.Utilities;
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@ -38,9 +38,9 @@ namespace Ryujinx.Ava.Common.Locale
|
|||||||
// If the view is loaded with the UI Previewer detached, then override it with the saved one or default.
|
// If the view is loaded with the UI Previewer detached, then override it with the saved one or default.
|
||||||
if (Program.PreviewerDetached)
|
if (Program.PreviewerDetached)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(ConfigurationState.Instance.Ui.LanguageCode.Value))
|
if (!string.IsNullOrEmpty(ConfigurationState.Instance.UI.LanguageCode.Value))
|
||||||
{
|
{
|
||||||
localeLanguageCode = ConfigurationState.Instance.Ui.LanguageCode.Value;
|
localeLanguageCode = ConfigurationState.Instance.UI.LanguageCode.Value;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -10,8 +10,8 @@ using Ryujinx.Ava.UI.Helpers;
|
|||||||
using Ryujinx.Common;
|
using Ryujinx.Common;
|
||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.Common.Utilities;
|
using Ryujinx.Common.Utilities;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using Ryujinx.Ui.Common.Models.Github;
|
using Ryujinx.UI.Common.Models.Github;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
@ -68,7 +68,8 @@ namespace Ryujinx.Modules
|
|||||||
}
|
}
|
||||||
else if (OperatingSystem.IsLinux())
|
else if (OperatingSystem.IsLinux())
|
||||||
{
|
{
|
||||||
_platformExt = "linux_x64.tar.gz";
|
var arch = RuntimeInformation.OSArchitecture == Architecture.Arm64 ? "arm64" : "x64";
|
||||||
|
_platformExt = $"linux_{arch}.tar.gz";
|
||||||
}
|
}
|
||||||
|
|
||||||
Version newVersion;
|
Version newVersion;
|
||||||
@ -637,20 +638,6 @@ namespace Ryujinx.Modules
|
|||||||
public static bool CanUpdate(bool showWarnings)
|
public static bool CanUpdate(bool showWarnings)
|
||||||
{
|
{
|
||||||
#if !DISABLE_UPDATER
|
#if !DISABLE_UPDATER
|
||||||
if (RuntimeInformation.OSArchitecture != Architecture.X64 && !OperatingSystem.IsMacOS())
|
|
||||||
{
|
|
||||||
if (showWarnings)
|
|
||||||
{
|
|
||||||
Dispatcher.UIThread.InvokeAsync(() =>
|
|
||||||
ContentDialogHelper.CreateWarningDialog(
|
|
||||||
LocaleManager.Instance[LocaleKeys.DialogUpdaterArchNotSupportedMessage],
|
|
||||||
LocaleManager.Instance[LocaleKeys.DialogUpdaterArchNotSupportedSubMessage])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!NetworkInterface.GetIsNetworkAvailable())
|
if (!NetworkInterface.GetIsNetworkAvailable())
|
||||||
{
|
{
|
||||||
if (showWarnings)
|
if (showWarnings)
|
||||||
|
@ -9,10 +9,10 @@ using Ryujinx.Common.Logging;
|
|||||||
using Ryujinx.Common.SystemInterop;
|
using Ryujinx.Common.SystemInterop;
|
||||||
using Ryujinx.Modules;
|
using Ryujinx.Modules;
|
||||||
using Ryujinx.SDL2.Common;
|
using Ryujinx.SDL2.Common;
|
||||||
using Ryujinx.Ui.Common;
|
using Ryujinx.UI.Common;
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using Ryujinx.Ui.Common.SystemInfo;
|
using Ryujinx.UI.Common.SystemInfo;
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
@ -73,8 +73,8 @@
|
|||||||
<ProjectReference Include="..\ARMeilleure\ARMeilleure.csproj" />
|
<ProjectReference Include="..\ARMeilleure\ARMeilleure.csproj" />
|
||||||
<ProjectReference Include="..\Ryujinx.Graphics.OpenGL\Ryujinx.Graphics.OpenGL.csproj" />
|
<ProjectReference Include="..\Ryujinx.Graphics.OpenGL\Ryujinx.Graphics.OpenGL.csproj" />
|
||||||
<ProjectReference Include="..\Ryujinx.Graphics.Gpu\Ryujinx.Graphics.Gpu.csproj" />
|
<ProjectReference Include="..\Ryujinx.Graphics.Gpu\Ryujinx.Graphics.Gpu.csproj" />
|
||||||
<ProjectReference Include="..\Ryujinx.Ui.Common\Ryujinx.Ui.Common.csproj" />
|
<ProjectReference Include="..\Ryujinx.UI.Common\Ryujinx.UI.Common.csproj" />
|
||||||
<ProjectReference Include="..\Ryujinx.Ui.LocaleGenerator\Ryujinx.Ui.LocaleGenerator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
|
<ProjectReference Include="..\Ryujinx.UI.LocaleGenerator\Ryujinx.UI.LocaleGenerator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@ -103,7 +103,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<AvaloniaResource Include="Ui\**\*.xaml">
|
<AvaloniaResource Include="UI\**\*.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</AvaloniaResource>
|
</AvaloniaResource>
|
||||||
<AvaloniaResource Include="Assets\Fonts\SegoeFluentIcons.ttf" />
|
<AvaloniaResource Include="Assets\Fonts\SegoeFluentIcons.ttf" />
|
||||||
|
@ -8,26 +8,26 @@ using Ryujinx.Ava.UI.Windows;
|
|||||||
using Ryujinx.HLE;
|
using Ryujinx.HLE;
|
||||||
using Ryujinx.HLE.HOS.Applets;
|
using Ryujinx.HLE.HOS.Applets;
|
||||||
using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types;
|
using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types;
|
||||||
using Ryujinx.HLE.Ui;
|
using Ryujinx.HLE.UI;
|
||||||
using System;
|
using System;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
namespace Ryujinx.Ava.UI.Applet
|
namespace Ryujinx.Ava.UI.Applet
|
||||||
{
|
{
|
||||||
internal class AvaHostUiHandler : IHostUiHandler
|
internal class AvaHostUIHandler : IHostUIHandler
|
||||||
{
|
{
|
||||||
private readonly MainWindow _parent;
|
private readonly MainWindow _parent;
|
||||||
|
|
||||||
public IHostUiTheme HostUiTheme { get; }
|
public IHostUITheme HostUITheme { get; }
|
||||||
|
|
||||||
public AvaHostUiHandler(MainWindow parent)
|
public AvaHostUIHandler(MainWindow parent)
|
||||||
{
|
{
|
||||||
_parent = parent;
|
_parent = parent;
|
||||||
|
|
||||||
HostUiTheme = new AvaloniaHostUiTheme(parent);
|
HostUITheme = new AvaloniaHostUITheme(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool DisplayMessageDialog(ControllerAppletUiArgs args)
|
public bool DisplayMessageDialog(ControllerAppletUIArgs args)
|
||||||
{
|
{
|
||||||
ManualResetEvent dialogCloseEvent = new(false);
|
ManualResetEvent dialogCloseEvent = new(false);
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ namespace Ryujinx.Ava.UI.Applet
|
|||||||
return okPressed;
|
return okPressed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool DisplayInputDialog(SoftwareKeyboardUiArgs args, out string userText)
|
public bool DisplayInputDialog(SoftwareKeyboardUIArgs args, out string userText)
|
||||||
{
|
{
|
||||||
ManualResetEvent dialogCloseEvent = new(false);
|
ManualResetEvent dialogCloseEvent = new(false);
|
||||||
|
|
@ -5,7 +5,7 @@ using Avalonia.Threading;
|
|||||||
using Ryujinx.Ava.Input;
|
using Ryujinx.Ava.Input;
|
||||||
using Ryujinx.Ava.UI.Helpers;
|
using Ryujinx.Ava.UI.Helpers;
|
||||||
using Ryujinx.Ava.UI.Windows;
|
using Ryujinx.Ava.UI.Windows;
|
||||||
using Ryujinx.HLE.Ui;
|
using Ryujinx.HLE.UI;
|
||||||
using System;
|
using System;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using HidKey = Ryujinx.Common.Configuration.Hid.Key;
|
using HidKey = Ryujinx.Common.Configuration.Hid.Key;
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
using Avalonia.Media;
|
using Avalonia.Media;
|
||||||
using Ryujinx.Ava.UI.Windows;
|
using Ryujinx.Ava.UI.Windows;
|
||||||
using Ryujinx.HLE.Ui;
|
using Ryujinx.HLE.UI;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Ava.UI.Applet
|
namespace Ryujinx.Ava.UI.Applet
|
||||||
{
|
{
|
||||||
class AvaloniaHostUiTheme : IHostUiTheme
|
class AvaloniaHostUITheme : IHostUITheme
|
||||||
{
|
{
|
||||||
public AvaloniaHostUiTheme(MainWindow parent)
|
public AvaloniaHostUITheme(MainWindow parent)
|
||||||
{
|
{
|
||||||
FontFamily = OperatingSystem.IsWindows() && OperatingSystem.IsWindowsVersionAtLeast(10, 0, 22000) ? "Segoe UI Variable" : parent.FontFamily.Name;
|
FontFamily = OperatingSystem.IsWindows() && OperatingSystem.IsWindowsVersionAtLeast(10, 0, 22000) ? "Segoe UI Variable" : parent.FontFamily.Name;
|
||||||
DefaultBackgroundColor = BrushToThemeColor(parent.Background);
|
DefaultBackgroundColor = BrushToThemeColor(parent.Background);
|
@ -36,7 +36,7 @@ namespace Ryujinx.Ava.UI.Applet
|
|||||||
|
|
||||||
private readonly MainWindow _mainWindow;
|
private readonly MainWindow _mainWindow;
|
||||||
|
|
||||||
public ControllerAppletDialog(MainWindow mainWindow, ControllerAppletUiArgs args)
|
public ControllerAppletDialog(MainWindow mainWindow, ControllerAppletUIArgs args)
|
||||||
{
|
{
|
||||||
if (args.PlayerCountMin == args.PlayerCountMax)
|
if (args.PlayerCountMin == args.PlayerCountMax)
|
||||||
{
|
{
|
||||||
@ -69,7 +69,7 @@ namespace Ryujinx.Ava.UI.Applet
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<UserResult> ShowControllerAppletDialog(MainWindow window, ControllerAppletUiArgs args)
|
public static async Task<UserResult> ShowControllerAppletDialog(MainWindow window, ControllerAppletUIArgs args)
|
||||||
{
|
{
|
||||||
ContentDialog contentDialog = new();
|
ContentDialog contentDialog = new();
|
||||||
UserResult result = UserResult.Cancel;
|
UserResult result = UserResult.Cancel;
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
Height="80"
|
Height="80"
|
||||||
MinWidth="50"
|
MinWidth="50"
|
||||||
Margin="5,10,20,10"
|
Margin="5,10,20,10"
|
||||||
Source="resm:Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png?assembly=Ryujinx.Ui.Common" />
|
Source="resm:Ryujinx.UI.Common.Resources.Logo_Ryujinx.png?assembly=Ryujinx.UI.Common" />
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
MinWidth="50"
|
MinWidth="50"
|
||||||
Margin="5,10,20,10"
|
Margin="5,10,20,10"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Source="resm:Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png?assembly=Ryujinx.Ui.Common" />
|
Source="resm:Ryujinx.UI.Common.Resources.Logo_Ryujinx.png?assembly=Ryujinx.UI.Common" />
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
|
@ -54,7 +54,7 @@ namespace Ryujinx.Ava.UI.Controls
|
|||||||
public string MainText { get; set; } = "";
|
public string MainText { get; set; } = "";
|
||||||
public string SecondaryText { get; set; } = "";
|
public string SecondaryText { get; set; } = "";
|
||||||
|
|
||||||
public static async Task<(UserResult Result, string Input)> ShowInputDialog(string title, SoftwareKeyboardUiArgs args)
|
public static async Task<(UserResult Result, string Input)> ShowInputDialog(string title, SoftwareKeyboardUIArgs args)
|
||||||
{
|
{
|
||||||
ContentDialog contentDialog = new();
|
ContentDialog contentDialog = new();
|
||||||
|
|
||||||
|
@ -51,6 +51,15 @@
|
|||||||
Header="{locale:Locale GameListContextMenuManageMod}"
|
Header="{locale:Locale GameListContextMenuManageMod}"
|
||||||
ToolTip.Tip="{locale:Locale GameListContextMenuManageModToolTip}" />
|
ToolTip.Tip="{locale:Locale GameListContextMenuManageModToolTip}" />
|
||||||
<Separator />
|
<Separator />
|
||||||
|
<MenuItem
|
||||||
|
Click="OpenModsDirectory_Click"
|
||||||
|
Header="{locale:Locale GameListContextMenuOpenModsDirectory}"
|
||||||
|
ToolTip.Tip="{locale:Locale GameListContextMenuOpenModsDirectoryToolTip}" />
|
||||||
|
<MenuItem
|
||||||
|
Click="OpenSdModsDirectory_Click"
|
||||||
|
Header="{locale:Locale GameListContextMenuOpenSdModsDirectory}"
|
||||||
|
ToolTip.Tip="{locale:Locale GameListContextMenuOpenSdModsDirectoryToolTip}" />
|
||||||
|
<Separator />
|
||||||
<MenuItem Header="{locale:Locale GameListContextMenuCacheManagement}">
|
<MenuItem Header="{locale:Locale GameListContextMenuCacheManagement}">
|
||||||
<MenuItem
|
<MenuItem
|
||||||
Click="PurgePtcCache_Click"
|
Click="PurgePtcCache_Click"
|
||||||
|
@ -11,8 +11,8 @@ using Ryujinx.Ava.UI.ViewModels;
|
|||||||
using Ryujinx.Ava.UI.Windows;
|
using Ryujinx.Ava.UI.Windows;
|
||||||
using Ryujinx.Common.Configuration;
|
using Ryujinx.Common.Configuration;
|
||||||
using Ryujinx.HLE.HOS;
|
using Ryujinx.HLE.HOS;
|
||||||
using Ryujinx.Ui.App.Common;
|
using Ryujinx.UI.App.Common;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
@ -126,6 +126,32 @@ namespace Ryujinx.Ava.UI.Controls
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void OpenModsDirectory_Click(object sender, RoutedEventArgs args)
|
||||||
|
{
|
||||||
|
var viewModel = (sender as MenuItem)?.DataContext as MainWindowViewModel;
|
||||||
|
|
||||||
|
if (viewModel?.SelectedApplication != null)
|
||||||
|
{
|
||||||
|
string modsBasePath = ModLoader.GetModsBasePath();
|
||||||
|
string titleModsPath = ModLoader.GetApplicationDir(modsBasePath, viewModel.SelectedApplication.TitleId);
|
||||||
|
|
||||||
|
OpenHelper.OpenFolder(titleModsPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OpenSdModsDirectory_Click(object sender, RoutedEventArgs args)
|
||||||
|
{
|
||||||
|
var viewModel = (sender as MenuItem)?.DataContext as MainWindowViewModel;
|
||||||
|
|
||||||
|
if (viewModel?.SelectedApplication != null)
|
||||||
|
{
|
||||||
|
string sdModsBasePath = ModLoader.GetSdModsBasePath();
|
||||||
|
string titleModsPath = ModLoader.GetApplicationDir(sdModsBasePath, viewModel.SelectedApplication.TitleId);
|
||||||
|
|
||||||
|
OpenHelper.OpenFolder(titleModsPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async void OpenModManager_Click(object sender, RoutedEventArgs args)
|
public async void OpenModManager_Click(object sender, RoutedEventArgs args)
|
||||||
{
|
{
|
||||||
var viewModel = (sender as MenuItem)?.DataContext as MainWindowViewModel;
|
var viewModel = (sender as MenuItem)?.DataContext as MainWindowViewModel;
|
||||||
|
@ -3,7 +3,7 @@ using Avalonia.Input;
|
|||||||
using Avalonia.Interactivity;
|
using Avalonia.Interactivity;
|
||||||
using Ryujinx.Ava.UI.Helpers;
|
using Ryujinx.Ava.UI.Helpers;
|
||||||
using Ryujinx.Ava.UI.ViewModels;
|
using Ryujinx.Ava.UI.ViewModels;
|
||||||
using Ryujinx.Ui.App.Common;
|
using Ryujinx.UI.App.Common;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Ava.UI.Controls
|
namespace Ryujinx.Ava.UI.Controls
|
||||||
|
@ -3,7 +3,7 @@ using Avalonia.Input;
|
|||||||
using Avalonia.Interactivity;
|
using Avalonia.Interactivity;
|
||||||
using Ryujinx.Ava.UI.Helpers;
|
using Ryujinx.Ava.UI.Helpers;
|
||||||
using Ryujinx.Ava.UI.ViewModels;
|
using Ryujinx.Ava.UI.ViewModels;
|
||||||
using Ryujinx.Ui.App.Common;
|
using Ryujinx.UI.App.Common;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Ava.UI.Controls
|
namespace Ryujinx.Ava.UI.Controls
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
Height="70"
|
Height="70"
|
||||||
MinWidth="50"
|
MinWidth="50"
|
||||||
Margin="5,10,20,10"
|
Margin="5,10,20,10"
|
||||||
Source="resm:Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png?assembly=Ryujinx.Ui.Common" />
|
Source="resm:Ryujinx.UI.Common.Resources.Logo_Ryujinx.png?assembly=Ryujinx.UI.Common" />
|
||||||
<StackPanel
|
<StackPanel
|
||||||
Grid.Row="1"
|
Grid.Row="1"
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
using Avalonia.Interactivity;
|
using Avalonia.Interactivity;
|
||||||
using Ryujinx.Ui.App.Common;
|
using Ryujinx.UI.App.Common;
|
||||||
|
|
||||||
namespace Ryujinx.Ava.UI.Helpers
|
namespace Ryujinx.Ava.UI.Helpers
|
||||||
{
|
{
|
||||||
|
@ -383,7 +383,7 @@ namespace Ryujinx.Ava.UI.Helpers
|
|||||||
{
|
{
|
||||||
result = ContentDialogResult.None;
|
result = ContentDialogResult.None;
|
||||||
|
|
||||||
Logger.Warning?.Print(LogClass.Ui, "Content dialog overlay failed to populate. Default value has been returned.");
|
Logger.Warning?.Print(LogClass.UI, "Content dialog overlay failed to populate. Default value has been returned.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
using Avalonia.Data.Converters;
|
using Avalonia.Data.Converters;
|
||||||
using Avalonia.Markup.Xaml;
|
using Avalonia.Markup.Xaml;
|
||||||
using Ryujinx.Ava.Common.Locale;
|
using Ryujinx.Ava.Common.Locale;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using System;
|
using System;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
|
||||||
|
@ -39,12 +39,12 @@ namespace Ryujinx.Ava.UI.Helpers
|
|||||||
|
|
||||||
public void Log(AvaLogLevel level, string area, object source, string messageTemplate)
|
public void Log(AvaLogLevel level, string area, object source, string messageTemplate)
|
||||||
{
|
{
|
||||||
GetLog(level)?.PrintMsg(RyuLogClass.Ui, Format(level, area, messageTemplate, source, null));
|
GetLog(level)?.PrintMsg(RyuLogClass.UI, Format(level, area, messageTemplate, source, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Log(AvaLogLevel level, string area, object source, string messageTemplate, params object[] propertyValues)
|
public void Log(AvaLogLevel level, string area, object source, string messageTemplate, params object[] propertyValues)
|
||||||
{
|
{
|
||||||
GetLog(level)?.PrintMsg(RyuLogClass.Ui, Format(level, area, messageTemplate, source, propertyValues));
|
GetLog(level)?.PrintMsg(RyuLogClass.UI, Format(level, area, messageTemplate, source, propertyValues));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string Format(AvaLogLevel level, string area, string template, object source, object[] v)
|
private static string Format(AvaLogLevel level, string area, string template, object source, object[] v)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
using Ryujinx.Ava.Common.Locale;
|
using Ryujinx.Ava.Common.Locale;
|
||||||
using Ryujinx.Ui.Common;
|
using Ryujinx.UI.Common;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Ryujinx.Ava.UI.Helpers
|
namespace Ryujinx.Ava.UI.Helpers
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using Ryujinx.Ui.App.Common;
|
using Ryujinx.UI.App.Common;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using Ryujinx.Ui.App.Common;
|
using Ryujinx.UI.App.Common;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
@ -3,8 +3,8 @@ using LibHac.Ncm;
|
|||||||
using Ryujinx.Ava.UI.ViewModels;
|
using Ryujinx.Ava.UI.ViewModels;
|
||||||
using Ryujinx.Ava.UI.Windows;
|
using Ryujinx.Ava.UI.Windows;
|
||||||
using Ryujinx.HLE.FileSystem;
|
using Ryujinx.HLE.FileSystem;
|
||||||
using Ryujinx.Ui.App.Common;
|
using Ryujinx.UI.App.Common;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
@ -3,8 +3,8 @@ using Avalonia.Controls;
|
|||||||
using Avalonia.Input;
|
using Avalonia.Input;
|
||||||
using Avalonia.Platform;
|
using Avalonia.Platform;
|
||||||
using Ryujinx.Common.Configuration;
|
using Ryujinx.Common.Configuration;
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using SPB.Graphics;
|
using SPB.Graphics;
|
||||||
using SPB.Platform;
|
using SPB.Platform;
|
||||||
using SPB.Platform.GLX;
|
using SPB.Platform.GLX;
|
||||||
|
@ -3,7 +3,7 @@ using Ryujinx.Common.Configuration;
|
|||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.Graphics.GAL;
|
using Ryujinx.Graphics.GAL;
|
||||||
using Ryujinx.Graphics.OpenGL;
|
using Ryujinx.Graphics.OpenGL;
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
using SPB.Graphics;
|
using SPB.Graphics;
|
||||||
using SPB.Graphics.Exceptions;
|
using SPB.Graphics.Exceptions;
|
||||||
using SPB.Graphics.OpenGL;
|
using SPB.Graphics.OpenGL;
|
||||||
@ -75,7 +75,7 @@ namespace Ryujinx.Ava.UI.Renderer
|
|||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.Warning?.Print(LogClass.Ui, $"Failed to {(!unbind ? "bind" : "unbind")} OpenGL context: {e}");
|
Logger.Warning?.Print(LogClass.UI, $"Failed to {(!unbind ? "bind" : "unbind")} OpenGL context: {e}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Ryujinx.Common.Configuration;
|
using Ryujinx.Common.Configuration;
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Ava.UI.Renderer
|
namespace Ryujinx.Ava.UI.Renderer
|
||||||
|
@ -3,7 +3,7 @@ using Avalonia.Platform;
|
|||||||
using Avalonia.Threading;
|
using Avalonia.Threading;
|
||||||
using Ryujinx.Ava.Common.Locale;
|
using Ryujinx.Ava.Common.Locale;
|
||||||
using Ryujinx.Common.Utilities;
|
using Ryujinx.Common.Utilities;
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
using System;
|
using System;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Net.NetworkInformation;
|
using System.Net.NetworkInformation;
|
||||||
@ -87,19 +87,19 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
{
|
{
|
||||||
Version = Program.Version;
|
Version = Program.Version;
|
||||||
|
|
||||||
if (ConfigurationState.Instance.Ui.BaseStyle.Value == "Light")
|
if (ConfigurationState.Instance.UI.BaseStyle.Value == "Light")
|
||||||
{
|
{
|
||||||
GithubLogo = new Bitmap(AssetLoader.Open(new Uri("resm:Ryujinx.Ui.Common.Resources.Logo_GitHub_Light.png?assembly=Ryujinx.Ui.Common")));
|
GithubLogo = new Bitmap(AssetLoader.Open(new Uri("resm:Ryujinx.UI.Common.Resources.Logo_GitHub_Light.png?assembly=Ryujinx.UI.Common")));
|
||||||
DiscordLogo = new Bitmap(AssetLoader.Open(new Uri("resm:Ryujinx.Ui.Common.Resources.Logo_Discord_Light.png?assembly=Ryujinx.Ui.Common")));
|
DiscordLogo = new Bitmap(AssetLoader.Open(new Uri("resm:Ryujinx.UI.Common.Resources.Logo_Discord_Light.png?assembly=Ryujinx.UI.Common")));
|
||||||
PatreonLogo = new Bitmap(AssetLoader.Open(new Uri("resm:Ryujinx.Ui.Common.Resources.Logo_Patreon_Light.png?assembly=Ryujinx.Ui.Common")));
|
PatreonLogo = new Bitmap(AssetLoader.Open(new Uri("resm:Ryujinx.UI.Common.Resources.Logo_Patreon_Light.png?assembly=Ryujinx.UI.Common")));
|
||||||
TwitterLogo = new Bitmap(AssetLoader.Open(new Uri("resm:Ryujinx.Ui.Common.Resources.Logo_Twitter_Light.png?assembly=Ryujinx.Ui.Common")));
|
TwitterLogo = new Bitmap(AssetLoader.Open(new Uri("resm:Ryujinx.UI.Common.Resources.Logo_Twitter_Light.png?assembly=Ryujinx.UI.Common")));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GithubLogo = new Bitmap(AssetLoader.Open(new Uri("resm:Ryujinx.Ui.Common.Resources.Logo_GitHub_Dark.png?assembly=Ryujinx.Ui.Common")));
|
GithubLogo = new Bitmap(AssetLoader.Open(new Uri("resm:Ryujinx.UI.Common.Resources.Logo_GitHub_Dark.png?assembly=Ryujinx.UI.Common")));
|
||||||
DiscordLogo = new Bitmap(AssetLoader.Open(new Uri("resm:Ryujinx.Ui.Common.Resources.Logo_Discord_Dark.png?assembly=Ryujinx.Ui.Common")));
|
DiscordLogo = new Bitmap(AssetLoader.Open(new Uri("resm:Ryujinx.UI.Common.Resources.Logo_Discord_Dark.png?assembly=Ryujinx.UI.Common")));
|
||||||
PatreonLogo = new Bitmap(AssetLoader.Open(new Uri("resm:Ryujinx.Ui.Common.Resources.Logo_Patreon_Dark.png?assembly=Ryujinx.Ui.Common")));
|
PatreonLogo = new Bitmap(AssetLoader.Open(new Uri("resm:Ryujinx.UI.Common.Resources.Logo_Patreon_Dark.png?assembly=Ryujinx.UI.Common")));
|
||||||
TwitterLogo = new Bitmap(AssetLoader.Open(new Uri("resm:Ryujinx.Ui.Common.Resources.Logo_Twitter_Dark.png?assembly=Ryujinx.Ui.Common")));
|
TwitterLogo = new Bitmap(AssetLoader.Open(new Uri("resm:Ryujinx.UI.Common.Resources.Logo_Twitter_Dark.png?assembly=Ryujinx.UI.Common")));
|
||||||
}
|
}
|
||||||
|
|
||||||
Dispatcher.UIThread.InvokeAsync(DownloadPatronsJson);
|
Dispatcher.UIThread.InvokeAsync(DownloadPatronsJson);
|
||||||
|
@ -9,7 +9,7 @@ using Ryujinx.Common;
|
|||||||
using Ryujinx.Common.Configuration;
|
using Ryujinx.Common.Configuration;
|
||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.Common.Utilities;
|
using Ryujinx.Common.Utilities;
|
||||||
using Ryujinx.Ui.Common.Models.Amiibo;
|
using Ryujinx.UI.Common.Models.Amiibo;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
@ -65,7 +65,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
_amiiboSeries = new ObservableCollection<string>();
|
_amiiboSeries = new ObservableCollection<string>();
|
||||||
_amiibos = new AvaloniaList<AmiiboApi>();
|
_amiibos = new AvaloniaList<AmiiboApi>();
|
||||||
|
|
||||||
_amiiboLogoBytes = EmbeddedResources.Read("Ryujinx.Ui.Common/Resources/Logo_Amiibo.png");
|
_amiiboLogoBytes = EmbeddedResources.Read("Ryujinx.UI.Common/Resources/Logo_Amiibo.png");
|
||||||
|
|
||||||
_ = LoadContentAsync();
|
_ = LoadContentAsync();
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ using Ryujinx.Common.Configuration.Hid.Keyboard;
|
|||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.Common.Utilities;
|
using Ryujinx.Common.Utilities;
|
||||||
using Ryujinx.Input;
|
using Ryujinx.Input;
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
@ -35,10 +35,10 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
public class ControllerInputViewModel : BaseModel, IDisposable
|
public class ControllerInputViewModel : BaseModel, IDisposable
|
||||||
{
|
{
|
||||||
private const string Disabled = "disabled";
|
private const string Disabled = "disabled";
|
||||||
private const string ProControllerResource = "Ryujinx.Ui.Common/Resources/Controller_ProCon.svg";
|
private const string ProControllerResource = "Ryujinx.UI.Common/Resources/Controller_ProCon.svg";
|
||||||
private const string JoyConPairResource = "Ryujinx.Ui.Common/Resources/Controller_JoyConPair.svg";
|
private const string JoyConPairResource = "Ryujinx.UI.Common/Resources/Controller_JoyConPair.svg";
|
||||||
private const string JoyConLeftResource = "Ryujinx.Ui.Common/Resources/Controller_JoyConLeft.svg";
|
private const string JoyConLeftResource = "Ryujinx.UI.Common/Resources/Controller_JoyConLeft.svg";
|
||||||
private const string JoyConRightResource = "Ryujinx.Ui.Common/Resources/Controller_JoyConRight.svg";
|
private const string JoyConRightResource = "Ryujinx.UI.Common/Resources/Controller_JoyConRight.svg";
|
||||||
private const string KeyboardString = "keyboard";
|
private const string KeyboardString = "keyboard";
|
||||||
private const string ControllerString = "controller";
|
private const string ControllerString = "controller";
|
||||||
private readonly MainWindow _mainWindow;
|
private readonly MainWindow _mainWindow;
|
||||||
|
@ -25,13 +25,13 @@ using Ryujinx.HLE;
|
|||||||
using Ryujinx.HLE.FileSystem;
|
using Ryujinx.HLE.FileSystem;
|
||||||
using Ryujinx.HLE.HOS;
|
using Ryujinx.HLE.HOS;
|
||||||
using Ryujinx.HLE.HOS.Services.Account.Acc;
|
using Ryujinx.HLE.HOS.Services.Account.Acc;
|
||||||
using Ryujinx.HLE.Ui;
|
using Ryujinx.HLE.UI;
|
||||||
using Ryujinx.Input.HLE;
|
using Ryujinx.Input.HLE;
|
||||||
using Ryujinx.Modules;
|
using Ryujinx.Modules;
|
||||||
using Ryujinx.Ui.App.Common;
|
using Ryujinx.UI.App.Common;
|
||||||
using Ryujinx.Ui.Common;
|
using Ryujinx.UI.Common;
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using SixLabors.ImageSharp.PixelFormats;
|
using SixLabors.ImageSharp.PixelFormats;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@ -138,7 +138,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
InputManager inputManager,
|
InputManager inputManager,
|
||||||
UserChannelPersistence userChannelPersistence,
|
UserChannelPersistence userChannelPersistence,
|
||||||
LibHacHorizonManager libHacHorizonManager,
|
LibHacHorizonManager libHacHorizonManager,
|
||||||
IHostUiHandler uiHandler,
|
IHostUIHandler uiHandler,
|
||||||
Action<bool> showLoading,
|
Action<bool> showLoading,
|
||||||
Action<bool> switchToGameControl,
|
Action<bool> switchToGameControl,
|
||||||
Action<Control> setMainContent,
|
Action<Control> setMainContent,
|
||||||
@ -685,10 +685,10 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
|
|
||||||
public bool StartGamesInFullscreen
|
public bool StartGamesInFullscreen
|
||||||
{
|
{
|
||||||
get => ConfigurationState.Instance.Ui.StartFullscreen;
|
get => ConfigurationState.Instance.UI.StartFullscreen;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
ConfigurationState.Instance.Ui.StartFullscreen.Value = value;
|
ConfigurationState.Instance.UI.StartFullscreen.Value = value;
|
||||||
|
|
||||||
ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath);
|
ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath);
|
||||||
|
|
||||||
@ -698,10 +698,10 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
|
|
||||||
public bool ShowConsole
|
public bool ShowConsole
|
||||||
{
|
{
|
||||||
get => ConfigurationState.Instance.Ui.ShowConsole;
|
get => ConfigurationState.Instance.UI.ShowConsole;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
ConfigurationState.Instance.Ui.ShowConsole.Value = value;
|
ConfigurationState.Instance.UI.ShowConsole.Value = value;
|
||||||
|
|
||||||
ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath);
|
ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath);
|
||||||
|
|
||||||
@ -743,10 +743,10 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
|
|
||||||
public Glyph Glyph
|
public Glyph Glyph
|
||||||
{
|
{
|
||||||
get => (Glyph)ConfigurationState.Instance.Ui.GameListViewMode.Value;
|
get => (Glyph)ConfigurationState.Instance.UI.GameListViewMode.Value;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
ConfigurationState.Instance.Ui.GameListViewMode.Value = (int)value;
|
ConfigurationState.Instance.UI.GameListViewMode.Value = (int)value;
|
||||||
|
|
||||||
OnPropertyChanged();
|
OnPropertyChanged();
|
||||||
OnPropertyChanged(nameof(IsGrid));
|
OnPropertyChanged(nameof(IsGrid));
|
||||||
@ -758,9 +758,9 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
|
|
||||||
public bool ShowNames
|
public bool ShowNames
|
||||||
{
|
{
|
||||||
get => ConfigurationState.Instance.Ui.ShowNames && ConfigurationState.Instance.Ui.GridSize > 1; set
|
get => ConfigurationState.Instance.UI.ShowNames && ConfigurationState.Instance.UI.GridSize > 1; set
|
||||||
{
|
{
|
||||||
ConfigurationState.Instance.Ui.ShowNames.Value = value;
|
ConfigurationState.Instance.UI.ShowNames.Value = value;
|
||||||
|
|
||||||
OnPropertyChanged();
|
OnPropertyChanged();
|
||||||
OnPropertyChanged(nameof(GridSizeScale));
|
OnPropertyChanged(nameof(GridSizeScale));
|
||||||
@ -772,10 +772,10 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
|
|
||||||
internal ApplicationSort SortMode
|
internal ApplicationSort SortMode
|
||||||
{
|
{
|
||||||
get => (ApplicationSort)ConfigurationState.Instance.Ui.ApplicationSort.Value;
|
get => (ApplicationSort)ConfigurationState.Instance.UI.ApplicationSort.Value;
|
||||||
private set
|
private set
|
||||||
{
|
{
|
||||||
ConfigurationState.Instance.Ui.ApplicationSort.Value = (int)value;
|
ConfigurationState.Instance.UI.ApplicationSort.Value = (int)value;
|
||||||
|
|
||||||
OnPropertyChanged();
|
OnPropertyChanged();
|
||||||
OnPropertyChanged(nameof(SortName));
|
OnPropertyChanged(nameof(SortName));
|
||||||
@ -788,7 +788,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return ConfigurationState.Instance.Ui.GridSize.Value switch
|
return ConfigurationState.Instance.UI.GridSize.Value switch
|
||||||
{
|
{
|
||||||
1 => 78,
|
1 => 78,
|
||||||
2 => 100,
|
2 => 100,
|
||||||
@ -803,7 +803,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return ConfigurationState.Instance.Ui.GridSize.Value switch
|
return ConfigurationState.Instance.UI.GridSize.Value switch
|
||||||
{
|
{
|
||||||
1 => 120,
|
1 => 120,
|
||||||
2 => ShowNames ? 210 : 150,
|
2 => ShowNames ? 210 : 150,
|
||||||
@ -816,10 +816,10 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
|
|
||||||
public int GridSizeScale
|
public int GridSizeScale
|
||||||
{
|
{
|
||||||
get => ConfigurationState.Instance.Ui.GridSize;
|
get => ConfigurationState.Instance.UI.GridSize;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
ConfigurationState.Instance.Ui.GridSize.Value = value;
|
ConfigurationState.Instance.UI.GridSize.Value = value;
|
||||||
|
|
||||||
if (value < 2)
|
if (value < 2)
|
||||||
{
|
{
|
||||||
@ -860,10 +860,10 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
|
|
||||||
public bool IsAscending
|
public bool IsAscending
|
||||||
{
|
{
|
||||||
get => ConfigurationState.Instance.Ui.IsAscendingOrder;
|
get => ConfigurationState.Instance.UI.IsAscendingOrder;
|
||||||
private set
|
private set
|
||||||
{
|
{
|
||||||
ConfigurationState.Instance.Ui.IsAscendingOrder.Value = value;
|
ConfigurationState.Instance.UI.IsAscendingOrder.Value = value;
|
||||||
|
|
||||||
OnPropertyChanged();
|
OnPropertyChanged();
|
||||||
OnPropertyChanged(nameof(SortMode));
|
OnPropertyChanged(nameof(SortMode));
|
||||||
@ -919,7 +919,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
public RendererHost RendererHostControl { get; private set; }
|
public RendererHost RendererHostControl { get; private set; }
|
||||||
public bool IsClosing { get; set; }
|
public bool IsClosing { get; set; }
|
||||||
public LibHacHorizonManager LibHacHorizonManager { get; internal set; }
|
public LibHacHorizonManager LibHacHorizonManager { get; internal set; }
|
||||||
public IHostUiHandler UiHandler { get; internal set; }
|
public IHostUIHandler UiHandler { get; internal set; }
|
||||||
public bool IsSortedByFavorite => SortMode == ApplicationSort.Favorite;
|
public bool IsSortedByFavorite => SortMode == ApplicationSort.Favorite;
|
||||||
public bool IsSortedByTitle => SortMode == ApplicationSort.Title;
|
public bool IsSortedByTitle => SortMode == ApplicationSort.Title;
|
||||||
public bool IsSortedByDeveloper => SortMode == ApplicationSort.Developer;
|
public bool IsSortedByDeveloper => SortMode == ApplicationSort.Developer;
|
||||||
@ -928,10 +928,10 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
public bool IsSortedByType => SortMode == ApplicationSort.FileType;
|
public bool IsSortedByType => SortMode == ApplicationSort.FileType;
|
||||||
public bool IsSortedBySize => SortMode == ApplicationSort.FileSize;
|
public bool IsSortedBySize => SortMode == ApplicationSort.FileSize;
|
||||||
public bool IsSortedByPath => SortMode == ApplicationSort.Path;
|
public bool IsSortedByPath => SortMode == ApplicationSort.Path;
|
||||||
public bool IsGridSmall => ConfigurationState.Instance.Ui.GridSize == 1;
|
public bool IsGridSmall => ConfigurationState.Instance.UI.GridSize == 1;
|
||||||
public bool IsGridMedium => ConfigurationState.Instance.Ui.GridSize == 2;
|
public bool IsGridMedium => ConfigurationState.Instance.UI.GridSize == 2;
|
||||||
public bool IsGridLarge => ConfigurationState.Instance.Ui.GridSize == 3;
|
public bool IsGridLarge => ConfigurationState.Instance.UI.GridSize == 3;
|
||||||
public bool IsGridHuge => ConfigurationState.Instance.Ui.GridSize == 4;
|
public bool IsGridHuge => ConfigurationState.Instance.UI.GridSize == 4;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -1245,7 +1245,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
|
|
||||||
public void LoadConfigurableHotKeys()
|
public void LoadConfigurableHotKeys()
|
||||||
{
|
{
|
||||||
if (AvaloniaKeyboardMappingHelper.TryGetAvaKey((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.ShowUi, out var showUiKey))
|
if (AvaloniaKeyboardMappingHelper.TryGetAvaKey((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.ShowUI, out var showUiKey))
|
||||||
{
|
{
|
||||||
ShowUiKey = new KeyGesture(showUiKey);
|
ShowUiKey = new KeyGesture(showUiKey);
|
||||||
}
|
}
|
||||||
@ -1385,7 +1385,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
|
|
||||||
if (Program.PreviewerDetached)
|
if (Program.PreviewerDetached)
|
||||||
{
|
{
|
||||||
ConfigurationState.Instance.Ui.LanguageCode.Value = (string)languageCode;
|
ConfigurationState.Instance.UI.LanguageCode.Value = (string)languageCode;
|
||||||
ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath);
|
ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,8 +16,8 @@ using Ryujinx.Common.Logging;
|
|||||||
using Ryujinx.Graphics.Vulkan;
|
using Ryujinx.Graphics.Vulkan;
|
||||||
using Ryujinx.HLE.FileSystem;
|
using Ryujinx.HLE.FileSystem;
|
||||||
using Ryujinx.HLE.HOS.Services.Time.TimeZone;
|
using Ryujinx.HLE.HOS.Services.Time.TimeZone;
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
using Ryujinx.Ui.Common.Configuration.System;
|
using Ryujinx.UI.Common.Configuration.System;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
@ -408,9 +408,9 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
HideCursor = (int)config.HideCursor.Value;
|
HideCursor = (int)config.HideCursor.Value;
|
||||||
|
|
||||||
GameDirectories.Clear();
|
GameDirectories.Clear();
|
||||||
GameDirectories.AddRange(config.Ui.GameDirs.Value);
|
GameDirectories.AddRange(config.UI.GameDirs.Value);
|
||||||
|
|
||||||
BaseStyleIndex = config.Ui.BaseStyle == "Light" ? 0 : 1;
|
BaseStyleIndex = config.UI.BaseStyle == "Light" ? 0 : 1;
|
||||||
|
|
||||||
// Input
|
// Input
|
||||||
EnableDockedMode = config.System.EnableDockedMode;
|
EnableDockedMode = config.System.EnableDockedMode;
|
||||||
@ -494,10 +494,10 @@ namespace Ryujinx.Ava.UI.ViewModels
|
|||||||
if (_directoryChanged)
|
if (_directoryChanged)
|
||||||
{
|
{
|
||||||
List<string> gameDirs = new(GameDirectories);
|
List<string> gameDirs = new(GameDirectories);
|
||||||
config.Ui.GameDirs.Value = gameDirs;
|
config.UI.GameDirs.Value = gameDirs;
|
||||||
}
|
}
|
||||||
|
|
||||||
config.Ui.BaseStyle.Value = BaseStyleIndex == 0 ? "Light" : "Dark";
|
config.UI.BaseStyle.Value = BaseStyleIndex == 0 ? "Light" : "Dark";
|
||||||
|
|
||||||
// Input
|
// Input
|
||||||
config.System.EnableDockedMode.Value = EnableDockedMode;
|
config.System.EnableDockedMode.Value = EnableDockedMode;
|
||||||
|
@ -17,7 +17,7 @@ using Ryujinx.Common.Configuration;
|
|||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.Common.Utilities;
|
using Ryujinx.Common.Utilities;
|
||||||
using Ryujinx.HLE.FileSystem;
|
using Ryujinx.HLE.FileSystem;
|
||||||
using Ryujinx.Ui.App.Common;
|
using Ryujinx.UI.App.Common;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
@ -10,9 +10,9 @@ using Ryujinx.Ava.UI.Windows;
|
|||||||
using Ryujinx.Common;
|
using Ryujinx.Common;
|
||||||
using Ryujinx.Common.Utilities;
|
using Ryujinx.Common.Utilities;
|
||||||
using Ryujinx.Modules;
|
using Ryujinx.Modules;
|
||||||
using Ryujinx.Ui.Common;
|
using Ryujinx.UI.Common;
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
@ -43,7 +43,7 @@ namespace Ryujinx.Ava.UI.Views.Main
|
|||||||
checkBoxes.Add(new CheckBox
|
checkBoxes.Add(new CheckBox
|
||||||
{
|
{
|
||||||
Content = $".{fileName}",
|
Content = $".{fileName}",
|
||||||
IsChecked = ((FileTypes)item).GetConfigValue(ConfigurationState.Instance.Ui.ShownFileTypes),
|
IsChecked = ((FileTypes)item).GetConfigValue(ConfigurationState.Instance.UI.ShownFileTypes),
|
||||||
Command = MiniCommand.Create(() => Window.ToggleFileType(fileName)),
|
Command = MiniCommand.Create(() => Window.ToggleFileType(fileName)),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ using Avalonia.Interactivity;
|
|||||||
using Ryujinx.Ava.UI.Windows;
|
using Ryujinx.Ava.UI.Windows;
|
||||||
using Ryujinx.Common.Configuration;
|
using Ryujinx.Common.Configuration;
|
||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Ava.UI.Views.Main
|
namespace Ryujinx.Ava.UI.Views.Main
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysShowUiHotkey}" Width="230" />
|
<TextBlock VerticalAlignment="Center" Text="{locale:Locale SettingsTabHotkeysShowUiHotkey}" Width="230" />
|
||||||
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
<ToggleButton Width="90" Height="27" Checked="Button_Checked" Unchecked="Button_Unchecked">
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Text="{Binding KeyboardHotkeys.ShowUi, Mode=TwoWay, Converter={StaticResource Key}}"
|
Text="{Binding KeyboardHotkeys.ShowUI, Mode=TwoWay, Converter={StaticResource Key}}"
|
||||||
TextAlignment="Center" />
|
TextAlignment="Center" />
|
||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
@ -51,7 +51,7 @@
|
|||||||
Spacing="10">
|
Spacing="10">
|
||||||
<Image
|
<Image
|
||||||
Height="80"
|
Height="80"
|
||||||
Source="resm:Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png?assembly=Ryujinx.Ui.Common"
|
Source="resm:Ryujinx.UI.Common.Resources.Logo_Ryujinx.png?assembly=Ryujinx.UI.Common"
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
IsHitTestVisible="True" />
|
IsHitTestVisible="True" />
|
||||||
<WrapPanel
|
<WrapPanel
|
||||||
|
@ -7,7 +7,7 @@ using FluentAvalonia.UI.Controls;
|
|||||||
using Ryujinx.Ava.Common.Locale;
|
using Ryujinx.Ava.Common.Locale;
|
||||||
using Ryujinx.Ava.UI.Helpers;
|
using Ryujinx.Ava.UI.Helpers;
|
||||||
using Ryujinx.Ava.UI.ViewModels;
|
using Ryujinx.Ava.UI.ViewModels;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Button = Avalonia.Controls.Button;
|
using Button = Avalonia.Controls.Button;
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
using Avalonia.Interactivity;
|
using Avalonia.Interactivity;
|
||||||
using Ryujinx.Ava.Common.Locale;
|
using Ryujinx.Ava.Common.Locale;
|
||||||
using Ryujinx.Ava.UI.ViewModels;
|
using Ryujinx.Ava.UI.ViewModels;
|
||||||
using Ryujinx.Ui.Common.Models.Amiibo;
|
using Ryujinx.UI.Common.Models.Amiibo;
|
||||||
|
|
||||||
namespace Ryujinx.Ava.UI.Windows
|
namespace Ryujinx.Ava.UI.Windows
|
||||||
{
|
{
|
||||||
|
@ -3,7 +3,7 @@ using Ryujinx.Ava.Common.Locale;
|
|||||||
using Ryujinx.Ava.UI.Models;
|
using Ryujinx.Ava.UI.Models;
|
||||||
using Ryujinx.HLE.FileSystem;
|
using Ryujinx.HLE.FileSystem;
|
||||||
using Ryujinx.HLE.HOS;
|
using Ryujinx.HLE.HOS;
|
||||||
using Ryujinx.Ui.App.Common;
|
using Ryujinx.UI.App.Common;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
@ -7,7 +7,7 @@ using Ryujinx.Ava.UI.Helpers;
|
|||||||
using Ryujinx.Ava.UI.Models;
|
using Ryujinx.Ava.UI.Models;
|
||||||
using Ryujinx.Ava.UI.ViewModels;
|
using Ryujinx.Ava.UI.ViewModels;
|
||||||
using Ryujinx.HLE.FileSystem;
|
using Ryujinx.HLE.FileSystem;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Button = Avalonia.Controls.Button;
|
using Button = Avalonia.Controls.Button;
|
||||||
|
|
||||||
|
@ -18,10 +18,10 @@ using Ryujinx.HLE.HOS.Services.Account.Acc;
|
|||||||
using Ryujinx.Input.HLE;
|
using Ryujinx.Input.HLE;
|
||||||
using Ryujinx.Input.SDL2;
|
using Ryujinx.Input.SDL2;
|
||||||
using Ryujinx.Modules;
|
using Ryujinx.Modules;
|
||||||
using Ryujinx.Ui.App.Common;
|
using Ryujinx.UI.App.Common;
|
||||||
using Ryujinx.Ui.Common;
|
using Ryujinx.UI.Common;
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Runtime.Versioning;
|
using System.Runtime.Versioning;
|
||||||
@ -40,7 +40,7 @@ namespace Ryujinx.Ava.UI.Windows
|
|||||||
private static bool _deferLoad;
|
private static bool _deferLoad;
|
||||||
private static string _launchPath;
|
private static string _launchPath;
|
||||||
private static bool _startFullscreen;
|
private static bool _startFullscreen;
|
||||||
internal readonly AvaHostUiHandler UiHandler;
|
internal readonly AvaHostUIHandler UiHandler;
|
||||||
|
|
||||||
public VirtualFileSystem VirtualFileSystem { get; private set; }
|
public VirtualFileSystem VirtualFileSystem { get; private set; }
|
||||||
public ContentManager ContentManager { get; private set; }
|
public ContentManager ContentManager { get; private set; }
|
||||||
@ -69,7 +69,7 @@ namespace Ryujinx.Ava.UI.Windows
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
Load();
|
Load();
|
||||||
|
|
||||||
UiHandler = new AvaHostUiHandler(this);
|
UiHandler = new AvaHostUIHandler(this);
|
||||||
|
|
||||||
ViewModel.Title = $"Ryujinx {Program.Version}";
|
ViewModel.Title = $"Ryujinx {Program.Version}";
|
||||||
|
|
||||||
@ -319,13 +319,13 @@ namespace Ryujinx.Ava.UI.Windows
|
|||||||
|
|
||||||
private void SetWindowSizePosition()
|
private void SetWindowSizePosition()
|
||||||
{
|
{
|
||||||
PixelPoint savedPoint = new(ConfigurationState.Instance.Ui.WindowStartup.WindowPositionX,
|
PixelPoint savedPoint = new(ConfigurationState.Instance.UI.WindowStartup.WindowPositionX,
|
||||||
ConfigurationState.Instance.Ui.WindowStartup.WindowPositionY);
|
ConfigurationState.Instance.UI.WindowStartup.WindowPositionY);
|
||||||
|
|
||||||
ViewModel.WindowHeight = ConfigurationState.Instance.Ui.WindowStartup.WindowSizeHeight * Program.WindowScaleFactor;
|
ViewModel.WindowHeight = ConfigurationState.Instance.UI.WindowStartup.WindowSizeHeight * Program.WindowScaleFactor;
|
||||||
ViewModel.WindowWidth = ConfigurationState.Instance.Ui.WindowStartup.WindowSizeWidth * Program.WindowScaleFactor;
|
ViewModel.WindowWidth = ConfigurationState.Instance.UI.WindowStartup.WindowSizeWidth * Program.WindowScaleFactor;
|
||||||
|
|
||||||
ViewModel.WindowState = ConfigurationState.Instance.Ui.WindowStartup.WindowMaximized.Value ? WindowState.Maximized : WindowState.Normal;
|
ViewModel.WindowState = ConfigurationState.Instance.UI.WindowStartup.WindowMaximized.Value ? WindowState.Maximized : WindowState.Normal;
|
||||||
|
|
||||||
if (CheckScreenBounds(savedPoint))
|
if (CheckScreenBounds(savedPoint))
|
||||||
{
|
{
|
||||||
@ -353,13 +353,13 @@ namespace Ryujinx.Ava.UI.Windows
|
|||||||
|
|
||||||
private void SaveWindowSizePosition()
|
private void SaveWindowSizePosition()
|
||||||
{
|
{
|
||||||
ConfigurationState.Instance.Ui.WindowStartup.WindowSizeHeight.Value = (int)Height;
|
ConfigurationState.Instance.UI.WindowStartup.WindowSizeHeight.Value = (int)Height;
|
||||||
ConfigurationState.Instance.Ui.WindowStartup.WindowSizeWidth.Value = (int)Width;
|
ConfigurationState.Instance.UI.WindowStartup.WindowSizeWidth.Value = (int)Width;
|
||||||
|
|
||||||
ConfigurationState.Instance.Ui.WindowStartup.WindowPositionX.Value = Position.X;
|
ConfigurationState.Instance.UI.WindowStartup.WindowPositionX.Value = Position.X;
|
||||||
ConfigurationState.Instance.Ui.WindowStartup.WindowPositionY.Value = Position.Y;
|
ConfigurationState.Instance.UI.WindowStartup.WindowPositionY.Value = Position.Y;
|
||||||
|
|
||||||
ConfigurationState.Instance.Ui.WindowStartup.WindowMaximized.Value = WindowState == WindowState.Maximized;
|
ConfigurationState.Instance.UI.WindowStartup.WindowMaximized.Value = WindowState == WindowState.Maximized;
|
||||||
|
|
||||||
MainWindowViewModel.SaveConfig();
|
MainWindowViewModel.SaveConfig();
|
||||||
}
|
}
|
||||||
@ -512,12 +512,12 @@ namespace Ryujinx.Ava.UI.Windows
|
|||||||
_ = fileType switch
|
_ = fileType switch
|
||||||
{
|
{
|
||||||
#pragma warning disable IDE0055 // Disable formatting
|
#pragma warning disable IDE0055 // Disable formatting
|
||||||
"NSP" => ConfigurationState.Instance.Ui.ShownFileTypes.NSP.Value = !ConfigurationState.Instance.Ui.ShownFileTypes.NSP,
|
"NSP" => ConfigurationState.Instance.UI.ShownFileTypes.NSP.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NSP,
|
||||||
"PFS0" => ConfigurationState.Instance.Ui.ShownFileTypes.PFS0.Value = !ConfigurationState.Instance.Ui.ShownFileTypes.PFS0,
|
"PFS0" => ConfigurationState.Instance.UI.ShownFileTypes.PFS0.Value = !ConfigurationState.Instance.UI.ShownFileTypes.PFS0,
|
||||||
"XCI" => ConfigurationState.Instance.Ui.ShownFileTypes.XCI.Value = !ConfigurationState.Instance.Ui.ShownFileTypes.XCI,
|
"XCI" => ConfigurationState.Instance.UI.ShownFileTypes.XCI.Value = !ConfigurationState.Instance.UI.ShownFileTypes.XCI,
|
||||||
"NCA" => ConfigurationState.Instance.Ui.ShownFileTypes.NCA.Value = !ConfigurationState.Instance.Ui.ShownFileTypes.NCA,
|
"NCA" => ConfigurationState.Instance.UI.ShownFileTypes.NCA.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NCA,
|
||||||
"NRO" => ConfigurationState.Instance.Ui.ShownFileTypes.NRO.Value = !ConfigurationState.Instance.Ui.ShownFileTypes.NRO,
|
"NRO" => ConfigurationState.Instance.UI.ShownFileTypes.NRO.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NRO,
|
||||||
"NSO" => ConfigurationState.Instance.Ui.ShownFileTypes.NSO.Value = !ConfigurationState.Instance.Ui.ShownFileTypes.NSO,
|
"NSO" => ConfigurationState.Instance.UI.ShownFileTypes.NSO.Value = !ConfigurationState.Instance.UI.ShownFileTypes.NSO,
|
||||||
_ => throw new ArgumentOutOfRangeException(fileType),
|
_ => throw new ArgumentOutOfRangeException(fileType),
|
||||||
#pragma warning restore IDE0055
|
#pragma warning restore IDE0055
|
||||||
};
|
};
|
||||||
@ -537,7 +537,7 @@ namespace Ryujinx.Ava.UI.Windows
|
|||||||
|
|
||||||
Thread applicationLibraryThread = new(() =>
|
Thread applicationLibraryThread = new(() =>
|
||||||
{
|
{
|
||||||
ApplicationLibrary.LoadApplications(ConfigurationState.Instance.Ui.GameDirs, ConfigurationState.Instance.System.Language);
|
ApplicationLibrary.LoadApplications(ConfigurationState.Instance.UI.GameDirs, ConfigurationState.Instance.System.Language);
|
||||||
|
|
||||||
_isLoading = false;
|
_isLoading = false;
|
||||||
})
|
})
|
||||||
|
@ -6,7 +6,7 @@ using Ryujinx.Ava.Common.Locale;
|
|||||||
using Ryujinx.Ava.UI.Helpers;
|
using Ryujinx.Ava.UI.Helpers;
|
||||||
using Ryujinx.Ava.UI.Models;
|
using Ryujinx.Ava.UI.Models;
|
||||||
using Ryujinx.Ava.UI.ViewModels;
|
using Ryujinx.Ava.UI.ViewModels;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Button = Avalonia.Controls.Button;
|
using Button = Avalonia.Controls.Button;
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ using Avalonia.Media;
|
|||||||
using Avalonia.Media.Imaging;
|
using Avalonia.Media.Imaging;
|
||||||
using Avalonia.Platform;
|
using Avalonia.Platform;
|
||||||
using Ryujinx.Ava.Common.Locale;
|
using Ryujinx.Ava.Common.Locale;
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ namespace Ryujinx.Ava.UI.Windows
|
|||||||
WindowStartupLocation = WindowStartupLocation.CenterOwner;
|
WindowStartupLocation = WindowStartupLocation.CenterOwner;
|
||||||
TransparencyLevelHint = new[] { WindowTransparencyLevel.None };
|
TransparencyLevelHint = new[] { WindowTransparencyLevel.None };
|
||||||
|
|
||||||
using Stream stream = Assembly.GetAssembly(typeof(ConfigurationState)).GetManifestResourceStream("Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png");
|
using Stream stream = Assembly.GetAssembly(typeof(ConfigurationState)).GetManifestResourceStream("Ryujinx.UI.Common.Resources.Logo_Ryujinx.png");
|
||||||
|
|
||||||
Icon = new WindowIcon(stream);
|
Icon = new WindowIcon(stream);
|
||||||
stream.Position = 0;
|
stream.Position = 0;
|
||||||
|
@ -7,7 +7,7 @@ using Ryujinx.Ava.UI.Helpers;
|
|||||||
using Ryujinx.Ava.UI.Models;
|
using Ryujinx.Ava.UI.Models;
|
||||||
using Ryujinx.Ava.UI.ViewModels;
|
using Ryujinx.Ava.UI.ViewModels;
|
||||||
using Ryujinx.HLE.FileSystem;
|
using Ryujinx.HLE.FileSystem;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Button = Avalonia.Controls.Button;
|
using Button = Avalonia.Controls.Button;
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ using Ryujinx.Common.Logging;
|
|||||||
using Ryujinx.Common.Utilities;
|
using Ryujinx.Common.Utilities;
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Runtime.Versioning;
|
||||||
|
|
||||||
namespace Ryujinx.Common.Configuration
|
namespace Ryujinx.Common.Configuration
|
||||||
{
|
{
|
||||||
@ -95,18 +96,9 @@ namespace Ryujinx.Common.Configuration
|
|||||||
|
|
||||||
BaseDirPath = Path.GetFullPath(BaseDirPath); // convert relative paths
|
BaseDirPath = Path.GetFullPath(BaseDirPath); // convert relative paths
|
||||||
|
|
||||||
// NOTE: Moves the Ryujinx folder in `~/.config` to `~/Library/Application Support` if one is found
|
if (IsPathSymlink(BaseDirPath))
|
||||||
// and a Ryujinx folder does not already exist in Application Support.
|
|
||||||
// Also creates a symlink from `~/.config/Ryujinx` to `~/Library/Application Support/Ryujinx` to preserve backwards compatibility.
|
|
||||||
// This should be removed in the future.
|
|
||||||
if (OperatingSystem.IsMacOS() && Mode == LaunchMode.UserProfile)
|
|
||||||
{
|
{
|
||||||
string oldConfigPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), DefaultBaseDir);
|
Logger.Warning?.Print(LogClass.Application, $"Application data directory is a symlink. This may be unintended.");
|
||||||
if (Path.Exists(oldConfigPath) && !IsPathSymlink(oldConfigPath) && !Path.Exists(BaseDirPath))
|
|
||||||
{
|
|
||||||
FileSystemUtils.MoveDirectory(oldConfigPath, BaseDirPath);
|
|
||||||
Directory.CreateSymbolicLink(oldConfigPath, BaseDirPath);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SetupBasePaths();
|
SetupBasePaths();
|
||||||
@ -240,10 +232,93 @@ namespace Ryujinx.Common.Configuration
|
|||||||
// Check if existing old baseDirPath is a symlink, to prevent possible errors.
|
// Check if existing old baseDirPath is a symlink, to prevent possible errors.
|
||||||
// Should be removed, when the existence of the old directory isn't checked anymore.
|
// Should be removed, when the existence of the old directory isn't checked anymore.
|
||||||
private static bool IsPathSymlink(string path)
|
private static bool IsPathSymlink(string path)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
FileAttributes attributes = File.GetAttributes(path);
|
FileAttributes attributes = File.GetAttributes(path);
|
||||||
return (attributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint;
|
return (attributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint;
|
||||||
}
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[SupportedOSPlatform("macos")]
|
||||||
|
public static void FixMacOSConfigurationFolders()
|
||||||
|
{
|
||||||
|
string oldConfigPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
|
||||||
|
".config", DefaultBaseDir);
|
||||||
|
if (Path.Exists(oldConfigPath) && !IsPathSymlink(oldConfigPath) && !Path.Exists(BaseDirPath))
|
||||||
|
{
|
||||||
|
FileSystemUtils.MoveDirectory(oldConfigPath, BaseDirPath);
|
||||||
|
Directory.CreateSymbolicLink(oldConfigPath, BaseDirPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
string correctApplicationDataDirectoryPath =
|
||||||
|
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), DefaultBaseDir);
|
||||||
|
if (IsPathSymlink(correctApplicationDataDirectoryPath))
|
||||||
|
{
|
||||||
|
//copy the files somewhere temporarily
|
||||||
|
string tempPath = Path.Combine(Path.GetTempPath(), DefaultBaseDir);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
FileSystemUtils.CopyDirectory(correctApplicationDataDirectoryPath, tempPath, true);
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
Logger.Error?.Print(LogClass.Application,
|
||||||
|
$"Critical error copying Ryujinx application data into the temp folder. {exception}");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
FileSystemInfo resolvedDirectoryInfo =
|
||||||
|
Directory.ResolveLinkTarget(correctApplicationDataDirectoryPath, true);
|
||||||
|
string resolvedPath = resolvedDirectoryInfo.FullName;
|
||||||
|
Logger.Error?.Print(LogClass.Application, $"Please manually move your Ryujinx data from {resolvedPath} to {correctApplicationDataDirectoryPath}, and remove the symlink.");
|
||||||
|
}
|
||||||
|
catch (Exception symlinkException)
|
||||||
|
{
|
||||||
|
Logger.Error?.Print(LogClass.Application, $"Unable to resolve the symlink for Ryujinx application data: {symlinkException}. Follow the symlink at {correctApplicationDataDirectoryPath} and move your data back to the Application Support folder.");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//delete the symlink
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//This will fail if this is an actual directory, so there is no way we can actually delete user data here.
|
||||||
|
File.Delete(correctApplicationDataDirectoryPath);
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
Logger.Error?.Print(LogClass.Application,
|
||||||
|
$"Critical error deleting the Ryujinx application data folder symlink at {correctApplicationDataDirectoryPath}. {exception}");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
FileSystemInfo resolvedDirectoryInfo =
|
||||||
|
Directory.ResolveLinkTarget(correctApplicationDataDirectoryPath, true);
|
||||||
|
string resolvedPath = resolvedDirectoryInfo.FullName;
|
||||||
|
Logger.Error?.Print(LogClass.Application, $"Please manually move your Ryujinx data from {resolvedPath} to {correctApplicationDataDirectoryPath}, and remove the symlink.");
|
||||||
|
}
|
||||||
|
catch (Exception symlinkException)
|
||||||
|
{
|
||||||
|
Logger.Error?.Print(LogClass.Application, $"Unable to resolve the symlink for Ryujinx application data: {symlinkException}. Follow the symlink at {correctApplicationDataDirectoryPath} and move your data back to the Application Support folder.");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//put the files back
|
||||||
|
try
|
||||||
|
{
|
||||||
|
FileSystemUtils.CopyDirectory(tempPath, correctApplicationDataDirectoryPath, true);
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
Logger.Error?.Print(LogClass.Application,
|
||||||
|
$"Critical error copying Ryujinx application data into the correct location. {exception}. Please manually move your application data from {tempPath} to {correctApplicationDataDirectoryPath}.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static string GetModsPath() => CustomModsPath ?? Directory.CreateDirectory(Path.Combine(BaseDirPath, DefaultModsDir)).FullName;
|
public static string GetModsPath() => CustomModsPath ?? Directory.CreateDirectory(Path.Combine(BaseDirPath, DefaultModsDir)).FullName;
|
||||||
public static string GetSdModsPath() => CustomSdModsPath ?? Directory.CreateDirectory(Path.Combine(BaseDirPath, DefaultSdcardDir, "atmosphere")).FullName;
|
public static string GetSdModsPath() => CustomSdModsPath ?? Directory.CreateDirectory(Path.Combine(BaseDirPath, DefaultSdcardDir, "atmosphere")).FullName;
|
||||||
|
@ -6,7 +6,7 @@ namespace Ryujinx.Common.Configuration.Hid
|
|||||||
{
|
{
|
||||||
public Key ToggleVsync { get; set; }
|
public Key ToggleVsync { get; set; }
|
||||||
public Key Screenshot { get; set; }
|
public Key Screenshot { get; set; }
|
||||||
public Key ShowUi { get; set; }
|
public Key ShowUI { get; set; }
|
||||||
public Key Pause { get; set; }
|
public Key Pause { get; set; }
|
||||||
public Key ToggleMute { get; set; }
|
public Key ToggleMute { get; set; }
|
||||||
public Key ResScaleUp { get; set; }
|
public Key ResScaleUp { get; set; }
|
||||||
|
@ -70,7 +70,7 @@ namespace Ryujinx.Common.Logging
|
|||||||
ServiceVi,
|
ServiceVi,
|
||||||
SurfaceFlinger,
|
SurfaceFlinger,
|
||||||
TamperMachine,
|
TamperMachine,
|
||||||
Ui,
|
UI,
|
||||||
Vic,
|
Vic,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ using Ryujinx.HLE.FileSystem;
|
|||||||
using Ryujinx.HLE.HOS;
|
using Ryujinx.HLE.HOS;
|
||||||
using Ryujinx.HLE.HOS.Services.Account.Acc;
|
using Ryujinx.HLE.HOS.Services.Account.Acc;
|
||||||
using Ryujinx.HLE.HOS.SystemState;
|
using Ryujinx.HLE.HOS.SystemState;
|
||||||
using Ryujinx.HLE.Ui;
|
using Ryujinx.HLE.UI;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.HLE
|
namespace Ryujinx.HLE
|
||||||
@ -63,7 +63,7 @@ namespace Ryujinx.HLE
|
|||||||
/// The handler for various UI related operations needed outside of HLE.
|
/// The handler for various UI related operations needed outside of HLE.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>This cannot be changed after <see cref="Switch"/> instantiation.</remarks>
|
/// <remarks>This cannot be changed after <see cref="Switch"/> instantiation.</remarks>
|
||||||
internal readonly IHostUiHandler HostUiHandler;
|
internal readonly IHostUIHandler HostUIHandler;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Control the memory configuration used by the emulation context.
|
/// Control the memory configuration used by the emulation context.
|
||||||
@ -177,7 +177,7 @@ namespace Ryujinx.HLE
|
|||||||
IRenderer gpuRenderer,
|
IRenderer gpuRenderer,
|
||||||
IHardwareDeviceDriver audioDeviceDriver,
|
IHardwareDeviceDriver audioDeviceDriver,
|
||||||
MemoryConfiguration memoryConfiguration,
|
MemoryConfiguration memoryConfiguration,
|
||||||
IHostUiHandler hostUiHandler,
|
IHostUIHandler hostUIHandler,
|
||||||
SystemLanguage systemLanguage,
|
SystemLanguage systemLanguage,
|
||||||
RegionCode region,
|
RegionCode region,
|
||||||
bool enableVsync,
|
bool enableVsync,
|
||||||
@ -204,7 +204,7 @@ namespace Ryujinx.HLE
|
|||||||
GpuRenderer = gpuRenderer;
|
GpuRenderer = gpuRenderer;
|
||||||
AudioDeviceDriver = audioDeviceDriver;
|
AudioDeviceDriver = audioDeviceDriver;
|
||||||
MemoryConfiguration = memoryConfiguration;
|
MemoryConfiguration = memoryConfiguration;
|
||||||
HostUiHandler = hostUiHandler;
|
HostUIHandler = hostUIHandler;
|
||||||
SystemLanguage = systemLanguage;
|
SystemLanguage = systemLanguage;
|
||||||
Region = region;
|
Region = region;
|
||||||
EnableVsync = enableVsync;
|
EnableVsync = enableVsync;
|
||||||
|
@ -86,7 +86,7 @@ namespace Ryujinx.HLE.HOS.Applets
|
|||||||
PlayerIndex primaryIndex;
|
PlayerIndex primaryIndex;
|
||||||
while (!_system.Device.Hid.Npads.Validate(playerMin, playerMax, (ControllerType)privateArg.NpadStyleSet, out configuredCount, out primaryIndex))
|
while (!_system.Device.Hid.Npads.Validate(playerMin, playerMax, (ControllerType)privateArg.NpadStyleSet, out configuredCount, out primaryIndex))
|
||||||
{
|
{
|
||||||
ControllerAppletUiArgs uiArgs = new()
|
ControllerAppletUIArgs uiArgs = new()
|
||||||
{
|
{
|
||||||
PlayerCountMin = playerMin,
|
PlayerCountMin = playerMin,
|
||||||
PlayerCountMax = playerMax,
|
PlayerCountMax = playerMax,
|
||||||
@ -95,7 +95,7 @@ namespace Ryujinx.HLE.HOS.Applets
|
|||||||
IsDocked = _system.State.DockedMode,
|
IsDocked = _system.State.DockedMode,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!_system.Device.UiHandler.DisplayMessageDialog(uiArgs))
|
if (!_system.Device.UIHandler.DisplayMessageDialog(uiArgs))
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ using System.Collections.Generic;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Applets
|
namespace Ryujinx.HLE.HOS.Applets
|
||||||
{
|
{
|
||||||
public struct ControllerAppletUiArgs
|
public struct ControllerAppletUIArgs
|
||||||
{
|
{
|
||||||
public int PlayerCountMin;
|
public int PlayerCountMin;
|
||||||
public int PlayerCountMax;
|
public int PlayerCountMax;
|
@ -166,13 +166,13 @@ namespace Ryujinx.HLE.HOS.Applets.Error
|
|||||||
|
|
||||||
string[] buttons = GetButtonsText(module, description, "DlgBtn");
|
string[] buttons = GetButtonsText(module, description, "DlgBtn");
|
||||||
|
|
||||||
bool showDetails = _horizon.Device.UiHandler.DisplayErrorAppletDialog($"Error Code: {module}-{description:0000}", "\n" + message, buttons);
|
bool showDetails = _horizon.Device.UIHandler.DisplayErrorAppletDialog($"Error Code: {module}-{description:0000}", "\n" + message, buttons);
|
||||||
if (showDetails)
|
if (showDetails)
|
||||||
{
|
{
|
||||||
message = GetMessageText(module, description, "FlvMsg");
|
message = GetMessageText(module, description, "FlvMsg");
|
||||||
buttons = GetButtonsText(module, description, "FlvBtn");
|
buttons = GetButtonsText(module, description, "FlvBtn");
|
||||||
|
|
||||||
_horizon.Device.UiHandler.DisplayErrorAppletDialog($"Details: {module}-{description:0000}", "\n" + message, buttons);
|
_horizon.Device.UIHandler.DisplayErrorAppletDialog($"Details: {module}-{description:0000}", "\n" + message, buttons);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,12 +200,12 @@ namespace Ryujinx.HLE.HOS.Applets.Error
|
|||||||
|
|
||||||
buttons.Add("OK");
|
buttons.Add("OK");
|
||||||
|
|
||||||
bool showDetails = _horizon.Device.UiHandler.DisplayErrorAppletDialog($"Error Number: {applicationErrorArg.ErrorNumber}", "\n" + messageText, buttons.ToArray());
|
bool showDetails = _horizon.Device.UIHandler.DisplayErrorAppletDialog($"Error Number: {applicationErrorArg.ErrorNumber}", "\n" + messageText, buttons.ToArray());
|
||||||
if (showDetails)
|
if (showDetails)
|
||||||
{
|
{
|
||||||
buttons.RemoveAt(0);
|
buttons.RemoveAt(0);
|
||||||
|
|
||||||
_horizon.Device.UiHandler.DisplayErrorAppletDialog($"Error Number: {applicationErrorArg.ErrorNumber} (Details)", "\n" + detailsText, buttons.ToArray());
|
_horizon.Device.UIHandler.DisplayErrorAppletDialog($"Error Number: {applicationErrorArg.ErrorNumber} (Details)", "\n" + detailsText, buttons.ToArray());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
using Ryujinx.HLE.HOS.Services.Am.AppletAE;
|
using Ryujinx.HLE.HOS.Services.Am.AppletAE;
|
||||||
using Ryujinx.HLE.Ui;
|
using Ryujinx.HLE.UI;
|
||||||
using Ryujinx.Memory;
|
using Ryujinx.Memory;
|
||||||
using System;
|
using System;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
@ -4,8 +4,8 @@ using Ryujinx.Common.Logging;
|
|||||||
using Ryujinx.HLE.HOS.Applets.SoftwareKeyboard;
|
using Ryujinx.HLE.HOS.Applets.SoftwareKeyboard;
|
||||||
using Ryujinx.HLE.HOS.Services.Am.AppletAE;
|
using Ryujinx.HLE.HOS.Services.Am.AppletAE;
|
||||||
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad;
|
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad;
|
||||||
using Ryujinx.HLE.Ui;
|
using Ryujinx.HLE.UI;
|
||||||
using Ryujinx.HLE.Ui.Input;
|
using Ryujinx.HLE.UI.Input;
|
||||||
using Ryujinx.Memory;
|
using Ryujinx.Memory;
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
@ -92,14 +92,14 @@ namespace Ryujinx.HLE.HOS.Applets
|
|||||||
_keyboardBackgroundInitialize = MemoryMarshal.Read<SoftwareKeyboardInitialize>(keyboardConfig);
|
_keyboardBackgroundInitialize = MemoryMarshal.Read<SoftwareKeyboardInitialize>(keyboardConfig);
|
||||||
_backgroundState = InlineKeyboardState.Uninitialized;
|
_backgroundState = InlineKeyboardState.Uninitialized;
|
||||||
|
|
||||||
if (_device.UiHandler == null)
|
if (_device.UIHandler == null)
|
||||||
{
|
{
|
||||||
Logger.Error?.Print(LogClass.ServiceAm, "GUI Handler is not set, software keyboard applet will not work properly");
|
Logger.Error?.Print(LogClass.ServiceAm, "GUI Handler is not set, software keyboard applet will not work properly");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Create a text handler that converts keyboard strokes to strings.
|
// Create a text handler that converts keyboard strokes to strings.
|
||||||
_dynamicTextInputHandler = _device.UiHandler.CreateDynamicTextInputHandler();
|
_dynamicTextInputHandler = _device.UIHandler.CreateDynamicTextInputHandler();
|
||||||
_dynamicTextInputHandler.TextChangedEvent += HandleTextChangedEvent;
|
_dynamicTextInputHandler.TextChangedEvent += HandleTextChangedEvent;
|
||||||
_dynamicTextInputHandler.KeyPressedEvent += HandleKeyPressedEvent;
|
_dynamicTextInputHandler.KeyPressedEvent += HandleKeyPressedEvent;
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ namespace Ryujinx.HLE.HOS.Applets
|
|||||||
_npads.NpadButtonDownEvent += HandleNpadButtonDownEvent;
|
_npads.NpadButtonDownEvent += HandleNpadButtonDownEvent;
|
||||||
_npads.NpadButtonUpEvent += HandleNpadButtonUpEvent;
|
_npads.NpadButtonUpEvent += HandleNpadButtonUpEvent;
|
||||||
|
|
||||||
_keyboardRenderer = new SoftwareKeyboardRenderer(_device.UiHandler.HostUiTheme);
|
_keyboardRenderer = new SoftwareKeyboardRenderer(_device.UIHandler.HostUITheme);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
@ -199,7 +199,7 @@ namespace Ryujinx.HLE.HOS.Applets
|
|||||||
_keyboardForegroundConfig.StringLengthMax = 100;
|
_keyboardForegroundConfig.StringLengthMax = 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_device.UiHandler == null)
|
if (_device.UIHandler == null)
|
||||||
{
|
{
|
||||||
Logger.Warning?.Print(LogClass.Application, "GUI Handler is not set. Falling back to default");
|
Logger.Warning?.Print(LogClass.Application, "GUI Handler is not set. Falling back to default");
|
||||||
|
|
||||||
@ -209,7 +209,7 @@ namespace Ryujinx.HLE.HOS.Applets
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Call the configured GUI handler to get user's input.
|
// Call the configured GUI handler to get user's input.
|
||||||
var args = new SoftwareKeyboardUiArgs
|
var args = new SoftwareKeyboardUIArgs
|
||||||
{
|
{
|
||||||
KeyboardMode = _keyboardForegroundConfig.Mode,
|
KeyboardMode = _keyboardForegroundConfig.Mode,
|
||||||
HeaderText = StripUnicodeControlCodes(_keyboardForegroundConfig.HeaderText),
|
HeaderText = StripUnicodeControlCodes(_keyboardForegroundConfig.HeaderText),
|
||||||
@ -222,7 +222,7 @@ namespace Ryujinx.HLE.HOS.Applets
|
|||||||
InitialText = initialText,
|
InitialText = initialText,
|
||||||
};
|
};
|
||||||
|
|
||||||
_lastResult = _device.UiHandler.DisplayInputDialog(args, out _textValue) ? KeyboardResult.Accept : KeyboardResult.Cancel;
|
_lastResult = _device.UIHandler.DisplayInputDialog(args, out _textValue) ? KeyboardResult.Accept : KeyboardResult.Cancel;
|
||||||
_textValue ??= initialText ?? DefaultInputText;
|
_textValue ??= initialText ?? DefaultInputText;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using Ryujinx.HLE.Ui;
|
using Ryujinx.HLE.UI;
|
||||||
using Ryujinx.Memory;
|
using Ryujinx.Memory;
|
||||||
using System;
|
using System;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@ -15,13 +15,13 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard
|
|||||||
|
|
||||||
private readonly object _stateLock = new();
|
private readonly object _stateLock = new();
|
||||||
|
|
||||||
private readonly SoftwareKeyboardUiState _state = new();
|
private readonly SoftwareKeyboardUIState _state = new();
|
||||||
private readonly SoftwareKeyboardRendererBase _renderer;
|
private readonly SoftwareKeyboardRendererBase _renderer;
|
||||||
|
|
||||||
private readonly TimedAction _textBoxBlinkTimedAction = new();
|
private readonly TimedAction _textBoxBlinkTimedAction = new();
|
||||||
private readonly TimedAction _renderAction = new();
|
private readonly TimedAction _renderAction = new();
|
||||||
|
|
||||||
public SoftwareKeyboardRenderer(IHostUiTheme uiTheme)
|
public SoftwareKeyboardRenderer(IHostUITheme uiTheme)
|
||||||
{
|
{
|
||||||
_renderer = new SoftwareKeyboardRendererBase(uiTheme);
|
_renderer = new SoftwareKeyboardRendererBase(uiTheme);
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard
|
|||||||
StartRenderer(_renderAction, _renderer, _state, _stateLock);
|
StartRenderer(_renderAction, _renderer, _state, _stateLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void StartTextBoxBlinker(TimedAction timedAction, SoftwareKeyboardUiState state, object stateLock)
|
private static void StartTextBoxBlinker(TimedAction timedAction, SoftwareKeyboardUIState state, object stateLock)
|
||||||
{
|
{
|
||||||
timedAction.Reset(() =>
|
timedAction.Reset(() =>
|
||||||
{
|
{
|
||||||
@ -45,9 +45,9 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard
|
|||||||
}, TextBoxBlinkSleepMilliseconds);
|
}, TextBoxBlinkSleepMilliseconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void StartRenderer(TimedAction timedAction, SoftwareKeyboardRendererBase renderer, SoftwareKeyboardUiState state, object stateLock)
|
private static void StartRenderer(TimedAction timedAction, SoftwareKeyboardRendererBase renderer, SoftwareKeyboardUIState state, object stateLock)
|
||||||
{
|
{
|
||||||
SoftwareKeyboardUiState internalState = new();
|
SoftwareKeyboardUIState internalState = new();
|
||||||
|
|
||||||
bool canCreateSurface = false;
|
bool canCreateSurface = false;
|
||||||
bool needsUpdate = true;
|
bool needsUpdate = true;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using Ryujinx.HLE.Ui;
|
using Ryujinx.HLE.UI;
|
||||||
using Ryujinx.Memory;
|
using Ryujinx.Memory;
|
||||||
using SixLabors.Fonts;
|
using SixLabors.Fonts;
|
||||||
using SixLabors.ImageSharp;
|
using SixLabors.ImageSharp;
|
||||||
@ -63,7 +63,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard
|
|||||||
private Point _logoPosition;
|
private Point _logoPosition;
|
||||||
private float _messagePositionY;
|
private float _messagePositionY;
|
||||||
|
|
||||||
public SoftwareKeyboardRendererBase(IHostUiTheme uiTheme)
|
public SoftwareKeyboardRendererBase(IHostUITheme uiTheme)
|
||||||
{
|
{
|
||||||
int ryujinxLogoSize = 32;
|
int ryujinxLogoSize = 32;
|
||||||
|
|
||||||
@ -205,7 +205,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DrawMutableElements(SoftwareKeyboardUiState state)
|
public void DrawMutableElements(SoftwareKeyboardUIState state)
|
||||||
{
|
{
|
||||||
if (_surface == null)
|
if (_surface == null)
|
||||||
{
|
{
|
||||||
@ -322,7 +322,7 @@ namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard
|
|||||||
return new RectangleF(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
|
return new RectangleF(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DrawTextBox(IImageProcessingContext context, SoftwareKeyboardUiState state)
|
private void DrawTextBox(IImageProcessingContext context, SoftwareKeyboardUIState state)
|
||||||
{
|
{
|
||||||
var inputTextRectangle = MeasureString(state.InputText, _inputTextFont);
|
var inputTextRectangle = MeasureString(state.InputText, _inputTextFont);
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ using Ryujinx.HLE.HOS.Applets.SoftwareKeyboard;
|
|||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Applets
|
namespace Ryujinx.HLE.HOS.Applets
|
||||||
{
|
{
|
||||||
public struct SoftwareKeyboardUiArgs
|
public struct SoftwareKeyboardUIArgs
|
||||||
{
|
{
|
||||||
public KeyboardMode KeyboardMode;
|
public KeyboardMode KeyboardMode;
|
||||||
public string HeaderText;
|
public string HeaderText;
|
@ -1,11 +1,11 @@
|
|||||||
using Ryujinx.HLE.Ui;
|
using Ryujinx.HLE.UI;
|
||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard
|
namespace Ryujinx.HLE.HOS.Applets.SoftwareKeyboard
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// TODO
|
/// TODO
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal class SoftwareKeyboardUiState
|
internal class SoftwareKeyboardUIState
|
||||||
{
|
{
|
||||||
public string InputText = "";
|
public string InputText = "";
|
||||||
public int CursorBegin = 0;
|
public int CursorBegin = 0;
|
@ -97,7 +97,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
|
|
||||||
if (titleId == 0)
|
if (titleId == 0)
|
||||||
{
|
{
|
||||||
context.Device.UiHandler.ExecuteProgram(context.Device, ProgramSpecifyKind.RestartProgram, titleId);
|
context.Device.UIHandler.ExecuteProgram(context.Device, ProgramSpecifyKind.RestartProgram, titleId);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -524,7 +524,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
|||||||
|
|
||||||
Logger.Stub?.PrintStub(LogClass.ServiceAm, new { kind, value });
|
Logger.Stub?.PrintStub(LogClass.ServiceAm, new { kind, value });
|
||||||
|
|
||||||
context.Device.UiHandler.ExecuteProgram(context.Device, kind, value);
|
context.Device.UIHandler.ExecuteProgram(context.Device, kind, value);
|
||||||
|
|
||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
@ -50,6 +50,12 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostCtrlGpu
|
|||||||
case 0x06:
|
case 0x06:
|
||||||
result = CallIoctlMethod<GetTpcMasksArguments>(GetTpcMasks, arguments);
|
result = CallIoctlMethod<GetTpcMasksArguments>(GetTpcMasks, arguments);
|
||||||
break;
|
break;
|
||||||
|
case 0x12:
|
||||||
|
result = CallIoctlMethod<NumVsmsArguments>(NumVsms, arguments);
|
||||||
|
break;
|
||||||
|
case 0x13:
|
||||||
|
result = CallIoctlMethod<VsmsMappingArguments>(VsmsMapping, arguments);
|
||||||
|
break;
|
||||||
case 0x14:
|
case 0x14:
|
||||||
result = CallIoctlMethod<GetActiveSlotMaskArguments>(GetActiveSlotMask, arguments);
|
result = CallIoctlMethod<GetActiveSlotMaskArguments>(GetActiveSlotMask, arguments);
|
||||||
break;
|
break;
|
||||||
@ -76,6 +82,12 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostCtrlGpu
|
|||||||
case 0x06:
|
case 0x06:
|
||||||
result = CallIoctlMethod<GetTpcMasksArguments, int>(GetTpcMasks, arguments, inlineOutBuffer);
|
result = CallIoctlMethod<GetTpcMasksArguments, int>(GetTpcMasks, arguments, inlineOutBuffer);
|
||||||
break;
|
break;
|
||||||
|
case 0x12:
|
||||||
|
result = CallIoctlMethod<NumVsmsArguments>(NumVsms, arguments);
|
||||||
|
break;
|
||||||
|
case 0x13:
|
||||||
|
result = CallIoctlMethod<VsmsMappingArguments>(VsmsMapping, arguments);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,6 +228,27 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostCtrlGpu
|
|||||||
return NvInternalResult.Success;
|
return NvInternalResult.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private NvInternalResult NumVsms(ref NumVsmsArguments arguments)
|
||||||
|
{
|
||||||
|
Logger.Stub?.PrintStub(LogClass.ServiceNv);
|
||||||
|
|
||||||
|
arguments.NumVsms = 2;
|
||||||
|
|
||||||
|
return NvInternalResult.Success;
|
||||||
|
}
|
||||||
|
|
||||||
|
private NvInternalResult VsmsMapping(ref VsmsMappingArguments arguments)
|
||||||
|
{
|
||||||
|
Logger.Stub?.PrintStub(LogClass.ServiceNv);
|
||||||
|
|
||||||
|
arguments.Sm0GpcIndex = 0;
|
||||||
|
arguments.Sm0TpcIndex = 0;
|
||||||
|
arguments.Sm1GpcIndex = 0;
|
||||||
|
arguments.Sm1TpcIndex = 1;
|
||||||
|
|
||||||
|
return NvInternalResult.Success;
|
||||||
|
}
|
||||||
|
|
||||||
private NvInternalResult GetActiveSlotMask(ref GetActiveSlotMaskArguments arguments)
|
private NvInternalResult GetActiveSlotMask(ref GetActiveSlotMaskArguments arguments)
|
||||||
{
|
{
|
||||||
Logger.Stub?.PrintStub(LogClass.ServiceNv);
|
Logger.Stub?.PrintStub(LogClass.ServiceNv);
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostCtrlGpu.Types
|
||||||
|
{
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
struct NumVsmsArguments
|
||||||
|
{
|
||||||
|
public uint NumVsms;
|
||||||
|
public uint Reserved;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostCtrlGpu.Types
|
||||||
|
{
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
struct VsmsMappingArguments
|
||||||
|
{
|
||||||
|
public byte Sm0GpcIndex;
|
||||||
|
public byte Sm0TpcIndex;
|
||||||
|
public byte Sm1GpcIndex;
|
||||||
|
public byte Sm1TpcIndex;
|
||||||
|
}
|
||||||
|
}
|
@ -7,7 +7,7 @@ using Ryujinx.HLE.HOS.Services.SurfaceFlinger;
|
|||||||
using Ryujinx.HLE.HOS.Services.Vi.RootService.ApplicationDisplayService;
|
using Ryujinx.HLE.HOS.Services.Vi.RootService.ApplicationDisplayService;
|
||||||
using Ryujinx.HLE.HOS.Services.Vi.RootService.ApplicationDisplayService.Types;
|
using Ryujinx.HLE.HOS.Services.Vi.RootService.ApplicationDisplayService.Types;
|
||||||
using Ryujinx.HLE.HOS.Services.Vi.Types;
|
using Ryujinx.HLE.HOS.Services.Vi.Types;
|
||||||
using Ryujinx.HLE.Ui;
|
using Ryujinx.HLE.UI;
|
||||||
using Ryujinx.Horizon.Common;
|
using Ryujinx.Horizon.Common;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
@ -7,7 +7,7 @@ using Ryujinx.HLE.HOS;
|
|||||||
using Ryujinx.HLE.HOS.Services.Apm;
|
using Ryujinx.HLE.HOS.Services.Apm;
|
||||||
using Ryujinx.HLE.HOS.Services.Hid;
|
using Ryujinx.HLE.HOS.Services.Hid;
|
||||||
using Ryujinx.HLE.Loaders.Processes;
|
using Ryujinx.HLE.Loaders.Processes;
|
||||||
using Ryujinx.HLE.Ui;
|
using Ryujinx.HLE.UI;
|
||||||
using Ryujinx.Memory;
|
using Ryujinx.Memory;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ namespace Ryujinx.HLE
|
|||||||
public PerformanceStatistics Statistics { get; }
|
public PerformanceStatistics Statistics { get; }
|
||||||
public Hid Hid { get; }
|
public Hid Hid { get; }
|
||||||
public TamperMachine TamperMachine { get; }
|
public TamperMachine TamperMachine { get; }
|
||||||
public IHostUiHandler UiHandler { get; }
|
public IHostUIHandler UIHandler { get; }
|
||||||
|
|
||||||
public bool EnableDeviceVsync { get; set; } = true;
|
public bool EnableDeviceVsync { get; set; } = true;
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ namespace Ryujinx.HLE
|
|||||||
|
|
||||||
Configuration = configuration;
|
Configuration = configuration;
|
||||||
FileSystem = Configuration.VirtualFileSystem;
|
FileSystem = Configuration.VirtualFileSystem;
|
||||||
UiHandler = Configuration.HostUiHandler;
|
UIHandler = Configuration.HostUIHandler;
|
||||||
|
|
||||||
MemoryAllocationFlags memoryAllocationFlags = configuration.MemoryManagerMode == MemoryManagerMode.SoftwarePageTable
|
MemoryAllocationFlags memoryAllocationFlags = configuration.MemoryManagerMode == MemoryManagerMode.SoftwarePageTable
|
||||||
? MemoryAllocationFlags.Reserve
|
? MemoryAllocationFlags.Reserve
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
namespace Ryujinx.HLE.Ui
|
namespace Ryujinx.HLE.UI
|
||||||
{
|
{
|
||||||
public delegate void DynamicTextChangedHandler(string text, int cursorBegin, int cursorEnd, bool overwriteMode);
|
public delegate void DynamicTextChangedHandler(string text, int cursorBegin, int cursorEnd, bool overwriteMode);
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.HLE.Ui
|
namespace Ryujinx.HLE.UI
|
||||||
{
|
{
|
||||||
public interface IDynamicTextInputHandler : IDisposable
|
public interface IDynamicTextInputHandler : IDisposable
|
||||||
{
|
{
|
@ -1,16 +1,16 @@
|
|||||||
using Ryujinx.HLE.HOS.Applets;
|
using Ryujinx.HLE.HOS.Applets;
|
||||||
using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types;
|
using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types;
|
||||||
|
|
||||||
namespace Ryujinx.HLE.Ui
|
namespace Ryujinx.HLE.UI
|
||||||
{
|
{
|
||||||
public interface IHostUiHandler
|
public interface IHostUIHandler
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Displays an Input Dialog box to the user and blocks until text is entered.
|
/// Displays an Input Dialog box to the user and blocks until text is entered.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="userText">Text that the user entered. Set to `null` on internal errors</param>
|
/// <param name="userText">Text that the user entered. Set to `null` on internal errors</param>
|
||||||
/// <returns>True when OK is pressed, False otherwise. Also returns True on internal errors</returns>
|
/// <returns>True when OK is pressed, False otherwise. Also returns True on internal errors</returns>
|
||||||
bool DisplayInputDialog(SoftwareKeyboardUiArgs args, out string userText);
|
bool DisplayInputDialog(SoftwareKeyboardUIArgs args, out string userText);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Displays a Message Dialog box to the user and blocks until it is closed.
|
/// Displays a Message Dialog box to the user and blocks until it is closed.
|
||||||
@ -22,7 +22,7 @@ namespace Ryujinx.HLE.Ui
|
|||||||
/// Displays a Message Dialog box specific to Controller Applet and blocks until it is closed.
|
/// Displays a Message Dialog box specific to Controller Applet and blocks until it is closed.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>True when OK is pressed, False otherwise.</returns>
|
/// <returns>True when OK is pressed, False otherwise.</returns>
|
||||||
bool DisplayMessageDialog(ControllerAppletUiArgs args);
|
bool DisplayMessageDialog(ControllerAppletUIArgs args);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tell the UI that we need to transisition to another program.
|
/// Tell the UI that we need to transisition to another program.
|
||||||
@ -46,6 +46,6 @@ namespace Ryujinx.HLE.Ui
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets fonts and colors used by the host.
|
/// Gets fonts and colors used by the host.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
IHostUiTheme HostUiTheme { get; }
|
IHostUITheme HostUITheme { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
namespace Ryujinx.HLE.Ui
|
namespace Ryujinx.HLE.UI
|
||||||
{
|
{
|
||||||
public interface IHostUiTheme
|
public interface IHostUITheme
|
||||||
{
|
{
|
||||||
string FontFamily { get; }
|
string FontFamily { get; }
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad;
|
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad;
|
||||||
|
|
||||||
namespace Ryujinx.HLE.Ui.Input
|
namespace Ryujinx.HLE.UI.Input
|
||||||
{
|
{
|
||||||
delegate void NpadButtonHandler(int npadIndex, NpadButton button);
|
delegate void NpadButtonHandler(int npadIndex, NpadButton button);
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common;
|
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common;
|
||||||
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad;
|
using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad;
|
||||||
|
|
||||||
namespace Ryujinx.HLE.Ui.Input
|
namespace Ryujinx.HLE.UI.Input
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class that converts Hid entries for the Npad into pressed / released events.
|
/// Class that converts Hid entries for the Npad into pressed / released events.
|
@ -1,6 +1,6 @@
|
|||||||
using Ryujinx.Common.Configuration.Hid;
|
using Ryujinx.Common.Configuration.Hid;
|
||||||
|
|
||||||
namespace Ryujinx.HLE.Ui
|
namespace Ryujinx.HLE.UI
|
||||||
{
|
{
|
||||||
public delegate bool KeyPressedHandler(Key key);
|
public delegate bool KeyPressedHandler(Key key);
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
using Ryujinx.Common.Configuration.Hid;
|
using Ryujinx.Common.Configuration.Hid;
|
||||||
|
|
||||||
namespace Ryujinx.HLE.Ui
|
namespace Ryujinx.HLE.UI
|
||||||
{
|
{
|
||||||
public delegate bool KeyReleasedHandler(Key key);
|
public delegate bool KeyReleasedHandler(Key key);
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
using Ryujinx.HLE.HOS.Services.SurfaceFlinger;
|
using Ryujinx.HLE.HOS.Services.SurfaceFlinger;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.HLE.Ui
|
namespace Ryujinx.HLE.UI
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Information about the indirect layer that is being drawn to.
|
/// Information about the indirect layer that is being drawn to.
|
@ -1,4 +1,4 @@
|
|||||||
namespace Ryujinx.HLE.Ui
|
namespace Ryujinx.HLE.UI
|
||||||
{
|
{
|
||||||
public readonly struct ThemeColor
|
public readonly struct ThemeColor
|
||||||
{
|
{
|
@ -1,4 +1,4 @@
|
|||||||
using Ryujinx.HLE.Ui;
|
using Ryujinx.HLE.UI;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
using Ryujinx.HLE.Ui;
|
using Ryujinx.HLE.UI;
|
||||||
|
|
||||||
namespace Ryujinx.Headless.SDL2
|
namespace Ryujinx.Headless.SDL2
|
||||||
{
|
{
|
||||||
internal class HeadlessHostUiTheme : IHostUiTheme
|
internal class HeadlessHostUiTheme : IHostUITheme
|
||||||
{
|
{
|
||||||
public string FontFamily => "sans-serif";
|
public string FontFamily => "sans-serif";
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ using Ryujinx.Graphics.Gpu;
|
|||||||
using Ryujinx.Graphics.OpenGL;
|
using Ryujinx.Graphics.OpenGL;
|
||||||
using Ryujinx.HLE.HOS.Applets;
|
using Ryujinx.HLE.HOS.Applets;
|
||||||
using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types;
|
using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types;
|
||||||
using Ryujinx.HLE.Ui;
|
using Ryujinx.HLE.UI;
|
||||||
using Ryujinx.Input;
|
using Ryujinx.Input;
|
||||||
using Ryujinx.Input.HLE;
|
using Ryujinx.Input.HLE;
|
||||||
using Ryujinx.SDL2.Common;
|
using Ryujinx.SDL2.Common;
|
||||||
@ -25,7 +25,7 @@ using Switch = Ryujinx.HLE.Switch;
|
|||||||
|
|
||||||
namespace Ryujinx.Headless.SDL2
|
namespace Ryujinx.Headless.SDL2
|
||||||
{
|
{
|
||||||
abstract partial class WindowBase : IHostUiHandler, IDisposable
|
abstract partial class WindowBase : IHostUIHandler, IDisposable
|
||||||
{
|
{
|
||||||
protected const int DefaultWidth = 1280;
|
protected const int DefaultWidth = 1280;
|
||||||
protected const int DefaultHeight = 720;
|
protected const int DefaultHeight = 720;
|
||||||
@ -53,7 +53,7 @@ namespace Ryujinx.Headless.SDL2
|
|||||||
|
|
||||||
protected IntPtr WindowHandle { get; set; }
|
protected IntPtr WindowHandle { get; set; }
|
||||||
|
|
||||||
public IHostUiTheme HostUiTheme { get; }
|
public IHostUITheme HostUITheme { get; }
|
||||||
public int Width { get; private set; }
|
public int Width { get; private set; }
|
||||||
public int Height { get; private set; }
|
public int Height { get; private set; }
|
||||||
public int DisplayId { get; set; }
|
public int DisplayId { get; set; }
|
||||||
@ -106,7 +106,7 @@ namespace Ryujinx.Headless.SDL2
|
|||||||
_gpuDoneEvent = new ManualResetEvent(false);
|
_gpuDoneEvent = new ManualResetEvent(false);
|
||||||
_aspectRatio = aspectRatio;
|
_aspectRatio = aspectRatio;
|
||||||
_enableMouse = enableMouse;
|
_enableMouse = enableMouse;
|
||||||
HostUiTheme = new HeadlessHostUiTheme();
|
HostUITheme = new HeadlessHostUiTheme();
|
||||||
|
|
||||||
SDL2Driver.Instance.Initialize();
|
SDL2Driver.Instance.Initialize();
|
||||||
}
|
}
|
||||||
@ -465,7 +465,7 @@ namespace Ryujinx.Headless.SDL2
|
|||||||
Exit();
|
Exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool DisplayInputDialog(SoftwareKeyboardUiArgs args, out string userText)
|
public bool DisplayInputDialog(SoftwareKeyboardUIArgs args, out string userText)
|
||||||
{
|
{
|
||||||
// SDL2 doesn't support input dialogs
|
// SDL2 doesn't support input dialogs
|
||||||
userText = "Ryujinx";
|
userText = "Ryujinx";
|
||||||
@ -480,7 +480,7 @@ namespace Ryujinx.Headless.SDL2
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool DisplayMessageDialog(ControllerAppletUiArgs args)
|
public bool DisplayMessageDialog(ControllerAppletUIArgs args)
|
||||||
{
|
{
|
||||||
string playerCount = args.PlayerCountMin == args.PlayerCountMax ? $"exactly {args.PlayerCountMin}" : $"{args.PlayerCountMin}-{args.PlayerCountMax}";
|
string playerCount = args.PlayerCountMin == args.PlayerCountMax ? $"exactly {args.PlayerCountMin}" : $"{args.PlayerCountMin}-{args.PlayerCountMax}";
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Ui.App.Common
|
namespace Ryujinx.UI.App.Common
|
||||||
{
|
{
|
||||||
public class ApplicationAddedEventArgs : EventArgs
|
public class ApplicationAddedEventArgs : EventArgs
|
||||||
{
|
{
|
@ -1,6 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Ui.App.Common
|
namespace Ryujinx.UI.App.Common
|
||||||
{
|
{
|
||||||
public class ApplicationCountUpdatedEventArgs : EventArgs
|
public class ApplicationCountUpdatedEventArgs : EventArgs
|
||||||
{
|
{
|
@ -9,11 +9,11 @@ using LibHac.Tools.FsSystem;
|
|||||||
using LibHac.Tools.FsSystem.NcaUtils;
|
using LibHac.Tools.FsSystem.NcaUtils;
|
||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.HLE.FileSystem;
|
using Ryujinx.HLE.FileSystem;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace Ryujinx.Ui.App.Common
|
namespace Ryujinx.UI.App.Common
|
||||||
{
|
{
|
||||||
public class ApplicationData
|
public class ApplicationData
|
||||||
{
|
{
|
@ -1,6 +1,6 @@
|
|||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace Ryujinx.Ui.App.Common
|
namespace Ryujinx.UI.App.Common
|
||||||
{
|
{
|
||||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||||
[JsonSerializable(typeof(ApplicationMetadata))]
|
[JsonSerializable(typeof(ApplicationMetadata))]
|
@ -15,8 +15,8 @@ using Ryujinx.Common.Utilities;
|
|||||||
using Ryujinx.HLE.FileSystem;
|
using Ryujinx.HLE.FileSystem;
|
||||||
using Ryujinx.HLE.HOS.SystemState;
|
using Ryujinx.HLE.HOS.SystemState;
|
||||||
using Ryujinx.HLE.Loaders.Npdm;
|
using Ryujinx.HLE.Loaders.Npdm;
|
||||||
using Ryujinx.Ui.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
using Ryujinx.Ui.Common.Configuration.System;
|
using Ryujinx.UI.Common.Configuration.System;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
@ -29,7 +29,7 @@ using System.Threading;
|
|||||||
using Path = System.IO.Path;
|
using Path = System.IO.Path;
|
||||||
using TimeSpan = System.TimeSpan;
|
using TimeSpan = System.TimeSpan;
|
||||||
|
|
||||||
namespace Ryujinx.Ui.App.Common
|
namespace Ryujinx.UI.App.Common
|
||||||
{
|
{
|
||||||
public class ApplicationLibrary
|
public class ApplicationLibrary
|
||||||
{
|
{
|
||||||
@ -53,11 +53,11 @@ namespace Ryujinx.Ui.App.Common
|
|||||||
{
|
{
|
||||||
_virtualFileSystem = virtualFileSystem;
|
_virtualFileSystem = virtualFileSystem;
|
||||||
|
|
||||||
_nspIcon = GetResourceBytes("Ryujinx.Ui.Common.Resources.Icon_NSP.png");
|
_nspIcon = GetResourceBytes("Ryujinx.UI.Common.Resources.Icon_NSP.png");
|
||||||
_xciIcon = GetResourceBytes("Ryujinx.Ui.Common.Resources.Icon_XCI.png");
|
_xciIcon = GetResourceBytes("Ryujinx.UI.Common.Resources.Icon_XCI.png");
|
||||||
_ncaIcon = GetResourceBytes("Ryujinx.Ui.Common.Resources.Icon_NCA.png");
|
_ncaIcon = GetResourceBytes("Ryujinx.UI.Common.Resources.Icon_NCA.png");
|
||||||
_nroIcon = GetResourceBytes("Ryujinx.Ui.Common.Resources.Icon_NRO.png");
|
_nroIcon = GetResourceBytes("Ryujinx.UI.Common.Resources.Icon_NRO.png");
|
||||||
_nsoIcon = GetResourceBytes("Ryujinx.Ui.Common.Resources.Icon_NSO.png");
|
_nsoIcon = GetResourceBytes("Ryujinx.UI.Common.Resources.Icon_NSO.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static byte[] GetResourceBytes(string resourceName)
|
private static byte[] GetResourceBytes(string resourceName)
|
||||||
@ -116,12 +116,12 @@ namespace Ryujinx.Ui.App.Common
|
|||||||
IEnumerable<string> files = Directory.EnumerateFiles(appDir, "*", SearchOption.AllDirectories).Where(file =>
|
IEnumerable<string> files = Directory.EnumerateFiles(appDir, "*", SearchOption.AllDirectories).Where(file =>
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
(Path.GetExtension(file).ToLower() is ".nsp" && ConfigurationState.Instance.Ui.ShownFileTypes.NSP.Value) ||
|
(Path.GetExtension(file).ToLower() is ".nsp" && ConfigurationState.Instance.UI.ShownFileTypes.NSP.Value) ||
|
||||||
(Path.GetExtension(file).ToLower() is ".pfs0" && ConfigurationState.Instance.Ui.ShownFileTypes.PFS0.Value) ||
|
(Path.GetExtension(file).ToLower() is ".pfs0" && ConfigurationState.Instance.UI.ShownFileTypes.PFS0.Value) ||
|
||||||
(Path.GetExtension(file).ToLower() is ".xci" && ConfigurationState.Instance.Ui.ShownFileTypes.XCI.Value) ||
|
(Path.GetExtension(file).ToLower() is ".xci" && ConfigurationState.Instance.UI.ShownFileTypes.XCI.Value) ||
|
||||||
(Path.GetExtension(file).ToLower() is ".nca" && ConfigurationState.Instance.Ui.ShownFileTypes.NCA.Value) ||
|
(Path.GetExtension(file).ToLower() is ".nca" && ConfigurationState.Instance.UI.ShownFileTypes.NCA.Value) ||
|
||||||
(Path.GetExtension(file).ToLower() is ".nro" && ConfigurationState.Instance.Ui.ShownFileTypes.NRO.Value) ||
|
(Path.GetExtension(file).ToLower() is ".nro" && ConfigurationState.Instance.UI.ShownFileTypes.NRO.Value) ||
|
||||||
(Path.GetExtension(file).ToLower() is ".nso" && ConfigurationState.Instance.Ui.ShownFileTypes.NSO.Value);
|
(Path.GetExtension(file).ToLower() is ".nso" && ConfigurationState.Instance.UI.ShownFileTypes.NSO.Value);
|
||||||
});
|
});
|
||||||
|
|
||||||
foreach (string app in files)
|
foreach (string app in files)
|
@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace Ryujinx.Ui.App.Common
|
namespace Ryujinx.UI.App.Common
|
||||||
{
|
{
|
||||||
public class ApplicationMetadata
|
public class ApplicationMetadata
|
||||||
{
|
{
|
@ -1,7 +1,7 @@
|
|||||||
using Ryujinx.Common.Utilities;
|
using Ryujinx.Common.Utilities;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace Ryujinx.Ui.Common.Configuration
|
namespace Ryujinx.UI.Common.Configuration
|
||||||
{
|
{
|
||||||
[JsonConverter(typeof(TypedStringEnumConverter<AudioBackend>))]
|
[JsonConverter(typeof(TypedStringEnumConverter<AudioBackend>))]
|
||||||
public enum AudioBackend
|
public enum AudioBackend
|
@ -3,19 +3,19 @@ using Ryujinx.Common.Configuration.Hid;
|
|||||||
using Ryujinx.Common.Configuration.Multiplayer;
|
using Ryujinx.Common.Configuration.Multiplayer;
|
||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.Common.Utilities;
|
using Ryujinx.Common.Utilities;
|
||||||
using Ryujinx.Ui.Common.Configuration.System;
|
using Ryujinx.UI.Common.Configuration.System;
|
||||||
using Ryujinx.Ui.Common.Configuration.Ui;
|
using Ryujinx.UI.Common.Configuration.UI;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text.Json.Nodes;
|
using System.Text.Json.Nodes;
|
||||||
|
|
||||||
namespace Ryujinx.Ui.Common.Configuration
|
namespace Ryujinx.UI.Common.Configuration
|
||||||
{
|
{
|
||||||
public class ConfigurationFileFormat
|
public class ConfigurationFileFormat
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The current version of the file format
|
/// The current version of the file format
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const int CurrentVersion = 48;
|
public const int CurrentVersion = 49;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Version of the configuration file format
|
/// Version of the configuration file format
|
@ -1,6 +1,6 @@
|
|||||||
using Ryujinx.Common.Utilities;
|
using Ryujinx.Common.Utilities;
|
||||||
|
|
||||||
namespace Ryujinx.Ui.Common.Configuration
|
namespace Ryujinx.UI.Common.Configuration
|
||||||
{
|
{
|
||||||
internal static class ConfigurationFileFormatSettings
|
internal static class ConfigurationFileFormatSettings
|
||||||
{
|
{
|
@ -1,6 +1,6 @@
|
|||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace Ryujinx.Ui.Common.Configuration
|
namespace Ryujinx.UI.Common.Configuration
|
||||||
{
|
{
|
||||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||||
[JsonSerializable(typeof(ConfigurationFileFormat))]
|
[JsonSerializable(typeof(ConfigurationFileFormat))]
|
@ -6,21 +6,21 @@ using Ryujinx.Common.Configuration.Hid.Keyboard;
|
|||||||
using Ryujinx.Common.Configuration.Multiplayer;
|
using Ryujinx.Common.Configuration.Multiplayer;
|
||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.Graphics.Vulkan;
|
using Ryujinx.Graphics.Vulkan;
|
||||||
using Ryujinx.Ui.Common.Configuration.System;
|
using Ryujinx.UI.Common.Configuration.System;
|
||||||
using Ryujinx.Ui.Common.Configuration.Ui;
|
using Ryujinx.UI.Common.Configuration.UI;
|
||||||
using Ryujinx.Ui.Common.Helper;
|
using Ryujinx.UI.Common.Helper;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text.Json.Nodes;
|
using System.Text.Json.Nodes;
|
||||||
|
|
||||||
namespace Ryujinx.Ui.Common.Configuration
|
namespace Ryujinx.UI.Common.Configuration
|
||||||
{
|
{
|
||||||
public class ConfigurationState
|
public class ConfigurationState
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// UI configuration section
|
/// UI configuration section
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class UiSection
|
public class UISection
|
||||||
{
|
{
|
||||||
public class Columns
|
public class Columns
|
||||||
{
|
{
|
||||||
@ -186,7 +186,7 @@ namespace Ryujinx.Ui.Common.Configuration
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public ReactiveObject<bool> IsAscendingOrder { get; private set; }
|
public ReactiveObject<bool> IsAscendingOrder { get; private set; }
|
||||||
|
|
||||||
public UiSection()
|
public UISection()
|
||||||
{
|
{
|
||||||
GuiColumns = new Columns();
|
GuiColumns = new Columns();
|
||||||
ColumnSort = new ColumnSortSettings();
|
ColumnSort = new ColumnSortSettings();
|
||||||
@ -582,9 +582,9 @@ namespace Ryujinx.Ui.Common.Configuration
|
|||||||
public static ConfigurationState Instance { get; private set; }
|
public static ConfigurationState Instance { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The Ui section
|
/// The UI section
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public UiSection Ui { get; private set; }
|
public UISection UI { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The Logger section
|
/// The Logger section
|
||||||
@ -633,7 +633,7 @@ namespace Ryujinx.Ui.Common.Configuration
|
|||||||
|
|
||||||
private ConfigurationState()
|
private ConfigurationState()
|
||||||
{
|
{
|
||||||
Ui = new UiSection();
|
UI = new UISection();
|
||||||
Logger = new LoggerSection();
|
Logger = new LoggerSection();
|
||||||
System = new SystemSection();
|
System = new SystemSection();
|
||||||
Graphics = new GraphicsSection();
|
Graphics = new GraphicsSection();
|
||||||
@ -696,51 +696,51 @@ namespace Ryujinx.Ui.Common.Configuration
|
|||||||
UseHypervisor = System.UseHypervisor,
|
UseHypervisor = System.UseHypervisor,
|
||||||
GuiColumns = new GuiColumns
|
GuiColumns = new GuiColumns
|
||||||
{
|
{
|
||||||
FavColumn = Ui.GuiColumns.FavColumn,
|
FavColumn = UI.GuiColumns.FavColumn,
|
||||||
IconColumn = Ui.GuiColumns.IconColumn,
|
IconColumn = UI.GuiColumns.IconColumn,
|
||||||
AppColumn = Ui.GuiColumns.AppColumn,
|
AppColumn = UI.GuiColumns.AppColumn,
|
||||||
DevColumn = Ui.GuiColumns.DevColumn,
|
DevColumn = UI.GuiColumns.DevColumn,
|
||||||
VersionColumn = Ui.GuiColumns.VersionColumn,
|
VersionColumn = UI.GuiColumns.VersionColumn,
|
||||||
TimePlayedColumn = Ui.GuiColumns.TimePlayedColumn,
|
TimePlayedColumn = UI.GuiColumns.TimePlayedColumn,
|
||||||
LastPlayedColumn = Ui.GuiColumns.LastPlayedColumn,
|
LastPlayedColumn = UI.GuiColumns.LastPlayedColumn,
|
||||||
FileExtColumn = Ui.GuiColumns.FileExtColumn,
|
FileExtColumn = UI.GuiColumns.FileExtColumn,
|
||||||
FileSizeColumn = Ui.GuiColumns.FileSizeColumn,
|
FileSizeColumn = UI.GuiColumns.FileSizeColumn,
|
||||||
PathColumn = Ui.GuiColumns.PathColumn,
|
PathColumn = UI.GuiColumns.PathColumn,
|
||||||
},
|
},
|
||||||
ColumnSort = new ColumnSort
|
ColumnSort = new ColumnSort
|
||||||
{
|
{
|
||||||
SortColumnId = Ui.ColumnSort.SortColumnId,
|
SortColumnId = UI.ColumnSort.SortColumnId,
|
||||||
SortAscending = Ui.ColumnSort.SortAscending,
|
SortAscending = UI.ColumnSort.SortAscending,
|
||||||
},
|
},
|
||||||
GameDirs = Ui.GameDirs,
|
GameDirs = UI.GameDirs,
|
||||||
ShownFileTypes = new ShownFileTypes
|
ShownFileTypes = new ShownFileTypes
|
||||||
{
|
{
|
||||||
NSP = Ui.ShownFileTypes.NSP,
|
NSP = UI.ShownFileTypes.NSP,
|
||||||
PFS0 = Ui.ShownFileTypes.PFS0,
|
PFS0 = UI.ShownFileTypes.PFS0,
|
||||||
XCI = Ui.ShownFileTypes.XCI,
|
XCI = UI.ShownFileTypes.XCI,
|
||||||
NCA = Ui.ShownFileTypes.NCA,
|
NCA = UI.ShownFileTypes.NCA,
|
||||||
NRO = Ui.ShownFileTypes.NRO,
|
NRO = UI.ShownFileTypes.NRO,
|
||||||
NSO = Ui.ShownFileTypes.NSO,
|
NSO = UI.ShownFileTypes.NSO,
|
||||||
},
|
},
|
||||||
WindowStartup = new WindowStartup
|
WindowStartup = new WindowStartup
|
||||||
{
|
{
|
||||||
WindowSizeWidth = Ui.WindowStartup.WindowSizeWidth,
|
WindowSizeWidth = UI.WindowStartup.WindowSizeWidth,
|
||||||
WindowSizeHeight = Ui.WindowStartup.WindowSizeHeight,
|
WindowSizeHeight = UI.WindowStartup.WindowSizeHeight,
|
||||||
WindowPositionX = Ui.WindowStartup.WindowPositionX,
|
WindowPositionX = UI.WindowStartup.WindowPositionX,
|
||||||
WindowPositionY = Ui.WindowStartup.WindowPositionY,
|
WindowPositionY = UI.WindowStartup.WindowPositionY,
|
||||||
WindowMaximized = Ui.WindowStartup.WindowMaximized,
|
WindowMaximized = UI.WindowStartup.WindowMaximized,
|
||||||
},
|
},
|
||||||
LanguageCode = Ui.LanguageCode,
|
LanguageCode = UI.LanguageCode,
|
||||||
EnableCustomTheme = Ui.EnableCustomTheme,
|
EnableCustomTheme = UI.EnableCustomTheme,
|
||||||
CustomThemePath = Ui.CustomThemePath,
|
CustomThemePath = UI.CustomThemePath,
|
||||||
BaseStyle = Ui.BaseStyle,
|
BaseStyle = UI.BaseStyle,
|
||||||
GameListViewMode = Ui.GameListViewMode,
|
GameListViewMode = UI.GameListViewMode,
|
||||||
ShowNames = Ui.ShowNames,
|
ShowNames = UI.ShowNames,
|
||||||
GridSize = Ui.GridSize,
|
GridSize = UI.GridSize,
|
||||||
ApplicationSort = Ui.ApplicationSort,
|
ApplicationSort = UI.ApplicationSort,
|
||||||
IsAscendingOrder = Ui.IsAscendingOrder,
|
IsAscendingOrder = UI.IsAscendingOrder,
|
||||||
StartFullscreen = Ui.StartFullscreen,
|
StartFullscreen = UI.StartFullscreen,
|
||||||
ShowConsole = Ui.ShowConsole,
|
ShowConsole = UI.ShowConsole,
|
||||||
EnableKeyboard = Hid.EnableKeyboard,
|
EnableKeyboard = Hid.EnableKeyboard,
|
||||||
EnableMouse = Hid.EnableMouse,
|
EnableMouse = Hid.EnableMouse,
|
||||||
Hotkeys = Hid.Hotkeys,
|
Hotkeys = Hid.Hotkeys,
|
||||||
@ -806,41 +806,41 @@ namespace Ryujinx.Ui.Common.Configuration
|
|||||||
System.UseHypervisor.Value = true;
|
System.UseHypervisor.Value = true;
|
||||||
Multiplayer.LanInterfaceId.Value = "0";
|
Multiplayer.LanInterfaceId.Value = "0";
|
||||||
Multiplayer.Mode.Value = MultiplayerMode.Disabled;
|
Multiplayer.Mode.Value = MultiplayerMode.Disabled;
|
||||||
Ui.GuiColumns.FavColumn.Value = true;
|
UI.GuiColumns.FavColumn.Value = true;
|
||||||
Ui.GuiColumns.IconColumn.Value = true;
|
UI.GuiColumns.IconColumn.Value = true;
|
||||||
Ui.GuiColumns.AppColumn.Value = true;
|
UI.GuiColumns.AppColumn.Value = true;
|
||||||
Ui.GuiColumns.DevColumn.Value = true;
|
UI.GuiColumns.DevColumn.Value = true;
|
||||||
Ui.GuiColumns.VersionColumn.Value = true;
|
UI.GuiColumns.VersionColumn.Value = true;
|
||||||
Ui.GuiColumns.TimePlayedColumn.Value = true;
|
UI.GuiColumns.TimePlayedColumn.Value = true;
|
||||||
Ui.GuiColumns.LastPlayedColumn.Value = true;
|
UI.GuiColumns.LastPlayedColumn.Value = true;
|
||||||
Ui.GuiColumns.FileExtColumn.Value = true;
|
UI.GuiColumns.FileExtColumn.Value = true;
|
||||||
Ui.GuiColumns.FileSizeColumn.Value = true;
|
UI.GuiColumns.FileSizeColumn.Value = true;
|
||||||
Ui.GuiColumns.PathColumn.Value = true;
|
UI.GuiColumns.PathColumn.Value = true;
|
||||||
Ui.ColumnSort.SortColumnId.Value = 0;
|
UI.ColumnSort.SortColumnId.Value = 0;
|
||||||
Ui.ColumnSort.SortAscending.Value = false;
|
UI.ColumnSort.SortAscending.Value = false;
|
||||||
Ui.GameDirs.Value = new List<string>();
|
UI.GameDirs.Value = new List<string>();
|
||||||
Ui.ShownFileTypes.NSP.Value = true;
|
UI.ShownFileTypes.NSP.Value = true;
|
||||||
Ui.ShownFileTypes.PFS0.Value = true;
|
UI.ShownFileTypes.PFS0.Value = true;
|
||||||
Ui.ShownFileTypes.XCI.Value = true;
|
UI.ShownFileTypes.XCI.Value = true;
|
||||||
Ui.ShownFileTypes.NCA.Value = true;
|
UI.ShownFileTypes.NCA.Value = true;
|
||||||
Ui.ShownFileTypes.NRO.Value = true;
|
UI.ShownFileTypes.NRO.Value = true;
|
||||||
Ui.ShownFileTypes.NSO.Value = true;
|
UI.ShownFileTypes.NSO.Value = true;
|
||||||
Ui.EnableCustomTheme.Value = true;
|
UI.EnableCustomTheme.Value = true;
|
||||||
Ui.LanguageCode.Value = "en_US";
|
UI.LanguageCode.Value = "en_US";
|
||||||
Ui.CustomThemePath.Value = "";
|
UI.CustomThemePath.Value = "";
|
||||||
Ui.BaseStyle.Value = "Dark";
|
UI.BaseStyle.Value = "Dark";
|
||||||
Ui.GameListViewMode.Value = 0;
|
UI.GameListViewMode.Value = 0;
|
||||||
Ui.ShowNames.Value = true;
|
UI.ShowNames.Value = true;
|
||||||
Ui.GridSize.Value = 2;
|
UI.GridSize.Value = 2;
|
||||||
Ui.ApplicationSort.Value = 0;
|
UI.ApplicationSort.Value = 0;
|
||||||
Ui.IsAscendingOrder.Value = true;
|
UI.IsAscendingOrder.Value = true;
|
||||||
Ui.StartFullscreen.Value = false;
|
UI.StartFullscreen.Value = false;
|
||||||
Ui.ShowConsole.Value = true;
|
UI.ShowConsole.Value = true;
|
||||||
Ui.WindowStartup.WindowSizeWidth.Value = 1280;
|
UI.WindowStartup.WindowSizeWidth.Value = 1280;
|
||||||
Ui.WindowStartup.WindowSizeHeight.Value = 760;
|
UI.WindowStartup.WindowSizeHeight.Value = 760;
|
||||||
Ui.WindowStartup.WindowPositionX.Value = 0;
|
UI.WindowStartup.WindowPositionX.Value = 0;
|
||||||
Ui.WindowStartup.WindowPositionY.Value = 0;
|
UI.WindowStartup.WindowPositionY.Value = 0;
|
||||||
Ui.WindowStartup.WindowMaximized.Value = false;
|
UI.WindowStartup.WindowMaximized.Value = false;
|
||||||
Hid.EnableKeyboard.Value = false;
|
Hid.EnableKeyboard.Value = false;
|
||||||
Hid.EnableMouse.Value = false;
|
Hid.EnableMouse.Value = false;
|
||||||
Hid.Hotkeys.Value = new KeyboardHotkeys
|
Hid.Hotkeys.Value = new KeyboardHotkeys
|
||||||
@ -848,7 +848,7 @@ namespace Ryujinx.Ui.Common.Configuration
|
|||||||
ToggleVsync = Key.F1,
|
ToggleVsync = Key.F1,
|
||||||
ToggleMute = Key.F2,
|
ToggleMute = Key.F2,
|
||||||
Screenshot = Key.F8,
|
Screenshot = Key.F8,
|
||||||
ShowUi = Key.F4,
|
ShowUI = Key.F4,
|
||||||
Pause = Key.F5,
|
Pause = Key.F5,
|
||||||
ResScaleUp = Key.Unbound,
|
ResScaleUp = Key.Unbound,
|
||||||
ResScaleDown = Key.Unbound,
|
ResScaleDown = Key.Unbound,
|
||||||
@ -1185,7 +1185,7 @@ namespace Ryujinx.Ui.Common.Configuration
|
|||||||
{
|
{
|
||||||
ToggleVsync = Key.F1,
|
ToggleVsync = Key.F1,
|
||||||
Screenshot = Key.F8,
|
Screenshot = Key.F8,
|
||||||
ShowUi = Key.F4,
|
ShowUI = Key.F4,
|
||||||
};
|
};
|
||||||
|
|
||||||
configurationFileUpdated = true;
|
configurationFileUpdated = true;
|
||||||
@ -1228,7 +1228,7 @@ namespace Ryujinx.Ui.Common.Configuration
|
|||||||
{
|
{
|
||||||
ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync,
|
ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync,
|
||||||
Screenshot = configurationFileFormat.Hotkeys.Screenshot,
|
Screenshot = configurationFileFormat.Hotkeys.Screenshot,
|
||||||
ShowUi = configurationFileFormat.Hotkeys.ShowUi,
|
ShowUI = configurationFileFormat.Hotkeys.ShowUI,
|
||||||
Pause = Key.F5,
|
Pause = Key.F5,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1243,7 +1243,7 @@ namespace Ryujinx.Ui.Common.Configuration
|
|||||||
{
|
{
|
||||||
ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync,
|
ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync,
|
||||||
Screenshot = configurationFileFormat.Hotkeys.Screenshot,
|
Screenshot = configurationFileFormat.Hotkeys.Screenshot,
|
||||||
ShowUi = configurationFileFormat.Hotkeys.ShowUi,
|
ShowUI = configurationFileFormat.Hotkeys.ShowUI,
|
||||||
Pause = configurationFileFormat.Hotkeys.Pause,
|
Pause = configurationFileFormat.Hotkeys.Pause,
|
||||||
ToggleMute = Key.F2,
|
ToggleMute = Key.F2,
|
||||||
};
|
};
|
||||||
@ -1317,7 +1317,7 @@ namespace Ryujinx.Ui.Common.Configuration
|
|||||||
{
|
{
|
||||||
ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync,
|
ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync,
|
||||||
Screenshot = configurationFileFormat.Hotkeys.Screenshot,
|
Screenshot = configurationFileFormat.Hotkeys.Screenshot,
|
||||||
ShowUi = configurationFileFormat.Hotkeys.ShowUi,
|
ShowUI = configurationFileFormat.Hotkeys.ShowUI,
|
||||||
Pause = configurationFileFormat.Hotkeys.Pause,
|
Pause = configurationFileFormat.Hotkeys.Pause,
|
||||||
ToggleMute = configurationFileFormat.Hotkeys.ToggleMute,
|
ToggleMute = configurationFileFormat.Hotkeys.ToggleMute,
|
||||||
ResScaleUp = Key.Unbound,
|
ResScaleUp = Key.Unbound,
|
||||||
@ -1344,7 +1344,7 @@ namespace Ryujinx.Ui.Common.Configuration
|
|||||||
{
|
{
|
||||||
ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync,
|
ToggleVsync = configurationFileFormat.Hotkeys.ToggleVsync,
|
||||||
Screenshot = configurationFileFormat.Hotkeys.Screenshot,
|
Screenshot = configurationFileFormat.Hotkeys.Screenshot,
|
||||||
ShowUi = configurationFileFormat.Hotkeys.ShowUi,
|
ShowUI = configurationFileFormat.Hotkeys.ShowUI,
|
||||||
Pause = configurationFileFormat.Hotkeys.Pause,
|
Pause = configurationFileFormat.Hotkeys.Pause,
|
||||||
ToggleMute = configurationFileFormat.Hotkeys.ToggleMute,
|
ToggleMute = configurationFileFormat.Hotkeys.ToggleMute,
|
||||||
ResScaleUp = configurationFileFormat.Hotkeys.ResScaleUp,
|
ResScaleUp = configurationFileFormat.Hotkeys.ResScaleUp,
|
||||||
@ -1430,6 +1430,18 @@ namespace Ryujinx.Ui.Common.Configuration
|
|||||||
configurationFileUpdated = true;
|
configurationFileUpdated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (configurationFileFormat.Version < 49)
|
||||||
|
{
|
||||||
|
Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 49.");
|
||||||
|
|
||||||
|
if (OperatingSystem.IsMacOS())
|
||||||
|
{
|
||||||
|
AppDataManager.FixMacOSConfigurationFolders();
|
||||||
|
}
|
||||||
|
|
||||||
|
configurationFileUpdated = true;
|
||||||
|
}
|
||||||
|
|
||||||
Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog;
|
Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog;
|
||||||
Graphics.ResScale.Value = configurationFileFormat.ResScale;
|
Graphics.ResScale.Value = configurationFileFormat.ResScale;
|
||||||
Graphics.ResScaleCustom.Value = configurationFileFormat.ResScaleCustom;
|
Graphics.ResScaleCustom.Value = configurationFileFormat.ResScaleCustom;
|
||||||
@ -1476,41 +1488,41 @@ namespace Ryujinx.Ui.Common.Configuration
|
|||||||
System.ExpandRam.Value = configurationFileFormat.ExpandRam;
|
System.ExpandRam.Value = configurationFileFormat.ExpandRam;
|
||||||
System.IgnoreMissingServices.Value = configurationFileFormat.IgnoreMissingServices;
|
System.IgnoreMissingServices.Value = configurationFileFormat.IgnoreMissingServices;
|
||||||
System.UseHypervisor.Value = configurationFileFormat.UseHypervisor;
|
System.UseHypervisor.Value = configurationFileFormat.UseHypervisor;
|
||||||
Ui.GuiColumns.FavColumn.Value = configurationFileFormat.GuiColumns.FavColumn;
|
UI.GuiColumns.FavColumn.Value = configurationFileFormat.GuiColumns.FavColumn;
|
||||||
Ui.GuiColumns.IconColumn.Value = configurationFileFormat.GuiColumns.IconColumn;
|
UI.GuiColumns.IconColumn.Value = configurationFileFormat.GuiColumns.IconColumn;
|
||||||
Ui.GuiColumns.AppColumn.Value = configurationFileFormat.GuiColumns.AppColumn;
|
UI.GuiColumns.AppColumn.Value = configurationFileFormat.GuiColumns.AppColumn;
|
||||||
Ui.GuiColumns.DevColumn.Value = configurationFileFormat.GuiColumns.DevColumn;
|
UI.GuiColumns.DevColumn.Value = configurationFileFormat.GuiColumns.DevColumn;
|
||||||
Ui.GuiColumns.VersionColumn.Value = configurationFileFormat.GuiColumns.VersionColumn;
|
UI.GuiColumns.VersionColumn.Value = configurationFileFormat.GuiColumns.VersionColumn;
|
||||||
Ui.GuiColumns.TimePlayedColumn.Value = configurationFileFormat.GuiColumns.TimePlayedColumn;
|
UI.GuiColumns.TimePlayedColumn.Value = configurationFileFormat.GuiColumns.TimePlayedColumn;
|
||||||
Ui.GuiColumns.LastPlayedColumn.Value = configurationFileFormat.GuiColumns.LastPlayedColumn;
|
UI.GuiColumns.LastPlayedColumn.Value = configurationFileFormat.GuiColumns.LastPlayedColumn;
|
||||||
Ui.GuiColumns.FileExtColumn.Value = configurationFileFormat.GuiColumns.FileExtColumn;
|
UI.GuiColumns.FileExtColumn.Value = configurationFileFormat.GuiColumns.FileExtColumn;
|
||||||
Ui.GuiColumns.FileSizeColumn.Value = configurationFileFormat.GuiColumns.FileSizeColumn;
|
UI.GuiColumns.FileSizeColumn.Value = configurationFileFormat.GuiColumns.FileSizeColumn;
|
||||||
Ui.GuiColumns.PathColumn.Value = configurationFileFormat.GuiColumns.PathColumn;
|
UI.GuiColumns.PathColumn.Value = configurationFileFormat.GuiColumns.PathColumn;
|
||||||
Ui.ColumnSort.SortColumnId.Value = configurationFileFormat.ColumnSort.SortColumnId;
|
UI.ColumnSort.SortColumnId.Value = configurationFileFormat.ColumnSort.SortColumnId;
|
||||||
Ui.ColumnSort.SortAscending.Value = configurationFileFormat.ColumnSort.SortAscending;
|
UI.ColumnSort.SortAscending.Value = configurationFileFormat.ColumnSort.SortAscending;
|
||||||
Ui.GameDirs.Value = configurationFileFormat.GameDirs;
|
UI.GameDirs.Value = configurationFileFormat.GameDirs;
|
||||||
Ui.ShownFileTypes.NSP.Value = configurationFileFormat.ShownFileTypes.NSP;
|
UI.ShownFileTypes.NSP.Value = configurationFileFormat.ShownFileTypes.NSP;
|
||||||
Ui.ShownFileTypes.PFS0.Value = configurationFileFormat.ShownFileTypes.PFS0;
|
UI.ShownFileTypes.PFS0.Value = configurationFileFormat.ShownFileTypes.PFS0;
|
||||||
Ui.ShownFileTypes.XCI.Value = configurationFileFormat.ShownFileTypes.XCI;
|
UI.ShownFileTypes.XCI.Value = configurationFileFormat.ShownFileTypes.XCI;
|
||||||
Ui.ShownFileTypes.NCA.Value = configurationFileFormat.ShownFileTypes.NCA;
|
UI.ShownFileTypes.NCA.Value = configurationFileFormat.ShownFileTypes.NCA;
|
||||||
Ui.ShownFileTypes.NRO.Value = configurationFileFormat.ShownFileTypes.NRO;
|
UI.ShownFileTypes.NRO.Value = configurationFileFormat.ShownFileTypes.NRO;
|
||||||
Ui.ShownFileTypes.NSO.Value = configurationFileFormat.ShownFileTypes.NSO;
|
UI.ShownFileTypes.NSO.Value = configurationFileFormat.ShownFileTypes.NSO;
|
||||||
Ui.EnableCustomTheme.Value = configurationFileFormat.EnableCustomTheme;
|
UI.EnableCustomTheme.Value = configurationFileFormat.EnableCustomTheme;
|
||||||
Ui.LanguageCode.Value = configurationFileFormat.LanguageCode;
|
UI.LanguageCode.Value = configurationFileFormat.LanguageCode;
|
||||||
Ui.CustomThemePath.Value = configurationFileFormat.CustomThemePath;
|
UI.CustomThemePath.Value = configurationFileFormat.CustomThemePath;
|
||||||
Ui.BaseStyle.Value = configurationFileFormat.BaseStyle;
|
UI.BaseStyle.Value = configurationFileFormat.BaseStyle;
|
||||||
Ui.GameListViewMode.Value = configurationFileFormat.GameListViewMode;
|
UI.GameListViewMode.Value = configurationFileFormat.GameListViewMode;
|
||||||
Ui.ShowNames.Value = configurationFileFormat.ShowNames;
|
UI.ShowNames.Value = configurationFileFormat.ShowNames;
|
||||||
Ui.IsAscendingOrder.Value = configurationFileFormat.IsAscendingOrder;
|
UI.IsAscendingOrder.Value = configurationFileFormat.IsAscendingOrder;
|
||||||
Ui.GridSize.Value = configurationFileFormat.GridSize;
|
UI.GridSize.Value = configurationFileFormat.GridSize;
|
||||||
Ui.ApplicationSort.Value = configurationFileFormat.ApplicationSort;
|
UI.ApplicationSort.Value = configurationFileFormat.ApplicationSort;
|
||||||
Ui.StartFullscreen.Value = configurationFileFormat.StartFullscreen;
|
UI.StartFullscreen.Value = configurationFileFormat.StartFullscreen;
|
||||||
Ui.ShowConsole.Value = configurationFileFormat.ShowConsole;
|
UI.ShowConsole.Value = configurationFileFormat.ShowConsole;
|
||||||
Ui.WindowStartup.WindowSizeWidth.Value = configurationFileFormat.WindowStartup.WindowSizeWidth;
|
UI.WindowStartup.WindowSizeWidth.Value = configurationFileFormat.WindowStartup.WindowSizeWidth;
|
||||||
Ui.WindowStartup.WindowSizeHeight.Value = configurationFileFormat.WindowStartup.WindowSizeHeight;
|
UI.WindowStartup.WindowSizeHeight.Value = configurationFileFormat.WindowStartup.WindowSizeHeight;
|
||||||
Ui.WindowStartup.WindowPositionX.Value = configurationFileFormat.WindowStartup.WindowPositionX;
|
UI.WindowStartup.WindowPositionX.Value = configurationFileFormat.WindowStartup.WindowPositionX;
|
||||||
Ui.WindowStartup.WindowPositionY.Value = configurationFileFormat.WindowStartup.WindowPositionY;
|
UI.WindowStartup.WindowPositionY.Value = configurationFileFormat.WindowStartup.WindowPositionY;
|
||||||
Ui.WindowStartup.WindowMaximized.Value = configurationFileFormat.WindowStartup.WindowMaximized;
|
UI.WindowStartup.WindowMaximized.Value = configurationFileFormat.WindowStartup.WindowMaximized;
|
||||||
Hid.EnableKeyboard.Value = configurationFileFormat.EnableKeyboard;
|
Hid.EnableKeyboard.Value = configurationFileFormat.EnableKeyboard;
|
||||||
Hid.EnableMouse.Value = configurationFileFormat.EnableMouse;
|
Hid.EnableMouse.Value = configurationFileFormat.EnableMouse;
|
||||||
Hid.Hotkeys.Value = configurationFileFormat.Hotkeys;
|
Hid.Hotkeys.Value = configurationFileFormat.Hotkeys;
|
@ -1,4 +1,4 @@
|
|||||||
namespace Ryujinx.Ui.Common
|
namespace Ryujinx.UI.Common
|
||||||
{
|
{
|
||||||
public enum FileTypes
|
public enum FileTypes
|
||||||
{
|
{
|
@ -5,7 +5,7 @@ using Ryujinx.Common.Logging.Targets;
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace Ryujinx.Ui.Common.Configuration
|
namespace Ryujinx.UI.Common.Configuration
|
||||||
{
|
{
|
||||||
public static class LoggerModule
|
public static class LoggerModule
|
||||||
{
|
{
|
@ -1,7 +1,7 @@
|
|||||||
using Ryujinx.Common.Utilities;
|
using Ryujinx.Common.Utilities;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace Ryujinx.Ui.Common.Configuration.System
|
namespace Ryujinx.UI.Common.Configuration.System
|
||||||
{
|
{
|
||||||
[JsonConverter(typeof(TypedStringEnumConverter<Language>))]
|
[JsonConverter(typeof(TypedStringEnumConverter<Language>))]
|
||||||
public enum Language
|
public enum Language
|
@ -1,7 +1,7 @@
|
|||||||
using Ryujinx.Common.Utilities;
|
using Ryujinx.Common.Utilities;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace Ryujinx.Ui.Common.Configuration.System
|
namespace Ryujinx.UI.Common.Configuration.System
|
||||||
{
|
{
|
||||||
[JsonConverter(typeof(TypedStringEnumConverter<Region>))]
|
[JsonConverter(typeof(TypedStringEnumConverter<Region>))]
|
||||||
public enum Region
|
public enum Region
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user