diff --git a/Glamourer/Gui/DesignQuickBar.cs b/Glamourer/Gui/DesignQuickBar.cs index cd76118..a0a6ddc 100644 --- a/Glamourer/Gui/DesignQuickBar.cs +++ b/Glamourer/Gui/DesignQuickBar.cs @@ -24,6 +24,7 @@ public enum QdbButtons ReapplyAutomation = 0x40, ResetSettings = 0x80, RevertAdvancedCustomization = 0x100, + ToggleMainWindow = 0x200, } public sealed class DesignQuickBar : Window, IDisposable @@ -45,6 +46,8 @@ public sealed class DesignQuickBar : Window, IDisposable private int _numButtons; private readonly StringBuilder _tooltipBuilder = new(512); + public event Action? ToggleMainWindow; + public DesignQuickBar(Configuration.Configuration config, QuickDesignCombo designCombo, StateManager stateManager, IKeyState keyState, ActorObjectManager objects, AutoDesignApplier autoDesignApplier, PenumbraService penumbra) : base("Glamourer Quick Bar", WindowFlags.NoDecoration | WindowFlags.NoDocking) @@ -77,38 +80,41 @@ public sealed class DesignQuickBar : Window, IDisposable public override void PreDraw() { Flags = GetFlags; - UpdateWidth(); _style.Push(ImStyleDouble.WindowPadding, new Vector2(Im.Style.GlobalScale * 4)) .Push(ImStyleSingle.WindowBorderThickness, 0); _style.Push(ImGuiColor.WindowBackground, ColorId.QuickDesignBg.Value()) .Push(ImGuiColor.Button, ColorId.QuickDesignButton.Value()) .Push(ImGuiColor.FrameBackground, ColorId.QuickDesignFrame.Value()); + + UpdateWidth(); } public override void PostDraw() => _style.Dispose(); - public void DrawAtEnd(float yPos) + public void DrawAtEnd(float yPos, bool mainWindow) { - var width = UpdateWidth(); + var numButtons = CalculateButtonCount(mainWindow); + var width = CalculateWidth(numButtons, mainWindow); Im.Cursor.Position = new Vector2(Im.ContentRegion.Maximum.X - width, yPos - Im.Style.GlobalScale); - Draw(); + Draw(Im.ContentRegion.Available.X, numButtons, mainWindow); } public override void Draw() - => Draw(Im.ContentRegion.Available.X); + => Draw(Im.ContentRegion.Available.X, _numButtons, false); - private void Draw(float width) + private void Draw(float width, int numButtons, bool mainWindow) { using var group = Im.Group(); var spacing = Im.Style.ItemInnerSpacing; using var style = ImStyleDouble.ItemSpacing.Push(spacing); var buttonSize = new Vector2(Im.Style.FrameHeight); PrepareButtons(); + DrawToggleMainWindowButton(buttonSize, mainWindow); if (_config.QdbButtons.HasFlag(QdbButtons.ApplyDesign)) { - var comboSize = width - _numButtons * (buttonSize.X + spacing.X); + var comboSize = width - numButtons * (buttonSize.X + spacing.X); _designCombo.Draw(StringU8.Empty, comboSize); Im.Line.Same(); DrawApplyButton(buttonSize); @@ -485,6 +491,16 @@ public sealed class DesignQuickBar : Window, IDisposable } } + private void DrawToggleMainWindowButton(Vector2 buttonSize, bool mainWindow) + { + if (mainWindow || !_config.QdbButtons.HasFlag(QdbButtons.ToggleMainWindow)) + return; + + if (ImEx.Icon.Button(FontAwesomeIcon.TheaterMasks.Icon(), "Toggle Glamourer's main window."u8, ToggleMainWindow is null, buttonSize)) + ToggleMainWindow?.Invoke(); + Im.Line.Same(); + } + private (bool, ActorIdentifier, ActorData, ActorState?) ResolveTarget(AwesomeIcon icon, Vector2 buttonSize, int available) { var enumerator = _tooltipBuilder.GetChunks(); @@ -516,44 +532,51 @@ public sealed class DesignQuickBar : Window, IDisposable return _keyState[key.Hotkey] && key.Modifiers.IsActive(); } - private float UpdateWidth() + private int CalculateButtonCount(bool mainWindow) { - _numButtons = 0; + var numButtons = 0; if (_config.QdbButtons.HasFlag(QdbButtons.RevertAll)) - ++_numButtons; + ++numButtons; if (_config.EnableAutoDesigns) { if (_config.QdbButtons.HasFlag(QdbButtons.RevertAutomation)) - ++_numButtons; + ++numButtons; if (_config.QdbButtons.HasFlag(QdbButtons.ReapplyAutomation)) - ++_numButtons; + ++numButtons; } if (_config.QdbButtons.HasFlag(QdbButtons.RevertAdvancedCustomization)) - ++_numButtons; + ++numButtons; if (_config.QdbButtons.HasFlag(QdbButtons.RevertAdvancedDyes)) - ++_numButtons; + ++numButtons; if (_config.QdbButtons.HasFlag(QdbButtons.RevertCustomize)) - ++_numButtons; + ++numButtons; if (_config.QdbButtons.HasFlag(QdbButtons.RevertEquip)) - ++_numButtons; + ++numButtons; if (_config.UseTemporarySettings && _config.QdbButtons.HasFlag(QdbButtons.ResetSettings)) - ++_numButtons; + ++numButtons; if (_config.QdbButtons.HasFlag(QdbButtons.ApplyDesign)) - { - ++_numButtons; - Size = new Vector2((7 + _numButtons) * Im.Style.FrameHeight + _numButtons * Im.Style.ItemInnerSpacing.X, - Im.Style.FrameHeight); - } - else - { - Size = new Vector2( - _numButtons * Im.Style.FrameHeight - + (_numButtons - 1) * Im.Style.ItemInnerSpacing.X - + Im.Style.WindowPadding.X * 2, - Im.Style.FrameHeight); - } + ++numButtons; + if (!mainWindow && _config.QdbButtons.HasFlag(QdbButtons.ToggleMainWindow)) + ++numButtons; - return Size.Value.X; + return numButtons; + } + + private float CalculateWidth(int numButtons, bool mainWindow) + { + var content = _config.QdbButtons.HasFlag(QdbButtons.ApplyDesign) + ? (7 + numButtons) * Im.Style.FrameHeight + numButtons * Im.Style.ItemInnerSpacing.X + : numButtons * Im.Style.FrameHeight + (numButtons - 1) * Im.Style.ItemInnerSpacing.X; + var padding = mainWindow ? 0 : Im.Style.WindowPadding.X * 2; + + return content + padding; + } + + private void UpdateWidth() + { + _numButtons = CalculateButtonCount(false); + var width = CalculateWidth(_numButtons, false); + Size = new Vector2(width, Im.Style.FrameHeight); } } diff --git a/Glamourer/Gui/MainWindow.cs b/Glamourer/Gui/MainWindow.cs index d1d5e3b..038c336 100644 --- a/Glamourer/Gui/MainWindow.cs +++ b/Glamourer/Gui/MainWindow.cs @@ -32,6 +32,7 @@ public sealed class MainWindow : Window, IDisposable IsOpen = _config.OpenWindowAtStart; _penumbra.DrawSettingsSection += _mainTabBar.Settings.DrawPenumbraIntegrationSettings; + _quickBar.ToggleMainWindow += Toggle; } public void OpenSettings() @@ -49,7 +50,10 @@ public sealed class MainWindow : Window, IDisposable } public void Dispose() - => _penumbra.DrawSettingsSection -= _mainTabBar.Settings.DrawPenumbraIntegrationSettings; + { + _penumbra.DrawSettingsSection -= _mainTabBar.Settings.DrawPenumbraIntegrationSettings; + _quickBar.ToggleMainWindow -= Toggle; + } public override void Draw() { @@ -74,7 +78,7 @@ public sealed class MainWindow : Window, IDisposable { _mainTabBar.Draw(); if (_config.ShowQuickBarInTabs) - _quickBar.DrawAtEnd(yPos); + _quickBar.DrawAtEnd(yPos, true); } } diff --git a/Glamourer/Gui/Tabs/SettingsTab/SettingsTab.cs b/Glamourer/Gui/Tabs/SettingsTab/SettingsTab.cs index 97fa1e3..90cc17e 100644 --- a/Glamourer/Gui/Tabs/SettingsTab/SettingsTab.cs +++ b/Glamourer/Gui/Tabs/SettingsTab/SettingsTab.cs @@ -302,6 +302,7 @@ public sealed class SettingsTab( private readonly (StringU8, QdbButtons)[] _columns = [ + (new StringU8("Toggle Main Window"u8), QdbButtons.ToggleMainWindow), (new StringU8("Apply Design"u8), QdbButtons.ApplyDesign), (new StringU8("Revert All"u8), QdbButtons.RevertAll), (new StringU8("Revert to Auto"u8), QdbButtons.RevertAutomation), @@ -325,7 +326,7 @@ public sealed class SettingsTab( private void DrawQuickDesignBoxes() { var showAuto = config.EnableAutoDesigns; - var numColumns = 9 - (showAuto ? 0 : 2) - (config.UseTemporarySettings ? 0 : 1); + var numColumns = 10 - (showAuto ? 0 : 2) - (config.UseTemporarySettings ? 0 : 1); Im.Line.New(); Im.Text("Show the Following Buttons in the Quick Design Bar:"u8); Im.Dummy(Vector2.Zero);