From 0f6fbcb4c6957a81ed42d338b02fbb3f708b73cf Mon Sep 17 00:00:00 2001 From: karashiiro <49822414+karashiiro@users.noreply.github.com> Date: Wed, 9 Sep 2020 16:41:29 -0700 Subject: [PATCH 1/2] Separate hiding via toggle, cutscenes, and gpose --- Dalamud/Configuration/DalamudConfiguration.cs | 2 ++ Dalamud/Interface/DalamudSettingsWindow.cs | 20 ++++++++++++--- Dalamud/Interface/UiBuilder.cs | 25 +++++++++++++++---- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/Dalamud/Configuration/DalamudConfiguration.cs b/Dalamud/Configuration/DalamudConfiguration.cs index c90ffbed6..c5d5a02dc 100644 --- a/Dalamud/Configuration/DalamudConfiguration.cs +++ b/Dalamud/Configuration/DalamudConfiguration.cs @@ -32,6 +32,8 @@ namespace Dalamud public float GlobalUiScale { get; set; } = 1.0f; public bool ToggleUiHide { get; set; } = true; + public bool ToggleUiHideDuringCutscenes { get; set; } = true; + public bool ToggleUiHideDuringGpose { get; set; } = true; [JsonIgnore] public string ConfigPath; diff --git a/Dalamud/Interface/DalamudSettingsWindow.cs b/Dalamud/Interface/DalamudSettingsWindow.cs index dd13888ae..ec653fc7a 100644 --- a/Dalamud/Interface/DalamudSettingsWindow.cs +++ b/Dalamud/Interface/DalamudSettingsWindow.cs @@ -21,6 +21,8 @@ namespace Dalamud.Interface this.globalUiScale = this.dalamud.Configuration.GlobalUiScale; this.doToggleUiHide = this.dalamud.Configuration.ToggleUiHide; + this.doToggleUiHideDuringCutscenes = this.dalamud.Configuration.ToggleUiHideDuringCutscenes; + this.doToggleUiHideDuringGpose = this.dalamud.Configuration.ToggleUiHideDuringGpose; this.doPluginTest = this.dalamud.Configuration.DoPluginTest; this.doDalamudTest = this.dalamud.Configuration.DoDalamudTest; @@ -45,6 +47,8 @@ namespace Dalamud.Interface private const float MaxScale = 2.0f; private float globalUiScale; private bool doToggleUiHide; + private bool doToggleUiHideDuringCutscenes; + private bool doToggleUiHideDuringGpose; #region Experimental @@ -97,10 +101,18 @@ namespace Dalamud.Interface ImGui.TextColored(this.hintTextColor, Loc.Localize("DalamudSettingsGlobalUiScaleHint", "Scale all XIVLauncher UI elements - useful for 4K displays.")); - ImGui.Dummy(new Vector2(10f, 10f)); + ImGui.Dummy(new Vector2(10f, 16f)); - ImGui.Checkbox(Loc.Localize("DalamudSettingToggleUiHide", "Hide plugin UI when the game UI is hidden and during cutscenes and gpose"), ref this.doToggleUiHide); - ImGui.TextColored(this.hintTextColor, Loc.Localize("DalamudSettingToggleUiHideHint", "Check this box to hide any open windows by plugins when toggling the game overlay, or upon entering gpose or a cutscene.")); + ImGui.TextColored(this.hintTextColor, Loc.Localize("DalamudSettingToggleUiHideOptOutNote", "Plugins may independently opt out of the settings below.")); + + ImGui.Checkbox(Loc.Localize("DalamudSettingToggleUiHide", "Hide plugin UI when the game UI is toggled off."), ref this.doToggleUiHide); + ImGui.TextColored(this.hintTextColor, Loc.Localize("DalamudSettingToggleUiHideHint", "Check this box to hide any open windows by plugins when toggling the game overlay.")); + + ImGui.Checkbox(Loc.Localize("DalamudSettingToggleUiHideDuringCutscenes", "Hide plugin UI during cutscenes."), ref this.doToggleUiHideDuringCutscenes); + ImGui.TextColored(this.hintTextColor, Loc.Localize("DalamudSettingToggleUiHideDuringCutscenesHint", "Check this box to hide any open windows by plugins during cutscenes.")); + + ImGui.Checkbox(Loc.Localize("DalamudSettingToggleUiHideDuringGpose", "Hide plugin UI while gpose is active."), ref this.doToggleUiHideDuringGpose); + ImGui.TextColored(this.hintTextColor, Loc.Localize("DalamudSettingToggleUiHideDuringGposeHint", "Check this box to hide any open windows by plugins while gpose is active.")); ImGui.EndTabItem(); } @@ -150,6 +162,8 @@ namespace Dalamud.Interface this.dalamud.Configuration.GlobalUiScale = this.globalUiScale; this.dalamud.Configuration.ToggleUiHide = this.doToggleUiHide; + this.dalamud.Configuration.ToggleUiHideDuringCutscenes = this.doToggleUiHideDuringCutscenes; + this.dalamud.Configuration.ToggleUiHideDuringGpose = this.doToggleUiHideDuringGpose; this.dalamud.Configuration.DoPluginTest = this.doPluginTest; this.dalamud.Configuration.DoDalamudTest = this.doDalamudTest; diff --git a/Dalamud/Interface/UiBuilder.cs b/Dalamud/Interface/UiBuilder.cs index b94474483..cd08cfb02 100644 --- a/Dalamud/Interface/UiBuilder.cs +++ b/Dalamud/Interface/UiBuilder.cs @@ -35,13 +35,26 @@ namespace Dalamud.Interface public event RawDX11Scene.BuildUIDelegate OnBuildUi; /// - /// Choose if this plugin should hide its UI automatically when the whole game hides its UI. + /// Choose if this plugin should hide its UI automatically when the whole game hides its UI (e.g. with Scroll Lock). /// public bool DisableAutomaticUiHide { get; set; } = false; - private bool CutsceneOrGposeActive => this.dalamud.ClientState != null && this.dalamud.ClientState.Condition[ConditionFlag.OccupiedInCutSceneEvent] || - this.dalamud.ClientState.Condition[ConditionFlag.WatchingCutscene] || - this.dalamud.ClientState.Condition[ConditionFlag.WatchingCutscene78]; + /// + /// Choose if this plugin should hide its UI automatically during cutscenes. + /// + public bool DisableCutsceneUiHide { get; set; } = false; + + /// + /// Choose if this plugin should hide its UI automatically while gpose is active. + /// + public bool DisableGposeUiHide { get; set; } = false; + + private bool CutsceneActive => this.dalamud.ClientState != null && + this.dalamud.ClientState.Condition[ConditionFlag.OccupiedInCutSceneEvent] || + this.dalamud.ClientState.Condition[ConditionFlag.WatchingCutscene78]; + + private bool GposeActive => this.dalamud.ClientState != null && + this.dalamud.ClientState.Condition[ConditionFlag.WatchingCutscene]; private Dalamud dalamud; @@ -135,7 +148,9 @@ namespace Dalamud.Interface private void OnDraw() { - if ((this.dalamud.Framework.Gui.GameUiHidden || CutsceneOrGposeActive) && this.dalamud.Configuration.ToggleUiHide && !DisableAutomaticUiHide) + if (this.dalamud.Framework.Gui.GameUiHidden && this.dalamud.Configuration.ToggleUiHide && !DisableAutomaticUiHide || + CutsceneActive && this.dalamud.Configuration.ToggleUiHideDuringCutscenes && !DisableCutsceneUiHide || + GposeActive && this.dalamud.Configuration.ToggleUiHideDuringGpose && !DisableGposeUiHide) return; ImGui.PushID(this.namespaceName); From 7d1ce76b2e612736d6a2d0fb20033858a899e3af Mon Sep 17 00:00:00 2001 From: karashiiro <49822414+karashiiro@users.noreply.github.com> Date: Wed, 9 Sep 2020 19:24:51 -0700 Subject: [PATCH 2/2] Make DisableAutomaticUIHide override everything, make toggle DisableUserUIHide --- Dalamud/Interface/InterfaceManager.cs | 4 ---- Dalamud/Interface/UiBuilder.cs | 15 ++++++++++----- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Dalamud/Interface/InterfaceManager.cs b/Dalamud/Interface/InterfaceManager.cs index 4d24cd8b8..3e34a16ae 100644 --- a/Dalamud/Interface/InterfaceManager.cs +++ b/Dalamud/Interface/InterfaceManager.cs @@ -1,13 +1,9 @@ using System; using System.ComponentModel; -using System.Diagnostics; using System.IO; -using System.Linq; using System.Numerics; using System.Runtime.InteropServices; using System.Text; -using System.Threading; -using CheapLoc; using Dalamud.Game; using Dalamud.Game.Internal.DXGI; using Dalamud.Hooking; diff --git a/Dalamud/Interface/UiBuilder.cs b/Dalamud/Interface/UiBuilder.cs index cd08cfb02..5ecfbd101 100644 --- a/Dalamud/Interface/UiBuilder.cs +++ b/Dalamud/Interface/UiBuilder.cs @@ -35,10 +35,15 @@ namespace Dalamud.Interface public event RawDX11Scene.BuildUIDelegate OnBuildUi; /// - /// Choose if this plugin should hide its UI automatically when the whole game hides its UI (e.g. with Scroll Lock). + /// Choose if this plugin should hide its UI automatically when the game's UI is hidden. /// public bool DisableAutomaticUiHide { get; set; } = false; + /// + /// Choose if this plugin should hide its UI automatically when the user toggles the UI. + /// + public bool DisableUserUiHide { get; set; } = false; + /// /// Choose if this plugin should hide its UI automatically during cutscenes. /// @@ -120,7 +125,7 @@ namespace Dalamud.Interface /// Any ImFontPtr objects that you store can be invalidated when fonts are rebuilt /// (at any time), so you should both reload your custom fonts and restore those /// pointers inside this handler.
- /// PLEASE remove this handler inside Dipose, or when you no longer need your fonts! + /// PLEASE remove this handler inside Dispose, or when you no longer need your fonts! /// public Action OnBuildFonts { @@ -148,9 +153,9 @@ namespace Dalamud.Interface private void OnDraw() { - if (this.dalamud.Framework.Gui.GameUiHidden && this.dalamud.Configuration.ToggleUiHide && !DisableAutomaticUiHide || - CutsceneActive && this.dalamud.Configuration.ToggleUiHideDuringCutscenes && !DisableCutsceneUiHide || - GposeActive && this.dalamud.Configuration.ToggleUiHideDuringGpose && !DisableGposeUiHide) + if (this.dalamud.Framework.Gui.GameUiHidden && this.dalamud.Configuration.ToggleUiHide && !(DisableUserUiHide || DisableAutomaticUiHide) || + CutsceneActive && this.dalamud.Configuration.ToggleUiHideDuringCutscenes && !(DisableCutsceneUiHide || DisableAutomaticUiHide) || + GposeActive && this.dalamud.Configuration.ToggleUiHideDuringGpose && !(DisableGposeUiHide || DisableAutomaticUiHide)) return; ImGui.PushID(this.namespaceName);