2022-02-15 18:02:46 +00:00
|
|
|
using ChatTwo.Code;
|
2022-02-04 10:46:13 +00:00
|
|
|
using ChatTwo.Resources;
|
2022-02-05 04:00:16 +00:00
|
|
|
using ChatTwo.Ui;
|
2021-12-29 19:31:45 +00:00
|
|
|
using Dalamud.Configuration;
|
2022-06-01 21:14:32 +00:00
|
|
|
using ImGuiNET;
|
2021-12-29 19:31:45 +00:00
|
|
|
|
2021-12-30 02:53:44 +00:00
|
|
|
namespace ChatTwo;
|
2021-12-29 19:31:45 +00:00
|
|
|
|
|
|
|
[Serializable]
|
|
|
|
internal class Configuration : IPluginConfiguration {
|
2022-08-27 17:47:07 +00:00
|
|
|
private const int LatestVersion = 5;
|
2022-08-28 20:54:19 +00:00
|
|
|
internal const int LatestDbVersion = 1;
|
2022-02-06 00:31:26 +00:00
|
|
|
|
|
|
|
public int Version { get; set; } = LatestVersion;
|
2021-12-29 19:31:45 +00:00
|
|
|
|
|
|
|
public bool HideChat = true;
|
2022-02-01 05:20:20 +00:00
|
|
|
public bool HideDuringCutscenes = true;
|
2022-02-06 08:45:16 +00:00
|
|
|
public bool HideWhenNotLoggedIn = true;
|
2022-02-07 19:44:19 +00:00
|
|
|
public bool HideWhenUiHidden = true;
|
2021-12-30 02:53:44 +00:00
|
|
|
public bool NativeItemTooltips = true;
|
2022-01-14 23:22:38 +00:00
|
|
|
public bool PrettierTimestamps = true;
|
2022-01-15 05:24:47 +00:00
|
|
|
public bool MoreCompactPretty;
|
2022-02-18 18:47:31 +00:00
|
|
|
public bool HideSameTimestamps;
|
2022-02-04 01:07:31 +00:00
|
|
|
public bool ShowNoviceNetwork;
|
2022-01-06 21:17:31 +00:00
|
|
|
public bool SidebarTabView;
|
2022-02-07 05:50:30 +00:00
|
|
|
public CommandHelpSide CommandHelpSide = CommandHelpSide.None;
|
2022-02-08 20:20:10 +00:00
|
|
|
public KeybindMode KeybindMode = KeybindMode.Strict;
|
2022-02-08 20:23:00 +00:00
|
|
|
public LanguageOverride LanguageOverride = LanguageOverride.None;
|
2022-01-15 19:27:56 +00:00
|
|
|
public bool CanMove = true;
|
|
|
|
public bool CanResize = true;
|
|
|
|
public bool ShowTitleBar;
|
2022-02-19 21:09:32 +00:00
|
|
|
public bool ShowPopOutTitleBar = true;
|
2022-02-13 09:36:08 +00:00
|
|
|
public bool DatabaseBattleMessages;
|
|
|
|
public bool LoadPreviousSession;
|
|
|
|
public bool FilterIncludePreviousSessions;
|
2022-02-16 20:38:55 +00:00
|
|
|
public bool SharedMode;
|
2022-05-30 04:52:44 +00:00
|
|
|
public bool SortAutoTranslate;
|
2022-06-14 16:33:06 +00:00
|
|
|
public bool CollapseDuplicateMessages;
|
2022-02-05 04:00:16 +00:00
|
|
|
|
2022-05-12 22:50:05 +00:00
|
|
|
public bool FontsEnabled = true;
|
2022-06-01 21:14:32 +00:00
|
|
|
public ExtraGlyphRanges ExtraGlyphRanges = 0;
|
2021-12-29 19:31:45 +00:00
|
|
|
public float FontSize = 17f;
|
2022-02-06 00:31:26 +00:00
|
|
|
public float JapaneseFontSize = 17f;
|
|
|
|
public float SymbolsFontSize = 17f;
|
2022-02-05 04:00:16 +00:00
|
|
|
public string GlobalFont = Fonts.GlobalFonts[0].Name;
|
|
|
|
public string JapaneseFont = Fonts.JapaneseFonts[0].Item1;
|
|
|
|
|
2022-02-19 21:15:25 +00:00
|
|
|
public float WindowAlpha = 100f;
|
2021-12-29 19:31:45 +00:00
|
|
|
public Dictionary<ChatType, uint> ChatColours = new();
|
|
|
|
public List<Tab> Tabs = new();
|
2022-01-15 19:27:56 +00:00
|
|
|
|
2022-08-28 20:54:19 +00:00
|
|
|
public uint DatabaseMigration = LatestDbVersion;
|
2022-08-27 19:55:47 +00:00
|
|
|
|
2022-01-15 19:27:56 +00:00
|
|
|
internal void UpdateFrom(Configuration other) {
|
|
|
|
this.HideChat = other.HideChat;
|
2022-02-01 21:25:14 +00:00
|
|
|
this.HideDuringCutscenes = other.HideDuringCutscenes;
|
2022-02-06 08:45:16 +00:00
|
|
|
this.HideWhenNotLoggedIn = other.HideWhenNotLoggedIn;
|
2022-02-07 19:44:19 +00:00
|
|
|
this.HideWhenUiHidden = other.HideWhenUiHidden;
|
2022-01-15 19:27:56 +00:00
|
|
|
this.NativeItemTooltips = other.NativeItemTooltips;
|
|
|
|
this.PrettierTimestamps = other.PrettierTimestamps;
|
|
|
|
this.MoreCompactPretty = other.MoreCompactPretty;
|
2022-02-18 18:47:31 +00:00
|
|
|
this.HideSameTimestamps = other.HideSameTimestamps;
|
2022-02-04 01:07:31 +00:00
|
|
|
this.ShowNoviceNetwork = other.ShowNoviceNetwork;
|
2022-01-15 19:27:56 +00:00
|
|
|
this.SidebarTabView = other.SidebarTabView;
|
2022-02-07 05:50:30 +00:00
|
|
|
this.CommandHelpSide = other.CommandHelpSide;
|
2022-02-08 20:20:10 +00:00
|
|
|
this.KeybindMode = other.KeybindMode;
|
2022-02-08 20:23:00 +00:00
|
|
|
this.LanguageOverride = other.LanguageOverride;
|
2022-01-15 19:27:56 +00:00
|
|
|
this.CanMove = other.CanMove;
|
|
|
|
this.CanResize = other.CanResize;
|
|
|
|
this.ShowTitleBar = other.ShowTitleBar;
|
2022-02-19 21:09:32 +00:00
|
|
|
this.ShowPopOutTitleBar = other.ShowPopOutTitleBar;
|
2022-02-13 09:36:08 +00:00
|
|
|
this.DatabaseBattleMessages = other.DatabaseBattleMessages;
|
|
|
|
this.LoadPreviousSession = other.LoadPreviousSession;
|
|
|
|
this.FilterIncludePreviousSessions = other.FilterIncludePreviousSessions;
|
2022-02-16 20:38:55 +00:00
|
|
|
this.SharedMode = other.SharedMode;
|
2022-05-30 04:52:44 +00:00
|
|
|
this.SortAutoTranslate = other.SortAutoTranslate;
|
2022-06-14 16:33:06 +00:00
|
|
|
this.CollapseDuplicateMessages = other.CollapseDuplicateMessages;
|
2022-05-12 22:50:05 +00:00
|
|
|
this.FontsEnabled = other.FontsEnabled;
|
2022-06-01 21:14:32 +00:00
|
|
|
this.ExtraGlyphRanges = other.ExtraGlyphRanges;
|
2022-01-15 19:27:56 +00:00
|
|
|
this.FontSize = other.FontSize;
|
2022-02-06 00:31:26 +00:00
|
|
|
this.JapaneseFontSize = other.JapaneseFontSize;
|
|
|
|
this.SymbolsFontSize = other.SymbolsFontSize;
|
2022-02-05 04:00:16 +00:00
|
|
|
this.GlobalFont = other.GlobalFont;
|
|
|
|
this.JapaneseFont = other.JapaneseFont;
|
2022-01-15 21:07:44 +00:00
|
|
|
this.WindowAlpha = other.WindowAlpha;
|
2022-01-15 19:27:56 +00:00
|
|
|
this.ChatColours = other.ChatColours.ToDictionary(entry => entry.Key, entry => entry.Value);
|
|
|
|
this.Tabs = other.Tabs.Select(t => t.Clone()).ToList();
|
2022-08-27 19:55:47 +00:00
|
|
|
this.DatabaseMigration = other.DatabaseMigration;
|
2022-01-15 19:27:56 +00:00
|
|
|
}
|
2022-02-03 21:15:27 +00:00
|
|
|
|
|
|
|
public void Migrate() {
|
2022-02-07 18:21:45 +00:00
|
|
|
var loop = true;
|
|
|
|
while (loop && this.Version < LatestVersion) {
|
2022-02-06 00:31:26 +00:00
|
|
|
switch (this.Version) {
|
|
|
|
case 1: {
|
|
|
|
this.Version = 2;
|
|
|
|
|
|
|
|
foreach (var tab in this.Tabs) {
|
|
|
|
#pragma warning disable CS0618
|
|
|
|
tab.UnreadMode = tab.DisplayUnread ? UnreadMode.Unseen : UnreadMode.None;
|
|
|
|
#pragma warning restore CS0618
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 2:
|
|
|
|
this.Version = 3;
|
2022-02-03 21:15:27 +00:00
|
|
|
|
2022-02-06 00:31:26 +00:00
|
|
|
this.JapaneseFontSize = this.FontSize;
|
|
|
|
this.SymbolsFontSize = this.FontSize;
|
|
|
|
break;
|
2022-02-19 21:15:25 +00:00
|
|
|
case 3:
|
|
|
|
this.Version = 4;
|
|
|
|
|
|
|
|
this.WindowAlpha *= 100f;
|
2022-08-27 17:47:07 +00:00
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
this.Version = 5;
|
|
|
|
|
|
|
|
foreach (var tab in this.Tabs) {
|
|
|
|
tab.ExtraChatAll = true;
|
|
|
|
}
|
|
|
|
|
2022-02-19 21:15:25 +00:00
|
|
|
break;
|
2022-02-06 00:31:26 +00:00
|
|
|
default:
|
2023-10-14 23:32:10 +00:00
|
|
|
Plugin.Log.Warning($"Couldn't migrate config version {this.Version}");
|
2022-02-07 18:21:45 +00:00
|
|
|
loop = false;
|
2022-02-06 00:31:26 +00:00
|
|
|
break;
|
2022-02-03 21:15:27 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
[Serializable]
|
|
|
|
internal enum UnreadMode {
|
|
|
|
All,
|
|
|
|
Unseen,
|
|
|
|
None,
|
|
|
|
}
|
|
|
|
|
|
|
|
internal static class UnreadModeExt {
|
2022-02-05 00:38:19 +00:00
|
|
|
internal static string Name(this UnreadMode mode) => mode switch {
|
|
|
|
UnreadMode.All => Language.UnreadMode_All,
|
|
|
|
UnreadMode.Unseen => Language.UnreadMode_Unseen,
|
|
|
|
UnreadMode.None => Language.UnreadMode_None,
|
|
|
|
_ => throw new ArgumentOutOfRangeException(nameof(mode), mode, null),
|
|
|
|
};
|
|
|
|
|
2022-02-03 21:15:27 +00:00
|
|
|
internal static string? Tooltip(this UnreadMode mode) => mode switch {
|
2022-02-04 10:46:13 +00:00
|
|
|
UnreadMode.All => Language.UnreadMode_All_Tooltip,
|
|
|
|
UnreadMode.Unseen => Language.UnreadMode_Unseen_Tooltip,
|
|
|
|
UnreadMode.None => Language.UnreadMode_None_Tooltip,
|
2022-02-03 21:15:27 +00:00
|
|
|
_ => null,
|
|
|
|
};
|
2021-12-29 19:31:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[Serializable]
|
|
|
|
internal class Tab {
|
2022-02-04 10:46:13 +00:00
|
|
|
public string Name = Language.Tab_DefaultName;
|
2021-12-29 19:31:45 +00:00
|
|
|
public Dictionary<ChatType, ChatSource> ChatCodes = new();
|
2022-08-27 17:26:21 +00:00
|
|
|
public bool ExtraChatAll;
|
|
|
|
public HashSet<Guid> ExtraChatChannels = new();
|
2022-02-03 21:15:27 +00:00
|
|
|
|
|
|
|
[Obsolete("Use UnreadMode instead")]
|
2021-12-29 19:31:45 +00:00
|
|
|
public bool DisplayUnread = true;
|
2022-02-03 21:15:27 +00:00
|
|
|
|
|
|
|
public UnreadMode UnreadMode = UnreadMode.Unseen;
|
2021-12-29 19:31:45 +00:00
|
|
|
public bool DisplayTimestamp = true;
|
2022-01-06 20:57:24 +00:00
|
|
|
public InputChannel? Channel;
|
2022-02-18 18:35:46 +00:00
|
|
|
public bool PopOut;
|
2022-02-19 21:09:32 +00:00
|
|
|
public bool IndependentOpacity;
|
|
|
|
public float Opacity = 100f;
|
2021-12-29 19:31:45 +00:00
|
|
|
|
|
|
|
[NonSerialized]
|
|
|
|
public uint Unread;
|
|
|
|
|
|
|
|
[NonSerialized]
|
2022-09-02 22:21:34 +00:00
|
|
|
public SemaphoreSlim MessagesMutex = new(1, 1);
|
2021-12-29 19:31:45 +00:00
|
|
|
|
|
|
|
[NonSerialized]
|
|
|
|
public List<Message> Messages = new();
|
|
|
|
|
|
|
|
~Tab() {
|
|
|
|
this.MessagesMutex.Dispose();
|
|
|
|
}
|
|
|
|
|
|
|
|
internal bool Matches(Message message) {
|
2022-08-27 19:55:47 +00:00
|
|
|
if (message.ExtraChatChannel != Guid.Empty) {
|
|
|
|
return this.ExtraChatAll || this.ExtraChatChannels.Contains(message.ExtraChatChannel);
|
2022-08-27 17:26:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return message.Code.Type.IsGm()
|
|
|
|
|| this.ChatCodes.TryGetValue(message.Code.Type, out var sources) && (message.Code.Source is 0 or (ChatSource) 1 || sources.HasFlag(message.Code.Source));
|
2021-12-29 19:31:45 +00:00
|
|
|
}
|
|
|
|
|
2022-01-14 20:40:31 +00:00
|
|
|
internal void AddMessage(Message message, bool unread = true) {
|
2022-09-02 22:21:34 +00:00
|
|
|
this.MessagesMutex.Wait();
|
2021-12-29 19:31:45 +00:00
|
|
|
this.Messages.Add(message);
|
2022-01-31 02:40:25 +00:00
|
|
|
while (this.Messages.Count > Store.MessagesLimit) {
|
2021-12-29 19:31:45 +00:00
|
|
|
this.Messages.RemoveAt(0);
|
|
|
|
}
|
2021-12-30 02:53:44 +00:00
|
|
|
|
2022-09-02 22:21:34 +00:00
|
|
|
this.MessagesMutex.Release();
|
2021-12-29 19:31:45 +00:00
|
|
|
|
2022-01-14 20:40:31 +00:00
|
|
|
if (unread) {
|
|
|
|
this.Unread += 1;
|
|
|
|
}
|
2021-12-29 19:31:45 +00:00
|
|
|
}
|
|
|
|
|
2022-01-15 19:34:31 +00:00
|
|
|
internal void Clear() {
|
2022-09-02 22:21:34 +00:00
|
|
|
this.MessagesMutex.Wait();
|
2022-01-15 19:34:31 +00:00
|
|
|
this.Messages.Clear();
|
2022-09-02 22:21:34 +00:00
|
|
|
this.MessagesMutex.Release();
|
2022-01-15 19:34:31 +00:00
|
|
|
}
|
|
|
|
|
2021-12-29 19:31:45 +00:00
|
|
|
internal Tab Clone() {
|
|
|
|
return new Tab {
|
|
|
|
Name = this.Name,
|
|
|
|
ChatCodes = this.ChatCodes.ToDictionary(entry => entry.Key, entry => entry.Value),
|
2022-08-27 17:26:21 +00:00
|
|
|
ExtraChatAll = this.ExtraChatAll,
|
|
|
|
ExtraChatChannels = this.ExtraChatChannels.ToHashSet(),
|
2022-02-03 21:15:27 +00:00
|
|
|
#pragma warning disable CS0618
|
2021-12-29 19:31:45 +00:00
|
|
|
DisplayUnread = this.DisplayUnread,
|
2022-02-03 21:15:27 +00:00
|
|
|
#pragma warning restore CS0618
|
|
|
|
UnreadMode = this.UnreadMode,
|
2021-12-29 19:31:45 +00:00
|
|
|
DisplayTimestamp = this.DisplayTimestamp,
|
2022-01-06 20:57:24 +00:00
|
|
|
Channel = this.Channel,
|
2022-02-18 18:35:46 +00:00
|
|
|
PopOut = this.PopOut,
|
2022-02-19 21:09:32 +00:00
|
|
|
IndependentOpacity = this.IndependentOpacity,
|
|
|
|
Opacity = this.Opacity,
|
2021-12-29 19:31:45 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
2022-02-07 05:50:30 +00:00
|
|
|
|
|
|
|
[Serializable]
|
|
|
|
internal enum CommandHelpSide {
|
|
|
|
None,
|
|
|
|
Left,
|
|
|
|
Right,
|
|
|
|
}
|
|
|
|
|
|
|
|
internal static class CommandHelpSideExt {
|
|
|
|
internal static string Name(this CommandHelpSide side) => side switch {
|
|
|
|
CommandHelpSide.None => Language.CommandHelpSide_None,
|
|
|
|
CommandHelpSide.Left => Language.CommandHelpSide_Left,
|
|
|
|
CommandHelpSide.Right => Language.CommandHelpSide_Right,
|
|
|
|
_ => throw new ArgumentOutOfRangeException(nameof(side), side, null),
|
|
|
|
};
|
|
|
|
}
|
2022-02-08 20:20:10 +00:00
|
|
|
|
|
|
|
[Serializable]
|
|
|
|
internal enum KeybindMode {
|
|
|
|
Flexible,
|
|
|
|
Strict,
|
|
|
|
}
|
|
|
|
|
|
|
|
internal static class KeybindModeExt {
|
|
|
|
internal static string Name(this KeybindMode mode) => mode switch {
|
|
|
|
KeybindMode.Flexible => Language.KeybindMode_Flexible_Name,
|
|
|
|
KeybindMode.Strict => Language.KeybindMode_Strict_Name,
|
|
|
|
_ => throw new ArgumentOutOfRangeException(nameof(mode), mode, null),
|
|
|
|
};
|
|
|
|
|
2022-02-08 20:23:00 +00:00
|
|
|
internal static string? Tooltip(this KeybindMode mode) => mode switch {
|
|
|
|
KeybindMode.Flexible => Language.KeybindMode_Flexible_Tooltip,
|
|
|
|
KeybindMode.Strict => Language.KeybindMode_Strict_Tooltip,
|
|
|
|
_ => null,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
[Serializable]
|
|
|
|
internal enum LanguageOverride {
|
|
|
|
None,
|
2022-06-01 20:44:45 +00:00
|
|
|
ChineseSimplified,
|
|
|
|
ChineseTraditional,
|
2022-06-12 21:40:36 +00:00
|
|
|
Dutch,
|
2022-02-08 20:23:00 +00:00
|
|
|
English,
|
|
|
|
French,
|
|
|
|
German,
|
2022-06-01 20:44:45 +00:00
|
|
|
Greek,
|
2022-08-27 17:26:21 +00:00
|
|
|
|
2022-06-01 20:44:45 +00:00
|
|
|
// Italian,
|
2022-06-12 21:40:36 +00:00
|
|
|
Japanese,
|
2022-08-27 17:26:21 +00:00
|
|
|
|
2022-06-01 20:44:45 +00:00
|
|
|
// Korean,
|
|
|
|
// Norwegian,
|
2022-02-08 20:23:00 +00:00
|
|
|
PortugueseBrazil,
|
2022-02-17 01:34:48 +00:00
|
|
|
Romanian,
|
2022-02-08 20:23:00 +00:00
|
|
|
Russian,
|
|
|
|
Spanish,
|
2022-06-01 20:44:45 +00:00
|
|
|
Swedish,
|
2022-02-08 20:23:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
internal static class LanguageOverrideExt {
|
|
|
|
internal static string Name(this LanguageOverride mode) => mode switch {
|
|
|
|
LanguageOverride.None => Language.LanguageOverride_None,
|
2022-06-01 20:44:45 +00:00
|
|
|
LanguageOverride.ChineseSimplified => "简体中文",
|
|
|
|
LanguageOverride.ChineseTraditional => "繁體中文",
|
2022-06-12 21:40:36 +00:00
|
|
|
LanguageOverride.Dutch => "Nederlands",
|
2022-02-08 20:23:00 +00:00
|
|
|
LanguageOverride.English => "English",
|
|
|
|
LanguageOverride.French => "Français",
|
|
|
|
LanguageOverride.German => "Deutsch",
|
2022-06-01 20:44:45 +00:00
|
|
|
LanguageOverride.Greek => "Ελληνικά",
|
|
|
|
// LanguageOverride.Italian => "Italiano",
|
2022-06-12 21:40:36 +00:00
|
|
|
LanguageOverride.Japanese => "日本語",
|
2022-06-01 20:44:45 +00:00
|
|
|
// LanguageOverride.Korean => "한국어 (Korean)",
|
|
|
|
// LanguageOverride.Norwegian => "Norsk",
|
2022-02-08 20:23:00 +00:00
|
|
|
LanguageOverride.PortugueseBrazil => "Português do Brasil",
|
2022-02-17 01:34:48 +00:00
|
|
|
LanguageOverride.Romanian => "Română",
|
2022-02-08 20:23:00 +00:00
|
|
|
LanguageOverride.Russian => "Русский",
|
|
|
|
LanguageOverride.Spanish => "Español",
|
2022-06-01 20:44:45 +00:00
|
|
|
LanguageOverride.Swedish => "Svenska",
|
2022-02-08 20:23:00 +00:00
|
|
|
_ => throw new ArgumentOutOfRangeException(nameof(mode), mode, null),
|
|
|
|
};
|
2022-02-08 23:05:11 +00:00
|
|
|
|
2022-02-08 20:23:00 +00:00
|
|
|
internal static string Code(this LanguageOverride mode) => mode switch {
|
|
|
|
LanguageOverride.None => "",
|
2022-06-01 20:44:45 +00:00
|
|
|
LanguageOverride.ChineseSimplified => "zh-hans",
|
|
|
|
LanguageOverride.ChineseTraditional => "zh-hant",
|
2022-06-12 21:40:36 +00:00
|
|
|
LanguageOverride.Dutch => "nl",
|
2022-02-08 20:23:00 +00:00
|
|
|
LanguageOverride.English => "en",
|
|
|
|
LanguageOverride.French => "fr",
|
|
|
|
LanguageOverride.German => "de",
|
2022-06-01 20:44:45 +00:00
|
|
|
LanguageOverride.Greek => "el",
|
|
|
|
// LanguageOverride.Italian => "it",
|
2022-06-12 21:40:36 +00:00
|
|
|
LanguageOverride.Japanese => "ja",
|
2022-06-01 20:44:45 +00:00
|
|
|
// LanguageOverride.Korean => "ko",
|
|
|
|
// LanguageOverride.Norwegian => "no",
|
2022-02-08 20:23:00 +00:00
|
|
|
LanguageOverride.PortugueseBrazil => "pt-br",
|
2022-02-17 01:34:48 +00:00
|
|
|
LanguageOverride.Romanian => "ro",
|
2022-02-08 20:23:00 +00:00
|
|
|
LanguageOverride.Russian => "ru",
|
|
|
|
LanguageOverride.Spanish => "es",
|
2022-06-01 20:44:45 +00:00
|
|
|
LanguageOverride.Swedish => "sv",
|
2022-02-08 20:23:00 +00:00
|
|
|
_ => throw new ArgumentOutOfRangeException(nameof(mode), mode, null),
|
|
|
|
};
|
|
|
|
}
|
2022-06-01 21:14:32 +00:00
|
|
|
|
|
|
|
[Serializable]
|
|
|
|
[Flags]
|
|
|
|
internal enum ExtraGlyphRanges {
|
|
|
|
ChineseFull = 1 << 0,
|
|
|
|
ChineseSimplifiedCommon = 1 << 1,
|
|
|
|
Cyrillic = 1 << 2,
|
|
|
|
Japanese = 1 << 3,
|
|
|
|
Korean = 1 << 4,
|
|
|
|
Thai = 1 << 5,
|
|
|
|
Vietnamese = 1 << 6,
|
|
|
|
}
|
|
|
|
|
|
|
|
internal static class ExtraGlyphRangesExt {
|
|
|
|
internal static string Name(this ExtraGlyphRanges ranges) => ranges switch {
|
2022-06-01 21:30:58 +00:00
|
|
|
ExtraGlyphRanges.ChineseFull => Language.ExtraGlyphRanges_ChineseFull_Name,
|
|
|
|
ExtraGlyphRanges.ChineseSimplifiedCommon => Language.ExtraGlyphRanges_ChineseSimplifiedCommon_Name,
|
|
|
|
ExtraGlyphRanges.Cyrillic => Language.ExtraGlyphRanges_Cyrillic_Name,
|
|
|
|
ExtraGlyphRanges.Japanese => Language.ExtraGlyphRanges_Japanese_Name,
|
|
|
|
ExtraGlyphRanges.Korean => Language.ExtraGlyphRanges_Korean_Name,
|
|
|
|
ExtraGlyphRanges.Thai => Language.ExtraGlyphRanges_Thai_Name,
|
|
|
|
ExtraGlyphRanges.Vietnamese => Language.ExtraGlyphRanges_Vietnamese_Name,
|
2022-06-01 21:14:32 +00:00
|
|
|
_ => throw new ArgumentOutOfRangeException(nameof(ranges), ranges, null),
|
|
|
|
};
|
|
|
|
|
|
|
|
internal static IntPtr Range(this ExtraGlyphRanges ranges) => ranges switch {
|
|
|
|
ExtraGlyphRanges.ChineseFull => ImGui.GetIO().Fonts.GetGlyphRangesChineseFull(),
|
|
|
|
ExtraGlyphRanges.ChineseSimplifiedCommon => ImGui.GetIO().Fonts.GetGlyphRangesChineseSimplifiedCommon(),
|
|
|
|
ExtraGlyphRanges.Cyrillic => ImGui.GetIO().Fonts.GetGlyphRangesCyrillic(),
|
|
|
|
ExtraGlyphRanges.Japanese => ImGui.GetIO().Fonts.GetGlyphRangesJapanese(),
|
|
|
|
ExtraGlyphRanges.Korean => ImGui.GetIO().Fonts.GetGlyphRangesKorean(),
|
|
|
|
ExtraGlyphRanges.Thai => ImGui.GetIO().Fonts.GetGlyphRangesThai(),
|
|
|
|
ExtraGlyphRanges.Vietnamese => ImGui.GetIO().Fonts.GetGlyphRangesVietnamese(),
|
|
|
|
_ => throw new ArgumentOutOfRangeException(nameof(ranges), ranges, null),
|
|
|
|
};
|
|
|
|
}
|