From 056953c26e705ad73ac2c452eeded638d767bd2d Mon Sep 17 00:00:00 2001 From: Jade Macho Date: Wed, 14 Feb 2024 00:05:07 +0100 Subject: [PATCH] Initial commit - resize works --- CustomResolution/Cmd.cs | 52 ++++++++++ CustomResolution/Configuration.cs | 43 ++++++++ CustomResolution/CustomResolution.csproj | 66 ++++++++++++ CustomResolution/CustomResolution.json | 11 ++ CustomResolution/NativeMethods.txt | 1 + CustomResolution/OpenSettingsCmd.cs | 13 +++ CustomResolution/Plugin.cs | 125 +++++++++++++++++++++++ CustomResolution/PluginUI.cs | 46 +++++++++ CustomResolution/Service.cs | 32 ++++++ CustomResolution/Windows/ConfigWindow.cs | 83 +++++++++++++++ CustomResolution/images/icon.png | Bin 0 -> 12637 bytes CustomResolution/packages.lock.json | 54 ++++++++++ 12 files changed, 526 insertions(+) create mode 100644 CustomResolution/Cmd.cs create mode 100644 CustomResolution/Configuration.cs create mode 100644 CustomResolution/CustomResolution.csproj create mode 100644 CustomResolution/CustomResolution.json create mode 100644 CustomResolution/NativeMethods.txt create mode 100644 CustomResolution/OpenSettingsCmd.cs create mode 100644 CustomResolution/Plugin.cs create mode 100644 CustomResolution/PluginUI.cs create mode 100644 CustomResolution/Service.cs create mode 100644 CustomResolution/Windows/ConfigWindow.cs create mode 100644 CustomResolution/images/icon.png create mode 100644 CustomResolution/packages.lock.json diff --git a/CustomResolution/Cmd.cs b/CustomResolution/Cmd.cs new file mode 100644 index 0000000..c6c6a18 --- /dev/null +++ b/CustomResolution/Cmd.cs @@ -0,0 +1,52 @@ +using Dalamud.Game.Command; +using Dalamud.Plugin.Services; +using System; + +namespace CustomResolution; + +public abstract class Cmd : IDisposable +{ + private ICommandManager? _commandManager; + private string? _commandString; + + public abstract string Name { get; } + public string FullName => _commandString ?? $"/{Name}"; + + public abstract string HelpMessage { get; } + + public void Register(ICommandManager commandManager) + { + if (_commandManager is not null) + { + Dispose(); + } + + _commandManager = commandManager; + _commandString = FullName; + + commandManager.AddHandler(FullName, new CommandInfo(Handle) + { + HelpMessage = HelpMessage + }); + } + + public abstract void Run(string arguments); + + public void Dispose() + { + _commandManager?.RemoveHandler(FullName); + _commandManager = null; + + GC.SuppressFinalize(this); + } + + private void Handle(string command, string arguments) + { + if (command != _commandString) + { + return; + } + + Run(arguments); + } +} diff --git a/CustomResolution/Configuration.cs b/CustomResolution/Configuration.cs new file mode 100644 index 0000000..1c44be4 --- /dev/null +++ b/CustomResolution/Configuration.cs @@ -0,0 +1,43 @@ +using Dalamud.Configuration; +using Dalamud.Plugin; +using System; + +namespace CustomResolution; + +[Serializable] +public class Configuration : IPluginConfiguration +{ + public int Version { get; set; } = 0; + + public bool IsScale = true; + public float Scale = 1f; + public uint Width = 1024; + public uint Height = 1024; + + [NonSerialized] + private DalamudPluginInterface? pluginInterface; + + internal void Initialize(DalamudPluginInterface pluginInterface) + { + this.pluginInterface = pluginInterface; + } + + public void Save() + { + pluginInterface!.SavePluginConfig(this); + } +} + +public enum CullingMode +{ + None, + OnlyInFront, + OnlyInView +} + +public enum DutyMode +{ + Always, + OutsideContent, + InContent +} diff --git a/CustomResolution/CustomResolution.csproj b/CustomResolution/CustomResolution.csproj new file mode 100644 index 0000000..fcd9e70 --- /dev/null +++ b/CustomResolution/CustomResolution.csproj @@ -0,0 +1,66 @@ + + + + 0x0ade + + 0.1.0.0 + + + + + + + net7.0-windows + x64 + enable + latest + true + false + false + true + + + + $(appdata)\XIVLauncher\addon\Hooks\dev\ + + + + + + all + + + $(DalamudLibPath)FFXIVClientStructs.dll + false + + + $(DalamudLibPath)Newtonsoft.Json.dll + false + + + $(DalamudLibPath)Dalamud.dll + false + + + $(DalamudLibPath)ImGui.NET.dll + false + + + $(DalamudLibPath)ImGuiScene.dll + false + + + $(DalamudLibPath)Lumina.dll + false + + + $(DalamudLibPath)Lumina.Excel.dll + false + + + + + + + + diff --git a/CustomResolution/CustomResolution.json b/CustomResolution/CustomResolution.json new file mode 100644 index 0000000..8d7d2be --- /dev/null +++ b/CustomResolution/CustomResolution.json @@ -0,0 +1,11 @@ +{ + "Name": "CustomResolution", + "InternalName": "CustomResolution2782", + "Author": "0x0ade", + "ApplicableVersion": "any", + "DalamudApiLevel": 9, + "Punchline": "Enforces a custom resolution for the game, similar to NVIDIA DSR.", + "Description": "Basic plugin that allows you to specify a custom resolution.", + "Tags": [ "dsr", "resolution", "dpi", "scale", "scaling" ], + "RepoUrl": "https://gitea.0x0a.de/0x0ade/DP-CustomResolution" +} diff --git a/CustomResolution/NativeMethods.txt b/CustomResolution/NativeMethods.txt new file mode 100644 index 0000000..2f68cf2 --- /dev/null +++ b/CustomResolution/NativeMethods.txt @@ -0,0 +1 @@ +GetClientRect diff --git a/CustomResolution/OpenSettingsCmd.cs b/CustomResolution/OpenSettingsCmd.cs new file mode 100644 index 0000000..a5212ba --- /dev/null +++ b/CustomResolution/OpenSettingsCmd.cs @@ -0,0 +1,13 @@ +namespace CustomResolution; + +public sealed class OpenSettingsCmd : Cmd +{ + public override string Name => "cres"; + + public override string HelpMessage => "Open the CustomResolution Settings"; + + public override void Run(string arguments) + { + Service.PluginUI.SettingsVisible = !Service.PluginUI.SettingsVisible; + } +} diff --git a/CustomResolution/Plugin.cs b/CustomResolution/Plugin.cs new file mode 100644 index 0000000..3e28ed7 --- /dev/null +++ b/CustomResolution/Plugin.cs @@ -0,0 +1,125 @@ +using Dalamud.IoC; +using Dalamud.Plugin; +using Dalamud.Plugin.Services; +using FFXIVClientStructs.FFXIV.Client.Graphics.Kernel; +using System; +using System.Collections.Generic; +using System.Linq; +using Windows.Win32; +using Windows.Win32.Foundation; + +namespace CustomResolution; + +public sealed unsafe class Plugin : IDalamudPlugin +{ + private readonly List _cmds; + private bool _unloading = false; + private int _tickCount = 0; + + public Plugin([RequiredVersion("1.0")] DalamudPluginInterface pluginInterface) + { + pluginInterface.Create(); + + Service.Plugin = this; + + Service.Config = Service.PluginInterface.GetPluginConfig() as Configuration ?? new(); + Service.Config.Initialize(Service.PluginInterface); + + Service.PluginUI = new(); + + _cmds = typeof(Plugin).Assembly.GetTypes() + .Where(t => !t.IsAbstract && typeof(Cmd).IsAssignableFrom(t)) + .Select(t => (Cmd) Activator.CreateInstance(t)!) + .ToList(); + + foreach (Cmd cmd in _cmds) + { + cmd.Register(Service.CommandManager); + } + + Service.Framework.Update += OnFrameworkUpdate; + } + + public string Name => "CustomResolution"; + + public uint CurrentWidth { get; private set; } + public uint CurrentHeight { get; private set; } + public uint CurrentWindowWidth { get; private set; } + public uint CurrentWindowHeight { get; private set; } + + public void Dispose() + { + _tickCount = 0; + _unloading = true; + + Service.Framework.Update -= OnFrameworkUpdate; + + Service.Framework.RunOnFrameworkThread(Update); + + foreach (Cmd cmd in _cmds) + { + cmd.Dispose(); + } + + Service.PluginUI.Dispose(); + + Service.Plugin = null!; + } + + public void Update() + { + var dev = Device.Instance(); + + var width = dev->Width; + var height = dev->Height; + + PInvoke.GetClientRect((HWND) (IntPtr) dev->hWnd, out var rect); + + if (Service.Config.IsScale || _unloading) + { + var scale = _unloading ? 1f : Service.Config.Scale; + + width = (uint) Math.Round(rect.Width * scale); + height = (uint) Math.Round(rect.Height * scale); + } + else + { + width = Service.Config.Width; + height = Service.Config.Height; + } + + if (width != dev->Width || height != dev->Height) + { + if (width < 256) + { + width = 256; + } + + if (height < 256) + { + height = 256; + } + + dev->NewWidth = width; + dev->NewHeight = height; + dev->RequestResolutionChange = 1; + } + + CurrentWidth = width; + CurrentHeight = height; + CurrentWindowWidth = (uint) rect.Width; + CurrentWindowHeight = (uint) rect.Height; + } + + private void OnFrameworkUpdate(IFramework framework) + { + if (_tickCount++ >= 10) + { + _tickCount = 0; + + Update(); + } + + _tickCount++; + } +} diff --git a/CustomResolution/PluginUI.cs b/CustomResolution/PluginUI.cs new file mode 100644 index 0000000..b05ec61 --- /dev/null +++ b/CustomResolution/PluginUI.cs @@ -0,0 +1,46 @@ +using CustomResolution.Windows; +using Dalamud.Interface.Windowing; +using System; + +namespace CustomResolution; + +public sealed class PluginUI : IDisposable +{ + private ConfigWindow _configWindow; + + internal PluginUI() + { + Service.PluginInterface.UiBuilder.Draw += Draw; + Service.PluginInterface.UiBuilder.OpenConfigUi += ShowConfigWindow; + + WindowSystem.AddWindow(_configWindow = new ConfigWindow()); + } + + public WindowSystem WindowSystem { get; } = new("CustomResolution"); + + public bool SettingsVisible + { + get => _configWindow.IsOpen; + set => _configWindow.IsOpen = value; + } + + public void Dispose() + { + WindowSystem.RemoveAllWindows(); + + _configWindow.Dispose(); + + Service.PluginInterface.UiBuilder.Draw -= Draw; + Service.PluginInterface.UiBuilder.OpenConfigUi -= ShowConfigWindow; + } + + public void Draw() + { + WindowSystem.Draw(); + } + + private void ShowConfigWindow() + { + + } +} diff --git a/CustomResolution/Service.cs b/CustomResolution/Service.cs new file mode 100644 index 0000000..4424099 --- /dev/null +++ b/CustomResolution/Service.cs @@ -0,0 +1,32 @@ +using Dalamud.IoC; +using Dalamud.Plugin; +using System; +using Dalamud.Plugin.Services; + +namespace CustomResolution; + +public sealed class Service +{ + public static Plugin Plugin { get; internal set; } = null!; + + public static Configuration Config { get; internal set; } = null!; + + public static PluginUI PluginUI { get; internal set; } = null!; + + [PluginService] + public static DalamudPluginInterface PluginInterface { get; private set; } = null!; + + [PluginService] + public static ICommandManager CommandManager { get; private set; } = null!; + + [PluginService] + public static IFramework Framework { get; private set; } = null!; + + [PluginService] + public static IClientState ClientState { get; private set; } = null!; + + [PluginService] + public static IPluginLog PluginLog { get; private set; } = null!; + + public static Func? GetPluginInstance { get; private set; } +} diff --git a/CustomResolution/Windows/ConfigWindow.cs b/CustomResolution/Windows/ConfigWindow.cs new file mode 100644 index 0000000..7e4ba5a --- /dev/null +++ b/CustomResolution/Windows/ConfigWindow.cs @@ -0,0 +1,83 @@ +using Dalamud.Interface.Windowing; +using ImGuiNET; +using System; +using System.Numerics; + +namespace CustomResolution.Windows; + +public class ConfigWindow : Window, IDisposable +{ + private int[] _displayCurrentWH = new int[2]; + private int[] _displayCurrentWindowWH = new int[2]; + + private bool _configIsScale; + private float _configScale; + private int[] _configWH = new int[2]; + + public ConfigWindow() : base( + "CustomResolution", + ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoScrollbar | + ImGuiWindowFlags.NoScrollWithMouse) + { + Size = new Vector2(430, 160); + SizeCondition = ImGuiCond.Always; + + UpdateFromConfig(); + } + + public void Dispose() { + } + + public void UpdateFromConfig() + { + var config = Service.Config; + + _configIsScale = config.IsScale; + _configScale = config.Scale; + _configWH[0] = (int) config.Width; + _configWH[1] = (int) config.Height; + } + + public void UpdateToConfig() + { + var config = Service.Config; + + config.IsScale = _configIsScale; + config.Scale = _configScale; + config.Width = (uint) _configWH[0]; + config.Height = (uint) _configWH[1]; + + config.Save(); + } + + public override void Draw() + { + var plugin = Service.Plugin; + + _displayCurrentWH[0] = (int) plugin.CurrentWidth; + _displayCurrentWH[1] = (int) plugin.CurrentHeight; + _displayCurrentWindowWH[0] = (int) plugin.CurrentWindowWidth; + _displayCurrentWindowWH[1] = (int) plugin.CurrentWindowHeight; + + ImGui.BeginDisabled(); + ImGui.InputInt2("Current window size", ref _displayCurrentWindowWH[0]); + ImGui.InputInt2("Current render size", ref _displayCurrentWH[0]); + ImGui.EndDisabled(); + + ImGui.Checkbox("Use scale", ref _configIsScale); + + if (_configIsScale) + { + ImGui.InputFloat("Scale", ref _configScale, 0.01f, 0.1f); + } + else + { + ImGui.InputInt2("Size in pixels", ref _configWH[0]); + } + + if (ImGui.Button("Save and apply")) + { + UpdateToConfig(); + } + } +} diff --git a/CustomResolution/images/icon.png b/CustomResolution/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..af8954675148f2844e940c9544ff018121133a08 GIT binary patch literal 12637 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 literal 0 HcmV?d00001 diff --git a/CustomResolution/packages.lock.json b/CustomResolution/packages.lock.json new file mode 100644 index 0000000..88459a5 --- /dev/null +++ b/CustomResolution/packages.lock.json @@ -0,0 +1,54 @@ +{ + "version": 1, + "dependencies": { + "net7.0-windows7.0": { + "DalamudPackager": { + "type": "Direct", + "requested": "[2.1.12, )", + "resolved": "2.1.12", + "contentHash": "Sc0PVxvgg4NQjcI8n10/VfUQBAS4O+Fw2pZrAqBdRMbthYGeogzu5+xmIGCGmsEZ/ukMOBuAqiNiB5qA3MRalg==" + }, + "Microsoft.Windows.CsWin32": { + "type": "Direct", + "requested": "[0.3.49-beta, )", + "resolved": "0.3.49-beta", + "contentHash": "/iAXplVDKESFyLz/MShuVYVx62YFvFePpq3qrzREl8KScQqG6Z2kV7r9UJTjQS1g+hfy3V+e4m1x9lsu24YNSg==", + "dependencies": { + "Microsoft.Windows.SDK.Win32Docs": "0.1.42-alpha", + "Microsoft.Windows.SDK.Win32Metadata": "55.0.45-preview", + "Microsoft.Windows.WDK.Win32Metadata": "0.9.9-experimental", + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "Microsoft.Windows.SDK.Win32Docs": { + "type": "Transitive", + "resolved": "0.1.42-alpha", + "contentHash": "Z/9po23gUA9aoukirh2ItMU2ZS9++Js9Gdds9fu5yuMojDrmArvY2y+tq9985tR3cxFxpZO1O35Wjfo0khj5HA==" + }, + "Microsoft.Windows.SDK.Win32Metadata": { + "type": "Transitive", + "resolved": "55.0.45-preview", + "contentHash": "2i1kVIk8rMuMCYtoeYeWbmCRLqNgb63Berac3Gv+J/pjp0oucopasKgLQNslryhsgBl4xex9ENhJX2MXEW5vdA==" + }, + "Microsoft.Windows.WDK.Win32Metadata": { + "type": "Transitive", + "resolved": "0.9.9-experimental", + "contentHash": "cncPlxLqR25mFOuvpxZPgXgJqRmXyV5eTULj/9w8AQvO/c1xJDEapohRsWkYaia7hCR/EwEzBHr7RU9u93T03w==", + "dependencies": { + "Microsoft.Windows.SDK.Win32Metadata": "55.0.45-preview" + } + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.5", + "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==" + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" + } + } + } +} \ No newline at end of file