diff --git a/Command.cs b/Command.cs index 5f04491..97b120b 100644 --- a/Command.cs +++ b/Command.cs @@ -1,4 +1,7 @@ using Dalamud.Game.Command; +using FFXIVClientStructs.FFXIV.Client.Graphics.Kernel; +using FFXIVClientStructs.FFXIV.Client.System.Framework; +using FFXIVClientStructs.FFXIV.Client.UI; namespace Screenie; @@ -16,6 +19,18 @@ internal class Command : IDisposable { this.Plugin.CommandManager.RemoveHandler(CommandName); } + private static unsafe void SetUiVisibility(bool wantVisible) { + var atkModule = Framework.Instance()->GetUiModule()->GetRaptureAtkModule(); + var hidden = atkModule->RaptureAtkUnitManager.Flags.HasFlag(RaptureAtkModuleFlags.UiHidden); + if (wantVisible && hidden) { + atkModule->SetUiVisibility(true); + } + + if (!wantVisible && !hidden) { + atkModule->SetUiVisibility(false); + } + } + private void OnCommand(string command, string arguments) { // TODO: eventually be able to do like /screenie --no-ui --format png // etc. @@ -24,6 +39,27 @@ internal class Command : IDisposable { return; } - this.Plugin.SaveScreenshot(); + unsafe { + var device = Device.Instance(); + var oldWidth = device->Width; + var oldHeight = device->Height; + + device->NewWidth = 3840; + device->NewHeight = 2160; + device->RequestResolutionChange = 1; + + SetUiVisibility(false); + + this.Plugin.Framework.RunOnTick(() => { + this.Plugin.SaveScreenshot(); + + this.Plugin.Framework.RunOnTick(() => { + SetUiVisibility(true); + device->NewWidth = oldWidth; + device->NewHeight = oldHeight; + device->RequestResolutionChange = 1; + }); + }); + } } }