formatting

This commit is contained in:
Infi
2024-04-20 11:56:46 +02:00
parent 05fcdbe21a
commit d7573f7bf6
2 changed files with 56 additions and 50 deletions
+43 -43
View File
@@ -38,78 +38,80 @@ public class FontManager
_gameSymFont = new FaceData(gameSym); _gameSymFont = new FaceData(gameSym);
} }
private byte[] GetResource(string name) { private byte[] GetResource(string name)
{
var stream = GetType().Assembly.GetManifestResourceStream(name)!; var stream = GetType().Assembly.GetManifestResourceStream(name)!;
var memory = new MemoryStream(); var memory = new MemoryStream();
stream.CopyTo(memory); stream.CopyTo(memory);
return memory.ToArray(); return memory.ToArray();
} }
private unsafe void SetUpRanges() { private unsafe void SetUpRanges()
ushort[] BuildRange(IReadOnlyList<ushort>? chars, params IntPtr[] ranges) { {
ushort[] BuildRange(IReadOnlyList<ushort>? chars, params IntPtr[] ranges)
{
var builder = new ImFontGlyphRangesBuilderPtr(ImGuiNative.ImFontGlyphRangesBuilder_ImFontGlyphRangesBuilder()); var builder = new ImFontGlyphRangesBuilderPtr(ImGuiNative.ImFontGlyphRangesBuilder_ImFontGlyphRangesBuilder());
// text // text
foreach (var range in ranges) { foreach (var range in ranges)
builder.AddRanges(range); builder.AddRanges(range);
}
// chars // chars
if (chars != null) { if (chars != null)
for (var i = 0; i < chars.Count; i += 2) { {
if (chars[i] == 0) { for (var i = 0; i < chars.Count; i += 2)
{
if (chars[i] == 0)
break; break;
}
for (var j = (uint) chars[i]; j <= chars[i + 1]; j++) { for (var j = (uint) chars[i]; j <= chars[i + 1]; j++)
builder.AddChar((ushort) j); builder.AddChar((ushort) j);
}
} }
} }
// various symbols // various symbols
builder.AddText("←→↑↓《》■※☀★★☆♥♡ヅツッシ☀☁☂℃℉°♀♂♠♣♦♣♧®©™€$£♯♭♪✓√◎◆◇♦■□〇●△▽▼▲‹›≤≥<«“”─\~");
// French // French
builder.AddText("Œœ");
// Romanian // Romanian
builder.AddText("←→↑↓《》■※☀★★☆♥♡ヅツッシ☀☁☂℃℉°♀♂♠♣♦♣♧®©™€$£♯♭♪✓√◎◆◇♦■□〇●△▽▼▲‹›≤≥<«“”─\~");
builder.AddText("Œœ");
builder.AddText("ĂăÂâÎîȘșȚț"); builder.AddText("ĂăÂâÎîȘșȚț");
// "Enclosed Alphanumerics" (partial) https://www.compart.com/en/unicode/block/U+2460 // "Enclosed Alphanumerics" (partial) https://www.compart.com/en/unicode/block/U+2460
for (var i = 0x2460; i <= 0x24B5; i++) { for (var i = 0x2460; i <= 0x24B5; i++)
builder.AddChar((char) i); builder.AddChar((char) i);
}
builder.AddChar('⓪'); builder.AddChar('⓪');
return builder.BuildRangesToArray(); return builder.BuildRangesToArray();
} }
var ranges = new List<IntPtr> { var ranges = new List<IntPtr> { ImGui.GetIO().Fonts.GetGlyphRangesDefault() };
ImGui.GetIO().Fonts.GetGlyphRangesDefault(), foreach (var extraRange in Enum.GetValues<ExtraGlyphRanges>())
}; if (Plugin.Config.ExtraGlyphRanges.HasFlag(extraRange))
foreach (var extraRange in Enum.GetValues<ExtraGlyphRanges>()) {
if (Plugin.Config.ExtraGlyphRanges.HasFlag(extraRange)) {
ranges.Add(extraRange.Range()); ranges.Add(extraRange.Range());
}
}
_ranges = BuildRange(null, ranges.ToArray()); _ranges = BuildRange(null, ranges.ToArray());
_jpRange = BuildRange(GlyphRangesJapanese.GlyphRanges); _jpRange = BuildRange(GlyphRangesJapanese.GlyphRanges);
} }
private void SetUpUserFonts() { private void SetUpUserFonts()
{
FontData? fontData = null; FontData? fontData = null;
if (Plugin.Config.GlobalFont.StartsWith(Fonts.IncludedIndicator)) { if (Plugin.Config.GlobalFont.StartsWith(Fonts.IncludedIndicator))
{
var globalFont = Fonts.GlobalFonts.FirstOrDefault(font => font.Name == Plugin.Config.GlobalFont); var globalFont = Fonts.GlobalFonts.FirstOrDefault(font => font.Name == Plugin.Config.GlobalFont);
if (globalFont != null) { if (globalFont != null)
{
var regular = new FaceData(GetResource(globalFont.ResourcePath)); var regular = new FaceData(GetResource(globalFont.ResourcePath));
var italic = new FaceData(GetResource(globalFont.ResourcePathItalic)); var italic = new FaceData(GetResource(globalFont.ResourcePathItalic));
fontData = new FontData(regular, italic); fontData = new FontData(regular, italic);
} }
} else { }
else
{
fontData = Fonts.GetFont(Plugin.Config.GlobalFont, true); fontData = Fonts.GetFont(Plugin.Config.GlobalFont, true);
} }
if (fontData == null) { if (fontData == null)
{
Plugin.Config.GlobalFont = Fonts.GlobalFonts[0].Name; Plugin.Config.GlobalFont = Fonts.GlobalFonts[0].Name;
Plugin.SaveConfig(); Plugin.SaveConfig();
@@ -123,33 +125,31 @@ public class FontManager
_italicFont = fontData.Italic ?? null; _italicFont = fontData.Italic ?? null;
FontData? jpFontData = null; FontData? jpFontData = null;
if (Plugin.Config.JapaneseFont.StartsWith(Fonts.IncludedIndicator)) { if (Plugin.Config.JapaneseFont.StartsWith(Fonts.IncludedIndicator))
{
var jpFont = Fonts.JapaneseFonts.FirstOrDefault(item => item.Item1 == Plugin.Config.JapaneseFont); var jpFont = Fonts.JapaneseFonts.FirstOrDefault(item => item.Item1 == Plugin.Config.JapaneseFont);
if (jpFont != default) { if (jpFont != default)
jpFontData = new FontData( jpFontData = new FontData(new FaceData(GetResource(jpFont.Item2)), null);
new FaceData(GetResource(jpFont.Item2)), }
null else
); {
}
} else {
jpFontData = Fonts.GetFont(Plugin.Config.JapaneseFont, false); jpFontData = Fonts.GetFont(Plugin.Config.JapaneseFont, false);
} }
if (jpFontData == null) { if (jpFontData == null)
{
Plugin.Config.JapaneseFont = Fonts.JapaneseFonts[0].Item1; Plugin.Config.JapaneseFont = Fonts.JapaneseFonts[0].Item1;
Plugin.SaveConfig(); Plugin.SaveConfig();
var jpFont = Fonts.JapaneseFonts[0]; var jpFont = Fonts.JapaneseFonts[0];
jpFontData = new FontData( jpFontData = new FontData(new FaceData(GetResource(jpFont.Item2)), null);
new FaceData(GetResource(jpFont.Item2)),
null
);
} }
_jpFont = jpFontData.Regular; _jpFont = jpFontData.Regular;
} }
public void BuildFonts() { public void BuildFonts()
{
SetUpRanges(); SetUpRanges();
SetUpUserFonts(); SetUpUserFonts();
@@ -202,4 +202,4 @@ public class FontManager
)); ));
} }
} }
} }
+13 -7
View File
@@ -5,16 +5,18 @@ using Dalamud.Plugin.Ipc;
namespace ChatTwo; namespace ChatTwo;
internal sealed class IpcManager : IDisposable { internal sealed class IpcManager : IDisposable
{
private DalamudPluginInterface Interface { get; } private DalamudPluginInterface Interface { get; }
private ICallGateProvider<string> RegisterGate { get; } private ICallGateProvider<string> RegisterGate { get; }
private ICallGateProvider<string, object?> UnregisterGate { get; } private ICallGateProvider<string, object?> UnregisterGate { get; }
private ICallGateProvider<object?> AvailableGate { get; } private ICallGateProvider<object?> AvailableGate { get; }
private ICallGateProvider<string, PlayerPayload?, ulong, Payload?, SeString?, SeString?, object?> InvokeGate { get; } private ICallGateProvider<string, PlayerPayload?, ulong, Payload?, SeString?, SeString?, object?> InvokeGate { get; }
internal List<string> Registered { get; } = new(); internal List<string> Registered { get; } = [];
public IpcManager(DalamudPluginInterface pluginInterface) { public IpcManager(DalamudPluginInterface pluginInterface)
{
Interface = pluginInterface; Interface = pluginInterface;
RegisterGate = Interface.GetIpcProvider<string>("ChatTwo.Register"); RegisterGate = Interface.GetIpcProvider<string>("ChatTwo.Register");
@@ -30,21 +32,25 @@ internal sealed class IpcManager : IDisposable {
AvailableGate.SendMessage(); AvailableGate.SendMessage();
} }
internal void Invoke(string id, PlayerPayload? sender, ulong contentId, Payload? payload, SeString? senderString, SeString? content) { internal void Invoke(string id, PlayerPayload? sender, ulong contentId, Payload? payload, SeString? senderString, SeString? content)
{
InvokeGate.SendMessage(id, sender, contentId, payload, senderString, content); InvokeGate.SendMessage(id, sender, contentId, payload, senderString, content);
} }
private string Register() { private string Register()
{
var id = Guid.NewGuid().ToString(); var id = Guid.NewGuid().ToString();
Registered.Add(id); Registered.Add(id);
return id; return id;
} }
private void Unregister(string id) { private void Unregister(string id)
{
Registered.Remove(id); Registered.Remove(id);
} }
public void Dispose() { public void Dispose()
{
UnregisterGate.UnregisterFunc(); UnregisterGate.UnregisterFunc();
RegisterGate.UnregisterFunc(); RegisterGate.UnregisterFunc();
Registered.Clear(); Registered.Clear();