mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-13 12:14:16 +01:00
Merge pull request #528 from daemitus/windows
This commit is contained in:
commit
d23b710edf
3 changed files with 28 additions and 12 deletions
|
|
@ -48,10 +48,8 @@ namespace Dalamud.Game.Internal
|
||||||
var uiModuleRequestMainCommandAddress = sigScanner.ScanText("40 53 56 48 81 EC ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? 48 33 C4 48 89 84 24 ?? ?? ?? ?? 48 8B 01 8B DA 48 8B F1 FF 90 ?? ?? ?? ??");
|
var uiModuleRequestMainCommandAddress = sigScanner.ScanText("40 53 56 48 81 EC ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? 48 33 C4 48 89 84 24 ?? ?? ?? ?? 48 8B 01 8B DA 48 8B F1 FF 90 ?? ?? ?? ??");
|
||||||
this.hookUiModuleRequestMainCommand = new Hook<UiModuleRequestMainCommand>(uiModuleRequestMainCommandAddress, this.UiModuleRequestMainCommandDetour);
|
this.hookUiModuleRequestMainCommand = new Hook<UiModuleRequestMainCommand>(uiModuleRequestMainCommandAddress, this.UiModuleRequestMainCommandDetour);
|
||||||
|
|
||||||
var atkUnitBaseReceiveGlobalEventAddress =
|
var atkUnitBaseReceiveGlobalEventAddress = sigScanner.ScanText("48 89 5C 24 ?? 48 89 7C 24 ?? 55 41 56 41 57 48 8B EC 48 83 EC 50 44 0F B7 F2 ");
|
||||||
sigScanner.ScanText("48 89 5C 24 ?? 48 89 7C 24 ?? 55 41 56 41 57 48 8B EC 48 83 EC 50 44 0F B7 F2 ");
|
this.hookAtkUnitBaseReceiveGlobalEvent = new Hook<AtkUnitBaseReceiveGlobalEvent>(atkUnitBaseReceiveGlobalEventAddress, this.AtkUnitBaseReceiveGlobalEventDetour);
|
||||||
this.hookAtkUnitBaseReceiveGlobalEvent =
|
|
||||||
new Hook<AtkUnitBaseReceiveGlobalEvent>(atkUnitBaseReceiveGlobalEventAddress, this.AtkUnitBaseReceiveGlobalEventDetour);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private delegate void AgentHudOpenSystemMenuPrototype(void* thisPtr, AtkValue* atkValueArgs, uint menuSize);
|
private delegate void AgentHudOpenSystemMenuPrototype(void* thisPtr, AtkValue* atkValueArgs, uint menuSize);
|
||||||
|
|
|
||||||
|
|
@ -173,16 +173,16 @@ namespace Dalamud.Interface
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="filePath">The full filepath to the image.</param>
|
/// <param name="filePath">The full filepath to the image.</param>
|
||||||
/// <returns>A <see cref="TextureWrap"/> object wrapping the created image. Use <see cref="TextureWrap.ImGuiHandle"/> inside ImGui.Image().</returns>
|
/// <returns>A <see cref="TextureWrap"/> object wrapping the created image. Use <see cref="TextureWrap.ImGuiHandle"/> inside ImGui.Image().</returns>
|
||||||
public TextureWrap LoadImage(string filePath) =>
|
public TextureWrap LoadImage(string filePath)
|
||||||
Service<InterfaceManager>.Get().LoadImage(filePath);
|
=> Service<InterfaceManager>.Get().LoadImage(filePath);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Loads an image from a byte stream, such as a png downloaded into memory.
|
/// Loads an image from a byte stream, such as a png downloaded into memory.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="imageData">A byte array containing the raw image data.</param>
|
/// <param name="imageData">A byte array containing the raw image data.</param>
|
||||||
/// <returns>A <see cref="TextureWrap"/> object wrapping the created image. Use <see cref="TextureWrap.ImGuiHandle"/> inside ImGui.Image().</returns>
|
/// <returns>A <see cref="TextureWrap"/> object wrapping the created image. Use <see cref="TextureWrap.ImGuiHandle"/> inside ImGui.Image().</returns>
|
||||||
public TextureWrap LoadImage(byte[] imageData) =>
|
public TextureWrap LoadImage(byte[] imageData)
|
||||||
Service<InterfaceManager>.Get().LoadImage(imageData);
|
=> Service<InterfaceManager>.Get().LoadImage(imageData);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Loads an image from raw unformatted pixel data, with no type or header information. To load formatted data, use <see cref="LoadImage(byte[])"/>.
|
/// Loads an image from raw unformatted pixel data, with no type or header information. To load formatted data, use <see cref="LoadImage(byte[])"/>.
|
||||||
|
|
@ -192,8 +192,8 @@ namespace Dalamud.Interface
|
||||||
/// <param name="height">The height of the image contained in <paramref name="imageData"/>.</param>
|
/// <param name="height">The height of the image contained in <paramref name="imageData"/>.</param>
|
||||||
/// <param name="numChannels">The number of channels (bytes per pixel) of the image contained in <paramref name="imageData"/>. This should usually be 4.</param>
|
/// <param name="numChannels">The number of channels (bytes per pixel) of the image contained in <paramref name="imageData"/>. This should usually be 4.</param>
|
||||||
/// <returns>A <see cref="TextureWrap"/> object wrapping the created image. Use <see cref="TextureWrap.ImGuiHandle"/> inside ImGui.Image().</returns>
|
/// <returns>A <see cref="TextureWrap"/> object wrapping the created image. Use <see cref="TextureWrap.ImGuiHandle"/> inside ImGui.Image().</returns>
|
||||||
public TextureWrap LoadImageRaw(byte[] imageData, int width, int height, int numChannels) =>
|
public TextureWrap LoadImageRaw(byte[] imageData, int width, int height, int numChannels)
|
||||||
Service<InterfaceManager>.Get().LoadImageRaw(imageData, width, height, numChannels);
|
=> Service<InterfaceManager>.Get().LoadImageRaw(imageData, width, height, numChannels);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Call this to queue a rebuild of the font atlas.<br/>
|
/// Call this to queue a rebuild of the font atlas.<br/>
|
||||||
|
|
@ -226,7 +226,7 @@ namespace Dalamud.Interface
|
||||||
|
|
||||||
interfaceManager.Draw -= this.OnDraw;
|
interfaceManager.Draw -= this.OnDraw;
|
||||||
interfaceManager.BuildFonts -= this.OnBuildFonts;
|
interfaceManager.BuildFonts -= this.OnBuildFonts;
|
||||||
interfaceManager.BuildFonts -= this.OnResizeBuffers;
|
interfaceManager.ResizeBuffers -= this.OnResizeBuffers;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
using ImGuiNET;
|
using ImGuiNET;
|
||||||
|
using Serilog;
|
||||||
|
|
||||||
namespace Dalamud.Interface.Windowing
|
namespace Dalamud.Interface.Windowing
|
||||||
{
|
{
|
||||||
|
|
@ -15,6 +16,8 @@ namespace Dalamud.Interface.Windowing
|
||||||
|
|
||||||
private readonly List<Window> windows = new();
|
private readonly List<Window> windows = new();
|
||||||
|
|
||||||
|
private string lastFocusedWindowName = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="WindowSystem"/> class.
|
/// Initializes a new instance of the <see cref="WindowSystem"/> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -94,13 +97,28 @@ namespace Dalamud.Interface.Windowing
|
||||||
window.DrawInternal();
|
window.DrawInternal();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.HasAnyFocus = this.windows.Any(x => x.IsFocused && x.RespectCloseHotkey);
|
var focusedWindow = this.windows.FirstOrDefault(x => x.IsFocused && x.RespectCloseHotkey);
|
||||||
|
this.HasAnyFocus = focusedWindow != default;
|
||||||
|
|
||||||
if (this.HasAnyFocus)
|
if (this.HasAnyFocus)
|
||||||
{
|
{
|
||||||
|
if (this.lastFocusedWindowName != focusedWindow.WindowName)
|
||||||
|
{
|
||||||
|
Log.Verbose($"WindowSystem \"{this.Namespace}\" Window \"{focusedWindow.WindowName}\" has focus now");
|
||||||
|
this.lastFocusedWindowName = focusedWindow.WindowName;
|
||||||
|
}
|
||||||
|
|
||||||
HasAnyWindowSystemFocus = true;
|
HasAnyWindowSystemFocus = true;
|
||||||
lastAnyFocus = DateTimeOffset.Now;
|
lastAnyFocus = DateTimeOffset.Now;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (this.lastFocusedWindowName != string.Empty)
|
||||||
|
{
|
||||||
|
Log.Verbose($"WindowSystem \"{this.Namespace}\" Window \"{this.lastFocusedWindowName}\" lost focus");
|
||||||
|
this.lastFocusedWindowName = string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (hasNamespace)
|
if (hasNamespace)
|
||||||
ImGui.PopID();
|
ImGui.PopID();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue