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/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 a9bdd73f8..fa1098be7 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
{
@@ -39,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)
@@ -134,15 +134,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 +155,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)
@@ -244,17 +252,18 @@ 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();
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,13 +288,21 @@ namespace Dalamud.Interface.GameFonts
{
var interfaceManager = Service.Get();
var ioFonts = ImGui.GetIO().Fonts;
- ioFonts.GetTexDataAsRGBA32(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)];
+ var fdt = this.fdts[(int)style.FamilyAndSize];
var scale = style.SizePt / fdt.FontHeader.Size;
var fontPtr = font.NativePtr;
@@ -302,7 +319,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 +343,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 +358,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 +367,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 +388,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 +398,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);
@@ -409,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;
@@ -435,12 +459,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/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..3e39e9429 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,9 +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,
+ glyph->TextureIndex,
glyph->X0 * scale,
((glyph->Y0 - source.Value!.Ascent) * scale) + target.Value!.Ascent,
glyph->X1 * scale,
@@ -183,6 +186,8 @@ 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;
@@ -194,6 +199,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)
@@ -214,7 +229,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;
@@ -225,23 +240,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/DalamudInterface.cs b/Dalamud/Interface/Internal/DalamudInterface.cs
index 5a6bae722..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;
@@ -54,7 +55,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;
@@ -71,6 +71,7 @@ namespace Dalamud.Interface.Internal
#endif
private bool isImGuiDrawDemoWindow = false;
+ private bool isImPlotDrawDemoWindow = false;
private bool isImGuiTestWindowsInMonospace = false;
private bool isImGuiDrawMetricsWindow = false;
@@ -98,7 +99,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 +115,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 +221,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 .
///
@@ -408,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);
@@ -640,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/Dalamud/Interface/Internal/InterfaceManager.cs b/Dalamud/Interface/Internal/InterfaceManager.cs
index 20bb86e3c..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,13 @@ 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++)
+ {
+ var config = ioFonts.ConfigData[i];
+ config.RasterizerGamma = config.RasterizerGamma * fontGamma;
}
Log.Verbose("[FONT] ImGui.IO.Build will be called.");
@@ -853,42 +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;
-
- 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);
- 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)
@@ -1006,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!");
@@ -1281,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()
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 5da5fb742..d6b66ce78 160000
--- a/lib/ImGuiScene
+++ b/lib/ImGuiScene
@@ -1 +1 @@
-Subproject commit 5da5fb742375aba55026f3beeef05dfe876a21bd
+Subproject commit d6b66ce78a3d9fe2e39f9023489c836ed2146401