Require the user to provide fonts in RyuFS/system
This commit is contained in:
parent
3277d3020f
commit
df7a393584
6 changed files with 43 additions and 48 deletions
|
@ -1,19 +0,0 @@
|
||||||
using System.IO;
|
|
||||||
using System.Reflection;
|
|
||||||
|
|
||||||
namespace Ryujinx.HLE.Font
|
|
||||||
{
|
|
||||||
static class EmbeddedResource
|
|
||||||
{
|
|
||||||
public static byte[] GetData(string Name)
|
|
||||||
{
|
|
||||||
Assembly Asm = typeof(EmbeddedResource).Assembly;
|
|
||||||
|
|
||||||
using (Stream ResStream = Asm.GetManifestResourceStream(Name))
|
|
||||||
{
|
|
||||||
BinaryReader Reader = new BinaryReader(ResStream);
|
|
||||||
return Reader.ReadBytes((int)Reader.BaseStream.Length);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -3,8 +3,11 @@ using ChocolArm64.Memory;
|
||||||
using Ryujinx.HLE.Logging;
|
using Ryujinx.HLE.Logging;
|
||||||
using Ryujinx.HLE.OsHle;
|
using Ryujinx.HLE.OsHle;
|
||||||
using Ryujinx.HLE.OsHle.Handles;
|
using Ryujinx.HLE.OsHle.Handles;
|
||||||
|
using Ryujinx.HLE.Resource;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
|
||||||
namespace Ryujinx.HLE.Font
|
namespace Ryujinx.HLE.Font
|
||||||
{
|
{
|
||||||
|
@ -12,6 +15,8 @@ namespace Ryujinx.HLE.Font
|
||||||
{
|
{
|
||||||
private Logger Log;
|
private Logger Log;
|
||||||
|
|
||||||
|
private string FontsPath;
|
||||||
|
|
||||||
private object ShMemLock;
|
private object ShMemLock;
|
||||||
|
|
||||||
private (AMemory, long, long)[] ShMemPositions;
|
private (AMemory, long, long)[] ShMemPositions;
|
||||||
|
@ -20,9 +25,10 @@ namespace Ryujinx.HLE.Font
|
||||||
|
|
||||||
private uint[] LoadedFonts;
|
private uint[] LoadedFonts;
|
||||||
|
|
||||||
public SharedFontManager(Logger Log)
|
public SharedFontManager(Logger Log, string SystemPath)
|
||||||
{
|
{
|
||||||
this.Log = Log;
|
this.Log = Log;
|
||||||
|
this.FontsPath = Path.Combine(SystemPath, "fonts");
|
||||||
|
|
||||||
ShMemLock = new object();
|
ShMemLock = new object();
|
||||||
|
|
||||||
|
@ -30,17 +36,29 @@ namespace Ryujinx.HLE.Font
|
||||||
|
|
||||||
FontEmbeddedPaths = new Dictionary<SharedFontType, byte[]>()
|
FontEmbeddedPaths = new Dictionary<SharedFontType, byte[]>()
|
||||||
{
|
{
|
||||||
{ SharedFontType.JapanUsEurope, EmbeddedResource.GetData("FontStandard") },
|
{ SharedFontType.JapanUsEurope, GetData("FontStandard") },
|
||||||
{ SharedFontType.SimplifiedChinese, EmbeddedResource.GetData("FontChineseSimplified") },
|
{ SharedFontType.SimplifiedChinese, GetData("FontChineseSimplified") },
|
||||||
{ SharedFontType.SimplifiedChineseEx, EmbeddedResource.GetData("FontExtendedChineseSimplified") },
|
{ SharedFontType.SimplifiedChineseEx, GetData("FontExtendedChineseSimplified") },
|
||||||
{ SharedFontType.TraditionalChinese, EmbeddedResource.GetData("FontChineseTraditional") },
|
{ SharedFontType.TraditionalChinese, GetData("FontChineseTraditional") },
|
||||||
{ SharedFontType.Korean, EmbeddedResource.GetData("FontKorean") },
|
{ SharedFontType.Korean, GetData("FontKorean") },
|
||||||
{ SharedFontType.NintendoEx, EmbeddedResource.GetData("FontNintendoExtended") }
|
{ SharedFontType.NintendoEx, GetData("FontNintendoExtended") }
|
||||||
};
|
};
|
||||||
|
|
||||||
LoadedFonts = new uint[FontEmbeddedPaths.Count];
|
LoadedFonts = new uint[FontEmbeddedPaths.Count];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public byte[] GetData(string FontName)
|
||||||
|
{
|
||||||
|
string FontFilePath = Path.Combine(FontsPath, $"{FontName}.ttf");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return File.ReadAllBytes(FontFilePath);
|
||||||
|
} catch (FileNotFoundException e)
|
||||||
|
{
|
||||||
|
throw new SystemResourceNotFoundException($"Font \"{FontName}.ttf\" not found. Please provide it in {FontsPath}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void MapFont(SharedFontType FontType, AMemory Memory, long Position)
|
public void MapFont(SharedFontType FontType, AMemory Memory, long Position)
|
||||||
{
|
{
|
||||||
// TODO: find what are the 8 bytes before the font
|
// TODO: find what are the 8 bytes before the font
|
||||||
|
|
14
Ryujinx.HLE/Resource/SystemResourceNotFoundException.cs
Normal file
14
Ryujinx.HLE/Resource/SystemResourceNotFoundException.cs
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Ryujinx.HLE.Resource
|
||||||
|
{
|
||||||
|
public class SystemResourceNotFoundException: Exception
|
||||||
|
{
|
||||||
|
|
||||||
|
public SystemResourceNotFoundException(string message, Exception inner)
|
||||||
|
: base(message, inner)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -13,27 +13,6 @@
|
||||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<EmbeddedResource Include="Font\FontChineseSimplified.ttf">
|
|
||||||
<LogicalName>FontChineseSimplified</LogicalName>
|
|
||||||
</EmbeddedResource>
|
|
||||||
<EmbeddedResource Include="Font\FontChineseTraditional.ttf">
|
|
||||||
<LogicalName>FontChineseTraditional</LogicalName>
|
|
||||||
</EmbeddedResource>
|
|
||||||
<EmbeddedResource Include="Font\FontExtendedChineseSimplified.ttf">
|
|
||||||
<LogicalName>FontExtendedChineseSimplified</LogicalName>
|
|
||||||
</EmbeddedResource>
|
|
||||||
<EmbeddedResource Include="Font\FontKorean.ttf">
|
|
||||||
<LogicalName>FontKorean</LogicalName>
|
|
||||||
</EmbeddedResource>
|
|
||||||
<EmbeddedResource Include="Font\FontNintendoExtended.ttf">
|
|
||||||
<LogicalName>FontNintendoExtended</LogicalName>
|
|
||||||
</EmbeddedResource>
|
|
||||||
<EmbeddedResource Include="Font\FontStandard.ttf">
|
|
||||||
<LogicalName>FontStandard</LogicalName>
|
|
||||||
</EmbeddedResource>
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\ChocolArm64\ChocolArm64.csproj" />
|
<ProjectReference Include="..\ChocolArm64\ChocolArm64.csproj" />
|
||||||
<ProjectReference Include="..\Ryujinx.Audio\Ryujinx.Audio.csproj" />
|
<ProjectReference Include="..\Ryujinx.Audio\Ryujinx.Audio.csproj" />
|
||||||
|
|
|
@ -60,7 +60,7 @@ namespace Ryujinx.HLE
|
||||||
|
|
||||||
Hid = new Hid(Log);
|
Hid = new Hid(Log);
|
||||||
|
|
||||||
Font = new SharedFontManager(Log);
|
Font = new SharedFontManager(Log, VFs.GetSystemPath());
|
||||||
|
|
||||||
Os.HidSharedMem.MemoryMapped += Hid.ShMemMap;
|
Os.HidSharedMem.MemoryMapped += Hid.ShMemMap;
|
||||||
Os.HidSharedMem.MemoryUnmapped += Hid.ShMemUnmap;
|
Os.HidSharedMem.MemoryUnmapped += Hid.ShMemUnmap;
|
||||||
|
|
|
@ -8,6 +8,7 @@ namespace Ryujinx.HLE
|
||||||
private const string BasePath = "RyuFs";
|
private const string BasePath = "RyuFs";
|
||||||
private const string NandPath = "nand";
|
private const string NandPath = "nand";
|
||||||
private const string SdCardPath = "sdmc";
|
private const string SdCardPath = "sdmc";
|
||||||
|
private const string SystemPath = "system";
|
||||||
|
|
||||||
public Stream RomFs { get; private set; }
|
public Stream RomFs { get; private set; }
|
||||||
|
|
||||||
|
@ -45,6 +46,8 @@ namespace Ryujinx.HLE
|
||||||
|
|
||||||
public string GetGameSavesPath() => MakeDirAndGetFullPath(NandPath);
|
public string GetGameSavesPath() => MakeDirAndGetFullPath(NandPath);
|
||||||
|
|
||||||
|
public string GetSystemPath() => MakeDirAndGetFullPath(SystemPath);
|
||||||
|
|
||||||
public string SwitchPathToSystemPath(string SwitchPath)
|
public string SwitchPathToSystemPath(string SwitchPath)
|
||||||
{
|
{
|
||||||
string[] Parts = SwitchPath.Split(":");
|
string[] Parts = SwitchPath.Split(":");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue