From 777779e393174b3111b0b9323ea2b52fb887d0e9 Mon Sep 17 00:00:00 2001 From: liam Date: Thu, 30 Jun 2022 00:08:31 -0400 Subject: [PATCH 1/8] Update ImGuiScene to 1.88 fork and fix compilation issues. --- Dalamud/Interface/GameFonts/GameFontManager.cs | 2 +- Dalamud/Interface/ImGuiFileDialog/FileDialog.UI.cs | 4 ++-- Dalamud/Interface/ImGuiHelpers.cs | 1 + Dalamud/Interface/Internal/InterfaceManager.cs | 2 +- lib/ImGuiScene | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Dalamud/Interface/GameFonts/GameFontManager.cs b/Dalamud/Interface/GameFonts/GameFontManager.cs index a9bdd73f8..ae44f4278 100644 --- a/Dalamud/Interface/GameFonts/GameFontManager.cs +++ b/Dalamud/Interface/GameFonts/GameFontManager.cs @@ -279,7 +279,7 @@ namespace Dalamud.Interface.GameFonts { var interfaceManager = Service.Get(); var ioFonts = ImGui.GetIO().Fonts; - ioFonts.GetTexDataAsRGBA32(out byte* pixels8, out var width, out var height); + ioFonts.GetTexDataAsRGBA32(0, out byte* pixels8, out var width, out var height); var pixels32 = (uint*)pixels8; var fontGamma = interfaceManager.FontGamma; diff --git a/Dalamud/Interface/ImGuiFileDialog/FileDialog.UI.cs b/Dalamud/Interface/ImGuiFileDialog/FileDialog.UI.cs index 9c54c46ef..f56963960 100644 --- a/Dalamud/Interface/ImGuiFileDialog/FileDialog.UI.cs +++ b/Dalamud/Interface/ImGuiFileDialog/FileDialog.UI.cs @@ -462,13 +462,13 @@ namespace Dalamud.Interface.ImGuiFileDialog if (this.pathInputActivated) { - if (ImGui.IsKeyReleased(ImGui.GetKeyIndex(ImGuiKey.Enter))) + if (ImGui.IsKeyReleased(ImGuiKey.Enter)) { if (Directory.Exists(this.pathInputBuffer)) this.SetPath(this.pathInputBuffer); this.pathInputActivated = false; } - if (ImGui.IsKeyReleased(ImGui.GetKeyIndex(ImGuiKey.Escape))) + if (ImGui.IsKeyReleased(ImGuiKey.Escape)) { this.pathInputActivated = false; } diff --git a/Dalamud/Interface/ImGuiHelpers.cs b/Dalamud/Interface/ImGuiHelpers.cs index c873210c1..d949a06ea 100644 --- a/Dalamud/Interface/ImGuiHelpers.cs +++ b/Dalamud/Interface/ImGuiHelpers.cs @@ -171,6 +171,7 @@ namespace Dalamud.Interface target.Value!.AddGlyph( target.Value!.ConfigData, (ushort)glyph->Codepoint, + 0, glyph->X0 * scale, ((glyph->Y0 - source.Value!.Ascent) * scale) + target.Value!.Ascent, glyph->X1 * scale, diff --git a/Dalamud/Interface/Internal/InterfaceManager.cs b/Dalamud/Interface/Internal/InterfaceManager.cs index 20bb86e3c..2869005da 100644 --- a/Dalamud/Interface/Internal/InterfaceManager.cs +++ b/Dalamud/Interface/Internal/InterfaceManager.cs @@ -884,7 +884,7 @@ namespace Dalamud.Interface.Internal if (Math.Abs(fontGamma - 1.0f) >= 0.001) { // Gamma correction (stbtt/FreeType would output in linear space whereas most real world usages will apply 1.4 or 1.8 gamma; Windows/XIV prebaked uses 1.4) - ioFonts.GetTexDataAsRGBA32(out byte* texPixels, out var texWidth, out var texHeight); + ioFonts.GetTexDataAsRGBA32(0, out byte* texPixels, out var texWidth, out var texHeight); for (int i = 3, i_ = texWidth * texHeight * 4; i < i_; i += 4) texPixels[i] = (byte)(Math.Pow(texPixels[i] / 255.0f, 1.0f / fontGamma) * 255.0f); } diff --git a/lib/ImGuiScene b/lib/ImGuiScene index 5da5fb742..d48cf7ffb 160000 --- a/lib/ImGuiScene +++ b/lib/ImGuiScene @@ -1 +1 @@ -Subproject commit 5da5fb742375aba55026f3beeef05dfe876a21bd +Subproject commit d48cf7ffbbb7c545a02e8dee7705d4f302217d81 From 40f20687be3d1384b05f73943a8cc6e78876492d Mon Sep 17 00:00:00 2001 From: liam Date: Thu, 30 Jun 2022 00:27:53 -0400 Subject: [PATCH 2/8] Update ImGuiScene --- lib/ImGuiScene | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ImGuiScene b/lib/ImGuiScene index d48cf7ffb..4a58aef66 160000 --- a/lib/ImGuiScene +++ b/lib/ImGuiScene @@ -1 +1 @@ -Subproject commit d48cf7ffbbb7c545a02e8dee7705d4f302217d81 +Subproject commit 4a58aef6683b12685ed064df286a6aa77fd04521 From 28ff6d9f00ec3de494954021325f69d8b3ebdea9 Mon Sep 17 00:00:00 2001 From: Soreepeong Date: Thu, 30 Jun 2022 23:16:17 +0900 Subject: [PATCH 3/8] wip --- Dalamud/EntryPoint.cs | 1 + .../Interface/GameFonts/GameFontManager.cs | 64 +++++++--- Dalamud/Interface/ImGuiHelpers.cs | 116 ++++++++++++++++-- .../Interface/Internal/InterfaceManager.cs | 14 +-- .../Internal/Windows/TitleScreenMenuWindow.cs | 2 - lib/ImGuiScene | 2 +- 6 files changed, 163 insertions(+), 36 deletions(-) diff --git a/Dalamud/EntryPoint.cs b/Dalamud/EntryPoint.cs index 029e8dd55..5fef315d5 100644 --- a/Dalamud/EntryPoint.cs +++ b/Dalamud/EntryPoint.cs @@ -10,6 +10,7 @@ using Dalamud.Configuration.Internal; using Dalamud.Logging.Internal; using Dalamud.Support; using Dalamud.Utility; +using ImGuiNET; using Newtonsoft.Json; using PInvoke; using Serilog; diff --git a/Dalamud/Interface/GameFonts/GameFontManager.cs b/Dalamud/Interface/GameFonts/GameFontManager.cs index ae44f4278..398785912 100644 --- a/Dalamud/Interface/GameFonts/GameFontManager.cs +++ b/Dalamud/Interface/GameFonts/GameFontManager.cs @@ -11,6 +11,7 @@ using Dalamud.Utility.Timing; using ImGuiNET; using Lumina.Data.Files; using Serilog; +using static Dalamud.Interface.ImGuiHelpers; namespace Dalamud.Interface.GameFonts { @@ -134,15 +135,18 @@ namespace Dalamud.Interface.GameFonts unsafe { var font = fontPtr.NativePtr; - for (int i = 0, i_ = font->IndexAdvanceX.Size; i < i_; ++i) - ((float*)font->IndexAdvanceX.Data)[i] /= fontScale; - font->FallbackAdvanceX /= fontScale; + for (int i = 0, i_ = font->IndexedHotData.Size; i < i_; ++i) + { + font->IndexedHotData.Ref(i).AdvanceX /= fontScale; + font->IndexedHotData.Ref(i).OccupiedWidth /= fontScale; + } + font->FontSize /= fontScale; font->Ascent /= fontScale; font->Descent /= fontScale; if (font->ConfigData != null) font->ConfigData->SizePixels /= fontScale; - var glyphs = (ImGuiHelpers.ImFontGlyphReal*)font->Glyphs.Data; + var glyphs = (ImFontGlyphReal*)font->Glyphs.Data; for (int i = 0, i_ = font->Glyphs.Size; i < i_; i++) { var glyph = &glyphs[i]; @@ -152,6 +156,11 @@ namespace Dalamud.Interface.GameFonts glyph->Y1 /= fontScale; glyph->AdvanceX /= fontScale; } + + for (int i = 0, i_ = font->KerningPairs.Size; i < i_; i++) + font->KerningPairs.Ref(i).AdvanceXAdjustment /= fontScale; + for (int i = 0, i_ = font->FrequentKerningPairs.Size; i < i_; i++) + font->FrequentKerningPairs.Ref(i) /= fontScale; } if (rebuildLookupTable) @@ -253,8 +262,11 @@ namespace Dalamud.Interface.GameFonts this.glyphRectIds.Clear(); this.fonts.Clear(); - foreach (var style in this.fontUseCounter.Keys) - this.EnsureFont(style); + lock (this.syncRoot) + { + foreach (var style in this.fontUseCounter.Keys) + this.EnsureFont(style); + } } /// @@ -279,10 +291,18 @@ namespace Dalamud.Interface.GameFonts { var interfaceManager = Service.Get(); var ioFonts = ImGui.GetIO().Fonts; - ioFonts.GetTexDataAsRGBA32(0, out byte* pixels8, out var width, out var height); - var pixels32 = (uint*)pixels8; var fontGamma = interfaceManager.FontGamma; + var pixels8s = new byte*[ioFonts.Textures.Size]; + var pixels32s = new uint*[ioFonts.Textures.Size]; + var widths = new int[ioFonts.Textures.Size]; + var heights = new int[ioFonts.Textures.Size]; + for (var i = 0; i < pixels8s.Length; i++) + { + ioFonts.GetTexDataAsRGBA32(i, out pixels8s[i], out widths[i], out heights[i]); + pixels32s[i] = (uint*)pixels8s[i]; + } + foreach (var (style, font) in this.fonts) { var fdt = this.fdts[(int)(this.isBuildingAsFallbackFontMode ? style.FamilyWithMinimumSize : style.FamilyAndSize)]; @@ -302,7 +322,10 @@ namespace Dalamud.Interface.GameFonts var glyph = font.FindGlyphNoFallback(fallbackCharCandidate); if ((IntPtr)glyph.NativePtr != IntPtr.Zero) { - font.SetFallbackChar(fallbackCharCandidate); + var ptr = font.NativePtr; + ptr->FallbackChar = fallbackCharCandidate; + ptr->FallbackGlyph = glyph.NativePtr; + ptr->FallbackHotData = (ImFontGlyphHotData*)ptr->IndexedHotData.Address(fallbackCharCandidate); break; } } @@ -323,7 +346,11 @@ namespace Dalamud.Interface.GameFonts foreach (var (c, (rectId, glyph)) in this.glyphRectIds[style]) { - var rc = ioFonts.GetCustomRectByIndex(rectId); + var rc = (ImFontAtlasCustomRectReal*)ioFonts.GetCustomRectByIndex(rectId).NativePtr; + var pixels8 = pixels8s[rc->TextureIndex]; + var pixels32 = pixels32s[rc->TextureIndex]; + var width = widths[rc->TextureIndex]; + var height = heights[rc->TextureIndex]; var sourceBuffer = this.texturePixels[glyph.TextureFileIndex]; var sourceBufferDelta = glyph.TextureChannelByteIndex; var widthAdjustment = style.CalculateBaseWidthAdjustment(fdt, glyph); @@ -334,7 +361,7 @@ namespace Dalamud.Interface.GameFonts for (var x = 0; x < glyph.BoundingWidth; x++) { var a = sourceBuffer[sourceBufferDelta + (4 * (((glyph.TextureOffsetY + y) * fdt.FontHeader.TextureWidth) + glyph.TextureOffsetX + x))]; - pixels32[((rc.Y + y) * width) + rc.X + x] = (uint)(a << 24) | 0xFFFFFFu; + pixels32[((rc->Y + y) * width) + rc->X + x] = (uint)(a << 24) | 0xFFFFFFu; } } } @@ -343,7 +370,7 @@ namespace Dalamud.Interface.GameFonts for (var y = 0; y < glyph.BoundingHeight; y++) { for (var x = 0; x < glyph.BoundingWidth + widthAdjustment; x++) - pixels32[((rc.Y + y) * width) + rc.X + x] = 0xFFFFFFu; + pixels32[((rc->Y + y) * width) + rc->X + x] = 0xFFFFFFu; } for (int xbold = 0, xbold_ = Math.Max(1, (int)Math.Ceiling(style.Weight + 1)); xbold < xbold_; xbold++) @@ -364,7 +391,7 @@ namespace Dalamud.Interface.GameFonts var a1 = sourceBuffer[sourceBufferDelta + (4 * sourcePixelIndex)]; var a2 = x == glyph.BoundingWidth - 1 ? 0 : sourceBuffer[sourceBufferDelta + (4 * (sourcePixelIndex + 1))]; var n = (a1 * xness) + (a2 * (1 - xness)); - var targetOffset = ((rc.Y + y) * width) + rc.X + x + xDeltaInt; + var targetOffset = ((rc->Y + y) * width) + rc->X + x + xDeltaInt; pixels8[(targetOffset * 4) + 3] = Math.Max(pixels8[(targetOffset * 4) + 3], (byte)(boldStrength * n)); } } @@ -374,9 +401,9 @@ namespace Dalamud.Interface.GameFonts if (Math.Abs(fontGamma - 1.4f) >= 0.001) { // Gamma correction (stbtt/FreeType would output in linear space whereas most real world usages will apply 1.4 or 1.8 gamma; Windows/XIV prebaked uses 1.4) - for (int y = rc.Y, y_ = rc.Y + rc.Height; y < y_; y++) + for (int y = rc->Y, y_ = rc->Y + rc->Height; y < y_; y++) { - for (int x = rc.X, x_ = rc.X + rc.Width; x < x_; x++) + for (int x = rc->X, x_ = rc->X + rc->Width; x < x_; x++) { var i = (((y * width) + x) * 4) + 3; pixels8[i] = (byte)(Math.Pow(pixels8[i] / 255.0f, 1.4f / fontGamma) * 255.0f); @@ -435,12 +462,15 @@ namespace Dalamud.Interface.GameFonts io.Fonts.AddCustomRectFontGlyph( font, c, - glyph.BoundingWidth + widthAdjustment + 1, - glyph.BoundingHeight + 1, + glyph.BoundingWidth + widthAdjustment, + glyph.BoundingHeight, glyph.AdvanceWidth, new Vector2(0, glyph.CurrentOffsetY)), glyph); } + + foreach (var kernPair in fdt.Distances) + font.AddKerningPair(kernPair.Left, kernPair.Right, kernPair.RightOffset); } } } diff --git a/Dalamud/Interface/ImGuiHelpers.cs b/Dalamud/Interface/ImGuiHelpers.cs index d949a06ea..324a45323 100644 --- a/Dalamud/Interface/ImGuiHelpers.cs +++ b/Dalamud/Interface/ImGuiHelpers.cs @@ -154,6 +154,7 @@ namespace Dalamud.Interface return; var scale = target.Value!.FontSize / source.Value!.FontSize; + var addedCodepoints = new HashSet(); unsafe { var glyphs = (ImFontGlyphReal*)source.Value!.Glyphs.Data; @@ -168,10 +169,11 @@ namespace Dalamud.Interface var prevGlyphPtr = (ImFontGlyphReal*)target.Value!.FindGlyphNoFallback((ushort)glyph->Codepoint).NativePtr; if ((IntPtr)prevGlyphPtr == IntPtr.Zero) { + addedCodepoints.Add(glyph->Codepoint); target.Value!.AddGlyph( target.Value!.ConfigData, (ushort)glyph->Codepoint, - 0, + glyph->TextureIndex, glyph->X0 * scale, ((glyph->Y0 - source.Value!.Ascent) * scale) + target.Value!.Ascent, glyph->X1 * scale, @@ -184,6 +186,7 @@ namespace Dalamud.Interface } else if (!missingOnly) { + addedCodepoints.Add(glyph->Codepoint); prevGlyphPtr->X0 = glyph->X0 * scale; prevGlyphPtr->Y0 = ((glyph->Y0 - source.Value!.Ascent) * scale) + target.Value!.Ascent; prevGlyphPtr->X1 = glyph->X1 * scale; @@ -195,6 +198,16 @@ namespace Dalamud.Interface prevGlyphPtr->AdvanceX = glyph->AdvanceX * scale; } } + + var kernPairs = source.Value!.KerningPairs; + for (int j = 0, k = kernPairs.Size; j < k; j++) + { + if (!addedCodepoints.Contains(kernPairs[j].Left)) + continue; + if (!addedCodepoints.Contains(kernPairs[j].Right)) + continue; + target.Value.AddKerningPair(kernPairs[j].Left, kernPairs[j].Right, kernPairs[j].AdvanceXAdjustment); + } } if (rebuildLookupTable) @@ -215,7 +228,7 @@ namespace Dalamud.Interface [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:Elements should be documented", Justification = "ImGui internals")] public struct ImFontGlyphReal { - public uint ColoredVisibleCodepoint; + public uint ColoredVisibleTextureIndexCodepoint; public float AdvanceX; public float X0; public float Y0; @@ -226,23 +239,110 @@ namespace Dalamud.Interface public float U1; public float V1; + private const uint ColoredMask /*****/ = 0b_00000000_00000000_00000000_00000001u; + private const uint VisibleMask /*****/ = 0b_00000000_00000000_00000000_00000010u; + private const uint TextureMask /*****/ = 0b_00000000_00000000_00000111_11111100u; + private const uint CodepointMask /***/ = 0b_11111111_11111111_11111000_00000000u; + + private const int ColoredShift = 0; + private const int VisibleShift = 1; + private const int TextureShift = 2; + private const int CodepointShift = 11; + public bool Colored { - get => ((this.ColoredVisibleCodepoint >> 0) & 1) != 0; - set => this.ColoredVisibleCodepoint = (this.ColoredVisibleCodepoint & 0xFFFFFFFEu) | (value ? 1u : 0u); + get => (int)((this.ColoredVisibleTextureIndexCodepoint & ColoredMask) >> ColoredShift) != 0; + set => this.ColoredVisibleTextureIndexCodepoint = (this.ColoredVisibleTextureIndexCodepoint & ~ColoredMask) | (value ? 1u << ColoredShift : 0u); } public bool Visible { - get => ((this.ColoredVisibleCodepoint >> 1) & 1) != 0; - set => this.ColoredVisibleCodepoint = (this.ColoredVisibleCodepoint & 0xFFFFFFFDu) | (value ? 2u : 0u); + get => (int)((this.ColoredVisibleTextureIndexCodepoint & VisibleMask) >> VisibleShift) != 0; + set => this.ColoredVisibleTextureIndexCodepoint = (this.ColoredVisibleTextureIndexCodepoint & ~VisibleMask) | (value ? 1u << VisibleShift : 0u); + } + + public int TextureIndex + { + get => (int)(this.ColoredVisibleTextureIndexCodepoint & TextureMask) >> TextureShift; + set => this.ColoredVisibleTextureIndexCodepoint = (this.ColoredVisibleTextureIndexCodepoint & ~TextureMask) | ((uint)value << TextureShift); } public int Codepoint { - get => (int)(this.ColoredVisibleCodepoint >> 2); - set => this.ColoredVisibleCodepoint = (this.ColoredVisibleCodepoint & 3u) | ((uint)value << 2); + get => (int)(this.ColoredVisibleTextureIndexCodepoint & CodepointMask) >> CodepointShift; + set => this.ColoredVisibleTextureIndexCodepoint = (this.ColoredVisibleTextureIndexCodepoint & ~CodepointMask) | ((uint)value << CodepointShift); } } + + /// + /// ImFontGlyphHotData the correct version. + /// + [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:Elements should be documented", Justification = "ImGui internals")] + public struct ImFontGlyphHotDataReal + { + public float AdvanceX; + public float OccupiedWidth; + public uint KerningPairInfo; + + private const uint UseBisectMask /***/ = 0b_00000000_00000000_00000000_00000001u; + private const uint OffsetMask /******/ = 0b_00000000_00001111_11111111_11111110u; + private const uint CountMask /*******/ = 0b_11111111_11110000_00000111_11111100u; + + private const int UseBisectShift = 0; + private const int OffsetShift = 1; + private const int CountShift = 20; + + public bool UseBisect + { + get => (int)((this.KerningPairInfo & UseBisectMask) >> UseBisectShift) != 0; + set => this.KerningPairInfo = (this.KerningPairInfo & ~UseBisectMask) | (value ? 1u << UseBisectShift : 0u); + } + + public bool Offset + { + get => (int)((this.KerningPairInfo & OffsetMask) >> OffsetShift) != 0; + set => this.KerningPairInfo = (this.KerningPairInfo & ~OffsetMask) | (value ? 1u << OffsetShift : 0u); + } + + public int Count + { + get => (int)(this.KerningPairInfo & CountMask) >> CountShift; + set => this.KerningPairInfo = (this.KerningPairInfo & ~CountMask) | ((uint)value << CountShift); + } + } + + /// + /// ImFontAtlasCustomRect the correct version. + /// + [SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:Elements should be documented", Justification = "ImGui internals")] + public unsafe struct ImFontAtlasCustomRectReal + { + public ushort Width; + public ushort Height; + public ushort X; + public ushort Y; + public uint TextureIndexAndGlyphID; + public float GlyphAdvanceX; + public Vector2 GlyphOffset; + public ImFont* Font; + + private const uint TextureIndexMask /***/ = 0b_00000000_00000000_00000111_11111100u; + private const uint GlyphIDMask /********/ = 0b_11111111_11111111_11111000_00000000u; + + private const int TextureIndexShift = 2; + private const int GlyphIDShift = 11; + + public int TextureIndex + { + get => (int)(this.TextureIndexAndGlyphID & TextureIndexMask) >> TextureIndexShift; + set => this.TextureIndexAndGlyphID = (this.TextureIndexAndGlyphID & ~TextureIndexMask) | ((uint)value << TextureIndexShift); + } + + public int GlyphID + { + get => (int)(this.TextureIndexAndGlyphID & GlyphIDMask) >> GlyphIDShift; + set => this.TextureIndexAndGlyphID = (this.TextureIndexAndGlyphID & ~GlyphIDMask) | ((uint)value << GlyphIDShift); + } + }; } } diff --git a/Dalamud/Interface/Internal/InterfaceManager.cs b/Dalamud/Interface/Internal/InterfaceManager.cs index 2869005da..924584b70 100644 --- a/Dalamud/Interface/Internal/InterfaceManager.cs +++ b/Dalamud/Interface/Internal/InterfaceManager.cs @@ -848,6 +848,12 @@ namespace Dalamud.Interface.Internal } } + for (int i = 0, i_ = ioFonts.ConfigData.Size; i < i_; i++) + { + var config = ioFonts.ConfigData[i]; + config.RasterizerGamma = config.RasterizerGamma * fontGamma; + } + Log.Verbose("[FONT] ImGui.IO.Build will be called."); ioFonts.Build(); gameFontManager.AfterIoFontsBuild(); @@ -881,14 +887,6 @@ namespace Dalamud.Interface.Internal if (!disableBigFonts) this.IsFallbackFontMode = false; - if (Math.Abs(fontGamma - 1.0f) >= 0.001) - { - // Gamma correction (stbtt/FreeType would output in linear space whereas most real world usages will apply 1.4 or 1.8 gamma; Windows/XIV prebaked uses 1.4) - ioFonts.GetTexDataAsRGBA32(0, out byte* texPixels, out var texWidth, out var texHeight); - for (int i = 3, i_ = texWidth * texHeight * 4; i < i_; i += 4) - texPixels[i] = (byte)(Math.Pow(texPixels[i] / 255.0f, 1.0f / fontGamma) * 255.0f); - } - gameFontManager.AfterBuildFonts(); foreach (var (font, mod) in this.loadedFontInfo) diff --git a/Dalamud/Interface/Internal/Windows/TitleScreenMenuWindow.cs b/Dalamud/Interface/Internal/Windows/TitleScreenMenuWindow.cs index 628f52f2f..78581e624 100644 --- a/Dalamud/Interface/Internal/Windows/TitleScreenMenuWindow.cs +++ b/Dalamud/Interface/Internal/Windows/TitleScreenMenuWindow.cs @@ -142,7 +142,6 @@ namespace Dalamud.Interface.Internal.Windows } if (!ImGui.IsWindowHovered(ImGuiHoveredFlags.RootAndChildWindows | - ImGuiHoveredFlags.AllowWhenOverlapped | ImGuiHoveredFlags.AllowWhenBlockedByActiveItem)) { this.state = State.FadeOut; @@ -188,7 +187,6 @@ namespace Dalamud.Interface.Internal.Windows ImGui.PopStyleVar(); var isHover = ImGui.IsWindowHovered(ImGuiHoveredFlags.RootAndChildWindows | - ImGuiHoveredFlags.AllowWhenOverlapped | ImGuiHoveredFlags.AllowWhenBlockedByActiveItem); if (!isHover && this.fadeOutEasing!.IsDone) diff --git a/lib/ImGuiScene b/lib/ImGuiScene index 4a58aef66..cd6300cd7 160000 --- a/lib/ImGuiScene +++ b/lib/ImGuiScene @@ -1 +1 @@ -Subproject commit 4a58aef6683b12685ed064df286a6aa77fd04521 +Subproject commit cd6300cd7944b24643ed7381fbe5ae15efc10448 From b6747827f4706f69eaebdd1084597af0ff2491cc Mon Sep 17 00:00:00 2001 From: Soreepeong Date: Fri, 1 Jul 2022 01:07:07 +0900 Subject: [PATCH 4/8] fix --- Dalamud/Interface/ImGuiHelpers.cs | 1 + lib/ImGuiScene | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Dalamud/Interface/ImGuiHelpers.cs b/Dalamud/Interface/ImGuiHelpers.cs index 324a45323..3e39e9429 100644 --- a/Dalamud/Interface/ImGuiHelpers.cs +++ b/Dalamud/Interface/ImGuiHelpers.cs @@ -187,6 +187,7 @@ namespace Dalamud.Interface else if (!missingOnly) { addedCodepoints.Add(glyph->Codepoint); + prevGlyphPtr->TextureIndex = glyph->TextureIndex; prevGlyphPtr->X0 = glyph->X0 * scale; prevGlyphPtr->Y0 = ((glyph->Y0 - source.Value!.Ascent) * scale) + target.Value!.Ascent; prevGlyphPtr->X1 = glyph->X1 * scale; diff --git a/lib/ImGuiScene b/lib/ImGuiScene index cd6300cd7..65c26d024 160000 --- a/lib/ImGuiScene +++ b/lib/ImGuiScene @@ -1 +1 @@ -Subproject commit cd6300cd7944b24643ed7381fbe5ae15efc10448 +Subproject commit 65c26d024c814fda8154022e615073210bb62b3b From c6174233b39f6fb621d469c9a8d166369faae2e0 Mon Sep 17 00:00:00 2001 From: Soreepeong Date: Fri, 1 Jul 2022 01:21:55 +0900 Subject: [PATCH 5/8] Remove fallback font bs --- .../Internal/DalamudConfiguration.cs | 11 -- .../Interface/GameFonts/GameFontManager.cs | 9 +- .../Interface/Internal/DalamudInterface.cs | 8 -- .../Interface/Internal/InterfaceManager.cs | 134 ++---------------- .../Windows/FallbackFontNoticeWindow.cs | 95 ------------- .../Internal/Windows/SettingsWindow.cs | 49 ------- 6 files changed, 18 insertions(+), 288 deletions(-) delete mode 100644 Dalamud/Interface/Internal/Windows/FallbackFontNoticeWindow.cs diff --git a/Dalamud/Configuration/Internal/DalamudConfiguration.cs b/Dalamud/Configuration/Internal/DalamudConfiguration.cs index ccbfc17dc..0af3b5ebf 100644 --- a/Dalamud/Configuration/Internal/DalamudConfiguration.cs +++ b/Dalamud/Configuration/Internal/DalamudConfiguration.cs @@ -144,17 +144,6 @@ namespace Dalamud.Configuration.Internal /// public float FontGammaLevel { get; set; } = 1.4f; - /// - /// Gets or sets a value indicating the level of font resolution between 1 to 5. - /// 0(1024x1024), 1(2048x2048), 2(4096x4096), 3(8192x8192), 4(16384x16384). - /// - public int FontResolutionLevel { get; set; } = 2; - - /// - /// Gets or sets a value indicating whether to disable font fallback notice. - /// - public bool DisableFontFallbackNotice { get; set; } = false; - /// /// Gets or sets a value indicating whether or not plugin UI should be hidden. /// diff --git a/Dalamud/Interface/GameFonts/GameFontManager.cs b/Dalamud/Interface/GameFonts/GameFontManager.cs index 398785912..fa1098be7 100644 --- a/Dalamud/Interface/GameFonts/GameFontManager.cs +++ b/Dalamud/Interface/GameFonts/GameFontManager.cs @@ -40,7 +40,6 @@ namespace Dalamud.Interface.GameFonts private readonly Dictionary>> glyphRectIds = new(); private bool isBetweenBuildFontsAndRightAfterImGuiIoFontsBuild = false; - private bool isBuildingAsFallbackFontMode = false; [ServiceManager.ServiceConstructor] private GameFontManager(DataManager dataManager) @@ -253,10 +252,8 @@ namespace Dalamud.Interface.GameFonts /// /// Build fonts before plugins do something more. To be called from InterfaceManager. /// - /// Whether to load fonts in minimum sizes. - public void BuildFonts(bool forceMinSize) + public void BuildFonts() { - this.isBuildingAsFallbackFontMode = forceMinSize; this.isBetweenBuildFontsAndRightAfterImGuiIoFontsBuild = true; this.glyphRectIds.Clear(); @@ -305,7 +302,7 @@ namespace Dalamud.Interface.GameFonts foreach (var (style, font) in this.fonts) { - var fdt = this.fdts[(int)(this.isBuildingAsFallbackFontMode ? style.FamilyWithMinimumSize : style.FamilyAndSize)]; + var fdt = this.fdts[(int)style.FamilyAndSize]; var scale = style.SizePt / fdt.FontHeader.Size; var fontPtr = font.NativePtr; @@ -436,7 +433,7 @@ namespace Dalamud.Interface.GameFonts { var rectIds = this.glyphRectIds[style] = new(); - var fdt = this.fdts[(int)(this.isBuildingAsFallbackFontMode ? style.FamilyWithMinimumSize : style.FamilyAndSize)]; + var fdt = this.fdts[(int)style.FamilyAndSize]; if (fdt == null) return; diff --git a/Dalamud/Interface/Internal/DalamudInterface.cs b/Dalamud/Interface/Internal/DalamudInterface.cs index 5a6bae722..c9e13b8b5 100644 --- a/Dalamud/Interface/Internal/DalamudInterface.cs +++ b/Dalamud/Interface/Internal/DalamudInterface.cs @@ -54,7 +54,6 @@ namespace Dalamud.Interface.Internal private readonly SelfTestWindow selfTestWindow; private readonly StyleEditorWindow styleEditorWindow; private readonly TitleScreenMenuWindow titleScreenMenuWindow; - private readonly FallbackFontNoticeWindow fallbackFontNoticeWindow; private readonly ProfilerWindow profilerWindow; private readonly TextureWrap logoTexture; @@ -98,7 +97,6 @@ namespace Dalamud.Interface.Internal this.selfTestWindow = new SelfTestWindow() { IsOpen = false }; this.styleEditorWindow = new StyleEditorWindow() { IsOpen = false }; this.titleScreenMenuWindow = new TitleScreenMenuWindow() { IsOpen = false }; - this.fallbackFontNoticeWindow = new FallbackFontNoticeWindow() { IsOpen = interfaceManager.IsFallbackFontMode && !configuration.DisableFontFallbackNotice }; this.profilerWindow = new ProfilerWindow() { IsOpen = false }; this.WindowSystem.AddWindow(this.changelogWindow); @@ -115,7 +113,6 @@ namespace Dalamud.Interface.Internal this.WindowSystem.AddWindow(this.selfTestWindow); this.WindowSystem.AddWindow(this.styleEditorWindow); this.WindowSystem.AddWindow(this.titleScreenMenuWindow); - this.WindowSystem.AddWindow(this.fallbackFontNoticeWindow); this.WindowSystem.AddWindow(this.profilerWindow); ImGuiManagedAsserts.AssertsEnabled = configuration.AssertsEnabledAtStartup; @@ -222,11 +219,6 @@ namespace Dalamud.Interface.Internal /// public void OpenDevMenu() => this.isImGuiDrawDevMenu = true; - /// - /// Opens the fallback font notice window. - /// - public void OpenFallbackFontNoticeWindow() => this.fallbackFontNoticeWindow.IsOpen = true; - /// /// Opens the . /// diff --git a/Dalamud/Interface/Internal/InterfaceManager.cs b/Dalamud/Interface/Internal/InterfaceManager.cs index 924584b70..3f7ce9a4a 100644 --- a/Dalamud/Interface/Internal/InterfaceManager.cs +++ b/Dalamud/Interface/Internal/InterfaceManager.cs @@ -47,8 +47,6 @@ namespace Dalamud.Interface.Internal [ServiceManager.BlockingEarlyLoadedService] internal class InterfaceManager : IDisposable, IServiceType { - private const float MinimumFallbackFontSizePt = 9.6f; // Game's minimum AXIS font size - private const float MinimumFallbackFontSizePx = MinimumFallbackFontSizePt * 4.0f / 3.0f; private const float DefaultFontSizePt = 12.0f; private const float DefaultFontSizePx = DefaultFontSizePt * 4.0f / 3.0f; private const ushort Fallback1Codepoint = 0x3013; // Geta mark; FFXIV uses this to indicate that a glyph is missing. @@ -72,7 +70,6 @@ namespace Dalamud.Interface.Internal // can't access imgui IO before first present call private bool lastWantCapture = false; private bool isRebuildingFonts = false; - private bool isFallbackFontMode = false; private bool isOverrideGameCursor = true; [ServiceManager.ServiceConstructor] @@ -120,11 +117,6 @@ namespace Dalamud.Interface.Internal /// public event Action AfterBuildFonts; - /// - /// Gets or sets an action that is executed right after font fallback mode has been changed. - /// - public event Action FallbackFontModeChange; - /// /// Gets the default ImGui font. /// @@ -184,22 +176,6 @@ namespace Dalamud.Interface.Internal /// public bool IsDispatchingEvents { get; set; } = true; - /// - /// Gets or sets a value indicating whether the font has been loaded in fallback mode. - /// - public bool IsFallbackFontMode - { - get => this.isFallbackFontMode; - internal set - { - if (value == this.isFallbackFontMode) - return; - - this.isFallbackFontMode = value; - this.FallbackFontModeChange?.Invoke(value); - } - } - /// /// Gets or sets a value indicating whether to override configuration for UseAxis. /// @@ -220,16 +196,6 @@ namespace Dalamud.Interface.Internal /// public float FontGamma => Math.Max(0.1f, this.FontGammaOverride.GetValueOrDefault(Service.Get().FontGammaLevel)); - /// - /// Gets or sets a value indicating whether to override configuration for FontResolutionLevel. - /// - public int? FontResolutionLevelOverride { get; set; } = null; - - /// - /// Gets a value indicating the level of font resolution. - /// - public int FontResolutionLevel => this.FontResolutionLevelOverride ?? Service.Get().FontResolutionLevel; - /// /// Gets a value indicating whether we're building fonts but haven't generated atlas yet. /// @@ -599,8 +565,7 @@ namespace Dalamud.Interface.Internal /// /// Loads font for use in ImGui text functions. /// - /// If set, then glyphs will be loaded in smaller resolution to make all glyphs fit into given constraints. - private unsafe void SetupFonts(bool disableBigFonts = false) + private unsafe void SetupFonts() { using var setupFontsTimings = Timings.Start("IM SetupFonts"); @@ -609,12 +574,11 @@ namespace Dalamud.Interface.Internal var io = ImGui.GetIO(); var ioFonts = io.Fonts; - var maxTexDimension = 1 << (10 + Math.Max(0, Math.Min(4, this.FontResolutionLevel))); var fontGamma = this.FontGamma; this.fontBuildSignal.Reset(); ioFonts.Clear(); - ioFonts.TexDesiredWidth = maxTexDimension; + ioFonts.TexDesiredWidth = 4096; Log.Verbose("[FONT] SetupFonts - 1"); @@ -657,10 +621,9 @@ namespace Dalamud.Interface.Internal "Default", this.UseAxis ? TargetFontModification.AxisMode.Overwrite : TargetFontModification.AxisMode.GameGlyphsOnly, this.UseAxis ? DefaultFontSizePx : DefaultFontSizePx + 1, - io.FontGlobalScale, - disableBigFonts); + io.FontGlobalScale); Log.Verbose("[FONT] SetupFonts - Default corresponding AXIS size: {0}pt ({1}px)", fontInfo.SourceAxis.Style.BaseSizePt, fontInfo.SourceAxis.Style.BaseSizePx); - fontConfig.SizePixels = disableBigFonts ? Math.Min(MinimumFallbackFontSizePx, fontInfo.TargetSizePx) : fontInfo.TargetSizePx * io.FontGlobalScale; + fontConfig.SizePixels = fontInfo.TargetSizePx * io.FontGlobalScale; if (this.UseAxis) { fontConfig.GlyphRanges = dummyRangeHandle.AddrOfPinnedObject(); @@ -700,8 +663,8 @@ namespace Dalamud.Interface.Internal fontConfig.GlyphRanges = iconRangeHandle.AddrOfPinnedObject(); fontConfig.PixelSnapH = true; - IconFont = ioFonts.AddFontFromFileTTF(fontPathIcon, disableBigFonts ? Math.Min(MinimumFallbackFontSizePx, DefaultFontSizePx) : DefaultFontSizePx * io.FontGlobalScale, fontConfig); - this.loadedFontInfo[IconFont] = new("Icon", TargetFontModification.AxisMode.GameGlyphsOnly, DefaultFontSizePx, io.FontGlobalScale, disableBigFonts); + IconFont = ioFonts.AddFontFromFileTTF(fontPathIcon, DefaultFontSizePx * io.FontGlobalScale, fontConfig); + this.loadedFontInfo[IconFont] = new("Icon", TargetFontModification.AxisMode.GameGlyphsOnly, DefaultFontSizePx, io.FontGlobalScale); } // Monospace font @@ -713,8 +676,8 @@ namespace Dalamud.Interface.Internal fontConfig.GlyphRanges = IntPtr.Zero; fontConfig.PixelSnapH = true; - MonoFont = ioFonts.AddFontFromFileTTF(fontPathMono, disableBigFonts ? Math.Min(MinimumFallbackFontSizePx, DefaultFontSizePx) : DefaultFontSizePx * io.FontGlobalScale, fontConfig); - this.loadedFontInfo[MonoFont] = new("Mono", TargetFontModification.AxisMode.GameGlyphsOnly, DefaultFontSizePx, io.FontGlobalScale, disableBigFonts); + MonoFont = ioFonts.AddFontFromFileTTF(fontPathMono, DefaultFontSizePx * io.FontGlobalScale, fontConfig); + this.loadedFontInfo[MonoFont] = new("Mono", TargetFontModification.AxisMode.GameGlyphsOnly, DefaultFontSizePx, io.FontGlobalScale); } // Default font but in requested size for requested glyphs @@ -766,8 +729,7 @@ namespace Dalamud.Interface.Internal $"Requested({fontSize}px)", this.UseAxis ? TargetFontModification.AxisMode.Overwrite : TargetFontModification.AxisMode.GameGlyphsOnly, fontSize, - io.FontGlobalScale, - disableBigFonts); + io.FontGlobalScale); if (this.UseAxis) { fontConfig.GlyphRanges = dummyRangeHandle.AddrOfPinnedObject(); @@ -785,7 +747,7 @@ namespace Dalamud.Interface.Internal garbageList.Add(rangeHandle); fontConfig.PixelSnapH = true; - var sizedFont = ioFonts.AddFontFromFileTTF(fontPathJp, disableBigFonts ? Math.Min(MinimumFallbackFontSizePx, fontSize) : fontSize * io.FontGlobalScale, fontConfig, rangeHandle.AddrOfPinnedObject()); + var sizedFont = ioFonts.AddFontFromFileTTF(fontPathJp, fontSize * io.FontGlobalScale, fontConfig, rangeHandle.AddrOfPinnedObject()); this.loadedFontInfo[sizedFont] = fontInfo; foreach (var request in requests) request.FontInternal = sizedFont; @@ -793,7 +755,7 @@ namespace Dalamud.Interface.Internal } } - gameFontManager.BuildFonts(disableBigFonts); + gameFontManager.BuildFonts(); var customFontFirstConfigIndex = ioFonts.ConfigData.Size; @@ -835,17 +797,7 @@ namespace Dalamud.Interface.Internal this.loadedFontInfo[config.DstFont.NativePtr] = new($"PlReq({name})", config.SizePixels); } - if (disableBigFonts) - { - // If a plugin has requested a font size that is bigger than current restrictions, load it scaled down. - // After loading glyphs onto font atlas, font information will be modified to make it look like the font of original size has been loaded. - if (config.SizePixels > MinimumFallbackFontSizePx) - config.SizePixels = MinimumFallbackFontSizePx; - } - else - { - config.SizePixels = config.SizePixels * io.FontGlobalScale; - } + config.SizePixels = config.SizePixels * io.FontGlobalScale; } for (int i = 0, i_ = ioFonts.ConfigData.Size; i < i_; i++) @@ -859,34 +811,6 @@ namespace Dalamud.Interface.Internal gameFontManager.AfterIoFontsBuild(); Log.Verbose("[FONT] ImGui.IO.Build OK!"); - if (ioFonts.TexHeight > maxTexDimension) - { - var possibilityForScaling = false; - foreach (var x in this.loadedFontInfo.Values) - { - if (x.TargetSizePx * x.Scale > MinimumFallbackFontSizePx) - { - possibilityForScaling = true; - break; - } - } - - if (possibilityForScaling && !disableBigFonts) - { - Log.Information("[FONT] Atlas size is {0}x{1} which is bigger than allowed {2}x{3}. Retrying with minimized font sizes.", ioFonts.TexWidth, ioFonts.TexHeight, maxTexDimension, maxTexDimension); - this.IsFallbackFontMode = true; - this.SetupFonts(true); - return; - } - else - { - Log.Warning("[FONT] Atlas size is {0}x{1} which is bigger than allowed {2}x{3} even when font sizes are minimized up to {4}px. This may result in crash.", ioFonts.TexWidth, ioFonts.TexHeight, maxTexDimension, maxTexDimension, MinimumFallbackFontSizePx); - } - } - - if (!disableBigFonts) - this.IsFallbackFontMode = false; - gameFontManager.AfterBuildFonts(); foreach (var (font, mod) in this.loadedFontInfo) @@ -1004,34 +928,7 @@ namespace Dalamud.Interface.Internal this.scene!.OnNewRenderFrame -= this.RebuildFontsInternal; Log.Verbose("[FONT] Calling InvalidateFonts"); - try - { - this.scene.InvalidateFonts(); - } - catch (Exception ex) - { - if (this.FontResolutionLevel > 2) - { - Log.Error(ex, "[FONT] Failed to create font textures; setting font resolution level to 2 and retrying"); - this.FontResolutionLevelOverride = 2; - this.SetupFonts(); - } - else - { - Log.Error(ex, "[FONT] Failed to create font textures; forcing fallback font mode"); - this.SetupFonts(true); - } - - Log.Verbose("[FONT] Calling InvalidateFonts again"); - try - { - this.scene.InvalidateFonts(); - } - catch (Exception ex2) - { - Log.Error(ex2, "[FONT] Giving up"); - } - } + this.scene.InvalidateFonts(); Log.Verbose("[FONT] Font Rebuild OK!"); @@ -1279,13 +1176,12 @@ namespace Dalamud.Interface.Internal /// Whether and how to use AXIS fonts. /// Target font size in pixels, which will not be considered for further scaling. /// Font scale to be referred for loading AXIS font of appropriate size. - /// Whether to enable loading big AXIS fonts. - internal TargetFontModification(string name, AxisMode axis, float sizePx, float globalFontScale, bool disableBigFonts) + internal TargetFontModification(string name, AxisMode axis, float sizePx, float globalFontScale) { this.Name = name; this.Axis = axis; this.TargetSizePx = sizePx; - this.Scale = disableBigFonts ? MinimumFallbackFontSizePx / sizePx : globalFontScale; + this.Scale = globalFontScale; this.SourceAxis = Service.Get().NewFontRef(new(GameFontFamily.Axis, this.TargetSizePx * this.Scale)); } diff --git a/Dalamud/Interface/Internal/Windows/FallbackFontNoticeWindow.cs b/Dalamud/Interface/Internal/Windows/FallbackFontNoticeWindow.cs deleted file mode 100644 index fc83f2138..000000000 --- a/Dalamud/Interface/Internal/Windows/FallbackFontNoticeWindow.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System; -using System.Numerics; - -using CheapLoc; -using Dalamud.Configuration.Internal; -using Dalamud.Interface.Windowing; -using ImGuiNET; -using Serilog; - -namespace Dalamud.Interface.Internal.Windows -{ - /// - /// For major updates, an in-game Changelog window. - /// - internal sealed class FallbackFontNoticeWindow : Window, IDisposable - { - /// - /// Initializes a new instance of the class. - /// - public FallbackFontNoticeWindow() - : base(Title, ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoFocusOnAppearing | ImGuiWindowFlags.NoNavFocus) - { - this.Namespace = "FallbackFontNoticeWindow"; - this.RespectCloseHotkey = false; - - this.Size = new Vector2(885, 463); - this.SizeCondition = ImGuiCond.Appearing; - - var interfaceManager = Service.Get(); - var dalamud = Service.Get(); - - Service.Get().FallbackFontModeChange += this.OnFallbackFontModeChange; - } - - private static string Title => Loc.Localize("FallbackFontNoticeWindowTitle", "Fallback Font Mode Active"); - - /// - public override void Draw() - { - ImGui.Text(Title); - ImGuiHelpers.ScaledDummy(10); - - ImGui.Text(Loc.Localize("FallbackFontNoticeWindowBody", "The text used by Dalamud and plugins has been made blurry in order to prevent possible crash.")); - ImGuiHelpers.ScaledDummy(10); - - ImGui.Text(Loc.Localize("FallbackFontNoticeWindowSolution1", "* You may attempt to increase the limits on text quality. This may result in a crash.")); - ImGuiHelpers.ScaledDummy(10); - ImGui.SameLine(); - if (ImGui.Button(Loc.Localize("FallbackFontNoticeWindowOpenDalamudSettings", "Open Dalamud Settings"))) - Service.Get().OpenSettings(); - ImGuiHelpers.ScaledDummy(10); - ImGui.SameLine(); - ImGui.Text(string.Format( - Loc.Localize( - "FallbackFontNoticeWindowSolution1Instructions", - "In \"{0}\" tab, choose a better option for \"{1}\"."), - Loc.Localize("DalamudSettingsVisual", "Look & Feel"), - Loc.Localize("DalamudSettingsFontResolutionLevel", "Font resolution level"))); - - ImGuiHelpers.ScaledDummy(10); - - ImGui.Text(Loc.Localize("FallbackFontNoticeWindowSolution2", "* You may disable custom fonts, or make fonts smaller, from individual plugin settings.")); - ImGuiHelpers.ScaledDummy(10); - ImGui.SameLine(); - if (ImGui.Button(Loc.Localize("FallbackFontNoticeWindowOpenDalamudPlugins", "Open Plugin Installer"))) - Service.Get().OpenPluginInstaller(); - - ImGuiHelpers.ScaledDummy(10); - - if (ImGui.Button(Loc.Localize("FallbackFontNoticeWindowDoNotShowAgain", "Do not show again"))) - { - this.IsOpen = false; - Service.Get().DisableFontFallbackNotice = true; - Service.Get().Save(); - } - } - - /// - /// Dispose this window. - /// - public void Dispose() - { - Service.Get().FallbackFontModeChange -= this.OnFallbackFontModeChange; - } - - private void OnFallbackFontModeChange(bool mode) - { - Log.Verbose("[{0}] OnFallbackFontModeChange called: {1} (disable={2})", this.Namespace, mode, Service.Get().DisableFontFallbackNotice); - if (!mode) - this.IsOpen = false; - else if (!Service.Get().DisableFontFallbackNotice) - this.IsOpen = true; - } - } -} diff --git a/Dalamud/Interface/Internal/Windows/SettingsWindow.cs b/Dalamud/Interface/Internal/Windows/SettingsWindow.cs index b24504889..c589a55eb 100644 --- a/Dalamud/Interface/Internal/Windows/SettingsWindow.cs +++ b/Dalamud/Interface/Internal/Windows/SettingsWindow.cs @@ -27,8 +27,6 @@ namespace Dalamud.Interface.Internal.Windows private readonly string[] languages; private readonly string[] locLanguages; - private readonly string[] fontResolutionLevelStrings; - private int langIndex; private XivChatType dalamudMessagesChatType; @@ -38,8 +36,6 @@ namespace Dalamud.Interface.Internal.Windows private bool doCfChatMessage; private bool doMbCollect; - private int fontResolutionLevel; - private float globalUiScale; private bool doUseAxisFontsFromGame; private float fontGamma; @@ -101,7 +97,6 @@ namespace Dalamud.Interface.Internal.Windows this.globalUiScale = configuration.GlobalUiScale; this.fontGamma = configuration.FontGammaLevel; this.doUseAxisFontsFromGame = configuration.UseAxisFontsFromGame; - this.fontResolutionLevel = configuration.FontResolutionLevel; this.doToggleUiHide = configuration.ToggleUiHide; this.doToggleUiHideDuringCutscenes = configuration.ToggleUiHideDuringCutscenes; this.doToggleUiHideDuringGpose = configuration.ToggleUiHideDuringGpose; @@ -126,15 +121,6 @@ namespace Dalamud.Interface.Internal.Windows this.doButtonsSystemMenu = configuration.DoButtonsSystemMenu; this.disableRmtFiltering = configuration.DisableRmtFiltering; - this.fontResolutionLevelStrings = new[] - { - Loc.Localize("DalamudSettingsFontResolutionLevel0", "Least (1k x 1k texture)"), - Loc.Localize("DalamudSettingsFontResolutionLevel1", "Lesser (2k x 2k texture)"), - Loc.Localize("DalamudSettingsFontResolutionLevel2", "Normal (4k x 4k texture)"), - Loc.Localize("DalamudSettingsFontResolutionLevel3", "Better (8k x 8k texture, may crash your game)"), - Loc.Localize("DalamudSettingsFontResolutionLevel4", "Best (16k x 16k texture, may crash your game)"), - }; - this.languages = Localization.ApplicableLangCodes.Prepend("en").ToArray(); this.langIndex = Array.IndexOf(this.languages, configuration.EffectiveLanguage); if (this.langIndex == -1) @@ -184,12 +170,10 @@ namespace Dalamud.Interface.Internal.Windows var rebuildFont = ImGui.GetIO().FontGlobalScale != configuration.GlobalUiScale || interfaceManager.FontGamma != configuration.FontGammaLevel - || interfaceManager.FontResolutionLevel != configuration.FontResolutionLevel || interfaceManager.UseAxis != configuration.UseAxisFontsFromGame; ImGui.GetIO().FontGlobalScale = configuration.GlobalUiScale; interfaceManager.FontGammaOverride = null; - interfaceManager.FontResolutionLevelOverride = null; interfaceManager.UseAxisOverride = null; this.thirdRepoList = configuration.ThirdRepoList.Select(x => x.Clone()).ToList(); this.devPluginLocations = configuration.DevPluginLoadLocations.Select(x => x.Clone()).ToList(); @@ -373,38 +357,6 @@ namespace Dalamud.Interface.Internal.Windows ImGui.TextColored(ImGuiColors.DalamudGrey, Loc.Localize("DalamudSettingToggleUiAxisFontsHint", "Use AXIS fonts (the game's main UI fonts) as default Dalamud font.")); - ImGuiHelpers.ScaledDummy(3); - - ImGui.Text(Loc.Localize("DalamudSettingsFontResolutionLevel", "Font resolution level")); - if (interfaceManager.FontResolutionLevelOverride != null) - this.fontResolutionLevel = interfaceManager.FontResolutionLevelOverride.Value; - if (ImGui.Combo("##DalamudSettingsFontResolutionLevelCombo", ref this.fontResolutionLevel, this.fontResolutionLevelStrings, this.fontResolutionLevelStrings.Length)) - { - interfaceManager.FontResolutionLevelOverride = this.fontResolutionLevel; - interfaceManager.RebuildFonts(); - } - - ImGui.PushStyleColor(ImGuiCol.Text, ImGuiColors.DalamudGrey); - ImGui.TextWrapped(string.Format( - Loc.Localize( - "DalamudSettingsFontResolutionLevelHint", - "This option allows Dalamud fonts to look better.\n* If your game crashes right away, or the option reverts, when changing this option, your PC does not support high font resolutions in Dalamud - you will have to use a lower one.\n* If it doesn't crash or revert immediately, then you can keep the new choice indefinitely as it's not going to crash your game once it worked.\n* Either choose the 3rd or 5th option. Use other options only when neither works well.\n* Current font atlas size is {0}px * {1}px."), - ImGui.GetIO().Fonts.TexWidth, - ImGui.GetIO().Fonts.TexHeight)); - ImGui.PopStyleColor(); - - if (Service.Get().DisableFontFallbackNotice) - { - ImGui.Text(Loc.Localize("DalamudSettingsFontResolutionLevelWarningDisabled", "Warning will not be displayed even when the limits are enforced and fonts become blurry.")); - if (ImGui.Button(Loc.Localize("DalamudSettingsFontResolutionLevelWarningReset", "Show warnings") + "##DalamudSettingsFontResolutionLevelWarningReset")) - { - Service.Get().DisableFontFallbackNotice = false; - Service.Get().Save(); - if (Service.Get().IsFallbackFontMode) - Service.Get().OpenFallbackFontNoticeWindow(); - } - } - ImGuiHelpers.ScaledDummy(10); ImGui.TextColored(ImGuiColors.DalamudGrey, Loc.Localize("DalamudSettingToggleUiHideOptOutNote", "Plugins may independently opt out of the settings below.")); @@ -969,7 +921,6 @@ namespace Dalamud.Interface.Internal.Windows configuration.ShowTsm = this.doTsm; configuration.UseAxisFontsFromGame = this.doUseAxisFontsFromGame; - configuration.FontResolutionLevel = this.fontResolutionLevel; configuration.FontGammaLevel = this.fontGamma; // This is applied every frame in InterfaceManager::CheckViewportState() From 6118cfa148d984b8e3f3e5b80dd974d6614f6fdb Mon Sep 17 00:00:00 2001 From: liam Date: Fri, 1 Jul 2022 00:17:55 -0400 Subject: [PATCH 6/8] Update ImGuiScene and add ImPlot demo to GUI menu bar element. --- Dalamud/Interface/Internal/DalamudInterface.cs | 6 ++++++ lib/ImGuiScene | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Dalamud/Interface/Internal/DalamudInterface.cs b/Dalamud/Interface/Internal/DalamudInterface.cs index c9e13b8b5..0dd8e7812 100644 --- a/Dalamud/Interface/Internal/DalamudInterface.cs +++ b/Dalamud/Interface/Internal/DalamudInterface.cs @@ -27,6 +27,7 @@ using FFXIVClientStructs.FFXIV.Client.System.Framework; using FFXIVClientStructs.FFXIV.Client.UI; using ImGuiNET; using ImGuiScene; +using ImPlotNET; using PInvoke; using Serilog.Events; @@ -70,6 +71,7 @@ namespace Dalamud.Interface.Internal #endif private bool isImGuiDrawDemoWindow = false; + private bool isImPlotDrawDemoWindow = false; private bool isImGuiTestWindowsInMonospace = false; private bool isImGuiDrawMetricsWindow = false; @@ -400,6 +402,9 @@ namespace Dalamud.Interface.Internal if (this.isImGuiDrawDemoWindow) ImGui.ShowDemoWindow(ref this.isImGuiDrawDemoWindow); + if (this.isImPlotDrawDemoWindow) + ImPlot.ShowDemoWindow(ref this.isImPlotDrawDemoWindow); + if (this.isImGuiDrawMetricsWindow) ImGui.ShowMetricsWindow(ref this.isImGuiDrawMetricsWindow); @@ -632,6 +637,7 @@ namespace Dalamud.Interface.Internal { ImGui.MenuItem("Use Monospace font for following windows", string.Empty, ref this.isImGuiTestWindowsInMonospace); ImGui.MenuItem("Draw ImGui demo", string.Empty, ref this.isImGuiDrawDemoWindow); + ImGui.MenuItem("Draw ImPlot demo", string.Empty, ref this.isImPlotDrawDemoWindow); ImGui.MenuItem("Draw metrics", string.Empty, ref this.isImGuiDrawMetricsWindow); ImGui.Separator(); diff --git a/lib/ImGuiScene b/lib/ImGuiScene index 65c26d024..f9540e420 160000 --- a/lib/ImGuiScene +++ b/lib/ImGuiScene @@ -1 +1 @@ -Subproject commit 65c26d024c814fda8154022e615073210bb62b3b +Subproject commit f9540e4202dfb1d50e3ab11456b894c0cb0ad186 From 12c3876d7b5ab9b3a100910bdb4eaa04e2e15b41 Mon Sep 17 00:00:00 2001 From: liam Date: Fri, 1 Jul 2022 16:54:04 -0400 Subject: [PATCH 7/8] Update ImGuiScene for text input and natives. --- lib/ImGuiScene | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ImGuiScene b/lib/ImGuiScene index f9540e420..730219306 160000 --- a/lib/ImGuiScene +++ b/lib/ImGuiScene @@ -1 +1 @@ -Subproject commit f9540e4202dfb1d50e3ab11456b894c0cb0ad186 +Subproject commit 7302193065a75cdc87a0fc56183182a15c175447 From 21c47cb7f19c1a4604c285ab804d2099ed7f9e4b Mon Sep 17 00:00:00 2001 From: liam Date: Fri, 8 Jul 2022 14:05:55 -0400 Subject: [PATCH 8/8] Update ImGuiScene. --- lib/ImGuiScene | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ImGuiScene b/lib/ImGuiScene index 730219306..d6b66ce78 160000 --- a/lib/ImGuiScene +++ b/lib/ImGuiScene @@ -1 +1 @@ -Subproject commit 7302193065a75cdc87a0fc56183182a15c175447 +Subproject commit d6b66ce78a3d9fe2e39f9023489c836ed2146401