From fcf29acc0277dad443ddeb11c2ad6d351fd716b2 Mon Sep 17 00:00:00 2001 From: goat Date: Tue, 3 Oct 2023 22:25:35 +0200 Subject: [PATCH] feat: updated changelog --- Dalamud/Game/ChatHandlers.cs | 3 +- Dalamud/Interface/Animation/Easing.cs | 8 + Dalamud/Interface/ColorHelpers.cs | 9 + .../Components/ImGuiComponents.IconButton.cs | 21 + .../Interface/Internal/DalamudInterface.cs | 4 +- .../Internal/Windows/ChangelogWindow.cs | 450 +++++++++++++----- .../Internal/Windows/TitleScreenMenuWindow.cs | 10 +- Dalamud/Interface/Windowing/Window.cs | 14 +- 8 files changed, 393 insertions(+), 126 deletions(-) diff --git a/Dalamud/Game/ChatHandlers.cs b/Dalamud/Game/ChatHandlers.cs index d2f4b30c7..890cd0439 100644 --- a/Dalamud/Game/ChatHandlers.cs +++ b/Dalamud/Game/ChatHandlers.cs @@ -251,10 +251,9 @@ internal class ChatHandlers : IServiceType Type = XivChatType.Notice, }); - if (string.IsNullOrEmpty(this.configuration.LastChangelogMajorMinor) || (!ChangelogWindow.WarrantsChangelogForMajorMinor.StartsWith(this.configuration.LastChangelogMajorMinor) && assemblyVersion.StartsWith(ChangelogWindow.WarrantsChangelogForMajorMinor))) + if (ChangelogWindow.WarrantsChangelog()) { dalamudInterface.OpenChangelogWindow(); - this.configuration.LastChangelogMajorMinor = ChangelogWindow.WarrantsChangelogForMajorMinor; } this.configuration.LastVersion = assemblyVersion; diff --git a/Dalamud/Interface/Animation/Easing.cs b/Dalamud/Interface/Animation/Easing.cs index 2ac040143..54c41c16d 100644 --- a/Dalamud/Interface/Animation/Easing.cs +++ b/Dalamud/Interface/Animation/Easing.cs @@ -109,6 +109,14 @@ public abstract class Easing this.animationTimer.Restart(); } + /// + /// Resets the animation. + /// + public void Reset() + { + this.animationTimer.Reset(); + } + /// /// Updates the animation. /// diff --git a/Dalamud/Interface/ColorHelpers.cs b/Dalamud/Interface/ColorHelpers.cs index b2b489004..74561f9ef 100644 --- a/Dalamud/Interface/ColorHelpers.cs +++ b/Dalamud/Interface/ColorHelpers.cs @@ -259,6 +259,15 @@ public static class ColorHelpers hsv.A -= amount; return HsvToRgb(hsv); } + + /// + /// Set alpha of a color. + /// + /// The color. + /// The alpha value to set. + /// The color with the set alpha value. + public static Vector4 WithAlpha(this Vector4 color, float alpha) + => color with { W = alpha }; /// /// Fade a color. diff --git a/Dalamud/Interface/Components/ImGuiComponents.IconButton.cs b/Dalamud/Interface/Components/ImGuiComponents.IconButton.cs index 116b04bd2..719f470b8 100644 --- a/Dalamud/Interface/Components/ImGuiComponents.IconButton.cs +++ b/Dalamud/Interface/Components/ImGuiComponents.IconButton.cs @@ -209,4 +209,25 @@ public static partial class ImGuiComponents return button; } + + /// + /// Get width of IconButtonWithText component. + /// + /// Icon to use. + /// Text to use. + /// Width. + internal static float GetIconButtonWithTextWidth(FontAwesomeIcon icon, string text) + { + ImGui.PushFont(UiBuilder.IconFont); + var iconSize = ImGui.CalcTextSize(icon.ToIconString()); + ImGui.PopFont(); + + var textSize = ImGui.CalcTextSize(text); + var dl = ImGui.GetWindowDrawList(); + var cursor = ImGui.GetCursorScreenPos(); + + var iconPadding = 3 * ImGuiHelpers.GlobalScale; + + return iconSize.X + textSize.X + (ImGui.GetStyle().FramePadding.X * 2) + iconPadding; + } } diff --git a/Dalamud/Interface/Internal/DalamudInterface.cs b/Dalamud/Interface/Internal/DalamudInterface.cs index a7b1e80b5..fc11f3f4b 100644 --- a/Dalamud/Interface/Internal/DalamudInterface.cs +++ b/Dalamud/Interface/Internal/DalamudInterface.cs @@ -94,8 +94,7 @@ internal class DalamudInterface : IDisposable, IServiceType { var interfaceManager = interfaceManagerWithScene.Manager; this.WindowSystem = new WindowSystem("DalamudCore"); - - this.changelogWindow = new ChangelogWindow() { IsOpen = false }; + this.colorDemoWindow = new ColorDemoWindow() { IsOpen = false }; this.componentDemoWindow = new ComponentDemoWindow() { IsOpen = false }; this.dataWindow = new DataWindow() { IsOpen = false }; @@ -108,6 +107,7 @@ internal class DalamudInterface : IDisposable, IServiceType this.selfTestWindow = new SelfTestWindow() { IsOpen = false }; this.styleEditorWindow = new StyleEditorWindow() { IsOpen = false }; this.titleScreenMenuWindow = new TitleScreenMenuWindow() { IsOpen = false }; + this.changelogWindow = new ChangelogWindow(this.titleScreenMenuWindow) { IsOpen = false }; this.profilerWindow = new ProfilerWindow() { IsOpen = false }; this.branchSwitcherWindow = new BranchSwitcherWindow() { IsOpen = false }; this.hitchSettingsWindow = new HitchSettingsWindow() { IsOpen = false }; diff --git a/Dalamud/Interface/Internal/Windows/ChangelogWindow.cs b/Dalamud/Interface/Internal/Windows/ChangelogWindow.cs index cd4618f24..1c0d3fa02 100644 --- a/Dalamud/Interface/Internal/Windows/ChangelogWindow.cs +++ b/Dalamud/Interface/Internal/Windows/ChangelogWindow.cs @@ -1,13 +1,18 @@ -using System; using System.IO; +using System.Linq; using System.Numerics; +using Dalamud.Configuration.Internal; +using Dalamud.Interface.Animation.EasingFunctions; using Dalamud.Interface.Colors; +using Dalamud.Interface.Components; +using Dalamud.Interface.GameFonts; using Dalamud.Interface.Utility; +using Dalamud.Interface.Utility.Raii; using Dalamud.Interface.Windowing; +using Dalamud.Plugin.Internal; using Dalamud.Utility; using ImGuiNET; -using ImGuiScene; namespace Dalamud.Interface.Internal.Windows; @@ -16,141 +21,349 @@ namespace Dalamud.Interface.Internal.Windows; /// internal sealed class ChangelogWindow : Window, IDisposable { - /// - /// Whether the latest update warrants a changelog window. - /// - public const string WarrantsChangelogForMajorMinor = "7.4."; - + private const string WarrantsChangelogForMajorMinor = "9.0."; + private const string ChangeLog = - @"• Updated Dalamud for compatibility with Patch 6.3 -• Made things more speedy by updating to .NET 7 - -If you note any issues or need help, please check the FAQ, and reach out on our Discord if you need help. -Thanks and have fun!"; - - private const string UpdatePluginsInfo = - @"• All of your plugins were disabled automatically, due to this update. This is normal. -• Open the plugin installer, then click 'update plugins'. Updated plugins should update and then re-enable themselves. - => Please keep in mind that not all of your plugins may already be updated for the new version. - => If some plugins are displayed with a red cross in the 'Installed Plugins' tab, they may not yet be available."; - - private readonly string assemblyVersion = Util.AssemblyVersion; - + @"• Updated Dalamud for compatibility with Patch 6.5 +• A lot of behind-the-scenes changes to make Dalamud and plugins more stable and reliable +• Added plugin collections, allowing you to create lists of plugins that can be enabled or disabled together +• Plugins can now add tooltips and interaction to the server info bar +• The Dalamud/plugin installer UI has been refreshed +"; + + private readonly TitleScreenMenuWindow tsmWindow; private readonly IDalamudTextureWrap logoTexture; + + private readonly InOutCubic windowFade = new(TimeSpan.FromSeconds(2.5f)) + { + Point1 = Vector2.Zero, + Point2 = new Vector2(2f), + }; + + private readonly InOutCubic bodyFade = new(TimeSpan.FromSeconds(1f)) + { + Point1 = Vector2.Zero, + Point2 = Vector2.One, + }; + + private IDalamudTextureWrap? apiBumpExplainerTexture; + private GameFontHandle? bannerFont; + + private State state = State.WindowFadeIn; + private bool needFadeRestart = false; + /// /// Initializes a new instance of the class. /// - public ChangelogWindow() - : base("What's new in Dalamud?", ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoResize) + /// TSM window. + public ChangelogWindow(TitleScreenMenuWindow tsmWindow) + : base("What's new in Dalamud?##ChangelogWindow", ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoScrollbar | ImGuiWindowFlags.NoScrollWithMouse, true) { + this.tsmWindow = tsmWindow; this.Namespace = "DalamudChangelogWindow"; - this.Size = new Vector2(885, 463); - this.SizeCondition = ImGuiCond.Appearing; - this.logoTexture = Service.Get().Logo; + + // If we are going to show a changelog, make sure we have the font ready, otherwise it will hitch + if (WarrantsChangelog()) + this.MakeFont(); + } + + private enum State + { + WindowFadeIn, + ExplainerIntro, + ExplainerApiBump, + Links, + } + + /// + /// Check if a changelog should be shown. + /// + /// True if a changelog should be shown. + public static bool WarrantsChangelog() + { + var configuration = Service.Get(); + var pm = Service.GetNullable(); + var pmWantsChangelog = pm?.InstalledPlugins.Any() ?? true; + return (string.IsNullOrEmpty(configuration.LastChangelogMajorMinor) || + (!WarrantsChangelogForMajorMinor.StartsWith(configuration.LastChangelogMajorMinor) && + Util.AssemblyVersion.StartsWith(WarrantsChangelogForMajorMinor))) && pmWantsChangelog; + } + + /// + public override void OnOpen() + { + Service.Get().SetCreditsDarkeningAnimation(true); + this.tsmWindow.AllowDrawing = false; + + this.MakeFont(); + + this.state = State.WindowFadeIn; + this.windowFade.Reset(); + this.bodyFade.Reset(); + this.needFadeRestart = true; + + if (this.apiBumpExplainerTexture == null) + { + var dalamud = Service.Get(); + var tm = Service.Get(); + this.apiBumpExplainerTexture = tm.GetTextureFromFile(new FileInfo(Path.Combine(dalamud.AssetDirectory.FullName, "UIRes", "changelogApiBump.png"))) + ?? throw new Exception("Could not load api bump explainer."); + } + + base.OnOpen(); + } + + /// + public override void OnClose() + { + base.OnClose(); + + this.tsmWindow.AllowDrawing = true; + Service.Get().SetCreditsDarkeningAnimation(false); + } + + /// + public override void PreDraw() + { + ImGui.PushStyleVar(ImGuiStyleVar.WindowBorderSize, 0); + ImGui.PushStyleVar(ImGuiStyleVar.WindowPadding, Vector2.Zero); + ImGui.PushStyleVar(ImGuiStyleVar.WindowRounding, 10f); + + base.PreDraw(); + + if (this.needFadeRestart) + { + this.windowFade.Restart(); + this.needFadeRestart = false; + } + + this.windowFade.Update(); + ImGui.SetNextWindowBgAlpha(Math.Clamp(this.windowFade.EasedPoint.X, 0, 0.9f)); + + this.Size = new Vector2(900, 400); + this.SizeCondition = ImGuiCond.Always; + + // Center the window on the main viewport + var viewportSize = ImGuiHelpers.MainViewport.Size; + var windowSize = this.Size!.Value * ImGuiHelpers.GlobalScale; + ImGui.SetNextWindowPos(new Vector2(viewportSize.X / 2 - windowSize.X / 2, viewportSize.Y / 2 - windowSize.Y / 2)); + } + + /// + public override void PostDraw() + { + ImGui.PopStyleVar(3); + base.PostDraw(); } /// public override void Draw() { - ImGui.Text($"Dalamud has been updated to version D{this.assemblyVersion}."); - - ImGuiHelpers.ScaledDummy(10); - - ImGui.Text("The following changes were introduced:"); - + void Dismiss() + { + var configuration = Service.Get(); + configuration.LastChangelogMajorMinor = WarrantsChangelogForMajorMinor; + configuration.QueueSave(); + } + + var windowSize = ImGui.GetWindowSize(); + + var dummySize = 10 * ImGuiHelpers.GlobalScale; + ImGui.Dummy(new Vector2(dummySize)); ImGui.SameLine(); - ImGuiHelpers.ScaledDummy(0); - var imgCursor = ImGui.GetCursorPos(); - - ImGui.TextWrapped(ChangeLog); - - ImGuiHelpers.ScaledDummy(5); - - ImGui.TextColored(ImGuiColors.DalamudRed, " !!! ATTENTION !!!"); - - ImGui.TextWrapped(UpdatePluginsInfo); - - ImGuiHelpers.ScaledDummy(10); - - // ImGui.Text("Thank you for using our tools!"); - - // ImGuiHelpers.ScaledDummy(10); - - ImGui.PushFont(UiBuilder.IconFont); - - if (ImGui.Button(FontAwesomeIcon.Download.ToIconString())) + + var logoContainerSize = new Vector2(this.Size!.Value.X * 0.2f - dummySize, this.Size!.Value.Y); + using (var child = ImRaii.Child("###logoContainer", logoContainerSize, false)) { - Service.Get().OpenPluginInstaller(); - } + if (!child) + return; - if (ImGui.IsItemHovered()) - { - ImGui.PopFont(); - ImGui.SetTooltip("Open Plugin Installer"); - ImGui.PushFont(UiBuilder.IconFont); + var logoSize = new Vector2(logoContainerSize.X); + + // Center the logo in the container + ImGui.SetCursorPos(new Vector2(logoContainerSize.X / 2 - logoSize.X / 2, logoContainerSize.Y / 2 - logoSize.Y / 2)); + + using (ImRaii.PushStyle(ImGuiStyleVar.Alpha, Math.Clamp(this.windowFade.EasedPoint.X - 0.5f, 0f, 1f))) + { + ImGui.Image(this.logoTexture.ImGuiHandle, logoSize); + } } - + ImGui.SameLine(); - - if (ImGui.Button(FontAwesomeIcon.LaughBeam.ToIconString())) - { - Util.OpenLink("https://discord.gg/3NMcUV5"); - } - - if (ImGui.IsItemHovered()) - { - ImGui.PopFont(); - ImGui.SetTooltip("Join our Discord server"); - ImGui.PushFont(UiBuilder.IconFont); - } - + ImGui.Dummy(new Vector2(dummySize)); ImGui.SameLine(); - - if (ImGui.Button(FontAwesomeIcon.Globe.ToIconString())) + + using (var child = ImRaii.Child("###textContainer", new Vector2((this.Size!.Value.X * 0.8f) - dummySize * 4, this.Size!.Value.Y), false)) { - Util.OpenLink("https://goatcorp.github.io/faq/"); + if (!child) + return; + + ImGuiHelpers.ScaledDummy(20); + + using (ImRaii.PushStyle(ImGuiStyleVar.Alpha, Math.Clamp(this.windowFade.EasedPoint.X - 1f, 0f, 1f))) + { + using var font = ImRaii.PushFont(this.bannerFont!.ImFont); + + switch (this.state) + { + case State.WindowFadeIn: + case State.ExplainerIntro: + ImGuiHelpers.CenteredText("New And Improved"); + break; + + case State.ExplainerApiBump: + ImGuiHelpers.CenteredText("Plugin Updates"); + break; + + case State.Links: + ImGuiHelpers.CenteredText("Enjoy!"); + break; + } + } + + ImGuiHelpers.ScaledDummy(8); + + if (this.state == State.WindowFadeIn && this.windowFade.EasedPoint.X > 1.5f) + { + this.state = State.ExplainerIntro; + this.bodyFade.Restart(); + } + + this.bodyFade.Update(); + using (ImRaii.PushStyle(ImGuiStyleVar.Alpha, Math.Clamp(this.bodyFade.EasedPoint.X, 0, 1f))) + { + void DrawNextButton(State nextState) + { + // Draw big, centered next button at the bottom of the window + var buttonHeight = 30 * ImGuiHelpers.GlobalScale; + var buttonText = "Next"; + var buttonWidth = ImGui.CalcTextSize(buttonText).X + 40 * ImGuiHelpers.GlobalScale; + ImGui.SetCursorPosY(windowSize.Y - buttonHeight - (20 * ImGuiHelpers.GlobalScale)); + ImGuiHelpers.CenterCursorFor((int)buttonWidth); + + if (ImGui.Button(buttonText, new Vector2(buttonWidth, buttonHeight))) + { + this.state = nextState; + this.bodyFade.Restart(); + } + } + + switch (this.state) + { + case State.WindowFadeIn: + case State.ExplainerIntro: + ImGui.TextWrapped($"Welcome to Dalamud v{Util.AssemblyVersion}!"); + ImGuiHelpers.ScaledDummy(5); + ImGui.TextWrapped(ChangeLog); + + DrawNextButton(State.ExplainerApiBump); + break; + + case State.ExplainerApiBump: + ImGui.TextWrapped("Take care! Due to changes in this patch, all of your plugins need to be updated and were disabled automatically."); + ImGui.TextWrapped("This is normal and required for major game updates."); + ImGuiHelpers.ScaledDummy(5); + ImGui.TextWrapped("To update your plugins, open the plugin installer and click 'update plugins'. Updated plugins should update and then re-enable themselves."); + ImGuiHelpers.ScaledDummy(5); + ImGui.TextWrapped("Please keep in mind that not all of your plugins may already be updated for the new version."); + ImGui.TextWrapped("If some plugins are displayed with a red cross in the 'Installed Plugins' tab, they may not yet be available."); + + ImGuiHelpers.ScaledDummy(15); + + ImGuiHelpers.CenterCursorFor(this.apiBumpExplainerTexture!.Width); + ImGui.Image(this.apiBumpExplainerTexture.ImGuiHandle, this.apiBumpExplainerTexture.Size); + + DrawNextButton(State.Links); + break; + + case State.Links: + ImGui.TextWrapped("If you note any issues or need help, please check the FAQ, and reach out on our Discord if you need help."); + ImGui.TextWrapped("Enjoy your time with the game and Dalamud!"); + + ImGuiHelpers.ScaledDummy(45); + + bool CenteredIconButton(FontAwesomeIcon icon, string text) + { + var buttonWidth = ImGuiComponents.GetIconButtonWithTextWidth(icon, text); + ImGuiHelpers.CenterCursorFor((int)buttonWidth); + return ImGuiComponents.IconButtonWithText(icon, text); + } + + if (CenteredIconButton(FontAwesomeIcon.Download, "Open Plugin Installer")) + { + Service.Get().OpenPluginInstaller(); + this.IsOpen = false; + Dismiss(); + } + + ImGuiHelpers.ScaledDummy(5); + + ImGuiHelpers.CenterCursorFor( + (int)(ImGuiComponents.GetIconButtonWithTextWidth(FontAwesomeIcon.Globe, "See the FAQ") + + ImGuiComponents.GetIconButtonWithTextWidth(FontAwesomeIcon.LaughBeam, "Join our Discord server") + + (5 * ImGuiHelpers.GlobalScale) + + (ImGui.GetStyle().ItemSpacing.X * 4))); + if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Globe, "See the FAQ")) + { + Util.OpenLink("https://goatcorp.github.io/faq/"); + } + + ImGui.SameLine(); + ImGuiHelpers.ScaledDummy(5); + ImGui.SameLine(); + + if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.LaughBeam, "Join our Discord server")) + { + Util.OpenLink("https://discord.gg/3NMcUV5"); + } + + ImGuiHelpers.ScaledDummy(5); + + if (CenteredIconButton(FontAwesomeIcon.Heart, "Support what we care about")) + { + Util.OpenLink("https://goatcorp.github.io/faq/support"); + } + + var buttonHeight = 30 * ImGuiHelpers.GlobalScale; + var buttonText = "Close"; + var buttonWidth = ImGui.CalcTextSize(buttonText).X + 40 * ImGuiHelpers.GlobalScale; + ImGui.SetCursorPosY(windowSize.Y - buttonHeight - (20 * ImGuiHelpers.GlobalScale)); + ImGuiHelpers.CenterCursorFor((int)buttonWidth); + + if (ImGui.Button(buttonText, new Vector2(buttonWidth, buttonHeight))) + { + this.IsOpen = false; + Dismiss(); + } + + break; + } + } + + // Draw close button in the top right corner + ImGui.PushStyleVar(ImGuiStyleVar.FrameRounding, 100f); + var btnAlpha = Math.Clamp(this.windowFade.EasedPoint.X - 0.5f, 0f, 1f); + ImGui.PushStyleColor(ImGuiCol.Button, ImGuiColors.DalamudRed.WithAlpha(btnAlpha).Desaturate(0.3f)); + ImGui.PushStyleColor(ImGuiCol.Text, ImGuiColors.DalamudWhite.WithAlpha(btnAlpha)); + + var childSize = ImGui.GetWindowSize(); + var closeButtonSize = 15 * ImGuiHelpers.GlobalScale; + ImGui.SetCursorPos(new Vector2(childSize.X - closeButtonSize - (5 * ImGuiHelpers.GlobalScale), 10 * ImGuiHelpers.GlobalScale)); + if (ImGuiComponents.IconButton(FontAwesomeIcon.Times)) + { + Dismiss(); + this.IsOpen = false; + } + + ImGui.PopStyleColor(2); + ImGui.PopStyleVar(); + + if (ImGui.IsItemHovered()) + ImGui.SetTooltip("I don't care about this"); } - - if (ImGui.IsItemHovered()) - { - ImGui.PopFont(); - ImGui.SetTooltip("See the FAQ"); - ImGui.PushFont(UiBuilder.IconFont); - } - - ImGui.SameLine(); - - if (ImGui.Button(FontAwesomeIcon.Heart.ToIconString())) - { - Util.OpenLink("https://goatcorp.github.io/faq/support"); - } - - if (ImGui.IsItemHovered()) - { - ImGui.PopFont(); - ImGui.SetTooltip("Support what we care about"); - ImGui.PushFont(UiBuilder.IconFont); - } - - ImGui.PopFont(); - - ImGui.SameLine(); - ImGuiHelpers.ScaledDummy(20, 0); - ImGui.SameLine(); - - if (ImGui.Button("Close")) - { - this.IsOpen = false; - } - - imgCursor.X += 750; - imgCursor.Y -= 30; - ImGui.SetCursorPos(imgCursor); - - ImGui.Image(this.logoTexture.ImGuiHandle, new Vector2(100)); } /// @@ -160,4 +373,13 @@ Thanks and have fun!"; { this.logoTexture.Dispose(); } + + private void MakeFont() + { + if (this.bannerFont == null) + { + var gfm = Service.Get(); + this.bannerFont = gfm.NewFontRef(new GameFontStyle(GameFontFamilyAndSize.MiedingerMid18)); + } + } } diff --git a/Dalamud/Interface/Internal/Windows/TitleScreenMenuWindow.cs b/Dalamud/Interface/Internal/Windows/TitleScreenMenuWindow.cs index e77a3db4e..a4ad62f4f 100644 --- a/Dalamud/Interface/Internal/Windows/TitleScreenMenuWindow.cs +++ b/Dalamud/Interface/Internal/Windows/TitleScreenMenuWindow.cs @@ -63,13 +63,18 @@ internal class TitleScreenMenuWindow : Window, IDisposable var framework = Service.Get(); framework.Update += this.FrameworkOnUpdate; } - + private enum State { Hide, Show, FadeOut, } + + /// + /// Gets or sets a value indicating whether drawing is allowed. + /// + public bool AllowDrawing { get; set; } = true; /// public override void PreDraw() @@ -97,6 +102,9 @@ internal class TitleScreenMenuWindow : Window, IDisposable /// public override void Draw() { + if (!this.AllowDrawing) + return; + var scale = ImGui.GetIO().FontGlobalScale; var entries = Service.Get().Entries .OrderByDescending(x => x.IsInternal) diff --git a/Dalamud/Interface/Windowing/Window.cs b/Dalamud/Interface/Windowing/Window.cs index ad424f59a..f0914bb21 100644 --- a/Dalamud/Interface/Windowing/Window.cs +++ b/Dalamud/Interface/Windowing/Window.cs @@ -257,13 +257,7 @@ public abstract class Window if (hasNamespace) ImGui.PushID(this.Namespace); - - this.PreDraw(); - this.ApplyConditionals(); - - if (this.ForceMainWindow) - ImGuiHelpers.ForceNextWindowMainViewport(); - + if (this.internalLastIsOpen != this.internalIsOpen && this.internalIsOpen) { this.internalLastIsOpen = this.internalIsOpen; @@ -272,6 +266,12 @@ public abstract class Window if (doSoundEffects && !this.DisableWindowSounds) UIModule.PlaySound(this.OnOpenSfxId, 0, 0, 0); } + this.PreDraw(); + this.ApplyConditionals(); + + if (this.ForceMainWindow) + ImGuiHelpers.ForceNextWindowMainViewport(); + var wasFocused = this.IsFocused; if (wasFocused) {