This commit is contained in:
goat 2021-04-13 12:46:06 +02:00
commit ec573aae69
No known key found for this signature in database
GPG key ID: F18F057873895461
5 changed files with 137 additions and 1 deletions

View file

@ -46,7 +46,7 @@ namespace Dalamud.Game.Internal.Gui {
ToggleUiHide = sig.ScanText("48 89 5C 24 ?? 48 89 74 24 ?? 57 48 83 EC 20 0F B6 B9 ?? ?? ?? ?? B8 ?? ?? ?? ??");
GetBaseUIObject = sig.ScanText("E8 ?? ?? ?? ?? 41 B8 01 00 00 00 48 8D 15 ?? ?? ?? ?? 48 8B 48 20 E8 ?? ?? ?? ?? 48 8B CF");
GetUIObjectByName = sig.ScanText("E8 ?? ?? ?? ?? 48 8B CF 48 89 87 ?? ?? 00 00 E8 ?? ?? ?? ?? 41 B8 01 00 00 00");
GetUIModule = sig.ScanText("E8 ?? ?? ?? ?? 83 3B 01");
GetUIModule = sig.ScanText("E8 ?? ?? ?? ?? 48 8B C8 48 85 C0 75 2D");
}
}
}

View file

@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Numerics;
using Dalamud.Interface.Colors;
using Dalamud.Interface.Windowing;
using ImGuiNET;
@ -13,6 +14,7 @@ namespace Dalamud.Interface.Components
internal class ComponentDemoWindow : Window
{
private readonly List<KeyValuePair<string, Action>> componentDemos;
private Vector4 defaultColor = ImGuiColors.DalamudOrange;
/// <summary>
/// Initializes a new instance of the <see cref="ComponentDemoWindow"/> class.
@ -27,6 +29,8 @@ namespace Dalamud.Interface.Components
Demo("Test", ImGuiComponents.Test),
Demo("HelpMarker", HelpMarkerDemo),
Demo("IconButton", IconButtonDemo),
Demo("TextWithLabel", TextWithLabelDemo),
Demo("ColorPickerWithPalette", this.ColorPickerWithPaletteDemo),
};
}
@ -72,9 +76,21 @@ namespace Dalamud.Interface.Components
ImGui.EndPopup();
}
private static void TextWithLabelDemo()
{
ImGuiComponents.TextWithLabel("Label", "Hover to see more", "more");
}
private static KeyValuePair<string, Action> Demo(string name, Action func)
{
return new KeyValuePair<string, Action>(name, func);
}
private void ColorPickerWithPaletteDemo()
{
ImGui.Text("Click on the color button to use the picker.");
ImGui.SameLine();
this.defaultColor = ImGuiComponents.ColorPickerWithPalette(1, "ColorPickerWithPalette Demo", this.defaultColor);
}
}
}

View file

@ -0,0 +1,70 @@
using System.Numerics;
using ImGuiNET;
namespace Dalamud.Interface.Components
{
/// <summary>
/// Class containing various methods providing ImGui components.
/// </summary>
public static partial class ImGuiComponents
{
/// <summary>
/// ColorPicker with palette.
/// </summary>
/// <param name="id">Id for the color picker.</param>
/// <param name="description">The description of the color picker.</param>
/// <param name="originalColor">The current color.</param>
/// <returns>Selected color.</returns>
public static Vector4 ColorPickerWithPalette(int id, string description, Vector4 originalColor)
{
const ImGuiColorEditFlags flags = ImGuiColorEditFlags.NoSidePreview | ImGuiColorEditFlags.NoSmallPreview;
return ColorPickerWithPalette(id, description, originalColor, flags);
}
/// <summary>
/// ColorPicker with palette with color picker options.
/// </summary>
/// <param name="id">Id for the color picker.</param>
/// <param name="description">The description of the color picker.</param>
/// <param name="originalColor">The current color.</param>
/// <param name="flags">Flags to customize color picker.</param>
/// <returns>Selected color.</returns>
public static Vector4 ColorPickerWithPalette(int id, string description, Vector4 originalColor, ImGuiColorEditFlags flags)
{
var existingColor = originalColor;
var selectedColor = originalColor;
var colorPalette = ImGuiHelpers.DefaultColorPalette(36);
if (ImGui.ColorButton($"{description}###ColorPickerButton{id}", originalColor))
{
ImGui.OpenPopup($"###ColorPickerPopup{id}");
}
if (ImGui.BeginPopup($"###ColorPickerPopup{id}"))
{
if (ImGui.ColorPicker4($"###ColorPicker{id}", ref existingColor, flags))
{
selectedColor = existingColor;
}
for (var i = 0; i < 4; i++)
{
ImGui.Spacing();
for (var j = i * 9; j < (i * 9) + 9; j++)
{
if (ImGui.ColorButton($"###ColorPickerSwatch{id}{i}{j}", colorPalette[j]))
{
selectedColor = colorPalette[j];
}
ImGui.SameLine();
}
}
ImGui.EndPopup();
}
return selectedColor;
}
}
}

View file

@ -0,0 +1,32 @@
using ImGuiNET;
namespace Dalamud.Interface.Components
{
/// <summary>
/// Class containing various methods providing ImGui components.
/// </summary>
public static partial class ImGuiComponents
{
/// <summary>
/// TextWithLabel component to show labeled text.
/// </summary>
/// <param name="label">The label for text.</param>
/// <param name="value">The text value.</param>
/// <param name="hint">The hint to show on hover.</param>
public static void TextWithLabel(
string label, string value, string hint = "")
{
ImGui.Text(label + ": ");
ImGui.SameLine();
if (string.IsNullOrEmpty(hint))
{
ImGui.Text(value);
}
else
{
ImGui.Text(value + "*");
if (ImGui.IsItemHovered()) ImGui.SetTooltip(hint);
}
}
}
}

View file

@ -1,3 +1,4 @@
using System.Collections.Generic;
using System.Numerics;
using ImGuiNET;
@ -57,6 +58,23 @@ namespace Dalamud.Interface
string name, Vector2 position, ImGuiCond condition = ImGuiCond.None)
=> ImGui.SetWindowPos(position + MainViewport.Pos, condition);
/// <summary>
/// Creates default color palette for use with color pickers.
/// </summary>
/// <param name="swatchCount">The total number of swatches to use.</param>
/// <returns>Default color palette.</returns>
public static List<Vector4> DefaultColorPalette(int swatchCount = 32)
{
var colorPalette = new List<Vector4>();
for (var i = 0; i < swatchCount; i++)
{
ImGui.ColorConvertHSVtoRGB(i / 31.0f, 0.7f, 0.8f, out var r, out var g, out var b);
colorPalette.Add(new Vector4(r, g, b, 1.0f));
}
return colorPalette;
}
/// <summary>
/// Get data needed for each new frame.
/// </summary>