diff --git a/Dalamud.Injector/EntryPoint.cs b/Dalamud.Injector/EntryPoint.cs index 92a0861d4..829a15429 100644 --- a/Dalamud.Injector/EntryPoint.cs +++ b/Dalamud.Injector/EntryPoint.cs @@ -281,7 +281,6 @@ namespace Dalamud.Injector AssetDirectory = Path.Combine(xivlauncherDir, "dalamudAssets", "dev"), GameVersion = gameVer, Language = ClientLanguage.English, - OptOutMbCollection = false, }; Log.Debug( @@ -292,8 +291,7 @@ namespace Dalamud.Injector $" DefaultPluginDirectory: {startInfo.DefaultPluginDirectory}\n" + $" AssetDirectory: {startInfo.AssetDirectory}\n" + $" GameVersion: {startInfo.GameVersion}\n" + - $" Language: {startInfo.Language}\n" + - $" OptOutMbCollection: {startInfo.OptOutMbCollection}"); + $" Language: {startInfo.Language}\n"); Log.Information("A Dalamud start info was not found in the program arguments. One has been generated for you."); Log.Information("Copy the following contents into the program arguments:"); diff --git a/Dalamud/Configuration/Internal/DalamudConfiguration.cs b/Dalamud/Configuration/Internal/DalamudConfiguration.cs index f3281af86..98acfbeeb 100644 --- a/Dalamud/Configuration/Internal/DalamudConfiguration.cs +++ b/Dalamud/Configuration/Internal/DalamudConfiguration.cs @@ -141,7 +141,12 @@ namespace Dalamud.Configuration.Internal /// * ...TTF fonts loaded with stb or FreeType are in linear space. /// * ...the game's prebaked AXIS fonts are in gamma space with gamma value of 1.4. /// - public float FontGamma { get; set; } = 1.0f; + public float FontGamma { get; set; } = 1.4f; + + /// + /// Gets or sets a value indicating whether to allow big font atlas. + /// + public bool AllowBigFontAtlas { get; set; } = false; /// /// Gets or sets a value indicating whether or not plugin UI should be hidden. @@ -290,6 +295,11 @@ namespace Dalamud.Configuration.Internal /// public bool ShowTsm { get; set; } = true; + /// + /// Gets or sets a value indicating whether or not market board data should be uploaded. + /// + public bool DoMbCollect { get; set; } = false; + /// /// Load a configuration from the provided path. /// diff --git a/Dalamud/Dalamud.csproj b/Dalamud/Dalamud.csproj index 07a4c5181..eed32ac21 100644 --- a/Dalamud/Dalamud.csproj +++ b/Dalamud/Dalamud.csproj @@ -8,7 +8,7 @@ - 6.3.0.7 + 6.3.0.15 XIV Launcher addon framework $(DalamudVersion) $(DalamudVersion) @@ -69,6 +69,7 @@ + diff --git a/Dalamud/DalamudStartInfo.cs b/Dalamud/DalamudStartInfo.cs index 891a57dca..767ee5000 100644 --- a/Dalamud/DalamudStartInfo.cs +++ b/Dalamud/DalamudStartInfo.cs @@ -47,11 +47,6 @@ namespace Dalamud [JsonConverter(typeof(GameVersionConverter))] public GameVersion GameVersion { get; init; } - /// - /// Gets a value indicating whether or not market board information should be uploaded by default. - /// - public bool OptOutMbCollection { get; init; } - /// /// Gets a value that specifies how much to wait before a new Dalamud session. /// diff --git a/Dalamud/Game/Network/Internal/NetworkHandlers.cs b/Dalamud/Game/Network/Internal/NetworkHandlers.cs index 3958f3f3b..8220a1473 100644 --- a/Dalamud/Game/Network/Internal/NetworkHandlers.cs +++ b/Dalamud/Game/Network/Internal/NetworkHandlers.cs @@ -25,7 +25,6 @@ namespace Dalamud.Game.Network.Internal { private readonly List marketBoardRequests = new(); - private readonly bool optOutMbUploads; private readonly IMarketBoardUploader uploader; private MarketBoardPurchaseHandler marketBoardPurchaseHandler; @@ -35,8 +34,6 @@ namespace Dalamud.Game.Network.Internal /// public NetworkHandlers() { - this.optOutMbUploads = Service.Get().OptOutMbCollection; - this.uploader = new UniversalisMarketBoardUploader(); Service.Get().NetworkMessage += this.OnNetworkMessage; @@ -58,7 +55,7 @@ namespace Dalamud.Game.Network.Internal if (direction == NetworkMessageDirection.ZoneUp) { - if (!this.optOutMbUploads) + if (configuration.DoMbCollect) { if (opCode == dataManager.ClientOpCodes["MarketBoardPurchaseHandler"]) { @@ -76,7 +73,7 @@ namespace Dalamud.Game.Network.Internal return; } - if (!this.optOutMbUploads) + if (configuration.DoMbCollect) { if (opCode == dataManager.ServerOpCodes["MarketBoardItemRequestStart"]) { diff --git a/Dalamud/Interface/GameFonts/GameFontManager.cs b/Dalamud/Interface/GameFonts/GameFontManager.cs index 83178acc9..adbe6dfa4 100644 --- a/Dalamud/Interface/GameFonts/GameFontManager.cs +++ b/Dalamud/Interface/GameFonts/GameFontManager.cs @@ -141,9 +141,9 @@ namespace Dalamud.Interface.GameFonts target.Value!.ConfigData, (ushort)glyph->Codepoint, glyph->X0 * scale, - glyph->Y0 * scale, + ((glyph->Y0 - source.Value!.Ascent) * scale) + target.Value!.Ascent, glyph->X1 * scale, - glyph->Y1 * scale, + ((glyph->Y1 - source.Value!.Ascent) * scale) + target.Value!.Ascent, glyph->U0, glyph->V0, glyph->U1, @@ -153,9 +153,9 @@ namespace Dalamud.Interface.GameFonts else if (!missingOnly) { prevGlyphPtr->X0 = glyph->X0 * scale; - prevGlyphPtr->Y0 = glyph->Y0 * scale; + prevGlyphPtr->Y0 = ((glyph->Y0 - source.Value!.Ascent) * scale) + target.Value!.Ascent; prevGlyphPtr->X1 = glyph->X1 * scale; - prevGlyphPtr->Y1 = glyph->Y1 * scale; + prevGlyphPtr->Y1 = ((glyph->Y1 - source.Value!.Ascent) * scale) + target.Value!.Ascent; prevGlyphPtr->U0 = glyph->U0; prevGlyphPtr->V0 = glyph->V0; prevGlyphPtr->U1 = glyph->U1; @@ -343,7 +343,7 @@ namespace Dalamud.Interface.GameFonts { var fdt = this.fdts[(int)style.FamilyAndSize]; var fontPtr = font.NativePtr; - fontPtr->ConfigData->SizePixels = fontPtr->FontSize = fdt.FontHeader.LineHeight; + fontPtr->ConfigData->SizePixels = fontPtr->FontSize = fdt.FontHeader.Size * 4 / 3; fontPtr->Ascent = fdt.FontHeader.Ascent; fontPtr->Descent = fdt.FontHeader.Descent; fontPtr->EllipsisChar = '…'; @@ -444,6 +444,9 @@ namespace Dalamud.Interface.GameFonts { lock (this.syncRoot) { + if (!this.fontUseCounter.ContainsKey(style)) + return; + if ((this.fontUseCounter[style] -= 1) == 0) this.fontUseCounter.Remove(style); } diff --git a/Dalamud/Interface/Internal/InterfaceManager.cs b/Dalamud/Interface/Internal/InterfaceManager.cs index 8872fc45f..c19a32601 100644 --- a/Dalamud/Interface/Internal/InterfaceManager.cs +++ b/Dalamud/Interface/Internal/InterfaceManager.cs @@ -55,6 +55,7 @@ namespace Dalamud.Interface.Internal private readonly string rtssPath; private readonly HashSet glyphRequests = new(); + private readonly List axisFontHandles = new(); private readonly Hook presentHook; private readonly Hook resizeBuffersHook; @@ -64,9 +65,6 @@ namespace Dalamud.Interface.Internal private readonly SwapChainVtableResolver address; private RawDX11Scene? scene; - private GameFontHandle[] axisFontHandles; - private bool overwriteAllNotoGlyphsWithAxis; - // can't access imgui IO before first present call private bool lastWantCapture = false; private bool isRebuildingFonts = false; @@ -197,6 +195,16 @@ namespace Dalamud.Interface.Internal /// public bool IsReady => this.scene != null; + /// + /// Gets or sets a value indicating whether to override configuration for UseAxis. + /// + public bool? UseAxisOverride { get; set; } = null; + + /// + /// Gets a value indicating whether to use AXIS fonts. + /// + public bool UseAxis => this.UseAxisOverride ?? Service.Get().UseAxisFontsFromGame; + /// /// Gets or sets the overrided font gamma value, instead of using the value from configuration. /// @@ -207,6 +215,16 @@ namespace Dalamud.Interface.Internal /// public float FontGamma => Math.Max(0.1f, this.FontGammaOverride.GetValueOrDefault(Service.Get().FontGamma)); + /// + /// Gets or sets a value indicating whether to override configuration for AllowBigFontAtlas. + /// + public bool? AllowBigFontAtlasOverride { get; set; } = null; + + /// + /// Gets a value indicating whether to allow big font atlas. + /// + public bool AllowBigFontAtlas => this.AllowBigFontAtlasOverride ?? Service.Get().AllowBigFontAtlas; + /// /// Enable this module. /// @@ -330,8 +348,6 @@ namespace Dalamud.Interface.Internal if (!this.isRebuildingFonts) { Log.Verbose("[FONT] RebuildFonts() trigger"); - this.SetAxisFonts(); - this.isRebuildingFonts = true; this.scene.OnNewRenderFrame += this.RebuildFontsInternal; } @@ -414,24 +430,6 @@ namespace Dalamud.Interface.Internal Util.Fatal($"One or more files required by XIVLauncher were not found.\nPlease restart and report this error if it occurs again.\n\n{path}", "Error"); } - private void SetAxisFonts() - { - var configuration = Service.Get(); - this.overwriteAllNotoGlyphsWithAxis = configuration.UseAxisFontsFromGame; - - if (this.axisFontHandles == null) - { - this.axisFontHandles = new GameFontHandle[] - { - Service.Get().NewFontRef(new(GameFontFamilyAndSize.Axis96)), - Service.Get().NewFontRef(new(GameFontFamilyAndSize.Axis12)), - Service.Get().NewFontRef(new(GameFontFamilyAndSize.Axis14)), - Service.Get().NewFontRef(new(GameFontFamilyAndSize.Axis18)), - Service.Get().NewFontRef(new(GameFontFamilyAndSize.Axis36)), - }; - } - } - /* * NOTE(goat): When hooking ReShade DXGISwapChain::runtime_present, this is missing the syncInterval arg. * Seems to work fine regardless, I guess, so whatever. @@ -493,8 +491,6 @@ namespace Dalamud.Interface.Internal this.scene.OnBuildUI += this.Display; this.scene.OnNewInputFrame += this.OnNewInputFrame; - this.SetAxisFonts(); - this.SetupFonts(); StyleModel.TransferOldModels(); @@ -600,22 +596,40 @@ namespace Dalamud.Interface.Internal private unsafe void SetupFonts() { + var gameFontManager = Service.Get(); var dalamud = Service.Get(); var io = ImGui.GetIO(); var ioFonts = io.Fonts; - var fontScale = io.FontGlobalScale; + var fontLoadScale = this.AllowBigFontAtlas ? io.FontGlobalScale : 1; var fontGamma = this.FontGamma; List fontsToUnscale = new(); + List fontsToOverwriteFromAxis = new(); + List fontsToReassignSizes = new(); this.fontBuildSignal.Reset(); ioFonts.Clear(); - ioFonts.TexDesiredWidth = 4096; + ioFonts.TexDesiredWidth = this.AllowBigFontAtlas ? 4096 : 2048; + + Log.Verbose("[FONT] SetupFonts - 1"); + + foreach (var v in this.axisFontHandles) + { + if (v != null) + v.Dispose(); + } + + this.axisFontHandles.Clear(); + + Log.Verbose("[FONT] SetupFonts - 2"); ImFontConfigPtr fontConfig = null; List garbageList = new(); try { + var dummyRangeHandle = GCHandle.Alloc(new ushort[] { '0', '0', 0 }, GCHandleType.Pinned); + garbageList.Add(dummyRangeHandle); + fontConfig = ImGuiNative.ImFontConfig_ImFontConfig(); fontConfig.OversampleH = 1; fontConfig.OversampleV = 1; @@ -626,15 +640,31 @@ namespace Dalamud.Interface.Internal ShowFontError(fontPathJp); // Default font + Log.Verbose("[FONT] SetupFonts - Default font"); + this.axisFontHandles.Add(gameFontManager.NewFontRef(this.AllowBigFontAtlas ? new(GameFontFamily.Axis, DefaultFontSizePt * fontLoadScale) : new(GameFontFamilyAndSize.Axis12))); + if (this.UseAxis) + { + fontConfig.GlyphRanges = dummyRangeHandle.AddrOfPinnedObject(); + fontConfig.SizePixels = DefaultFontSizePx * fontLoadScale; + DefaultFont = ioFonts.AddFontDefault(fontConfig); + fontsToUnscale.Add(DefaultFont); + fontsToOverwriteFromAxis.Add(true); + fontsToReassignSizes.Add(null); + } + else { var japaneseRangeHandle = GCHandle.Alloc(GlyphRangesJapanese.GlyphRanges, GCHandleType.Pinned); garbageList.Add(japaneseRangeHandle); - DefaultFont = ioFonts.AddFontFromFileTTF(fontPathJp, (DefaultFontSizePx + 1) * fontScale, fontConfig, japaneseRangeHandle.AddrOfPinnedObject()); + fontConfig.GlyphRanges = japaneseRangeHandle.AddrOfPinnedObject(); + DefaultFont = ioFonts.AddFontFromFileTTF(fontPathJp, (DefaultFontSizePx + 1) * fontLoadScale, fontConfig); fontsToUnscale.Add(DefaultFont); + fontsToOverwriteFromAxis.Add(false); + fontsToReassignSizes.Add(null); } // FontAwesome icon font + Log.Verbose("[FONT] SetupFonts - FontAwesome icon font"); { var fontPathIcon = Path.Combine(dalamud.AssetDirectory.FullName, "UIRes", "FontAwesome5FreeSolid.otf"); if (!File.Exists(fontPathIcon)) @@ -643,20 +673,31 @@ namespace Dalamud.Interface.Internal var iconRangeHandle = GCHandle.Alloc(new ushort[] { 0xE000, 0xF8FF, 0, }, GCHandleType.Pinned); garbageList.Add(iconRangeHandle); - IconFont = ioFonts.AddFontFromFileTTF(fontPathIcon, DefaultFontSizePx * fontScale, fontConfig, iconRangeHandle.AddrOfPinnedObject()); + fontConfig.GlyphRanges = iconRangeHandle.AddrOfPinnedObject(); + IconFont = ioFonts.AddFontFromFileTTF(fontPathIcon, DefaultFontSizePx * fontLoadScale, fontConfig); fontsToUnscale.Add(IconFont); + this.axisFontHandles.Add(null); + fontsToOverwriteFromAxis.Add(false); + fontsToReassignSizes.Add(null); } // Monospace font + Log.Verbose("[FONT] SetupFonts - Monospace font"); { var fontPathMono = Path.Combine(dalamud.AssetDirectory.FullName, "UIRes", "Inconsolata-Regular.ttf"); if (!File.Exists(fontPathMono)) ShowFontError(fontPathMono); - MonoFont = ioFonts.AddFontFromFileTTF(fontPathMono, DefaultFontSizePx * fontScale, fontConfig); + + fontConfig.GlyphRanges = IntPtr.Zero; + MonoFont = ioFonts.AddFontFromFileTTF(fontPathMono, DefaultFontSizePx * fontLoadScale, fontConfig); fontsToUnscale.Add(MonoFont); + this.axisFontHandles.Add(null); + fontsToOverwriteFromAxis.Add(false); + fontsToReassignSizes.Add(null); } // Default font but in requested size for requested glyphs + Log.Verbose("[FONT] SetupFonts - Default font but in requested size for requested glyphs"); { Dictionary> extraFontRequests = new(); foreach (var extraFontRequest in this.glyphRequests) @@ -700,18 +741,32 @@ namespace Dalamud.Interface.Internal flattenedRanges.Add(0); - var rangeHandle = GCHandle.Alloc(flattenedRanges.ToArray(), GCHandleType.Pinned); - garbageList.Add(rangeHandle); - - var sizedFont = ioFonts.AddFontFromFileTTF(fontPathJp, fontSize * fontScale, fontConfig, rangeHandle.AddrOfPinnedObject()); - fontsToUnscale.Add(sizedFont); + ImFontPtr sizedFont; + this.axisFontHandles.Add(gameFontManager.NewFontRef(this.AllowBigFontAtlas ? new(GameFontFamily.Axis, fontSize * 3 / 4 * fontLoadScale) : new(GameFontFamilyAndSize.Axis12))); + if (this.UseAxis) + { + fontConfig.GlyphRanges = dummyRangeHandle.AddrOfPinnedObject(); + fontConfig.SizePixels = (this.AllowBigFontAtlas ? fontSize : DefaultFontSizePx) * fontLoadScale; + sizedFont = ioFonts.AddFontDefault(fontConfig); + fontsToUnscale.Add(sizedFont); + fontsToOverwriteFromAxis.Add(true); + fontsToReassignSizes.Add(this.AllowBigFontAtlas ? null : fontSize); + } + else + { + var rangeHandle = GCHandle.Alloc(flattenedRanges.ToArray(), GCHandleType.Pinned); + garbageList.Add(rangeHandle); + sizedFont = ioFonts.AddFontFromFileTTF(fontPathJp, (this.AllowBigFontAtlas ? fontSize : DefaultFontSizePx + 1) * fontLoadScale, fontConfig, rangeHandle.AddrOfPinnedObject()); + fontsToUnscale.Add(sizedFont); + fontsToOverwriteFromAxis.Add(false); + fontsToReassignSizes.Add(this.AllowBigFontAtlas ? null : fontSize); + } foreach (var request in requests) request.FontInternal = sizedFont; } } - var gameFontManager = Service.Get(); gameFontManager.BuildFonts(); Log.Verbose("[FONT] Invoke OnBuildFonts"); @@ -733,38 +788,55 @@ namespace Dalamud.Interface.Internal texPixels[i] = (byte)(Math.Pow(texPixels[i] / 255.0f, 1.0f / fontGamma) * 255.0f); } - foreach (var font in fontsToUnscale) - GameFontManager.UnscaleFont(font, fontScale, false); - gameFontManager.AfterBuildFonts(); - foreach (var font in fontsToUnscale) + for (var i = 0; i < fontsToUnscale.Count; i++) { - // Leave IconFont alone. - if (font.NativePtr == IconFont.NativePtr) + var font = fontsToUnscale[i]; + var fontPtr = font.NativePtr; + var correspondingAxis = this.axisFontHandles[i]; + var overwrite = fontsToOverwriteFromAxis[i]; + var overwriteSize = fontsToReassignSizes[i]; + + GameFontManager.UnscaleFont(font, fontLoadScale, false); + + if (correspondingAxis == null) continue; - // MonoFont will be filled later from DefaultFont. - if (font.NativePtr == MonoFont.NativePtr) - continue; + var scale = 1f; - var axisFont = this.axisFontHandles[^1]; - for (var i = this.axisFontHandles.Length - 2; i >= 0; i--) + if (overwrite) { - if (this.axisFontHandles[i].Style.Size >= (font.FontSize - 1) * fontScale * 3 / 4) - axisFont = this.axisFontHandles[i]; - else - break; + var srcPtr = correspondingAxis.ImFont.NativePtr; + scale = fontPtr->ConfigData->SizePixels / srcPtr->ConfigData->SizePixels / fontLoadScale; + fontPtr->FontSize = srcPtr->FontSize * scale; + fontPtr->Ascent = srcPtr->Ascent * scale; + fontPtr->Descent = srcPtr->Descent * scale; + fontPtr->FallbackChar = srcPtr->FallbackChar; + fontPtr->EllipsisChar = srcPtr->EllipsisChar; + GameFontManager.CopyGlyphsAcrossFonts(correspondingAxis.ImFont, font, false, false); + + scale = 1f; } - if (this.overwriteAllNotoGlyphsWithAxis) - GameFontManager.CopyGlyphsAcrossFonts(axisFont.ImFont, font, false, false); - else - GameFontManager.CopyGlyphsAcrossFonts(axisFont.ImFont, font, false, false, 0xE020, 0xE0DB); + if (overwriteSize != null) + scale *= overwriteSize.Value / fontPtr->ConfigData->SizePixels; - // Fill missing glyphs in DefaultFont from Axis - if (font.NativePtr == DefaultFont.NativePtr) - GameFontManager.CopyGlyphsAcrossFonts(axisFont.ImFont, DefaultFont, true, false); + if (scale != 1f) + GameFontManager.UnscaleFont(font, 1 / scale, false); + + Log.Verbose("[FONT] Font {0}: result size {1}", i, fontPtr->FontSize); + + if (!this.UseAxis && fontPtr == DefaultFont.NativePtr) + { + fontPtr->FontSize -= 1; + GameFontManager.CopyGlyphsAcrossFonts(correspondingAxis.ImFont, font, true, false, 0xE020, 0xE0DB); + fontPtr->FontSize += 1; + } + else + { + GameFontManager.CopyGlyphsAcrossFonts(correspondingAxis.ImFont, font, true, false, 0xE020, 0xE0DB); + } } // Fill missing glyphs in MonoFont from DefaultFont diff --git a/Dalamud/Interface/Internal/Windows/SettingsWindow.cs b/Dalamud/Interface/Internal/Windows/SettingsWindow.cs index 686839d0f..b1f212d49 100644 --- a/Dalamud/Interface/Internal/Windows/SettingsWindow.cs +++ b/Dalamud/Interface/Internal/Windows/SettingsWindow.cs @@ -36,9 +36,11 @@ namespace Dalamud.Interface.Internal.Windows private bool doCfTaskBarFlash; private bool doCfChatMessage; + private bool doMbCollect; private float globalUiScale; private bool doUseAxisFontsFromGame; + private bool doAllowBigFontAtlas; private float fontGamma; private bool doToggleUiHide; private bool doToggleUiHideDuringCutscenes; @@ -90,10 +92,12 @@ namespace Dalamud.Interface.Internal.Windows this.doCfTaskBarFlash = configuration.DutyFinderTaskbarFlash; this.doCfChatMessage = configuration.DutyFinderChatMessage; + this.doMbCollect = configuration.DoMbCollect; this.globalUiScale = configuration.GlobalUiScale; this.fontGamma = configuration.FontGamma; this.doUseAxisFontsFromGame = configuration.UseAxisFontsFromGame; + this.doAllowBigFontAtlas = configuration.AllowBigFontAtlas; this.doToggleUiHide = configuration.ToggleUiHide; this.doToggleUiHideDuringCutscenes = configuration.ToggleUiHideDuringCutscenes; this.doToggleUiHideDuringGpose = configuration.ToggleUiHideDuringGpose; @@ -184,6 +188,8 @@ namespace Dalamud.Interface.Internal.Windows ImGui.GetIO().FontGlobalScale = configuration.GlobalUiScale; interfaceManager.FontGammaOverride = null; + interfaceManager.AllowBigFontAtlasOverride = null; + interfaceManager.UseAxisOverride = null; this.thirdRepoList = configuration.ThirdRepoList.Select(x => x.Clone()).ToList(); this.devPluginLocations = configuration.DevPluginLoadLocations.Select(x => x.Clone()).ToList(); @@ -277,6 +283,9 @@ namespace Dalamud.Interface.Internal.Windows ImGui.Checkbox(Loc.Localize("DalamudSettingsDisableRmtFiltering", "Disable RMT Filtering"), ref this.disableRmtFiltering); ImGui.TextColored(ImGuiColors.DalamudGrey, Loc.Localize("DalamudSettingsDisableRmtFilteringMsgHint", "Disable dalamud's built-in RMT ad filtering.")); + + ImGui.Checkbox(Loc.Localize("DalamudSettingDoMbCollect", "Anonymously upload market board data"), ref this.doMbCollect); + ImGui.TextColored(ImGuiColors.DalamudGrey, Loc.Localize("DalamudSettingDoMbCollectHint", "Anonymously provide data about in-game economics to Universalis when browsing the market board. This data can't be tied to you in any way and everyone benefits!")); } private void DrawLookAndFeelTab() @@ -315,9 +324,22 @@ namespace Dalamud.Interface.Internal.Windows ImGui.TextColored(ImGuiColors.DalamudGrey, Loc.Localize("DalamudSettingToggleUiHideOptOutNote", "Plugins may independently opt out of the settings below.")); - ImGui.Checkbox(Loc.Localize("DalamudSettingToggleAxisFonts", "Use AXIS fonts as default Dalamud font"), ref this.doUseAxisFontsFromGame); + if (ImGui.Checkbox(Loc.Localize("DalamudSettingToggleAxisFonts", "Use AXIS fonts as default Dalamud font"), ref this.doUseAxisFontsFromGame)) + { + interfaceManager.UseAxisOverride = this.doUseAxisFontsFromGame; + interfaceManager.RebuildFonts(); + } + ImGui.TextColored(ImGuiColors.DalamudGrey, Loc.Localize("DalamudSettingToggleUiAxisFontsHint", "Use AXIS fonts (the game's main UI fonts) as default Dalamud font.")); + if (ImGui.Checkbox(Loc.Localize("DalamudSettingAllowBigFontAtlas", "Allow big font atlas"), ref this.doAllowBigFontAtlas)) + { + interfaceManager.AllowBigFontAtlasOverride = this.doAllowBigFontAtlas; + interfaceManager.RebuildFonts(); + } + + ImGui.TextColored(ImGuiColors.DalamudGrey, string.Format(Loc.Localize("DalamudSettingAllowBigFontAtlas", "Displays text crisply, but may crash if your GPU does not support it.\nCurrent size: {0}px * {1}px"), ImGui.GetIO().Fonts.TexWidth, ImGui.GetIO().Fonts.TexHeight)); + ImGui.Checkbox(Loc.Localize("DalamudSettingToggleUiHide", "Hide plugin UI when the game UI is toggled off"), ref this.doToggleUiHide); ImGui.TextColored(ImGuiColors.DalamudGrey, Loc.Localize("DalamudSettingToggleUiHideHint", "Hide any open windows by plugins when toggling the game overlay.")); @@ -832,6 +854,7 @@ namespace Dalamud.Interface.Internal.Windows configuration.DutyFinderTaskbarFlash = this.doCfTaskBarFlash; configuration.DutyFinderChatMessage = this.doCfChatMessage; + configuration.DoMbCollect = this.doMbCollect; configuration.GlobalUiScale = this.globalUiScale; configuration.ToggleUiHide = this.doToggleUiHide; @@ -844,6 +867,7 @@ namespace Dalamud.Interface.Internal.Windows configuration.ShowTsm = this.doTsm; configuration.UseAxisFontsFromGame = this.doUseAxisFontsFromGame; + configuration.AllowBigFontAtlas = this.doAllowBigFontAtlas; configuration.FontGamma = this.fontGamma; // This is applied every frame in InterfaceManager::CheckViewportState() diff --git a/lib/CoreCLR/CoreCLR.cpp b/lib/CoreCLR/CoreCLR.cpp index 6f4d337b8..265f1869e 100644 --- a/lib/CoreCLR/CoreCLR.cpp +++ b/lib/CoreCLR/CoreCLR.cpp @@ -37,12 +37,12 @@ int CoreCLR::load_hostfxr(const struct get_hostfxr_parameters* parameters) && m_hostfxr_close_fptr ? 0 : -1; } -bool CoreCLR::load_runtime(const std::wstring& runtime_config_path) +int CoreCLR::load_runtime(const std::wstring& runtime_config_path) { return CoreCLR::load_runtime(runtime_config_path, nullptr); } -bool CoreCLR::load_runtime(const std::wstring& runtime_config_path, const struct hostfxr_initialize_parameters* parameters) +int CoreCLR::load_runtime(const std::wstring& runtime_config_path, const struct hostfxr_initialize_parameters* parameters) { int result; diff --git a/lib/CoreCLR/CoreCLR.h b/lib/CoreCLR/CoreCLR.h index 235bf9923..71c62d90e 100644 --- a/lib/CoreCLR/CoreCLR.h +++ b/lib/CoreCLR/CoreCLR.h @@ -12,8 +12,8 @@ class CoreCLR { int load_hostfxr(); int load_hostfxr(const get_hostfxr_parameters* parameters); - bool load_runtime(const std::wstring& runtime_config_path); - bool load_runtime( + int load_runtime(const std::wstring& runtime_config_path); + int load_runtime( const std::wstring& runtime_config_path, const struct hostfxr_initialize_parameters* parameters); diff --git a/lib/CoreCLR/boot.cpp b/lib/CoreCLR/boot.cpp index 2fde7e221..63636e709 100644 --- a/lib/CoreCLR/boot.cpp +++ b/lib/CoreCLR/boot.cpp @@ -90,7 +90,7 @@ int InitializeClrAndGetEntryPoint( printf("Loading hostfxr... "); if ((result = g_clr->load_hostfxr(&init_parameters)) != 0) { - printf("\nError: Failed to load the `hostfxr` library (err=%d)\n", result); + printf("\nError: Failed to load the `hostfxr` library (err=0x%08x)\n", result); return result; } printf("Done!\n");