Merge pull request #200 from Caraxi/addon-size

Add support for Addon.Width and Addon.Height
This commit is contained in:
goaaats 2020-11-22 10:20:37 +01:00 committed by GitHub
commit 5f8db98e41
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 54 additions and 1 deletions

View file

@ -19,6 +19,8 @@ namespace Dalamud.Game.Internal.Gui.Addon {
public short X => this.addonStruct.X;
public short Y => this.addonStruct.Y;
public float Scale => this.addonStruct.Scale;
public unsafe float Width => this.addonStruct.RootNode->Width * Scale;
public unsafe float Height => this.addonStruct.RootNode->Height * Scale;
public bool Visible => (this.addonStruct.Flags & 0x20) == 0x20;
}

View file

@ -4,6 +4,7 @@ namespace Dalamud.Game.Internal.Gui.Structs {
public class AddonOffsets {
public const int Name = 0x8;
public const int RootNode = 0xC8;
public const int Flags = 0x182;
public const int X = 0x1BC;
public const int Y = 0x1BE;
@ -19,6 +20,7 @@ namespace Dalamud.Game.Internal.Gui.Structs {
[FieldOffset(AddonOffsets.X)] public short X;
[FieldOffset(AddonOffsets.Y)] public short Y;
[FieldOffset(AddonOffsets.Scale)] public float Scale;
[FieldOffset(AddonOffsets.RootNode)] public unsafe AtkResNode* RootNode;
}
}

View file

@ -0,0 +1,49 @@
using System;
using System.Runtime.InteropServices;
namespace Dalamud.Game.Internal.Gui.Structs {
[StructLayout(LayoutKind.Explicit, Size = 0xA8)]
// https://github.com/aers/FFXIVClientStructs/blob/main/Component/GUI/AtkResNode.cs
public unsafe struct AtkResNode {
[FieldOffset(0x0)] public IntPtr AtkEventTarget;
[FieldOffset(0x8)] public uint NodeID;
[FieldOffset(0x20)] public AtkResNode* ParentNode;
[FieldOffset(0x28)] public AtkResNode* PrevSiblingNode;
[FieldOffset(0x30)] public AtkResNode* NextSiblingNode;
[FieldOffset(0x38)] public AtkResNode* ChildNode;
[FieldOffset(0x40)] public ushort Type;
[FieldOffset(0x42)] public ushort ChildCount;
[FieldOffset(0x44)] public float X;
[FieldOffset(0x48)] public float Y;
[FieldOffset(0x4C)] public float ScaleX;
[FieldOffset(0x50)] public float ScaleY;
[FieldOffset(0x54)] public float Rotation;
[FieldOffset(0x58)] public fixed float UnkMatrix[3 * 2];
[FieldOffset(0x70)] public uint Color;
[FieldOffset(0x74)] public float Depth;
[FieldOffset(0x78)] public float Depth_2;
[FieldOffset(0x7C)] public ushort AddRed;
[FieldOffset(0x7E)] public ushort AddGreen;
[FieldOffset(0x80)] public ushort AddBlue;
[FieldOffset(0x82)] public ushort AddRed_2;
[FieldOffset(0x84)] public ushort AddGreen_2;
[FieldOffset(0x86)] public ushort AddBlue_2;
[FieldOffset(0x88)] public byte MultiplyRed;
[FieldOffset(0x89)] public byte MultiplyGreen;
[FieldOffset(0x8A)] public byte MultiplyBlue;
[FieldOffset(0x8B)] public byte MultiplyRed_2;
[FieldOffset(0x8C)] public byte MultiplyGreen_2;
[FieldOffset(0x8D)] public byte MultiplyBlue_2;
[FieldOffset(0x8E)] public byte Alpha_2;
[FieldOffset(0x8F)] public byte UnkByte_1;
[FieldOffset(0x90)] public ushort Width;
[FieldOffset(0x92)] public ushort Height;
[FieldOffset(0x94)] public float OriginX;
[FieldOffset(0x98)] public float OriginY;
[FieldOffset(0x9C)] public ushort Priority;
[FieldOffset(0x9E)] public short Flags;
[FieldOffset(0xA0)] public uint Flags_2;
}
}

View file

@ -301,7 +301,7 @@ namespace Dalamud.Interface
}
if (this.resultAddon != null) {
ImGui.TextUnformatted($"{this.resultAddon.Name} - 0x{this.resultAddon.Address.ToInt64():x}\n v:{this.resultAddon.Visible} x:{this.resultAddon.X} y:{this.resultAddon.Y} s:{this.resultAddon.Scale}");
ImGui.TextUnformatted($"{this.resultAddon.Name} - 0x{this.resultAddon.Address.ToInt64():x}\n v:{this.resultAddon.Visible} x:{this.resultAddon.X} y:{this.resultAddon.Y} s:{this.resultAddon.Scale}, w:{this.resultAddon.Width}, h:{this.resultAddon.Height}");
}
if (ImGui.Button("Get Base UI object")) {