From 547afae8efc6ea1ac0176610cad14dedf59e7cd7 Mon Sep 17 00:00:00 2001 From: Matt Edmondson Date: Thu, 31 Jul 2025 12:27:20 +1000 Subject: [PATCH 01/11] Add ImGuizmo, ImNodes, and ImPlot support to ImGuiAppDemo: Introduced new features for 3D manipulation, node editing, and advanced plotting. Updated project references and implemented demo states and rendering methods for each new library. --- ImGuiAppDemo/ImGuiAppDemo.cs | 345 +++++++++++++++++++++++++++++++ ImGuiAppDemo/ImGuiAppDemo.csproj | 3 + 2 files changed, 348 insertions(+) diff --git a/ImGuiAppDemo/ImGuiAppDemo.cs b/ImGuiAppDemo/ImGuiAppDemo.cs index 497b313..1b43047 100644 --- a/ImGuiAppDemo/ImGuiAppDemo.cs +++ b/ImGuiAppDemo/ImGuiAppDemo.cs @@ -8,6 +8,9 @@ namespace ktsu.ImGuiApp.Demo; using System.Text; using Hexa.NET.ImGui; +using Hexa.NET.ImGuizmo; +using Hexa.NET.ImNodes; +using Hexa.NET.ImPlot; using ktsu.Extensions; using ktsu.ImGuiApp; @@ -75,6 +78,31 @@ internal static class ImGuiAppDemo private static int radioSelection; private static string modalInputBuffer = ""; + // ImGuizmo demo state + private static Matrix4x4 gizmoTransform = Matrix4x4.Identity; + private static Matrix4x4 gizmoView = Matrix4x4.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.UnitY); + private static Matrix4x4 gizmoProjection = Matrix4x4.CreatePerspectiveFieldOfView(MathF.PI / 4f, 16f / 9f, 0.1f, 100f); + private static ImGuizmoOperation gizmoOperation = ImGuizmoOperation.Translate; + private static ImGuizmoMode gizmoMode = ImGuizmoMode.Local; + private static bool gizmoEnabled = true; + + // ImNodes demo state + private static int nextNodeId = 1; + private static int nextLinkId = 1; + private static readonly List nodes = []; + private static readonly List links = []; + + // ImPlot demo state + private static readonly List sinData = []; + private static readonly List cosData = []; + private static readonly List noiseData = []; + private static float plotTime; + private static readonly Random plotRandom = new(); + + private sealed record SimpleNode(int Id, Vector2 Position, string Name, List InputPins, List OutputPins); + private sealed record SimpleLink(int Id, int InputPinId, int OutputPinId); + private sealed record SimplePin(int Id, int NodeId, string Name, bool IsOutput); + private sealed record DemoItem(int Id, string Name, string Category, float Value, bool Active); [System.Diagnostics.CodeAnalysis.SuppressMessage("Security", "CA5394:Do not use insecure randomness", Justification = "")] @@ -96,6 +124,27 @@ static ImGuiAppDemo() textBuffer.Append("This is a demonstration of ImGui text editing capabilities.\n"); textBuffer.Append("You can edit this text, and it will update in real-time.\n"); textBuffer.Append("ImGui supports multi-line text editing with syntax highlighting possibilities."); + + // Initialize ImNodes context + ImNodes.CreateContext(); + + // Initialize demo data for ImNodes + nodes.Add(new SimpleNode(nextNodeId++, new Vector2(50, 50), "Input Node", [], [1, 2])); + nodes.Add(new SimpleNode(nextNodeId++, new Vector2(250, 100), "Process Node", [3], [4])); + nodes.Add(new SimpleNode(nextNodeId++, new Vector2(450, 50), "Output Node", [5, 6], [])); + + // Create some demo links + links.Add(new SimpleLink(nextLinkId++, 1, 3)); // Connect Input to Process + links.Add(new SimpleLink(nextLinkId++, 4, 5)); // Connect Process to Output + + // Initialize plot data + for (int i = 0; i < 100; i++) + { + float x = i * 0.1f; + sinData.Add(MathF.Sin(x)); + cosData.Add(MathF.Cos(x)); + noiseData.Add((float)(plotRandom.NextDouble() * 2.0 - 1.0)); + } } private static void Main() => ImGuiApp.Start(new() @@ -172,6 +221,9 @@ private static void RenderMainDemoWindow() RenderAnimationTab(); RenderUnicodeTab(); RenderNerdFontTab(); + RenderImGuizmoTab(); + RenderImNodesTab(); + RenderImPlotTab(); RenderUtilityTab(); ImGui.EndTabBar(); } @@ -839,6 +891,290 @@ private static void RenderNerdFontTab() } } + private static void RenderImGuizmoTab() + { + if (ImGui.BeginTabItem("ImGuizmo 3D Gizmos")) + { + ImGui.TextWrapped("ImGuizmo provides 3D manipulation gizmos for translate, rotate, and scale operations."); + ImGui.Separator(); + + // Gizmo controls + ImGui.Text("Gizmo Controls:"); + ImGui.Checkbox("Enable Gizmo", ref gizmoEnabled); + + // Operation selection + ImGui.Text("Operation:"); + string[] operationNames = Enum.GetNames(); + ImGuizmoOperation[] operations = Enum.GetValues(); + int opIndex = Array.IndexOf(operations, gizmoOperation); + if (ImGui.Combo("##Operation", ref opIndex, operationNames, operationNames.Length)) + { + gizmoOperation = operations[opIndex]; + } + + // Mode selection + ImGui.Text("Mode:"); + string[] modeNames = Enum.GetNames(); + ImGuizmoMode[] modes = Enum.GetValues(); + int modeIndex = Array.IndexOf(modes, gizmoMode); + if (ImGui.Combo("##Mode", ref modeIndex, modeNames, modeNames.Length)) + { + gizmoMode = modes[modeIndex]; + } + + ImGui.Separator(); + + // Display transform matrix values + ImGui.Text("Transform Matrix:"); + unsafe + { + float* matrixPtr = (float*)&gizmoTransform; + for (int row = 0; row < 4; row++) + { + ImGui.Text($"[{matrixPtr[row * 4]:F2}, {matrixPtr[row * 4 + 1]:F2}, {matrixPtr[row * 4 + 2]:F2}, {matrixPtr[row * 4 + 3]:F2}]"); + } + } + + if (ImGui.Button("Reset Transform")) + { + gizmoTransform = Matrix4x4.Identity; + } + + ImGui.Separator(); + + // Gizmo viewport + Vector2 gizmoSize = new(400, 300); + Vector2 gizmoPos = ImGui.GetCursorScreenPos(); + + // Set up ImGuizmo for this viewport + if (gizmoEnabled) + { + ImGuizmo.SetDrawlist(ImGui.GetWindowDrawList()); + ImGuizmo.SetRect(gizmoPos.X, gizmoPos.Y, gizmoSize.X, gizmoSize.Y); + + // Create view and projection matrices for the gizmo + var view = gizmoView; + var proj = gizmoProjection; + + // Draw grid + Matrix4x4 identity = Matrix4x4.Identity; + ImGuizmo.DrawGrid(ref view, ref proj, ref identity, 10.0f); + + // Draw the gizmo + var transform = gizmoTransform; + if (ImGuizmo.Manipulate(ref view, ref proj, gizmoOperation, gizmoMode, ref transform)) + { + gizmoTransform = transform; + } + + // Display gizmo state + ImGui.SetCursorScreenPos(gizmoPos + new Vector2(10, gizmoSize.Y - 60)); + ImGui.Text($"Gizmo Over: {ImGuizmo.IsOver()}"); + ImGui.Text($"Gizmo Using: {ImGuizmo.IsUsing()}"); + } + + // Reserve space for the gizmo viewport + ImGui.SetCursorScreenPos(gizmoPos + new Vector2(0, gizmoSize.Y)); + ImGui.Dummy(gizmoSize); + + ImGui.EndTabItem(); + } + } + + private static void RenderImNodesTab() + { + if (ImGui.BeginTabItem("ImNodes Editor")) + { + ImGui.TextWrapped("ImNodes provides a node editor with support for nodes, pins, and connections."); + ImGui.Separator(); + + // Node editor controls + if (ImGui.Button("Add Node")) + { + Vector2 mousePos = ImGui.GetMousePos(); + Vector2 canvasPos = ImGui.GetCursorScreenPos(); + Vector2 nodePos = mousePos - canvasPos + new Vector2(0, 50); // Offset for controls + + nodes.Add(new SimpleNode( + nextNodeId++, + nodePos, + $"Node {nodes.Count + 1}", + [nextNodeId, nextNodeId + 1], // Input pins + [nextNodeId + 2, nextNodeId + 3] // Output pins + )); + nextNodeId += 4; // Reserve IDs for pins + } + + ImGui.SameLine(); + if (ImGui.Button("Clear All")) + { + nodes.Clear(); + links.Clear(); + nextNodeId = 1; + nextLinkId = 1; + } + + ImGui.Separator(); + + // Node editor + ImNodes.BeginNodeEditor(); + + // Render nodes + for (int i = 0; i < nodes.Count; i++) + { + var node = nodes[i]; + ImNodes.BeginNode(node.Id); + + // Node title + ImNodes.BeginNodeTitleBar(); + ImGui.TextUnformatted(node.Name); + ImNodes.EndNodeTitleBar(); + + // Input pins + for (int j = 0; j < node.InputPins.Count; j++) + { + int pinId = node.InputPins[j]; + ImNodes.BeginInputAttribute(pinId); + ImGui.Text($"In {j + 1}"); + ImNodes.EndInputAttribute(); + } + + // Node content + ImGui.Text($"Node ID: {node.Id}"); + + // Output pins + for (int j = 0; j < node.OutputPins.Count; j++) + { + int pinId = node.OutputPins[j]; + ImNodes.BeginOutputAttribute(pinId); + ImGui.Indent(40); + ImGui.Text($"Out {j + 1}"); + ImNodes.EndOutputAttribute(); + } + + ImNodes.EndNode(); + } + + // Render links + foreach (var link in links) + { + ImNodes.Link(link.Id, link.InputPinId, link.OutputPinId); + } + + ImNodes.EndNodeEditor(); + + // Handle new links + int startPin, endPin; + if (ImNodes.IsLinkCreated(out startPin, out endPin)) + { + links.Add(new SimpleLink(nextLinkId++, startPin, endPin)); + } + + // Handle link deletion + int linkId; + if (ImNodes.IsLinkDestroyed(out linkId)) + { + links.RemoveAll(link => link.Id == linkId); + } + + // Display node count + ImGui.Text($"Nodes: {nodes.Count}, Links: {links.Count}"); + + ImGui.EndTabItem(); + } + } + + private static void RenderImPlotTab() + { + if (ImGui.BeginTabItem("ImPlot Charts")) + { + ImGui.TextWrapped("ImPlot provides advanced plotting capabilities with various chart types."); + ImGui.Separator(); + + // Plot controls + if (ImGui.Button("Generate New Data")) + { + sinData.Clear(); + cosData.Clear(); + noiseData.Clear(); + + for (int i = 0; i < 100; i++) + { + float x = i * 0.1f; + sinData.Add(MathF.Sin(x + plotTime)); + cosData.Add(MathF.Cos(x + plotTime)); + noiseData.Add((float)(plotRandom.NextDouble() * 2.0 - 1.0)); + } + } + + ImGui.Separator(); + + // Line plot + if (ImPlot.BeginPlot("Trigonometric Functions", new Vector2(-1, 200))) + { + unsafe + { + fixed (float* sinPtr = sinData.ToArray()) + fixed (float* cosPtr = cosData.ToArray()) + { + ImPlot.PlotLine("sin(x)", sinPtr, sinData.Count); + ImPlot.PlotLine("cos(x)", cosPtr, cosData.Count); + } + } + ImPlot.EndPlot(); + } + + // Scatter plot + if (ImPlot.BeginPlot("Noise Data (Scatter)", new Vector2(-1, 200))) + { + unsafe + { + fixed (float* noisePtr = noiseData.ToArray()) + { + ImPlot.PlotScatter("Random Noise", noisePtr, noiseData.Count); + } + } + ImPlot.EndPlot(); + } + + // Bar chart + if (ImPlot.BeginPlot("Sample Bar Chart", new Vector2(-1, 200))) + { + float[] barData = [1.0f, 2.5f, 3.2f, 1.8f, 4.1f, 2.9f, 3.6f]; + unsafe + { + fixed (float* barPtr = barData) + { + ImPlot.PlotBars("Values", barPtr, barData.Length); + } + } + ImPlot.EndPlot(); + } + + // Real-time plot + if (ImPlot.BeginPlot("Real-time Data", new Vector2(-1, 200))) + { + // Update real-time data + if (plotValues.Count > 0) + { + unsafe + { + fixed (float* plotPtr = plotValues.ToArray()) + { + ImPlot.PlotLine("Live Data", plotPtr, plotValues.Count); + } + } + } + ImPlot.EndPlot(); + } + + ImGui.Text($"Plot Time: {plotTime:F2}"); + ImGui.Text($"Data Points: Sin({sinData.Count}), Cos({cosData.Count}), Noise({noiseData.Count})"); + + ImGui.EndTabItem(); + } + } + private static void RenderModalAndPopups() { // Modal dialog @@ -901,12 +1237,18 @@ private static void RenderModalAndPopups() private static void UpdateAnimations(float dt) { animationTime += dt; + plotTime += dt; // Bouncing animation bounceOffset = MathF.Abs(MathF.Sin(animationTime * 3)) * 50; // Pulse animation pulseScale = 0.8f + (0.4f * MathF.Sin(animationTime * 4)); + + // Update gizmo view matrix for rotation demo + float cameraAngle = animationTime * 0.2f; + Vector3 cameraPos = new Vector3(MathF.Sin(cameraAngle) * 5f, 3f, MathF.Cos(cameraAngle) * 5f); + gizmoView = Matrix4x4.CreateLookAt(cameraPos, Vector3.Zero, Vector3.UnitY); } private static void RenderAboutWindow() @@ -925,6 +1267,9 @@ private static void RenderAboutWindow() ImGui.Separator(); ImGui.Text("Built with:"); ImGui.BulletText("Hexa.NET.ImGui"); + ImGui.BulletText("Hexa.NET.ImGuizmo - 3D manipulation gizmos"); + ImGui.BulletText("Hexa.NET.ImNodes - Node editor system"); + ImGui.BulletText("Hexa.NET.ImPlot - Advanced plotting library"); ImGui.BulletText("Silk.NET"); ImGui.BulletText("ktsu.ImGuiApp Framework"); ImGui.End(); diff --git a/ImGuiAppDemo/ImGuiAppDemo.csproj b/ImGuiAppDemo/ImGuiAppDemo.csproj index d1dd612..d258925 100644 --- a/ImGuiAppDemo/ImGuiAppDemo.csproj +++ b/ImGuiAppDemo/ImGuiAppDemo.csproj @@ -9,6 +9,9 @@ + + + From 9b98156f82f98bb57aaa9213f53a6cac2007a715 Mon Sep 17 00:00:00 2001 From: Matt Edmondson Date: Thu, 31 Jul 2025 12:57:25 +1000 Subject: [PATCH 02/11] Implement demo tabs for various ImGui features: Added BasicWidgetsDemo, AdvancedWidgetsDemo, AnimationDemo, DataVisualizationDemo, GraphicsDemo, InputHandlingDemo, LayoutDemo, ImGuizmoDemo, ImNodesDemo, ImPlotDemo, NerdFontDemo, UnicodeDemo, and UtilityDemo. Each demo showcases specific functionalities and UI elements, enhancing the overall ImGuiAppDemo experience. --- ImGuiAppDemo/Demos/AdvancedWidgetsDemo.cs | 96 ++ ImGuiAppDemo/Demos/AnimationDemo.cs | 76 ++ ImGuiAppDemo/Demos/BasicWidgetsDemo.cs | 107 ++ ImGuiAppDemo/Demos/DataVisualizationDemo.cs | 91 ++ ImGuiAppDemo/Demos/GraphicsDemo.cs | 102 ++ ImGuiAppDemo/Demos/IDemoTab.cs | 27 + ImGuiAppDemo/Demos/ImGuizmoDemo.cs | 125 ++ ImGuiAppDemo/Demos/ImNodesDemo.cs | 148 +++ ImGuiAppDemo/Demos/ImPlotDemo.cs | 145 +++ ImGuiAppDemo/Demos/InputHandlingDemo.cs | 161 +++ ImGuiAppDemo/Demos/LayoutDemo.cs | 139 +++ ImGuiAppDemo/Demos/NerdFontDemo.cs | 99 ++ ImGuiAppDemo/Demos/UnicodeDemo.cs | 65 + ImGuiAppDemo/Demos/UtilityDemo.cs | 109 ++ ImGuiAppDemo/ImGuiAppDemo.cs | 1242 +------------------ 15 files changed, 1520 insertions(+), 1212 deletions(-) create mode 100644 ImGuiAppDemo/Demos/AdvancedWidgetsDemo.cs create mode 100644 ImGuiAppDemo/Demos/AnimationDemo.cs create mode 100644 ImGuiAppDemo/Demos/BasicWidgetsDemo.cs create mode 100644 ImGuiAppDemo/Demos/DataVisualizationDemo.cs create mode 100644 ImGuiAppDemo/Demos/GraphicsDemo.cs create mode 100644 ImGuiAppDemo/Demos/IDemoTab.cs create mode 100644 ImGuiAppDemo/Demos/ImGuizmoDemo.cs create mode 100644 ImGuiAppDemo/Demos/ImNodesDemo.cs create mode 100644 ImGuiAppDemo/Demos/ImPlotDemo.cs create mode 100644 ImGuiAppDemo/Demos/InputHandlingDemo.cs create mode 100644 ImGuiAppDemo/Demos/LayoutDemo.cs create mode 100644 ImGuiAppDemo/Demos/NerdFontDemo.cs create mode 100644 ImGuiAppDemo/Demos/UnicodeDemo.cs create mode 100644 ImGuiAppDemo/Demos/UtilityDemo.cs diff --git a/ImGuiAppDemo/Demos/AdvancedWidgetsDemo.cs b/ImGuiAppDemo/Demos/AdvancedWidgetsDemo.cs new file mode 100644 index 0000000..557ee9c --- /dev/null +++ b/ImGuiAppDemo/Demos/AdvancedWidgetsDemo.cs @@ -0,0 +1,96 @@ +// Copyright (c) ktsu.dev +// All rights reserved. +// Licensed under the MIT license. + +namespace ktsu.ImGuiApp.Demo.Demos; + +using System.Numerics; +using Hexa.NET.ImGui; + +/// +/// Demo for advanced ImGui widgets +/// +internal sealed class AdvancedWidgetsDemo : IDemoTab +{ + private Vector3 colorPickerValue = new(0.4f, 0.7f, 0.2f); + private Vector4 color4Value = new(1.0f, 0.5f, 0.2f, 1.0f); + private float animationTime; + + public string TabName => "Advanced Widgets"; + + public void Update(float deltaTime) + { + animationTime += deltaTime; + } + + public void Render() + { + if (ImGui.BeginTabItem(TabName)) + { + // Color controls + ImGui.Text("Color Controls:"); + ImGui.ColorEdit3("Color RGB", ref colorPickerValue); + ImGui.ColorEdit4("Color RGBA", ref color4Value); + ImGui.SetNextItemWidth(200.0f); + ImGui.ColorPicker3("Color Picker", ref colorPickerValue); + + ImGui.Separator(); + + // Tree view + ImGui.Text("Tree View:"); + if (ImGui.TreeNode("Root Node")) + { + for (int i = 0; i < 5; i++) + { + string nodeName = $"Child Node {i}"; + bool nodeOpen = ImGui.TreeNode(nodeName); + + if (i == 2 && nodeOpen) + { + for (int j = 0; j < 3; j++) + { + if (ImGui.TreeNode($"Grandchild {j}")) + { + ImGui.Text($"Leaf item {j}"); + ImGui.TreePop(); + } + } + } + else if (nodeOpen) + { + ImGui.Text($"Content of {nodeName}"); + } + + if (nodeOpen) + { + ImGui.TreePop(); + } + } + ImGui.TreePop(); + } + + ImGui.Separator(); + + // Progress bars and loading indicators + ImGui.Text("Progress Indicators:"); + float progress = ((float)Math.Sin(animationTime * 2.0) * 0.5f) + 0.5f; + ImGui.ProgressBar(progress, new Vector2(-1, 0), $"{progress * 100:F1}%"); + + // Spinner-like effect + ImGui.Text("Loading..."); + ImGui.SameLine(); + for (int i = 0; i < 8; i++) + { + float rotation = (animationTime * 5.0f) + (i * MathF.PI / 4.0f); + float alpha = (MathF.Sin(rotation) + 1.0f) * 0.5f; + ImGui.TextColored(new Vector4(1, 1, 1, alpha), "●"); + if (i < 7) + { + ImGui.SameLine(); + } + } + + ImGui.EndTabItem(); + } + } +} diff --git a/ImGuiAppDemo/Demos/AnimationDemo.cs b/ImGuiAppDemo/Demos/AnimationDemo.cs new file mode 100644 index 0000000..eaeb781 --- /dev/null +++ b/ImGuiAppDemo/Demos/AnimationDemo.cs @@ -0,0 +1,76 @@ +// Copyright (c) ktsu.dev +// All rights reserved. +// Licensed under the MIT license. + +namespace ktsu.ImGuiApp.Demo.Demos; + +using System.Numerics; +using Hexa.NET.ImGui; + +/// +/// Demo for animations and effects +/// +internal sealed class AnimationDemo : IDemoTab +{ + private float animationTime; + private float bounceOffset; + private float pulseScale = 1.0f; + private float textSpeed = 50.0f; + + public string TabName => "Animation & Effects"; + + public void Update(float deltaTime) + { + animationTime += deltaTime; + + // Bouncing animation + bounceOffset = MathF.Abs(MathF.Sin(animationTime * 3)) * 50; + + // Pulse animation + pulseScale = 0.8f + (0.4f * MathF.Sin(animationTime * 4)); + } + + public void Render() + { + if (ImGui.BeginTabItem(TabName)) + { + ImGui.Text("Animation Examples:"); + + // Simple animations + ImGui.Text("Bouncing Animation:"); + Vector2 ballPos = ImGui.GetCursorScreenPos(); + ballPos.Y += bounceOffset; + ImDrawListPtr drawList = ImGui.GetWindowDrawList(); + drawList.AddCircleFilled(ballPos + new Vector2(50, 50), 20, ImGui.ColorConvertFloat4ToU32(new Vector4(1, 0.5f, 0, 1))); + ImGui.Dummy(new Vector2(100, 100)); + + // Pulsing element + ImGui.Text("Pulse Animation:"); + Vector2 pulsePos = ImGui.GetCursorScreenPos(); + float pulseSize = 20 * pulseScale; + drawList.AddCircleFilled(pulsePos + new Vector2(50, 50), pulseSize, + ImGui.ColorConvertFloat4ToU32(new Vector4(0.5f, 0, 1, 0.7f))); + ImGui.Dummy(new Vector2(100, 100)); + + ImGui.Separator(); + + // Animation controls + ImGui.Text("Animation Controls:"); + ImGui.SliderFloat("Text Speed", ref textSpeed, 10.0f, 200.0f); + + // Animated text (simplified) + ImGui.Text("Animated text effects:"); + for (int i = 0; i < 20; i++) + { + float wave = (MathF.Sin((animationTime * 3.0f) + (i * 0.5f)) * 0.5f) + 0.5f; + ImGui.TextColored(new Vector4(wave, 1.0f - wave, 0.5f, 1.0f), i % 5 == 4 ? " " : "▓"); + if (i % 5 != 4) + { + ImGui.SameLine(); + } + } + + ImGui.EndTabItem(); + } + } +} diff --git a/ImGuiAppDemo/Demos/BasicWidgetsDemo.cs b/ImGuiAppDemo/Demos/BasicWidgetsDemo.cs new file mode 100644 index 0000000..34fcac4 --- /dev/null +++ b/ImGuiAppDemo/Demos/BasicWidgetsDemo.cs @@ -0,0 +1,107 @@ +// Copyright (c) ktsu.dev +// All rights reserved. +// Licensed under the MIT license. + +namespace ktsu.ImGuiApp.Demo.Demos; + +using System.Numerics; +using Hexa.NET.ImGui; + +/// +/// Demo for basic ImGui widgets +/// +internal sealed class BasicWidgetsDemo : IDemoTab +{ + private float sliderValue = 0.5f; + private int counter; + private bool checkboxState; + private string inputText = "Type here..."; + private Vector3 colorPickerValue = new(0.4f, 0.7f, 0.2f); + private Vector4 color4Value = new(1.0f, 0.5f, 0.2f, 1.0f); + private int comboSelection; + private readonly string[] comboItems = ["Item 1", "Item 2", "Item 3", "Item 4"]; + private int listboxSelection; + private readonly string[] listboxItems = ["Apple", "Banana", "Cherry", "Date", "Elderberry"]; + private float dragFloat = 1.0f; + private int dragInt = 50; + private Vector3 dragVector = new(1.0f, 2.0f, 3.0f); + private float angle; + private int radioSelection; + + public string TabName => "Basic Widgets"; + + public void Update(float deltaTime) + { + // No updates needed for basic widgets + } + + public void Render() + { + if (ImGui.BeginTabItem(TabName)) + { + ImGui.TextWrapped("This tab demonstrates basic ImGui widgets and controls."); + ImGui.Separator(); + + // Buttons + ImGui.Text("Buttons:"); + if (ImGui.Button("Regular Button")) + { + counter++; + } + + ImGui.SameLine(); + if (ImGui.SmallButton("Small")) + { + counter++; + } + + ImGui.SameLine(); + if (ImGui.ArrowButton("##left", ImGuiDir.Left)) + { + counter--; + } + + ImGui.SameLine(); + if (ImGui.ArrowButton("##right", ImGuiDir.Right)) + { + counter++; + } + + ImGui.SameLine(); + ImGui.Text($"Counter: {counter}"); + + // Checkboxes and Radio buttons + ImGui.Separator(); + ImGui.Text("Selection Controls:"); + ImGui.Checkbox("Checkbox", ref checkboxState); + + ImGui.RadioButton("Option 1", ref radioSelection, 0); + ImGui.SameLine(); + ImGui.RadioButton("Option 2", ref radioSelection, 1); + ImGui.SameLine(); + ImGui.RadioButton("Option 3", ref radioSelection, 2); + + // Sliders + ImGui.Separator(); + ImGui.Text("Sliders:"); + ImGui.SliderFloat("Float Slider", ref sliderValue, 0.0f, 1.0f); + ImGui.SliderFloat("Angle", ref angle, 0.0f, 360.0f, "%.1f deg"); + ImGui.SliderInt("Int Slider", ref dragInt, 0, 100); + + // Input fields + ImGui.Separator(); + ImGui.Text("Input Fields:"); + ImGui.InputText("Text Input", ref inputText, 100); + ImGui.InputFloat("Float Input", ref dragFloat); + ImGui.InputFloat3("Vector3 Input", ref dragVector); + + // Combo boxes + ImGui.Separator(); + ImGui.Text("Dropdowns:"); + ImGui.Combo("Combo Box", ref comboSelection, comboItems, comboItems.Length); + ImGui.ListBox("List Box", ref listboxSelection, listboxItems, listboxItems.Length, 4); + + ImGui.EndTabItem(); + } + } +} diff --git a/ImGuiAppDemo/Demos/DataVisualizationDemo.cs b/ImGuiAppDemo/Demos/DataVisualizationDemo.cs new file mode 100644 index 0000000..16266dd --- /dev/null +++ b/ImGuiAppDemo/Demos/DataVisualizationDemo.cs @@ -0,0 +1,91 @@ +// Copyright (c) ktsu.dev +// All rights reserved. +// Licensed under the MIT license. + +namespace ktsu.ImGuiApp.Demo.Demos; + +using System.Numerics; +using Hexa.NET.ImGui; +using ktsu.ImGuiApp; +using ktsu.ImGuiAppDemo.Properties; + +/// +/// Demo for data visualization features +/// +internal sealed class DataVisualizationDemo : IDemoTab +{ + private readonly List plotValues = []; + private readonly Random random = new(); + private float plotRefreshTime; + + public string TabName => "Data Visualization"; + + public void Update(float deltaTime) + { + // Update plot data + plotRefreshTime += deltaTime; + if (plotRefreshTime >= 0.1f) // Update every 100ms + { + plotRefreshTime = 0; + plotValues.Add((float)random.NextDouble()); + if (plotValues.Count > 100) // Keep last 100 values + { + plotValues.RemoveAt(0); + } + } + } + + public void Render() + { + if (ImGui.BeginTabItem(TabName)) + { + ImGui.Text("Real-time Data Plots:"); + + // Line plot + if (plotValues.Count > 0) + { + float[] values = [.. plotValues]; + ImGui.PlotLines("Random Values", ref values[0], values.Length, 0, + $"Current: {values[^1]:F2}", 0.0f, 1.0f, new Vector2(ImGui.GetContentRegionAvail().X, 100)); + + ImGui.PlotHistogram("Distribution", ref values[0], values.Length, 0, + "Histogram", 0.0f, 1.0f, new Vector2(ImGui.GetContentRegionAvail().X, 100)); + } + + ImGui.Separator(); + + // Performance note + ImGui.Text("Performance Metrics:"); + ImGui.TextWrapped("Performance monitoring is now available in the Debug menu! Use 'Debug > Show Performance Monitor' to see real-time FPS graphs and throttling state."); + + ImGui.Separator(); + + // Font demonstrations + ImGui.Text("Custom Font Rendering:"); + using (new FontAppearance(nameof(Resources.CARDCHAR), 16)) + { + ImGui.Text("Small custom font text"); + } + + using (new FontAppearance(nameof(Resources.CARDCHAR), 24)) + { + ImGui.Text("Medium custom font text"); + } + + using (new FontAppearance(nameof(Resources.CARDCHAR), 32)) + { + ImGui.Text("Large custom font text"); + } + + // Text formatting examples + ImGui.Separator(); + ImGui.Text("Text Formatting:"); + ImGui.TextColored(new Vector4(1, 0, 0, 1), "Red text"); + ImGui.TextColored(new Vector4(0, 1, 0, 1), "Green text"); + ImGui.TextColored(new Vector4(0, 0, 1, 1), "Blue text"); + ImGui.TextWrapped("This is a long line of text that should wrap to multiple lines when the window is not wide enough to contain it all on a single line."); + + ImGui.EndTabItem(); + } + } +} diff --git a/ImGuiAppDemo/Demos/GraphicsDemo.cs b/ImGuiAppDemo/Demos/GraphicsDemo.cs new file mode 100644 index 0000000..400fba7 --- /dev/null +++ b/ImGuiAppDemo/Demos/GraphicsDemo.cs @@ -0,0 +1,102 @@ +// Copyright (c) ktsu.dev +// All rights reserved. +// Licensed under the MIT license. + +namespace ktsu.ImGuiApp.Demo.Demos; + +using System.Numerics; +using Hexa.NET.ImGui; +using ktsu.ImGuiApp; +using ktsu.StrongPaths; + +/// +/// Demo for graphics and drawing capabilities +/// +internal sealed class GraphicsDemo : IDemoTab +{ + private readonly List canvasPoints = []; + private Vector4 drawColor = new(1.0f, 1.0f, 0.0f, 1.0f); + private float brushSize = 5.0f; + private float animationTime; + + public string TabName => "Graphics & Drawing"; + + public void Update(float deltaTime) + { + animationTime += deltaTime; + } + + public void Render() + { + if (ImGui.BeginTabItem(TabName)) + { + // Image display + AbsoluteFilePath iconPath = AppContext.BaseDirectory.As() / "icon.png".As(); + ImGuiAppTextureInfo iconTexture = ImGuiApp.GetOrLoadTexture(iconPath); + + ImGui.Text("Image Display:"); + ImGui.Image(iconTexture.TextureRef, new Vector2(64, 64)); + ImGui.SameLine(); + ImGui.Image(iconTexture.TextureRef, new Vector2(32, 32)); + ImGui.SameLine(); + ImGui.Image(iconTexture.TextureRef, new Vector2(16, 16)); + + ImGui.Separator(); + + // Custom drawing with ImDrawList + ImGui.Text("Custom Drawing Canvas:"); + ImGui.ColorEdit4("Draw Color", ref drawColor); + ImGui.SliderFloat("Brush Size", ref brushSize, 1.0f, 20.0f); + + if (ImGui.Button("Clear Canvas")) + { + canvasPoints.Clear(); + } + + Vector2 canvasPos = ImGui.GetCursorScreenPos(); + Vector2 canvasSize = new(400, 200); + + // Draw canvas background + ImDrawListPtr drawList = ImGui.GetWindowDrawList(); + drawList.AddRectFilled(canvasPos, canvasPos + canvasSize, ImGui.ColorConvertFloat4ToU32(new Vector4(0.1f, 0.1f, 0.1f, 1.0f))); + drawList.AddRect(canvasPos, canvasPos + canvasSize, ImGui.ColorConvertFloat4ToU32(new Vector4(0.5f, 0.5f, 0.5f, 1.0f))); + + // Handle mouse input for drawing + ImGui.InvisibleButton("Canvas", canvasSize); + if (ImGui.IsItemActive() && ImGui.IsMouseDown(ImGuiMouseButton.Left)) + { + Vector2 mousePos = ImGui.GetMousePos() - canvasPos; + if (mousePos.X >= 0 && mousePos.Y >= 0 && mousePos.X <= canvasSize.X && mousePos.Y <= canvasSize.Y) + { + canvasPoints.Add(mousePos); + } + } + + // Draw points + uint color = ImGui.ColorConvertFloat4ToU32(drawColor); + foreach (Vector2 point in canvasPoints) + { + drawList.AddCircleFilled(canvasPos + point, brushSize, color); + } + + // Draw some simple shapes for demonstration + ImGui.Separator(); + ImGui.Text("Shape Examples:"); + Vector2 shapeStart = ImGui.GetCursorScreenPos(); + + // Simple animated circle + float t = animationTime; + Vector2 center = shapeStart + new Vector2(100, 50); + float radius = 20 + (MathF.Sin(t * 2) * 5); + drawList.AddCircle(center, radius, ImGui.ColorConvertFloat4ToU32(new Vector4(1, 0, 0, 1)), 16, 2.0f); + + // Moving rectangle + Vector2 rectPos = shapeStart + new Vector2(200 + (MathF.Sin(t) * 30), 30); + drawList.AddRectFilled(rectPos, rectPos + new Vector2(40, 40), ImGui.ColorConvertFloat4ToU32(new Vector4(0, 1, 0, 0.7f))); + + ImGui.Dummy(new Vector2(400, 100)); // Reserve space + + ImGui.EndTabItem(); + } + } +} diff --git a/ImGuiAppDemo/Demos/IDemoTab.cs b/ImGuiAppDemo/Demos/IDemoTab.cs new file mode 100644 index 0000000..1137e04 --- /dev/null +++ b/ImGuiAppDemo/Demos/IDemoTab.cs @@ -0,0 +1,27 @@ +// Copyright (c) ktsu.dev +// All rights reserved. +// Licensed under the MIT license. + +namespace ktsu.ImGuiApp.Demo.Demos; + +/// +/// Interface for demo tab implementations +/// +internal interface IDemoTab +{ + /// + /// Gets the name of the tab to display in the UI + /// + string TabName { get; } + + /// + /// Renders the demo tab content + /// + void Render(); + + /// + /// Updates the demo state (called each frame) + /// + /// Time elapsed since last frame + void Update(float deltaTime); +} diff --git a/ImGuiAppDemo/Demos/ImGuizmoDemo.cs b/ImGuiAppDemo/Demos/ImGuizmoDemo.cs new file mode 100644 index 0000000..2714d86 --- /dev/null +++ b/ImGuiAppDemo/Demos/ImGuizmoDemo.cs @@ -0,0 +1,125 @@ +// Copyright (c) ktsu.dev +// All rights reserved. +// Licensed under the MIT license. + +namespace ktsu.ImGuiApp.Demo.Demos; + +using System.Numerics; +using Hexa.NET.ImGui; +using Hexa.NET.ImGuizmo; + +/// +/// Demo for ImGuizmo 3D manipulation gizmos +/// +internal sealed class ImGuizmoDemo : IDemoTab +{ + private Matrix4x4 gizmoTransform = Matrix4x4.Identity; + private Matrix4x4 gizmoView = Matrix4x4.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.UnitY); + private Matrix4x4 gizmoProjection = Matrix4x4.CreatePerspectiveFieldOfView(MathF.PI / 4f, 16f / 9f, 0.1f, 100f); + private ImGuizmoOperation gizmoOperation = ImGuizmoOperation.Translate; + private ImGuizmoMode gizmoMode = ImGuizmoMode.Local; + private bool gizmoEnabled = true; + private float animationTime; + + public string TabName => "ImGuizmo 3D Gizmos"; + + public void Update(float deltaTime) + { + animationTime += deltaTime; + + // Update gizmo view matrix for rotation demo + float cameraAngle = animationTime * 0.2f; + Vector3 cameraPos = new Vector3(MathF.Sin(cameraAngle) * 5f, 3f, MathF.Cos(cameraAngle) * 5f); + gizmoView = Matrix4x4.CreateLookAt(cameraPos, Vector3.Zero, Vector3.UnitY); + } + + public void Render() + { + if (ImGui.BeginTabItem(TabName)) + { + ImGui.TextWrapped("ImGuizmo provides 3D manipulation gizmos for translate, rotate, and scale operations."); + ImGui.Separator(); + + // Gizmo controls + ImGui.Text("Gizmo Controls:"); + ImGui.Checkbox("Enable Gizmo", ref gizmoEnabled); + + // Operation selection + ImGui.Text("Operation:"); + string[] operationNames = Enum.GetNames(); + ImGuizmoOperation[] operations = Enum.GetValues(); + int opIndex = Array.IndexOf(operations, gizmoOperation); + if (ImGui.Combo("##Operation", ref opIndex, operationNames, operationNames.Length)) + { + gizmoOperation = operations[opIndex]; + } + + // Mode selection + ImGui.Text("Mode:"); + string[] modeNames = Enum.GetNames(); + ImGuizmoMode[] modes = Enum.GetValues(); + int modeIndex = Array.IndexOf(modes, gizmoMode); + if (ImGui.Combo("##Mode", ref modeIndex, modeNames, modeNames.Length)) + { + gizmoMode = modes[modeIndex]; + } + + ImGui.Separator(); + + // Display transform matrix values + ImGui.Text("Transform Matrix:"); + unsafe + { + float* matrixPtr = (float*)&gizmoTransform; + for (int row = 0; row < 4; row++) + { + ImGui.Text($"[{matrixPtr[row * 4]:F2}, {matrixPtr[row * 4 + 1]:F2}, {matrixPtr[row * 4 + 2]:F2}, {matrixPtr[row * 4 + 3]:F2}]"); + } + } + + if (ImGui.Button("Reset Transform")) + { + gizmoTransform = Matrix4x4.Identity; + } + + ImGui.Separator(); + + // Gizmo viewport + Vector2 gizmoSize = new(400, 300); + Vector2 gizmoPos = ImGui.GetCursorScreenPos(); + + // Set up ImGuizmo for this viewport + if (gizmoEnabled) + { + ImGuizmo.SetDrawlist(ImGui.GetWindowDrawList()); + ImGuizmo.SetRect(gizmoPos.X, gizmoPos.Y, gizmoSize.X, gizmoSize.Y); + + // Create view and projection matrices for the gizmo + var view = gizmoView; + var proj = gizmoProjection; + + // Draw grid + Matrix4x4 identity = Matrix4x4.Identity; + ImGuizmo.DrawGrid(ref view, ref proj, ref identity, 10.0f); + + // Draw the gizmo + var transform = gizmoTransform; + if (ImGuizmo.Manipulate(ref view, ref proj, gizmoOperation, gizmoMode, ref transform)) + { + gizmoTransform = transform; + } + + // Display gizmo state + ImGui.SetCursorScreenPos(gizmoPos + new Vector2(10, gizmoSize.Y - 60)); + ImGui.Text($"Gizmo Over: {ImGuizmo.IsOver()}"); + ImGui.Text($"Gizmo Using: {ImGuizmo.IsUsing()}"); + } + + // Reserve space for the gizmo viewport + ImGui.SetCursorScreenPos(gizmoPos + new Vector2(0, gizmoSize.Y)); + ImGui.Dummy(gizmoSize); + + ImGui.EndTabItem(); + } + } +} diff --git a/ImGuiAppDemo/Demos/ImNodesDemo.cs b/ImGuiAppDemo/Demos/ImNodesDemo.cs new file mode 100644 index 0000000..aabdfb0 --- /dev/null +++ b/ImGuiAppDemo/Demos/ImNodesDemo.cs @@ -0,0 +1,148 @@ +// Copyright (c) ktsu.dev +// All rights reserved. +// Licensed under the MIT license. + +namespace ktsu.ImGuiApp.Demo.Demos; + +using System.Numerics; +using Hexa.NET.ImGui; +using Hexa.NET.ImNodes; + +/// +/// Demo for ImNodes node editor +/// +internal sealed class ImNodesDemo : IDemoTab +{ + private int nextNodeId = 1; + private int nextLinkId = 1; + private readonly List nodes = []; + private readonly List links = []; + + private sealed record SimpleNode(int Id, Vector2 Position, string Name, List InputPins, List OutputPins); + private sealed record SimpleLink(int Id, int InputPinId, int OutputPinId); + + public string TabName => "ImNodes Editor"; + + public ImNodesDemo() + { + // Initialize ImNodes context + ImNodes.CreateContext(); + + // Initialize demo data for ImNodes + nodes.Add(new SimpleNode(nextNodeId++, new Vector2(50, 50), "Input Node", [], [1, 2])); + nodes.Add(new SimpleNode(nextNodeId++, new Vector2(250, 100), "Process Node", [3], [4])); + nodes.Add(new SimpleNode(nextNodeId++, new Vector2(450, 50), "Output Node", [5, 6], [])); + + // Create some demo links + links.Add(new SimpleLink(nextLinkId++, 1, 3)); // Connect Input to Process + links.Add(new SimpleLink(nextLinkId++, 4, 5)); // Connect Process to Output + } + + public void Update(float deltaTime) + { + // No updates needed for ImNodes demo + } + + public void Render() + { + if (ImGui.BeginTabItem(TabName)) + { + ImGui.TextWrapped("ImNodes provides a node editor with support for nodes, pins, and connections."); + ImGui.Separator(); + + // Node editor controls + if (ImGui.Button("Add Node")) + { + Vector2 mousePos = ImGui.GetMousePos(); + Vector2 canvasPos = ImGui.GetCursorScreenPos(); + Vector2 nodePos = mousePos - canvasPos + new Vector2(0, 50); // Offset for controls + + nodes.Add(new SimpleNode( + nextNodeId++, + nodePos, + $"Node {nodes.Count + 1}", + [nextNodeId, nextNodeId + 1], // Input pins + [nextNodeId + 2, nextNodeId + 3] // Output pins + )); + nextNodeId += 4; // Reserve IDs for pins + } + + ImGui.SameLine(); + if (ImGui.Button("Clear All")) + { + nodes.Clear(); + links.Clear(); + nextNodeId = 1; + nextLinkId = 1; + } + + ImGui.Separator(); + + // Node editor + ImNodes.BeginNodeEditor(); + + // Render nodes + for (int i = 0; i < nodes.Count; i++) + { + var node = nodes[i]; + ImNodes.BeginNode(node.Id); + + // Node title + ImNodes.BeginNodeTitleBar(); + ImGui.TextUnformatted(node.Name); + ImNodes.EndNodeTitleBar(); + + // Input pins + for (int j = 0; j < node.InputPins.Count; j++) + { + int pinId = node.InputPins[j]; + ImNodes.BeginInputAttribute(pinId); + ImGui.Text($"In {j + 1}"); + ImNodes.EndInputAttribute(); + } + + // Node content + ImGui.Text($"Node ID: {node.Id}"); + + // Output pins + for (int j = 0; j < node.OutputPins.Count; j++) + { + int pinId = node.OutputPins[j]; + ImNodes.BeginOutputAttribute(pinId); + ImGui.Indent(40); + ImGui.Text($"Out {j + 1}"); + ImNodes.EndOutputAttribute(); + } + + ImNodes.EndNode(); + } + + // Render links + foreach (var link in links) + { + ImNodes.Link(link.Id, link.InputPinId, link.OutputPinId); + } + + ImNodes.EndNodeEditor(); + + // Handle new links + int startPin, endPin; + if (ImNodes.IsLinkCreated(out startPin, out endPin)) + { + links.Add(new SimpleLink(nextLinkId++, startPin, endPin)); + } + + // Handle link deletion + int linkId; + if (ImNodes.IsLinkDestroyed(out linkId)) + { + links.RemoveAll(link => link.Id == linkId); + } + + // Display node count + ImGui.Text($"Nodes: {nodes.Count}, Links: {links.Count}"); + + ImGui.EndTabItem(); + } + } +} diff --git a/ImGuiAppDemo/Demos/ImPlotDemo.cs b/ImGuiAppDemo/Demos/ImPlotDemo.cs new file mode 100644 index 0000000..50d2dd2 --- /dev/null +++ b/ImGuiAppDemo/Demos/ImPlotDemo.cs @@ -0,0 +1,145 @@ +// Copyright (c) ktsu.dev +// All rights reserved. +// Licensed under the MIT license. + +namespace ktsu.ImGuiApp.Demo.Demos; + +using System.Numerics; +using Hexa.NET.ImGui; +using Hexa.NET.ImPlot; + +/// +/// Demo for ImPlot advanced plotting +/// +internal sealed class ImPlotDemo : IDemoTab +{ + private readonly List sinData = []; + private readonly List cosData = []; + private readonly List noiseData = []; + private readonly List plotValues = []; + private float plotTime; + private readonly Random plotRandom = new(); + private float plotRefreshTime; + + public string TabName => "ImPlot Charts"; + + public ImPlotDemo() + { + // Initialize plot data + for (int i = 0; i < 100; i++) + { + float x = i * 0.1f; + sinData.Add(MathF.Sin(x)); + cosData.Add(MathF.Cos(x)); + noiseData.Add((float)(plotRandom.NextDouble() * 2.0 - 1.0)); + } + } + + public void Update(float deltaTime) + { + plotTime += deltaTime; + + // Update plot data for real-time demo + plotRefreshTime += deltaTime; + if (plotRefreshTime >= 0.1f) // Update every 100ms + { + plotRefreshTime = 0; + plotValues.Add((float)plotRandom.NextDouble()); + if (plotValues.Count > 100) // Keep last 100 values + { + plotValues.RemoveAt(0); + } + } + } + + public void Render() + { + if (ImGui.BeginTabItem(TabName)) + { + ImGui.TextWrapped("ImPlot provides advanced plotting capabilities with various chart types."); + ImGui.Separator(); + + // Plot controls + if (ImGui.Button("Generate New Data")) + { + sinData.Clear(); + cosData.Clear(); + noiseData.Clear(); + + for (int i = 0; i < 100; i++) + { + float x = i * 0.1f; + sinData.Add(MathF.Sin(x + plotTime)); + cosData.Add(MathF.Cos(x + plotTime)); + noiseData.Add((float)(plotRandom.NextDouble() * 2.0 - 1.0)); + } + } + + ImGui.Separator(); + + // Line plot + if (ImPlot.BeginPlot("Trigonometric Functions", new Vector2(-1, 200))) + { + unsafe + { + fixed (float* sinPtr = sinData.ToArray()) + fixed (float* cosPtr = cosData.ToArray()) + { + ImPlot.PlotLine("sin(x)", sinPtr, sinData.Count); + ImPlot.PlotLine("cos(x)", cosPtr, cosData.Count); + } + } + ImPlot.EndPlot(); + } + + // Scatter plot + if (ImPlot.BeginPlot("Noise Data (Scatter)", new Vector2(-1, 200))) + { + unsafe + { + fixed (float* noisePtr = noiseData.ToArray()) + { + ImPlot.PlotScatter("Random Noise", noisePtr, noiseData.Count); + } + } + ImPlot.EndPlot(); + } + + // Bar chart + if (ImPlot.BeginPlot("Sample Bar Chart", new Vector2(-1, 200))) + { + float[] barData = [1.0f, 2.5f, 3.2f, 1.8f, 4.1f, 2.9f, 3.6f]; + unsafe + { + fixed (float* barPtr = barData) + { + ImPlot.PlotBars("Values", barPtr, barData.Length); + } + } + ImPlot.EndPlot(); + } + + // Real-time plot + if (ImPlot.BeginPlot("Real-time Data", new Vector2(-1, 200))) + { + // Update real-time data + if (plotValues.Count > 0) + { + unsafe + { + fixed (float* plotPtr = plotValues.ToArray()) + { + ImPlot.PlotLine("Live Data", plotPtr, plotValues.Count); + } + } + } + ImPlot.EndPlot(); + } + + ImGui.Text($"Plot Time: {plotTime:F2}"); + ImGui.Text($"Data Points: Sin({sinData.Count}), Cos({cosData.Count}), Noise({noiseData.Count})"); + + ImGui.EndTabItem(); + } + } +} diff --git a/ImGuiAppDemo/Demos/InputHandlingDemo.cs b/ImGuiAppDemo/Demos/InputHandlingDemo.cs new file mode 100644 index 0000000..0071909 --- /dev/null +++ b/ImGuiAppDemo/Demos/InputHandlingDemo.cs @@ -0,0 +1,161 @@ +// Copyright (c) ktsu.dev +// All rights reserved. +// Licensed under the MIT license. + +namespace ktsu.ImGuiApp.Demo.Demos; + +using System.Numerics; +using System.Text; +using Hexa.NET.ImGui; + +/// +/// Demo for input handling and interaction +/// +internal sealed class InputHandlingDemo : IDemoTab +{ + private readonly StringBuilder textBuffer = new(1024); + private bool wrapText = true; + private float textSpeed = 50.0f; + private bool showModal; + private bool showPopup; + private string modalResult = ""; + private string modalInputBuffer = ""; + + public string TabName => "Input & Interaction"; + + public InputHandlingDemo() + { + textBuffer.Append("This is a demonstration of ImGui text editing capabilities.\n"); + textBuffer.Append("You can edit this text, and it will update in real-time.\n"); + textBuffer.Append("ImGui supports multi-line text editing with syntax highlighting possibilities."); + } + + public void Update(float deltaTime) + { + // Handle modals and popups + HandleModalAndPopups(); + } + + public void Render() + { + if (ImGui.BeginTabItem(TabName)) + { + ImGui.Text("Mouse Information:"); + Vector2 mousePos = ImGui.GetMousePos(); + Vector2 mouseDelta = ImGui.GetMouseDragDelta(ImGuiMouseButton.Left); + ImGui.Text($"Mouse Position: ({mousePos.X:F1}, {mousePos.Y:F1})"); + ImGui.Text($"Mouse Delta: ({mouseDelta.X:F1}, {mouseDelta.Y:F1})"); + ImGui.Text($"Left Button: {(ImGui.IsMouseDown(ImGuiMouseButton.Left) ? "DOWN" : "UP")}"); + ImGui.Text($"Right Button: {(ImGui.IsMouseDown(ImGuiMouseButton.Right) ? "DOWN" : "UP")}"); + + ImGui.Separator(); + + // Simple drag demonstration + ImGui.Text("Drag & Drop:"); + ImGui.Button("Drag Source", new Vector2(100, 50)); + ImGui.SameLine(); + ImGui.Button("Drop Target", new Vector2(100, 50)); + ImGui.Text("(Drag and drop functionality would require more complex implementation)"); + + ImGui.Separator(); + + // Text editing + ImGui.Text("Multi-line Text Editor:"); + ImGui.Checkbox("Word Wrap", ref wrapText); + ImGuiInputTextFlags textFlags = ImGuiInputTextFlags.AllowTabInput; + if (!wrapText) + { + textFlags |= ImGuiInputTextFlags.NoHorizontalScroll; + } + + string textContent = textBuffer.ToString(); + if (ImGui.InputTextMultiline("##TextEditor", ref textContent, 1024, new Vector2(-1, 150), textFlags)) + { + textBuffer.Clear(); + textBuffer.Append(textContent); + } + + ImGui.Separator(); + + // Popup and modal buttons + ImGui.Text("Popups and Modals:"); + if (ImGui.Button("Show Modal")) + { + showModal = true; + modalResult = ""; + } + + ImGui.SameLine(); + if (ImGui.Button("Show Popup")) + { + showPopup = true; + } + + if (!string.IsNullOrEmpty(modalResult)) + { + ImGui.Text($"Modal Result: {modalResult}"); + } + + ImGui.EndTabItem(); + } + } + + private void HandleModalAndPopups() + { + // Modal dialog + if (showModal) + { + ImGui.OpenPopup("Demo Modal"); + showModal = false; + } + + if (ImGui.BeginPopupModal("Demo Modal", ref showModal)) + { + ImGui.Text("This is a modal dialog."); + ImGui.Text("It blocks interaction with the main window."); + ImGui.Separator(); + + ImGui.InputText("Input", ref modalInputBuffer, 100); + + if (ImGui.Button("OK")) + { + modalResult = $"You entered: {modalInputBuffer}"; + ImGui.CloseCurrentPopup(); + } + ImGui.SameLine(); + if (ImGui.Button("Cancel")) + { + modalResult = "Cancelled"; + ImGui.CloseCurrentPopup(); + } + + ImGui.EndPopup(); + } + + // Context popup + if (showPopup) + { + ImGui.OpenPopup("Demo Popup"); + showPopup = false; + } + + if (ImGui.BeginPopup("Demo Popup")) + { + ImGui.Text("This is a popup menu"); + if (ImGui.MenuItem("Option 1")) + { + // Handle option 1 + } + if (ImGui.MenuItem("Option 2")) + { + // Handle option 2 + } + ImGui.Separator(); + if (ImGui.MenuItem("Close")) + { + // Handle close + } + ImGui.EndPopup(); + } + } +} diff --git a/ImGuiAppDemo/Demos/LayoutDemo.cs b/ImGuiAppDemo/Demos/LayoutDemo.cs new file mode 100644 index 0000000..6e1d2cf --- /dev/null +++ b/ImGuiAppDemo/Demos/LayoutDemo.cs @@ -0,0 +1,139 @@ +// Copyright (c) ktsu.dev +// All rights reserved. +// Licensed under the MIT license. + +namespace ktsu.ImGuiApp.Demo.Demos; + +using System.Numerics; +using Hexa.NET.ImGui; + +/// +/// Demo for layout systems and tables +/// +internal sealed class LayoutDemo : IDemoTab +{ + private readonly List tableData = []; + private bool showTableHeaders = true; + private bool showTableBorders = true; + private readonly Random random = new(); + + private sealed record DemoItem(int Id, string Name, string Category, float Value, bool Active); + + public string TabName => "Layout & Tables"; + + public LayoutDemo() + { + // Initialize table data + for (int i = 0; i < 20; i++) + { + string[] categories = ["Category A", "Category B", "Category C"]; + tableData.Add(new DemoItem( + i, + $"Item {i + 1}", + categories[i % 3], + (float)(random.NextDouble() * 100), + random.NextDouble() > 0.5 + )); + } + } + + public void Update(float deltaTime) + { + // No updates needed for layout demo + } + + public void Render() + { + if (ImGui.BeginTabItem(TabName)) + { + // Columns + ImGui.Text("Columns Layout:"); + ImGui.Columns(3, "DemoColumns"); + ImGui.Separator(); + + ImGui.Text("Column 1"); + ImGui.NextColumn(); + ImGui.Text("Column 2"); + ImGui.NextColumn(); + ImGui.Text("Column 3"); + ImGui.NextColumn(); + + for (int i = 0; i < 9; i++) + { + ImGui.Text($"Item {i + 1}"); + ImGui.NextColumn(); + } + + ImGui.Columns(1); + ImGui.Separator(); + + // Tables + ImGui.Text("Advanced Tables:"); + ImGui.Checkbox("Show Headers", ref showTableHeaders); + ImGui.SameLine(); + ImGui.Checkbox("Show Borders", ref showTableBorders); + + ImGuiTableFlags tableFlags = ImGuiTableFlags.Sortable | ImGuiTableFlags.Resizable; + if (showTableHeaders) + { + tableFlags |= ImGuiTableFlags.RowBg; + } + if (showTableBorders) + { + tableFlags |= ImGuiTableFlags.BordersOuter | ImGuiTableFlags.BordersV; + } + + if (ImGui.BeginTable("DemoTable", 5, tableFlags)) + { + if (showTableHeaders) + { + // Test flags without width parameters + ImGui.TableSetupColumn("ID", ImGuiTableColumnFlags.DefaultSort); + ImGui.TableSetupColumn("Name", ImGuiTableColumnFlags.None); + ImGui.TableSetupColumn("Category", ImGuiTableColumnFlags.None); + ImGui.TableSetupColumn("Value", ImGuiTableColumnFlags.None); + ImGui.TableSetupColumn("Active", ImGuiTableColumnFlags.None); + ImGui.TableHeadersRow(); + } + + for (int row = 0; row < Math.Min(tableData.Count, 10); row++) + { + DemoItem item = tableData[row]; + ImGui.TableNextRow(); + + ImGui.TableSetColumnIndex(0); + ImGui.Text(item.Id.ToString()); + + ImGui.TableSetColumnIndex(1); + ImGui.Text(item.Name); + + ImGui.TableSetColumnIndex(2); + ImGui.Text(item.Category); + + ImGui.TableSetColumnIndex(3); + ImGui.Text($"{item.Value:F2}"); + + ImGui.TableSetColumnIndex(4); + ImGui.Text(item.Active ? "✓" : "✗"); + } + + ImGui.EndTable(); + } + + ImGui.Separator(); + + // Child windows + ImGui.Text("Child Windows:"); + if (ImGui.BeginChild("ScrollableChild", new Vector2(0, 150))) + { + for (int i = 0; i < 50; i++) + { + ImGui.Text($"Scrollable line {i + 1}"); + } + } + ImGui.EndChild(); + + ImGui.EndTabItem(); + } + } +} diff --git a/ImGuiAppDemo/Demos/NerdFontDemo.cs b/ImGuiAppDemo/Demos/NerdFontDemo.cs new file mode 100644 index 0000000..a49d61b --- /dev/null +++ b/ImGuiAppDemo/Demos/NerdFontDemo.cs @@ -0,0 +1,99 @@ +// Copyright (c) ktsu.dev +// All rights reserved. +// Licensed under the MIT license. + +namespace ktsu.ImGuiApp.Demo.Demos; + +using Hexa.NET.ImGui; + +/// +/// Demo for Nerd Font icon support +/// +internal sealed class NerdFontDemo : IDemoTab +{ + public string TabName => "Nerd Fonts"; + + public void Update(float deltaTime) + { + // No updates needed for Nerd Font demo + } + + public void Render() + { + if (ImGui.BeginTabItem(TabName)) + { + ImGui.TextWrapped("Nerd Font Icons (Patched Fonts)"); + ImGui.TextWrapped("This tab demonstrates Nerd Font icons if you're using a Nerd Font (like JetBrains Mono Nerd Font, Fira Code Nerd Font, etc.)."); + ImGui.Separator(); + + // Powerline symbols + ImGui.Text("Powerline Symbols:"); + ImGui.Text("Basic: \uE0A0 \uE0A1 \uE0A2 \uE0B0 \uE0B1 \uE0B2 \uE0B3"); + ImGui.Text("Extra: \uE0A3 \uE0B4 \uE0B5 \uE0B6 \uE0B7 \uE0B8 \uE0CA \uE0CC \uE0CD \uE0D0 \uE0D1 \uE0D4"); + + ImGui.Separator(); + + // Font Awesome icons + ImGui.Text("Font Awesome Icons:"); + ImGui.Text("Files & Folders: \uF07B \uF07C \uF15B \uF15C \uF016 \uF017 \uF019 \uF01A \uF093 \uF095"); + ImGui.Text("Git & Version Control: \uF1D3 \uF1D2 \uF126 \uF127 \uF128 \uF129 \uF12A \uF12B"); + ImGui.Text("Media & UI: \uF04B \uF04C \uF04D \uF050 \uF051 \uF048 \uF049 \uF067 \uF068 \uF00C \uF00D"); + + ImGui.Separator(); + + // Material Design icons + ImGui.Text("Material Design Icons:"); + ImGui.Text("Navigation: \uF52A \uF52B \uF544 \uF53F \uF540 \uF541 \uF542 \uF543"); + ImGui.Text("Actions: \uF8D5 \uF8D6 \uF8D7 \uF8D8 \uF8D9 \uF8DA \uF8DB \uF8DC"); + ImGui.Text("Content: \uF1C1 \uF1C2 \uF1C3 \uF1C4 \uF1C5 \uF1C6 \uF1C7 \uF1C8"); + + ImGui.Separator(); + + // Weather icons + ImGui.Text("Weather Icons:"); + ImGui.Text("Basic Weather: \uE30D \uE30E \uE30F \uE310 \uE311 \uE312 \uE313 \uE314"); + ImGui.Text("Temperature: \uE315 \uE316 \uE317 \uE318 \uE319 \uE31A \uE31B \uE31C"); + ImGui.Text("Wind & Pressure: \uE31D \uE31E \uE31F \uE320 \uE321 \uE322 \uE323 \uE324"); + + ImGui.Separator(); + + // Devicons + ImGui.Text("Developer Icons (Devicons):"); + ImGui.Text("Languages: \uE73C \uE73D \uE73E \uE73F \uE740 \uE741 \uE742 \uE743"); // Various programming languages + ImGui.Text("Frameworks: \uE744 \uE745 \uE746 \uE747 \uE748 \uE749 \uE74A \uE74B"); + ImGui.Text("Tools: \uE74C \uE74D \uE74E \uE74F \uE750 \uE751 \uE752 \uE753"); + + ImGui.Separator(); + + // Octicons + ImGui.Text("Octicons (GitHub Icons):"); + ImGui.Text("Version Control: \uF418 \uF419 \uF41A \uF41B \uF41C \uF41D \uF41E \uF41F"); + ImGui.Text("Issues & PRs: \uF420 \uF421 \uF422 \uF423 \uF424 \uF425 \uF426 \uF427"); + ImGui.Text("Social: \u2665 \u26A1 \uF428 \uF429 \uF42A \uF42B \uF42C \uF42D"); + + ImGui.Separator(); + + // Font Logos + ImGui.Text("Brand Logos (Font Logos):"); + ImGui.Text("Tech Brands: \uF300 \uF301 \uF302 \uF303 \uF304 \uF305 \uF306 \uF307"); + ImGui.Text("More Logos: \uF308 \uF309 \uF30A \uF30B \uF30C \uF30D \uF30E \uF30F"); + + ImGui.Separator(); + + // Pomicons + ImGui.Text("Pomicons:"); + ImGui.Text("Small Icons: \uE000 \uE001 \uE002 \uE003 \uE004 \uE005 \uE006 \uE007"); + ImGui.Text("More Icons: \uE008 \uE009 \uE00A \uE00B \uE00C \uE00D"); + + ImGui.Separator(); + ImGui.TextWrapped("Note: These icons will only display correctly if you're using a Nerd Font. " + + "If you see question marks or boxes, switch to a Nerd Font like 'JetBrains Mono Nerd Font' or 'Fira Code Nerd Font'."); + + ImGui.Separator(); + ImGui.TextWrapped("Popular Nerd Fonts: JetBrains Mono Nerd Font, Fira Code Nerd Font, Hack Nerd Font, " + + "Source Code Pro Nerd Font, DejaVu Sans Mono Nerd Font, and many more at nerdfonts.com"); + + ImGui.EndTabItem(); + } + } +} diff --git a/ImGuiAppDemo/Demos/UnicodeDemo.cs b/ImGuiAppDemo/Demos/UnicodeDemo.cs new file mode 100644 index 0000000..a659cfd --- /dev/null +++ b/ImGuiAppDemo/Demos/UnicodeDemo.cs @@ -0,0 +1,65 @@ +// Copyright (c) ktsu.dev +// All rights reserved. +// Licensed under the MIT license. + +namespace ktsu.ImGuiApp.Demo.Demos; + +using Hexa.NET.ImGui; + +/// +/// Demo for Unicode and emoji support +/// +internal sealed class UnicodeDemo : IDemoTab +{ + public string TabName => "Unicode & Emojis"; + + public void Update(float deltaTime) + { + // No updates needed for Unicode demo + } + + public void Render() + { + if (ImGui.BeginTabItem(TabName)) + { + ImGui.TextWrapped("Unicode and Emoji Support (Enabled by Default)"); + ImGui.TextWrapped("ImGuiApp automatically includes support for Unicode characters and emojis. This feature works with your configured fonts."); + ImGui.Separator(); + + ImGui.Text("Basic ASCII: Hello World!"); + ImGui.Text("Accented characters: café, naïve, résumé"); + ImGui.Text("Mathematical symbols: ∞ ≠ ≈ ≤ ≥ ± × ÷ ∂ ∑ ∏ √ ∫"); + ImGui.Text("Currency symbols: $ € £ ¥ ₹ ₿"); + ImGui.Text("Arrows: ← → ↑ ↓ ↔ ↕ ⇐ ⇒ ⇑ ⇓"); + ImGui.Text("Geometric shapes: ■ □ ▲ △ ● ○ ◆ ◇ ★ ☆"); + ImGui.Text("Miscellaneous symbols: ♠ ♣ ♥ ♦ ☀ ☁ ☂ ☃ ♪ ♫"); + + ImGui.Separator(); + ImGui.Text("Full Emoji Range Support (if font supports them):"); + ImGui.Text("Faces: 😀 😃 😄 😁 😆 😅 😂 🤣 😊 😇 😍 😎 🤓 🧐 🤔 😴"); + ImGui.Text("Gestures: 👍 👎 👌 ✌️ 🤞 🤟 🤘 🤙 👈 👉 👆 👇 ☝️ ✋ 🤚 🖐"); + ImGui.Text("Objects: 🚀 💻 📱 🎸 🎨 🏆 🌟 💎 ⚡ 🔥 💡 🔧 ⚙️ 🔑 💰"); + ImGui.Text("Nature: 🌈 🌞 🌙 ⭐ 🌍 🌊 🌳 🌸 🦋 🐝 🐶 🐱 🦊 🐻 🐼"); + ImGui.Text("Food: 🍎 🍌 🍕 🍔 🍟 🍦 🎂 ☕ 🍺 🍷 🍓 🥑 🥨 🧀 🍯"); + ImGui.Text("Transport: 🚗 🚂 ✈️ 🚲 🚢 🚁 🚌 🏍️ 🛸 🚜 🏎️ 🚙 🚕 🚐"); + ImGui.Text("Activities: ⚽ 🏀 🏈 ⚾ 🎾 🏐 🏉 🎱 🏓 🏸 🥊 ⛳ 🎯 🎪"); + ImGui.Text("Weather: ☀️ ⛅ ☁️ 🌤️ ⛈️ 🌧️ ❄️ ☃️ ⛄ 🌬️ 💨 🌊 💧"); + ImGui.Text("Symbols: ❤️ 💚 💙 💜 🖤 💛 💔 ❣️ 💕 💖 💗 💘 💝 ✨"); + ImGui.Text("Arrows: ← → ↑ ↓ ↔ ↕ ↖ ↗ ↘ ↙ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃"); + ImGui.Text("Math: ± × ÷ = ≠ ≈ ≤ ≥ ∞ √ ∑ ∏ ∂ ∫ Ω π α β γ δ"); + ImGui.Text("Geometric: ■ □ ▲ △ ● ○ ◆ ◇ ★ ☆ ♠ ♣ ♥ ♦ ▪ ▫ ◾ ◽"); + ImGui.Text("Currency: $ € £ ¥ ₹ ₿ ¢ ₽ ₩ ₡ ₪ ₫ ₱ ₴ ₦ ₨ ₵"); + ImGui.Text("Dingbats: ✂ ✈ ☎ ⌚ ⏰ ⏳ ⌛ ⚡ ☔ ☂ ☀ ⭐ ☁ ⛅ ❄"); + ImGui.Text("Enclosed: ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ"); + + ImGui.Separator(); + ImGui.TextWrapped("Note: Character display depends on your configured font's Unicode support. " + + "If characters show as question marks, your font may not include those glyphs."); + + ImGui.Separator(); + ImGui.TextWrapped("To disable Unicode support (ASCII only), set EnableUnicodeSupport = false in your ImGuiAppConfig."); + + ImGui.EndTabItem(); + } + } +} diff --git a/ImGuiAppDemo/Demos/UtilityDemo.cs b/ImGuiAppDemo/Demos/UtilityDemo.cs new file mode 100644 index 0000000..34dbdc5 --- /dev/null +++ b/ImGuiAppDemo/Demos/UtilityDemo.cs @@ -0,0 +1,109 @@ +// Copyright (c) ktsu.dev +// All rights reserved. +// Licensed under the MIT license. + +namespace ktsu.ImGuiApp.Demo.Demos; + +using System.Text; +using Hexa.NET.ImGui; + +/// +/// Demo for utility tools and debugging features +/// +internal sealed class UtilityDemo : IDemoTab +{ + private string filePath = ""; + private string fileContent = ""; + private bool showImGuiDemo; + private bool showStyleEditor; + private bool showMetrics; + + public string TabName => "Utilities & Tools"; + + public void Update(float deltaTime) + { + // Handle additional windows + if (showImGuiDemo) + { + ImGui.ShowDemoWindow(ref showImGuiDemo); + } + + if (showStyleEditor) + { + ImGui.Begin("Style Editor", ref showStyleEditor); + ImGui.ShowStyleEditor(); + ImGui.End(); + } + + if (showMetrics) + { + ImGui.ShowMetricsWindow(ref showMetrics); + } + } + + public void Render() + { + if (ImGui.BeginTabItem(TabName)) + { + // File operations + ImGui.Text("File Operations:"); + ImGui.InputText("File Path", ref filePath, 256); + ImGui.SameLine(); + if (ImGui.Button("Load") && !string.IsNullOrEmpty(filePath)) + { + try + { + fileContent = File.ReadAllText(filePath); + } + catch (Exception ex) when (ex is FileNotFoundException or UnauthorizedAccessException) + { + // Handle file read errors gracefully + fileContent = $"Error loading file: {ex.Message}"; + } + } + + if (!string.IsNullOrEmpty(fileContent)) + { + ImGui.Text("File Content Preview:"); + ImGui.TextWrapped(fileContent.Length > 500 ? fileContent[..500] + "..." : fileContent); + } + + ImGui.Separator(); + + // System information + ImGui.Text("System Information:"); + unsafe + { + byte* ptr = ImGui.GetVersion(); + int length = 0; + while (ptr[length] != 0) + { + length++; + } + ImGui.Text($"ImGui Version: {Encoding.UTF8.GetString(ptr, length)}"); + } + ImGui.Text($"Display Size: {ImGui.GetIO().DisplaySize}"); + + ImGui.Separator(); + + // Debugging tools + ImGui.Text("Debug Tools:"); + if (ImGui.Button("Show ImGui Demo")) + { + showImGuiDemo = true; + } + ImGui.SameLine(); + if (ImGui.Button("Show Style Editor")) + { + showStyleEditor = true; + } + ImGui.SameLine(); + if (ImGui.Button("Show Metrics")) + { + showMetrics = true; + } + + ImGui.EndTabItem(); + } + } +} diff --git a/ImGuiAppDemo/ImGuiAppDemo.cs b/ImGuiAppDemo/ImGuiAppDemo.cs index 1b43047..a3226c9 100644 --- a/ImGuiAppDemo/ImGuiAppDemo.cs +++ b/ImGuiAppDemo/ImGuiAppDemo.cs @@ -4,147 +4,32 @@ namespace ktsu.ImGuiApp.Demo; -using System.Numerics; -using System.Text; - using Hexa.NET.ImGui; -using Hexa.NET.ImGuizmo; -using Hexa.NET.ImNodes; -using Hexa.NET.ImPlot; - -using ktsu.Extensions; using ktsu.ImGuiApp; -using ktsu.ImGuiAppDemo.Properties; +using ktsu.ImGuiApp.Demo.Demos; using ktsu.StrongPaths; internal static class ImGuiAppDemo { - private static bool showImGuiDemo; - private static bool showStyleEditor; - private static bool showMetrics; private static bool showAbout; + private static readonly List demoTabs = []; - // Demo state - Basic Widgets - private static float sliderValue = 0.5f; - private static int counter; - private static bool checkboxState; - private static string inputText = "Type here..."; - private static Vector3 colorPickerValue = new(0.4f, 0.7f, 0.2f); - private static Vector4 color4Value = new(1.0f, 0.5f, 0.2f, 1.0f); - private static readonly Random random = new(); - private static readonly List plotValues = []; - private static float plotRefreshTime; - - // Advanced widget states - private static int comboSelection; - private static readonly string[] comboItems = ["Item 1", "Item 2", "Item 3", "Item 4"]; - private static int listboxSelection; - private static readonly string[] listboxItems = ["Apple", "Banana", "Cherry", "Date", "Elderberry"]; - private static float dragFloat = 1.0f; - private static int dragInt = 50; - private static Vector3 dragVector = new(1.0f, 2.0f, 3.0f); - private static float angle; - - // Table demo state - private static readonly List tableData = []; - private static bool showTableHeaders = true; - private static bool showTableBorders = true; - - // Text rendering state - private static readonly StringBuilder textBuffer = new(1024); - private static bool wrapText = true; - private static float textSpeed = 50.0f; - private static float animationTime; - - // Canvas drawing state - private static readonly List canvasPoints = []; - private static Vector4 drawColor = new(1.0f, 1.0f, 0.0f, 1.0f); - private static float brushSize = 5.0f; - - // Modal and popup states - private static bool showModal; - private static bool showPopup; - private static string modalResult = ""; - - // File operations - private static string filePath = ""; - private static string fileContent = ""; - - // Animation demo - private static float bounceOffset; - private static float pulseScale = 1.0f; - - // Additional UI state - private static int radioSelection; - private static string modalInputBuffer = ""; - - // ImGuizmo demo state - private static Matrix4x4 gizmoTransform = Matrix4x4.Identity; - private static Matrix4x4 gizmoView = Matrix4x4.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.UnitY); - private static Matrix4x4 gizmoProjection = Matrix4x4.CreatePerspectiveFieldOfView(MathF.PI / 4f, 16f / 9f, 0.1f, 100f); - private static ImGuizmoOperation gizmoOperation = ImGuizmoOperation.Translate; - private static ImGuizmoMode gizmoMode = ImGuizmoMode.Local; - private static bool gizmoEnabled = true; - - // ImNodes demo state - private static int nextNodeId = 1; - private static int nextLinkId = 1; - private static readonly List nodes = []; - private static readonly List links = []; - - // ImPlot demo state - private static readonly List sinData = []; - private static readonly List cosData = []; - private static readonly List noiseData = []; - private static float plotTime; - private static readonly Random plotRandom = new(); - - private sealed record SimpleNode(int Id, Vector2 Position, string Name, List InputPins, List OutputPins); - private sealed record SimpleLink(int Id, int InputPinId, int OutputPinId); - private sealed record SimplePin(int Id, int NodeId, string Name, bool IsOutput); - - private sealed record DemoItem(int Id, string Name, string Category, float Value, bool Active); - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Security", "CA5394:Do not use insecure randomness", Justification = "")] static ImGuiAppDemo() { - // Initialize table data - for (int i = 0; i < 20; i++) - { - string[] categories = ["Category A", "Category B", "Category C"]; - tableData.Add(new DemoItem( - i, - $"Item {i + 1}", - categories[i % 3], - (float)(random.NextDouble() * 100), - random.NextDouble() > 0.5 - )); - } - - textBuffer.Append("This is a demonstration of ImGui text editing capabilities.\n"); - textBuffer.Append("You can edit this text, and it will update in real-time.\n"); - textBuffer.Append("ImGui supports multi-line text editing with syntax highlighting possibilities."); - - // Initialize ImNodes context - ImNodes.CreateContext(); - - // Initialize demo data for ImNodes - nodes.Add(new SimpleNode(nextNodeId++, new Vector2(50, 50), "Input Node", [], [1, 2])); - nodes.Add(new SimpleNode(nextNodeId++, new Vector2(250, 100), "Process Node", [3], [4])); - nodes.Add(new SimpleNode(nextNodeId++, new Vector2(450, 50), "Output Node", [5, 6], [])); - - // Create some demo links - links.Add(new SimpleLink(nextLinkId++, 1, 3)); // Connect Input to Process - links.Add(new SimpleLink(nextLinkId++, 4, 5)); // Connect Process to Output - - // Initialize plot data - for (int i = 0; i < 100; i++) - { - float x = i * 0.1f; - sinData.Add(MathF.Sin(x)); - cosData.Add(MathF.Cos(x)); - noiseData.Add((float)(plotRandom.NextDouble() * 2.0 - 1.0)); - } + // Initialize all demo tabs + demoTabs.Add(new BasicWidgetsDemo()); + demoTabs.Add(new AdvancedWidgetsDemo()); + demoTabs.Add(new LayoutDemo()); + demoTabs.Add(new GraphicsDemo()); + demoTabs.Add(new DataVisualizationDemo()); + demoTabs.Add(new InputHandlingDemo()); + demoTabs.Add(new AnimationDemo()); + demoTabs.Add(new UnicodeDemo()); + demoTabs.Add(new NerdFontDemo()); + demoTabs.Add(new ImGuizmoDemo()); + demoTabs.Add(new ImNodesDemo()); + demoTabs.Add(new ImPlotDemo()); + demoTabs.Add(new UtilityDemo()); } private static void Main() => ImGuiApp.Start(new() @@ -157,7 +42,7 @@ private static void Main() => ImGuiApp.Start(new() // Note: EnableUnicodeSupport = true by default, so Unicode and emojis are automatically enabled! Fonts = new Dictionary { - { nameof(Resources.CARDCHAR), Resources.CARDCHAR } + { nameof(ktsu.ImGuiAppDemo.Properties.Resources.CARDCHAR), ktsu.ImGuiAppDemo.Properties.Resources.CARDCHAR } }, // Example of configuring performance settings for throttled rendering // Uses PID controller for accurate frame rate limiting instead of simple sleep-based approach @@ -174,37 +59,20 @@ private static void Main() => ImGuiApp.Start(new() private static void OnRender(float dt) { - UpdateAnimations(dt); - RenderMainDemoWindow(); - - // Show additional windows based on menu toggles - if (showImGuiDemo) - { - ImGui.ShowDemoWindow(ref showImGuiDemo); - } - - if (showStyleEditor) + // Update all demo tabs + foreach (var demo in demoTabs) { - ImGui.Begin("Style Editor", ref showStyleEditor); - ImGui.ShowStyleEditor(); - ImGui.End(); + demo.Update(dt); } - if (showMetrics) - { - ImGui.ShowMetricsWindow(ref showMetrics); - } + // Render main demo window + RenderMainDemoWindow(); + // Show about window if requested if (showAbout) { RenderAboutWindow(); } - - // Handle modals and popups - RenderModalAndPopups(); - - // Update plot data - UpdatePlotData(dt); } private static void RenderMainDemoWindow() @@ -212,1045 +80,15 @@ private static void RenderMainDemoWindow() // Create tabs for different demo sections if (ImGui.BeginTabBar("DemoTabs", ImGuiTabBarFlags.None)) { - RenderBasicWidgetsTab(); - RenderAdvancedWidgetsTab(); - RenderLayoutTab(); - RenderGraphicsTab(); - RenderDataVisualizationTab(); - RenderInputHandlingTab(); - RenderAnimationTab(); - RenderUnicodeTab(); - RenderNerdFontTab(); - RenderImGuizmoTab(); - RenderImNodesTab(); - RenderImPlotTab(); - RenderUtilityTab(); - ImGui.EndTabBar(); - } - } - - private static void RenderBasicWidgetsTab() - { - if (ImGui.BeginTabItem("Basic Widgets")) - { - ImGui.TextWrapped("This tab demonstrates basic ImGui widgets and controls."); - ImGui.Separator(); - - // Buttons - ImGui.Text("Buttons:"); - if (ImGui.Button("Regular Button")) - { - counter++; - } - - ImGui.SameLine(); - if (ImGui.SmallButton("Small")) - { - counter++; - } - - ImGui.SameLine(); - if (ImGui.ArrowButton("##left", ImGuiDir.Left)) - { - counter--; - } - - ImGui.SameLine(); - if (ImGui.ArrowButton("##right", ImGuiDir.Right)) - { - counter++; - } - - ImGui.SameLine(); - ImGui.Text($"Counter: {counter}"); - - // Checkboxes and Radio buttons - ImGui.Separator(); - ImGui.Text("Selection Controls:"); - ImGui.Checkbox("Checkbox", ref checkboxState); - - ImGui.RadioButton("Option 1", ref radioSelection, 0); - ImGui.SameLine(); - ImGui.RadioButton("Option 2", ref radioSelection, 1); - ImGui.SameLine(); - ImGui.RadioButton("Option 3", ref radioSelection, 2); - - // Sliders - ImGui.Separator(); - ImGui.Text("Sliders:"); - ImGui.SliderFloat("Float Slider", ref sliderValue, 0.0f, 1.0f); - ImGui.SliderFloat("Angle", ref angle, 0.0f, 360.0f, "%.1f deg"); - ImGui.SliderInt("Int Slider", ref dragInt, 0, 100); - - // Input fields - ImGui.Separator(); - ImGui.Text("Input Fields:"); - ImGui.InputText("Text Input", ref inputText, 100); - ImGui.InputFloat("Float Input", ref dragFloat); - ImGui.InputFloat3("Vector3 Input", ref dragVector); - - // Combo boxes - ImGui.Separator(); - ImGui.Text("Dropdowns:"); - ImGui.Combo("Combo Box", ref comboSelection, comboItems, comboItems.Length); - ImGui.ListBox("List Box", ref listboxSelection, listboxItems, listboxItems.Length, 4); - - ImGui.EndTabItem(); - } - } - - private static void RenderAdvancedWidgetsTab() - { - if (ImGui.BeginTabItem("Advanced Widgets")) - { - // Color controls - ImGui.Text("Color Controls:"); - ImGui.ColorEdit3("Color RGB", ref colorPickerValue); - ImGui.ColorEdit4("Color RGBA", ref color4Value); - ImGui.SetNextItemWidth(200.0f); - ImGui.ColorPicker3("Color Picker", ref colorPickerValue); - - ImGui.Separator(); - - // Tree view - ImGui.Text("Tree View:"); - if (ImGui.TreeNode("Root Node")) - { - for (int i = 0; i < 5; i++) - { - string nodeName = $"Child Node {i}"; - bool nodeOpen = ImGui.TreeNode(nodeName); - - if (i == 2 && nodeOpen) - { - for (int j = 0; j < 3; j++) - { - if (ImGui.TreeNode($"Grandchild {j}")) - { - ImGui.Text($"Leaf item {j}"); - ImGui.TreePop(); - } - } - } - else if (nodeOpen) - { - ImGui.Text($"Content of {nodeName}"); - } - - if (nodeOpen) - { - ImGui.TreePop(); - } - } - ImGui.TreePop(); - } - - ImGui.Separator(); - - // Progress bars and loading indicators - ImGui.Text("Progress Indicators:"); - float progress = ((float)Math.Sin(animationTime * 2.0) * 0.5f) + 0.5f; - ImGui.ProgressBar(progress, new Vector2(-1, 0), $"{progress * 100:F1}%"); - - // Spinner-like effect - ImGui.Text("Loading..."); - ImGui.SameLine(); - for (int i = 0; i < 8; i++) - { - float rotation = (animationTime * 5.0f) + (i * MathF.PI / 4.0f); - float alpha = (MathF.Sin(rotation) + 1.0f) * 0.5f; - ImGui.TextColored(new Vector4(1, 1, 1, alpha), "●"); - if (i < 7) - { - ImGui.SameLine(); - } - } - - ImGui.EndTabItem(); - } - } - - private static void RenderLayoutTab() - { - if (ImGui.BeginTabItem("Layout & Tables")) - { - // Columns - ImGui.Text("Columns Layout:"); - ImGui.Columns(3, "DemoColumns"); - ImGui.Separator(); - - ImGui.Text("Column 1"); - ImGui.NextColumn(); - ImGui.Text("Column 2"); - ImGui.NextColumn(); - ImGui.Text("Column 3"); - ImGui.NextColumn(); - - for (int i = 0; i < 9; i++) - { - ImGui.Text($"Item {i + 1}"); - ImGui.NextColumn(); - } - - ImGui.Columns(1); - ImGui.Separator(); - - // Tables - ImGui.Text("Advanced Tables:"); - ImGui.Checkbox("Show Headers", ref showTableHeaders); - ImGui.SameLine(); - ImGui.Checkbox("Show Borders", ref showTableBorders); - - ImGuiTableFlags tableFlags = ImGuiTableFlags.Sortable | ImGuiTableFlags.Resizable; - if (showTableHeaders) - { - tableFlags |= ImGuiTableFlags.RowBg; - } - if (showTableBorders) - { - tableFlags |= ImGuiTableFlags.BordersOuter | ImGuiTableFlags.BordersV; - } - - if (ImGui.BeginTable("DemoTable", 5, tableFlags)) - { - if (showTableHeaders) - { - // Test flags without width parameters - ImGui.TableSetupColumn("ID", ImGuiTableColumnFlags.DefaultSort); - ImGui.TableSetupColumn("Name", ImGuiTableColumnFlags.None); - ImGui.TableSetupColumn("Category", ImGuiTableColumnFlags.None); - ImGui.TableSetupColumn("Value", ImGuiTableColumnFlags.None); - ImGui.TableSetupColumn("Active", ImGuiTableColumnFlags.None); - ImGui.TableHeadersRow(); - } - - for (int row = 0; row < Math.Min(tableData.Count, 10); row++) - { - DemoItem item = tableData[row]; - ImGui.TableNextRow(); - - ImGui.TableSetColumnIndex(0); - ImGui.Text(item.Id.ToString()); - - ImGui.TableSetColumnIndex(1); - ImGui.Text(item.Name); - - ImGui.TableSetColumnIndex(2); - ImGui.Text(item.Category); - - ImGui.TableSetColumnIndex(3); - ImGui.Text($"{item.Value:F2}"); - - ImGui.TableSetColumnIndex(4); - ImGui.Text(item.Active ? "✓" : "✗"); - } - - ImGui.EndTable(); - } - - ImGui.Separator(); - - // Child windows - ImGui.Text("Child Windows:"); - if (ImGui.BeginChild("ScrollableChild", new Vector2(0, 150))) - { - for (int i = 0; i < 50; i++) - { - ImGui.Text($"Scrollable line {i + 1}"); - } - } - ImGui.EndChild(); - - ImGui.EndTabItem(); - } - } - - private static void RenderGraphicsTab() - { - if (ImGui.BeginTabItem("Graphics & Drawing")) - { - // Image display - AbsoluteFilePath iconPath = AppContext.BaseDirectory.As() / "icon.png".As(); - ImGuiAppTextureInfo iconTexture = ImGuiApp.GetOrLoadTexture(iconPath); - - ImGui.Text("Image Display:"); - ImGui.Image(iconTexture.TextureRef, new Vector2(64, 64)); - ImGui.SameLine(); - ImGui.Image(iconTexture.TextureRef, new Vector2(32, 32)); - ImGui.SameLine(); - ImGui.Image(iconTexture.TextureRef, new Vector2(16, 16)); - - ImGui.Separator(); - - // Custom drawing with ImDrawList - ImGui.Text("Custom Drawing Canvas:"); - ImGui.ColorEdit4("Draw Color", ref drawColor); - ImGui.SliderFloat("Brush Size", ref brushSize, 1.0f, 20.0f); - - if (ImGui.Button("Clear Canvas")) - { - canvasPoints.Clear(); - } - - Vector2 canvasPos = ImGui.GetCursorScreenPos(); - Vector2 canvasSize = new(400, 200); - - // Draw canvas background - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - drawList.AddRectFilled(canvasPos, canvasPos + canvasSize, ImGui.ColorConvertFloat4ToU32(new Vector4(0.1f, 0.1f, 0.1f, 1.0f))); - drawList.AddRect(canvasPos, canvasPos + canvasSize, ImGui.ColorConvertFloat4ToU32(new Vector4(0.5f, 0.5f, 0.5f, 1.0f))); - - // Handle mouse input for drawing - ImGui.InvisibleButton("Canvas", canvasSize); - if (ImGui.IsItemActive() && ImGui.IsMouseDown(ImGuiMouseButton.Left)) - { - Vector2 mousePos = ImGui.GetMousePos() - canvasPos; - if (mousePos.X >= 0 && mousePos.Y >= 0 && mousePos.X <= canvasSize.X && mousePos.Y <= canvasSize.Y) - { - canvasPoints.Add(mousePos); - } - } - - // Draw points - uint color = ImGui.ColorConvertFloat4ToU32(drawColor); - foreach (Vector2 point in canvasPoints) - { - drawList.AddCircleFilled(canvasPos + point, brushSize, color); - } - - // Draw some simple shapes for demonstration - ImGui.Separator(); - ImGui.Text("Shape Examples:"); - Vector2 shapeStart = ImGui.GetCursorScreenPos(); - - // Simple animated circle - float t = animationTime; - Vector2 center = shapeStart + new Vector2(100, 50); - float radius = 20 + (MathF.Sin(t * 2) * 5); - drawList.AddCircle(center, radius, ImGui.ColorConvertFloat4ToU32(new Vector4(1, 0, 0, 1)), 16, 2.0f); - - // Moving rectangle - Vector2 rectPos = shapeStart + new Vector2(200 + (MathF.Sin(t) * 30), 30); - drawList.AddRectFilled(rectPos, rectPos + new Vector2(40, 40), ImGui.ColorConvertFloat4ToU32(new Vector4(0, 1, 0, 0.7f))); - - ImGui.Dummy(new Vector2(400, 100)); // Reserve space - - ImGui.EndTabItem(); - } - } - - private static void RenderDataVisualizationTab() - { - if (ImGui.BeginTabItem("Data Visualization")) - { - ImGui.Text("Real-time Data Plots:"); - - // Line plot - if (plotValues.Count > 0) - { - float[] values = [.. plotValues]; - ImGui.PlotLines("Random Values", ref values[0], values.Length, 0, - $"Current: {values[^1]:F2}", 0.0f, 1.0f, new Vector2(ImGui.GetContentRegionAvail().X, 100)); - - ImGui.PlotHistogram("Distribution", ref values[0], values.Length, 0, - "Histogram", 0.0f, 1.0f, new Vector2(ImGui.GetContentRegionAvail().X, 100)); - } - - ImGui.Separator(); - - // Performance note - ImGui.Text("Performance Metrics:"); - ImGui.TextWrapped("Performance monitoring is now available in the Debug menu! Use 'Debug > Show Performance Monitor' to see real-time FPS graphs and throttling state."); - - ImGui.Separator(); - - // Font demonstrations - ImGui.Text("Custom Font Rendering:"); - using (new FontAppearance(nameof(Resources.CARDCHAR), 16)) - { - ImGui.Text("Small custom font text"); - } - - using (new FontAppearance(nameof(Resources.CARDCHAR), 24)) - { - ImGui.Text("Medium custom font text"); - } - - using (new FontAppearance(nameof(Resources.CARDCHAR), 32)) - { - ImGui.Text("Large custom font text"); - } - - // Text formatting examples - ImGui.Separator(); - ImGui.Text("Text Formatting:"); - ImGui.TextColored(new Vector4(1, 0, 0, 1), "Red text"); - ImGui.TextColored(new Vector4(0, 1, 0, 1), "Green text"); - ImGui.TextColored(new Vector4(0, 0, 1, 1), "Blue text"); - ImGui.TextWrapped("This is a long line of text that should wrap to multiple lines when the window is not wide enough to contain it all on a single line."); - - ImGui.EndTabItem(); - } - } - - private static void RenderInputHandlingTab() - { - if (ImGui.BeginTabItem("Input & Interaction")) - { - ImGui.Text("Mouse Information:"); - Vector2 mousePos = ImGui.GetMousePos(); - Vector2 mouseDelta = ImGui.GetMouseDragDelta(ImGuiMouseButton.Left); - ImGui.Text($"Mouse Position: ({mousePos.X:F1}, {mousePos.Y:F1})"); - ImGui.Text($"Mouse Delta: ({mouseDelta.X:F1}, {mouseDelta.Y:F1})"); - ImGui.Text($"Left Button: {(ImGui.IsMouseDown(ImGuiMouseButton.Left) ? "DOWN" : "UP")}"); - ImGui.Text($"Right Button: {(ImGui.IsMouseDown(ImGuiMouseButton.Right) ? "DOWN" : "UP")}"); - - ImGui.Separator(); - - // Simple drag demonstration - ImGui.Text("Drag & Drop:"); - ImGui.Button("Drag Source", new Vector2(100, 50)); - ImGui.SameLine(); - ImGui.Button("Drop Target", new Vector2(100, 50)); - ImGui.Text("(Drag and drop functionality would require more complex implementation)"); - - ImGui.Separator(); - - // Text editing - ImGui.Text("Multi-line Text Editor:"); - ImGui.Checkbox("Word Wrap", ref wrapText); - ImGuiInputTextFlags textFlags = ImGuiInputTextFlags.AllowTabInput; - if (!wrapText) - { - textFlags |= ImGuiInputTextFlags.NoHorizontalScroll; - } - - string textContent = textBuffer.ToString(); - if (ImGui.InputTextMultiline("##TextEditor", ref textContent, 1024, new Vector2(-1, 150), textFlags)) - { - textBuffer.Clear(); - textBuffer.Append(textContent); - } - - ImGui.Separator(); - - // Popup and modal buttons - ImGui.Text("Popups and Modals:"); - if (ImGui.Button("Show Modal")) - { - showModal = true; - modalResult = ""; - } - - ImGui.SameLine(); - if (ImGui.Button("Show Popup")) - { - showPopup = true; - } - - if (!string.IsNullOrEmpty(modalResult)) - { - ImGui.Text($"Modal Result: {modalResult}"); - } - - ImGui.EndTabItem(); - } - } - - private static void RenderAnimationTab() - { - if (ImGui.BeginTabItem("Animation & Effects")) - { - ImGui.Text("Animation Examples:"); - - // Simple animations - ImGui.Text("Bouncing Animation:"); - Vector2 ballPos = ImGui.GetCursorScreenPos(); - ballPos.Y += bounceOffset; - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - drawList.AddCircleFilled(ballPos + new Vector2(50, 50), 20, ImGui.ColorConvertFloat4ToU32(new Vector4(1, 0.5f, 0, 1))); - ImGui.Dummy(new Vector2(100, 100)); - - // Pulsing element - ImGui.Text("Pulse Animation:"); - Vector2 pulsePos = ImGui.GetCursorScreenPos(); - float pulseSize = 20 * pulseScale; - drawList.AddCircleFilled(pulsePos + new Vector2(50, 50), pulseSize, - ImGui.ColorConvertFloat4ToU32(new Vector4(0.5f, 0, 1, 0.7f))); - ImGui.Dummy(new Vector2(100, 100)); - - ImGui.Separator(); - - // Animation controls - ImGui.Text("Animation Controls:"); - ImGui.SliderFloat("Text Speed", ref textSpeed, 10.0f, 200.0f); - - // Animated text (simplified) - ImGui.Text("Animated text effects:"); - for (int i = 0; i < 20; i++) - { - float wave = (MathF.Sin((animationTime * 3.0f) + (i * 0.5f)) * 0.5f) + 0.5f; - ImGui.TextColored(new Vector4(wave, 1.0f - wave, 0.5f, 1.0f), i % 5 == 4 ? " " : "▓"); - if (i % 5 != 4) - { - ImGui.SameLine(); - } - } - - ImGui.EndTabItem(); - } - } - - private static void RenderUtilityTab() - { - if (ImGui.BeginTabItem("Utilities & Tools")) - { - // File operations - ImGui.Text("File Operations:"); - ImGui.InputText("File Path", ref filePath, 256); - ImGui.SameLine(); - if (ImGui.Button("Load") && !string.IsNullOrEmpty(filePath)) - { - try - { - fileContent = File.ReadAllText(filePath); - } - catch (Exception ex) when (ex is FileNotFoundException or UnauthorizedAccessException) - { - // Handle file read errors gracefully - fileContent = $"Error loading file: {ex.Message}"; - } - } - - if (!string.IsNullOrEmpty(fileContent)) - { - ImGui.Text("File Content Preview:"); - ImGui.TextWrapped(fileContent.Length > 500 ? fileContent[..500] + "..." : fileContent); - } - - ImGui.Separator(); - - // System information - ImGui.Text("System Information:"); - unsafe - { - byte* ptr = ImGui.GetVersion(); - int length = 0; - while (ptr[length] != 0) - { - length++; - } - ImGui.Text($"ImGui Version: {Encoding.UTF8.GetString(ptr, length)}"); - } - ImGui.Text($"Display Size: {ImGui.GetIO().DisplaySize}"); - - ImGui.Separator(); - - // Debugging tools - ImGui.Text("Debug Tools:"); - if (ImGui.Button("Show ImGui Demo")) - { - showImGuiDemo = true; - } - ImGui.SameLine(); - if (ImGui.Button("Show Style Editor")) - { - showStyleEditor = true; - } - ImGui.SameLine(); - if (ImGui.Button("Show Metrics")) - { - showMetrics = true; - } - - ImGui.EndTabItem(); - } - } - - private static void RenderUnicodeTab() - { - if (ImGui.BeginTabItem("Unicode & Emojis")) - { - ImGui.TextWrapped("Unicode and Emoji Support (Enabled by Default)"); - ImGui.TextWrapped("ImGuiApp automatically includes support for Unicode characters and emojis. This feature works with your configured fonts."); - ImGui.Separator(); - - ImGui.Text("Basic ASCII: Hello World!"); - ImGui.Text("Accented characters: café, naïve, résumé"); - ImGui.Text("Mathematical symbols: ∞ ≠ ≈ ≤ ≥ ± × ÷ ∂ ∑ ∏ √ ∫"); - ImGui.Text("Currency symbols: $ € £ ¥ ₹ ₿"); - ImGui.Text("Arrows: ← → ↑ ↓ ↔ ↕ ⇐ ⇒ ⇑ ⇓"); - ImGui.Text("Geometric shapes: ■ □ ▲ △ ● ○ ◆ ◇ ★ ☆"); - ImGui.Text("Miscellaneous symbols: ♠ ♣ ♥ ♦ ☀ ☁ ☂ ☃ ♪ ♫"); - - ImGui.Separator(); - ImGui.Text("Full Emoji Range Support (if font supports them):"); - ImGui.Text("Faces: 😀 😃 😄 😁 😆 😅 😂 🤣 😊 😇 😍 😎 🤓 🧐 🤔 😴"); - ImGui.Text("Gestures: 👍 👎 👌 ✌️ 🤞 🤟 🤘 🤙 👈 👉 👆 👇 ☝️ ✋ 🤚 🖐"); - ImGui.Text("Objects: 🚀 💻 📱 🎸 🎨 🏆 🌟 💎 ⚡ 🔥 💡 🔧 ⚙️ 🔑 💰"); - ImGui.Text("Nature: 🌈 🌞 🌙 ⭐ 🌍 🌊 🌳 🌸 🦋 🐝 🐶 🐱 🦊 🐻 🐼"); - ImGui.Text("Food: 🍎 🍌 🍕 🍔 🍟 🍦 🎂 ☕ 🍺 🍷 🍓 🥑 🥨 🧀 🍯"); - ImGui.Text("Transport: 🚗 🚂 ✈️ 🚲 🚢 🚁 🚌 🏍️ 🛸 🚜 🏎️ 🚙 🚕 🚐"); - ImGui.Text("Activities: ⚽ 🏀 🏈 ⚾ 🎾 🏐 🏉 🎱 🏓 🏸 🥊 ⛳ 🎯 🎪"); - ImGui.Text("Weather: ☀️ ⛅ ☁️ 🌤️ ⛈️ 🌧️ ❄️ ☃️ ⛄ 🌬️ 💨 🌊 💧"); - ImGui.Text("Symbols: ❤️ 💚 💙 💜 🖤 💛 💔 ❣️ 💕 💖 💗 💘 💝 ✨"); - ImGui.Text("Arrows: ← → ↑ ↓ ↔ ↕ ↖ ↗ ↘ ↙ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃"); - ImGui.Text("Math: ± × ÷ = ≠ ≈ ≤ ≥ ∞ √ ∑ ∏ ∂ ∫ Ω π α β γ δ"); - ImGui.Text("Geometric: ■ □ ▲ △ ● ○ ◆ ◇ ★ ☆ ♠ ♣ ♥ ♦ ▪ ▫ ◾ ◽"); - ImGui.Text("Currency: $ € £ ¥ ₹ ₿ ¢ ₽ ₩ ₡ ₪ ₫ ₱ ₴ ₦ ₨ ₵"); - ImGui.Text("Dingbats: ✂ ✈ ☎ ⌚ ⏰ ⏳ ⌛ ⚡ ☔ ☂ ☀ ⭐ ☁ ⛅ ❄"); - ImGui.Text("Enclosed: ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ"); - - ImGui.Separator(); - ImGui.TextWrapped("Note: Character display depends on your configured font's Unicode support. " + - "If characters show as question marks, your font may not include those glyphs."); - - ImGui.Separator(); - ImGui.TextWrapped("To disable Unicode support (ASCII only), set EnableUnicodeSupport = false in your ImGuiAppConfig."); - - ImGui.EndTabItem(); - } - } - - private static void RenderNerdFontTab() - { - if (ImGui.BeginTabItem("Nerd Fonts")) - { - ImGui.TextWrapped("Nerd Font Icons (Patched Fonts)"); - ImGui.TextWrapped("This tab demonstrates Nerd Font icons if you're using a Nerd Font (like JetBrains Mono Nerd Font, Fira Code Nerd Font, etc.)."); - ImGui.Separator(); - - // Powerline symbols - ImGui.Text("Powerline Symbols:"); - ImGui.Text("Basic: \uE0A0 \uE0A1 \uE0A2 \uE0B0 \uE0B1 \uE0B2 \uE0B3"); - ImGui.Text("Extra: \uE0A3 \uE0B4 \uE0B5 \uE0B6 \uE0B7 \uE0B8 \uE0CA \uE0CC \uE0CD \uE0D0 \uE0D1 \uE0D4"); - - ImGui.Separator(); - - // Font Awesome icons - ImGui.Text("Font Awesome Icons:"); - ImGui.Text("Files & Folders: \uF07B \uF07C \uF15B \uF15C \uF016 \uF017 \uF019 \uF01A \uF093 \uF095"); - ImGui.Text("Git & Version Control: \uF1D3 \uF1D2 \uF126 \uF127 \uF128 \uF129 \uF12A \uF12B"); - ImGui.Text("Media & UI: \uF04B \uF04C \uF04D \uF050 \uF051 \uF048 \uF049 \uF067 \uF068 \uF00C \uF00D"); - - ImGui.Separator(); - - // Material Design icons - ImGui.Text("Material Design Icons:"); - ImGui.Text("Navigation: \uF52A \uF52B \uF544 \uF53F \uF540 \uF541 \uF542 \uF543"); - ImGui.Text("Actions: \uF8D5 \uF8D6 \uF8D7 \uF8D8 \uF8D9 \uF8DA \uF8DB \uF8DC"); - ImGui.Text("Content: \uF1C1 \uF1C2 \uF1C3 \uF1C4 \uF1C5 \uF1C6 \uF1C7 \uF1C8"); - - ImGui.Separator(); - - // Weather icons - ImGui.Text("Weather Icons:"); - ImGui.Text("Basic Weather: \uE30D \uE30E \uE30F \uE310 \uE311 \uE312 \uE313 \uE314"); - ImGui.Text("Temperature: \uE315 \uE316 \uE317 \uE318 \uE319 \uE31A \uE31B \uE31C"); - ImGui.Text("Wind & Pressure: \uE31D \uE31E \uE31F \uE320 \uE321 \uE322 \uE323 \uE324"); - - ImGui.Separator(); - - // Devicons - ImGui.Text("Developer Icons (Devicons):"); - ImGui.Text("Languages: \uE73C \uE73D \uE73E \uE73F \uE740 \uE741 \uE742 \uE743"); // Various programming languages - ImGui.Text("Frameworks: \uE744 \uE745 \uE746 \uE747 \uE748 \uE749 \uE74A \uE74B"); - ImGui.Text("Tools: \uE74C \uE74D \uE74E \uE74F \uE750 \uE751 \uE752 \uE753"); - - ImGui.Separator(); - - // Octicons - ImGui.Text("Octicons (GitHub Icons):"); - ImGui.Text("Version Control: \uF418 \uF419 \uF41A \uF41B \uF41C \uF41D \uF41E \uF41F"); - ImGui.Text("Issues & PRs: \uF420 \uF421 \uF422 \uF423 \uF424 \uF425 \uF426 \uF427"); - ImGui.Text("Social: \u2665 \u26A1 \uF428 \uF429 \uF42A \uF42B \uF42C \uF42D"); - - ImGui.Separator(); - - // Font Logos - ImGui.Text("Brand Logos (Font Logos):"); - ImGui.Text("Tech Brands: \uF300 \uF301 \uF302 \uF303 \uF304 \uF305 \uF306 \uF307"); - ImGui.Text("More Logos: \uF308 \uF309 \uF30A \uF30B \uF30C \uF30D \uF30E \uF30F"); - - ImGui.Separator(); - - // Pomicons - ImGui.Text("Pomicons:"); - ImGui.Text("Small Icons: \uE000 \uE001 \uE002 \uE003 \uE004 \uE005 \uE006 \uE007"); - ImGui.Text("More Icons: \uE008 \uE009 \uE00A \uE00B \uE00C \uE00D"); - - ImGui.Separator(); - ImGui.TextWrapped("Note: These icons will only display correctly if you're using a Nerd Font. " + - "If you see question marks or boxes, switch to a Nerd Font like 'JetBrains Mono Nerd Font' or 'Fira Code Nerd Font'."); - - ImGui.Separator(); - ImGui.TextWrapped("Popular Nerd Fonts: JetBrains Mono Nerd Font, Fira Code Nerd Font, Hack Nerd Font, " + - "Source Code Pro Nerd Font, DejaVu Sans Mono Nerd Font, and many more at nerdfonts.com"); - - ImGui.EndTabItem(); - } - } - - private static void RenderImGuizmoTab() - { - if (ImGui.BeginTabItem("ImGuizmo 3D Gizmos")) - { - ImGui.TextWrapped("ImGuizmo provides 3D manipulation gizmos for translate, rotate, and scale operations."); - ImGui.Separator(); - - // Gizmo controls - ImGui.Text("Gizmo Controls:"); - ImGui.Checkbox("Enable Gizmo", ref gizmoEnabled); - - // Operation selection - ImGui.Text("Operation:"); - string[] operationNames = Enum.GetNames(); - ImGuizmoOperation[] operations = Enum.GetValues(); - int opIndex = Array.IndexOf(operations, gizmoOperation); - if (ImGui.Combo("##Operation", ref opIndex, operationNames, operationNames.Length)) - { - gizmoOperation = operations[opIndex]; - } - - // Mode selection - ImGui.Text("Mode:"); - string[] modeNames = Enum.GetNames(); - ImGuizmoMode[] modes = Enum.GetValues(); - int modeIndex = Array.IndexOf(modes, gizmoMode); - if (ImGui.Combo("##Mode", ref modeIndex, modeNames, modeNames.Length)) - { - gizmoMode = modes[modeIndex]; - } - - ImGui.Separator(); - - // Display transform matrix values - ImGui.Text("Transform Matrix:"); - unsafe - { - float* matrixPtr = (float*)&gizmoTransform; - for (int row = 0; row < 4; row++) - { - ImGui.Text($"[{matrixPtr[row * 4]:F2}, {matrixPtr[row * 4 + 1]:F2}, {matrixPtr[row * 4 + 2]:F2}, {matrixPtr[row * 4 + 3]:F2}]"); - } - } - - if (ImGui.Button("Reset Transform")) - { - gizmoTransform = Matrix4x4.Identity; - } - - ImGui.Separator(); - - // Gizmo viewport - Vector2 gizmoSize = new(400, 300); - Vector2 gizmoPos = ImGui.GetCursorScreenPos(); - - // Set up ImGuizmo for this viewport - if (gizmoEnabled) - { - ImGuizmo.SetDrawlist(ImGui.GetWindowDrawList()); - ImGuizmo.SetRect(gizmoPos.X, gizmoPos.Y, gizmoSize.X, gizmoSize.Y); - - // Create view and projection matrices for the gizmo - var view = gizmoView; - var proj = gizmoProjection; - - // Draw grid - Matrix4x4 identity = Matrix4x4.Identity; - ImGuizmo.DrawGrid(ref view, ref proj, ref identity, 10.0f); - - // Draw the gizmo - var transform = gizmoTransform; - if (ImGuizmo.Manipulate(ref view, ref proj, gizmoOperation, gizmoMode, ref transform)) - { - gizmoTransform = transform; - } - - // Display gizmo state - ImGui.SetCursorScreenPos(gizmoPos + new Vector2(10, gizmoSize.Y - 60)); - ImGui.Text($"Gizmo Over: {ImGuizmo.IsOver()}"); - ImGui.Text($"Gizmo Using: {ImGuizmo.IsUsing()}"); - } - - // Reserve space for the gizmo viewport - ImGui.SetCursorScreenPos(gizmoPos + new Vector2(0, gizmoSize.Y)); - ImGui.Dummy(gizmoSize); - - ImGui.EndTabItem(); - } - } - - private static void RenderImNodesTab() - { - if (ImGui.BeginTabItem("ImNodes Editor")) - { - ImGui.TextWrapped("ImNodes provides a node editor with support for nodes, pins, and connections."); - ImGui.Separator(); - - // Node editor controls - if (ImGui.Button("Add Node")) - { - Vector2 mousePos = ImGui.GetMousePos(); - Vector2 canvasPos = ImGui.GetCursorScreenPos(); - Vector2 nodePos = mousePos - canvasPos + new Vector2(0, 50); // Offset for controls - - nodes.Add(new SimpleNode( - nextNodeId++, - nodePos, - $"Node {nodes.Count + 1}", - [nextNodeId, nextNodeId + 1], // Input pins - [nextNodeId + 2, nextNodeId + 3] // Output pins - )); - nextNodeId += 4; // Reserve IDs for pins - } - - ImGui.SameLine(); - if (ImGui.Button("Clear All")) - { - nodes.Clear(); - links.Clear(); - nextNodeId = 1; - nextLinkId = 1; - } - - ImGui.Separator(); - - // Node editor - ImNodes.BeginNodeEditor(); - - // Render nodes - for (int i = 0; i < nodes.Count; i++) - { - var node = nodes[i]; - ImNodes.BeginNode(node.Id); - - // Node title - ImNodes.BeginNodeTitleBar(); - ImGui.TextUnformatted(node.Name); - ImNodes.EndNodeTitleBar(); - - // Input pins - for (int j = 0; j < node.InputPins.Count; j++) - { - int pinId = node.InputPins[j]; - ImNodes.BeginInputAttribute(pinId); - ImGui.Text($"In {j + 1}"); - ImNodes.EndInputAttribute(); - } - - // Node content - ImGui.Text($"Node ID: {node.Id}"); - - // Output pins - for (int j = 0; j < node.OutputPins.Count; j++) - { - int pinId = node.OutputPins[j]; - ImNodes.BeginOutputAttribute(pinId); - ImGui.Indent(40); - ImGui.Text($"Out {j + 1}"); - ImNodes.EndOutputAttribute(); - } - - ImNodes.EndNode(); - } - - // Render links - foreach (var link in links) - { - ImNodes.Link(link.Id, link.InputPinId, link.OutputPinId); - } - - ImNodes.EndNodeEditor(); - - // Handle new links - int startPin, endPin; - if (ImNodes.IsLinkCreated(out startPin, out endPin)) - { - links.Add(new SimpleLink(nextLinkId++, startPin, endPin)); - } - - // Handle link deletion - int linkId; - if (ImNodes.IsLinkDestroyed(out linkId)) - { - links.RemoveAll(link => link.Id == linkId); - } - - // Display node count - ImGui.Text($"Nodes: {nodes.Count}, Links: {links.Count}"); - - ImGui.EndTabItem(); - } - } - - private static void RenderImPlotTab() - { - if (ImGui.BeginTabItem("ImPlot Charts")) - { - ImGui.TextWrapped("ImPlot provides advanced plotting capabilities with various chart types."); - ImGui.Separator(); - - // Plot controls - if (ImGui.Button("Generate New Data")) - { - sinData.Clear(); - cosData.Clear(); - noiseData.Clear(); - - for (int i = 0; i < 100; i++) - { - float x = i * 0.1f; - sinData.Add(MathF.Sin(x + plotTime)); - cosData.Add(MathF.Cos(x + plotTime)); - noiseData.Add((float)(plotRandom.NextDouble() * 2.0 - 1.0)); - } - } - - ImGui.Separator(); - - // Line plot - if (ImPlot.BeginPlot("Trigonometric Functions", new Vector2(-1, 200))) - { - unsafe - { - fixed (float* sinPtr = sinData.ToArray()) - fixed (float* cosPtr = cosData.ToArray()) - { - ImPlot.PlotLine("sin(x)", sinPtr, sinData.Count); - ImPlot.PlotLine("cos(x)", cosPtr, cosData.Count); - } - } - ImPlot.EndPlot(); - } - - // Scatter plot - if (ImPlot.BeginPlot("Noise Data (Scatter)", new Vector2(-1, 200))) - { - unsafe - { - fixed (float* noisePtr = noiseData.ToArray()) - { - ImPlot.PlotScatter("Random Noise", noisePtr, noiseData.Count); - } - } - ImPlot.EndPlot(); - } - - // Bar chart - if (ImPlot.BeginPlot("Sample Bar Chart", new Vector2(-1, 200))) - { - float[] barData = [1.0f, 2.5f, 3.2f, 1.8f, 4.1f, 2.9f, 3.6f]; - unsafe - { - fixed (float* barPtr = barData) - { - ImPlot.PlotBars("Values", barPtr, barData.Length); - } - } - ImPlot.EndPlot(); - } - - // Real-time plot - if (ImPlot.BeginPlot("Real-time Data", new Vector2(-1, 200))) + // Render all demo tabs + foreach (var demo in demoTabs) { - // Update real-time data - if (plotValues.Count > 0) - { - unsafe - { - fixed (float* plotPtr = plotValues.ToArray()) - { - ImPlot.PlotLine("Live Data", plotPtr, plotValues.Count); - } - } - } - ImPlot.EndPlot(); + demo.Render(); } - - ImGui.Text($"Plot Time: {plotTime:F2}"); - ImGui.Text($"Data Points: Sin({sinData.Count}), Cos({cosData.Count}), Noise({noiseData.Count})"); - - ImGui.EndTabItem(); - } - } - - private static void RenderModalAndPopups() - { - // Modal dialog - if (showModal) - { - ImGui.OpenPopup("Demo Modal"); - showModal = false; - } - - if (ImGui.BeginPopupModal("Demo Modal", ref showModal)) - { - ImGui.Text("This is a modal dialog."); - ImGui.Text("It blocks interaction with the main window."); - ImGui.Separator(); - - ImGui.InputText("Input", ref modalInputBuffer, 100); - - if (ImGui.Button("OK")) - { - modalResult = $"You entered: {modalInputBuffer}"; - ImGui.CloseCurrentPopup(); - } - ImGui.SameLine(); - if (ImGui.Button("Cancel")) - { - modalResult = "Cancelled"; - ImGui.CloseCurrentPopup(); - } - - ImGui.EndPopup(); - } - - // Context popup - if (showPopup) - { - ImGui.OpenPopup("Demo Popup"); - showPopup = false; - } - - if (ImGui.BeginPopup("Demo Popup")) - { - ImGui.Text("This is a popup menu"); - if (ImGui.MenuItem("Option 1")) - { - // Handle option 1 - } - if (ImGui.MenuItem("Option 2")) - { - // Handle option 2 - } - ImGui.Separator(); - if (ImGui.MenuItem("Close")) - { - // Handle close - } - ImGui.EndPopup(); + ImGui.EndTabBar(); } } - private static void UpdateAnimations(float dt) - { - animationTime += dt; - plotTime += dt; - - // Bouncing animation - bounceOffset = MathF.Abs(MathF.Sin(animationTime * 3)) * 50; - - // Pulse animation - pulseScale = 0.8f + (0.4f * MathF.Sin(animationTime * 4)); - - // Update gizmo view matrix for rotation demo - float cameraAngle = animationTime * 0.2f; - Vector3 cameraPos = new Vector3(MathF.Sin(cameraAngle) * 5f, 3f, MathF.Cos(cameraAngle) * 5f); - gizmoView = Matrix4x4.CreateLookAt(cameraPos, Vector3.Zero, Vector3.UnitY); - } - private static void RenderAboutWindow() { ImGui.Begin("About ImGuiApp Demo", ref showAbout); @@ -1264,6 +102,9 @@ private static void RenderAboutWindow() ImGui.BulletText("Input handling and interaction"); ImGui.BulletText("Animations and effects"); ImGui.BulletText("File operations and utilities"); + ImGui.BulletText("3D manipulation gizmos (ImGuizmo)"); + ImGui.BulletText("Node-based editing (ImNodes)"); + ImGui.BulletText("Advanced plotting (ImPlot)"); ImGui.Separator(); ImGui.Text("Built with:"); ImGui.BulletText("Hexa.NET.ImGui"); @@ -1275,31 +116,8 @@ private static void RenderAboutWindow() ImGui.End(); } - [System.Diagnostics.CodeAnalysis.SuppressMessage("Security", "CA5394:Do not use insecure randomness", Justification = "This is a demo application")] - private static void UpdatePlotData(float dt) - { - plotRefreshTime += dt; - if (plotRefreshTime >= 0.1f) // Update every 100ms - { - plotRefreshTime = 0; - plotValues.Add((float)random.NextDouble()); - if (plotValues.Count > 100) // Keep last 100 values - { - plotValues.RemoveAt(0); - } - } - } - private static void OnAppMenu() { - if (ImGui.BeginMenu("View")) - { - ImGui.MenuItem("ImGui Demo", string.Empty, ref showImGuiDemo); - ImGui.MenuItem("Style Editor", string.Empty, ref showStyleEditor); - ImGui.MenuItem("Metrics", string.Empty, ref showMetrics); - ImGui.EndMenu(); - } - if (ImGui.BeginMenu("Help")) { ImGui.MenuItem("About", string.Empty, ref showAbout); From b740023c5b850c0be8c95ac2bff92d85b54ffb1f Mon Sep 17 00:00:00 2001 From: Matt Edmondson Date: Thu, 31 Jul 2025 13:14:02 +1000 Subject: [PATCH 03/11] Update package references and refactor demo implementations: Added Hexa.NET.ImGuizmo, ImNodes, and ImPlot packages, updated SixLabors.ImageSharp and MSTest versions, and streamlined demo tab methods for improved readability and performance. --- Directory.Packages.props | 9 ++++-- ImGuiApp.Test/ImGuiAppTests.cs | 2 -- ImGuiAppDemo/Demos/AdvancedWidgetsDemo.cs | 5 +--- ImGuiAppDemo/Demos/BasicWidgetsDemo.cs | 2 -- ImGuiAppDemo/Demos/DataVisualizationDemo.cs | 1 + ImGuiAppDemo/Demos/GraphicsDemo.cs | 6 ++-- ImGuiAppDemo/Demos/IDemoTab.cs | 6 ++-- ImGuiAppDemo/Demos/ImGuizmoDemo.cs | 20 +++++-------- ImGuiAppDemo/Demos/ImNodesDemo.cs | 33 ++++++++++++++++----- ImGuiAppDemo/Demos/ImPlotDemo.cs | 5 ++-- ImGuiAppDemo/Demos/InputHandlingDemo.cs | 5 +--- ImGuiAppDemo/Demos/LayoutDemo.cs | 1 + ImGuiAppDemo/ImGuiAppDemo.cs | 5 ++-- 13 files changed, 54 insertions(+), 46 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index de08a5d..9fd1c2c 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -9,6 +9,9 @@ all + + + @@ -21,7 +24,7 @@ - + @@ -33,8 +36,8 @@ - - + + diff --git a/ImGuiApp.Test/ImGuiAppTests.cs b/ImGuiApp.Test/ImGuiAppTests.cs index a0b3363..8ed4bf1 100644 --- a/ImGuiApp.Test/ImGuiAppTests.cs +++ b/ImGuiApp.Test/ImGuiAppTests.cs @@ -2,8 +2,6 @@ // All rights reserved. // Licensed under the MIT license. -using Microsoft.VisualStudio.TestTools.UnitTesting; - [assembly: DoNotParallelize] namespace ktsu.ImGuiApp.Test; diff --git a/ImGuiAppDemo/Demos/AdvancedWidgetsDemo.cs b/ImGuiAppDemo/Demos/AdvancedWidgetsDemo.cs index 557ee9c..c1c747f 100644 --- a/ImGuiAppDemo/Demos/AdvancedWidgetsDemo.cs +++ b/ImGuiAppDemo/Demos/AdvancedWidgetsDemo.cs @@ -18,10 +18,7 @@ internal sealed class AdvancedWidgetsDemo : IDemoTab public string TabName => "Advanced Widgets"; - public void Update(float deltaTime) - { - animationTime += deltaTime; - } + public void Update(float deltaTime) => animationTime += deltaTime; public void Render() { diff --git a/ImGuiAppDemo/Demos/BasicWidgetsDemo.cs b/ImGuiAppDemo/Demos/BasicWidgetsDemo.cs index 34fcac4..cbdd2c0 100644 --- a/ImGuiAppDemo/Demos/BasicWidgetsDemo.cs +++ b/ImGuiAppDemo/Demos/BasicWidgetsDemo.cs @@ -16,8 +16,6 @@ internal sealed class BasicWidgetsDemo : IDemoTab private int counter; private bool checkboxState; private string inputText = "Type here..."; - private Vector3 colorPickerValue = new(0.4f, 0.7f, 0.2f); - private Vector4 color4Value = new(1.0f, 0.5f, 0.2f, 1.0f); private int comboSelection; private readonly string[] comboItems = ["Item 1", "Item 2", "Item 3", "Item 4"]; private int listboxSelection; diff --git a/ImGuiAppDemo/Demos/DataVisualizationDemo.cs b/ImGuiAppDemo/Demos/DataVisualizationDemo.cs index 16266dd..17c5f71 100644 --- a/ImGuiAppDemo/Demos/DataVisualizationDemo.cs +++ b/ImGuiAppDemo/Demos/DataVisualizationDemo.cs @@ -12,6 +12,7 @@ namespace ktsu.ImGuiApp.Demo.Demos; /// /// Demo for data visualization features /// +[System.Diagnostics.CodeAnalysis.SuppressMessage("Security", "CA5394:Do not use insecure randomness", Justification = "Used for dummy data purposes")] internal sealed class DataVisualizationDemo : IDemoTab { private readonly List plotValues = []; diff --git a/ImGuiAppDemo/Demos/GraphicsDemo.cs b/ImGuiAppDemo/Demos/GraphicsDemo.cs index 400fba7..6268bf6 100644 --- a/ImGuiAppDemo/Demos/GraphicsDemo.cs +++ b/ImGuiAppDemo/Demos/GraphicsDemo.cs @@ -6,6 +6,7 @@ namespace ktsu.ImGuiApp.Demo.Demos; using System.Numerics; using Hexa.NET.ImGui; +using ktsu.Extensions; using ktsu.ImGuiApp; using ktsu.StrongPaths; @@ -21,10 +22,7 @@ internal sealed class GraphicsDemo : IDemoTab public string TabName => "Graphics & Drawing"; - public void Update(float deltaTime) - { - animationTime += deltaTime; - } + public void Update(float deltaTime) => animationTime += deltaTime; public void Render() { diff --git a/ImGuiAppDemo/Demos/IDemoTab.cs b/ImGuiAppDemo/Demos/IDemoTab.cs index 1137e04..9b80597 100644 --- a/ImGuiAppDemo/Demos/IDemoTab.cs +++ b/ImGuiAppDemo/Demos/IDemoTab.cs @@ -12,16 +12,16 @@ internal interface IDemoTab /// /// Gets the name of the tab to display in the UI /// - string TabName { get; } + public string TabName { get; } /// /// Renders the demo tab content /// - void Render(); + public void Render(); /// /// Updates the demo state (called each frame) /// /// Time elapsed since last frame - void Update(float deltaTime); + public void Update(float deltaTime); } diff --git a/ImGuiAppDemo/Demos/ImGuizmoDemo.cs b/ImGuiAppDemo/Demos/ImGuizmoDemo.cs index 2714d86..964a19f 100644 --- a/ImGuiAppDemo/Demos/ImGuizmoDemo.cs +++ b/ImGuiAppDemo/Demos/ImGuizmoDemo.cs @@ -29,7 +29,7 @@ public void Update(float deltaTime) // Update gizmo view matrix for rotation demo float cameraAngle = animationTime * 0.2f; - Vector3 cameraPos = new Vector3(MathF.Sin(cameraAngle) * 5f, 3f, MathF.Cos(cameraAngle) * 5f); + Vector3 cameraPos = new(MathF.Sin(cameraAngle) * 5f, 3f, MathF.Cos(cameraAngle) * 5f); gizmoView = Matrix4x4.CreateLookAt(cameraPos, Vector3.Zero, Vector3.UnitY); } @@ -68,14 +68,10 @@ public void Render() // Display transform matrix values ImGui.Text("Transform Matrix:"); - unsafe - { - float* matrixPtr = (float*)&gizmoTransform; - for (int row = 0; row < 4; row++) - { - ImGui.Text($"[{matrixPtr[row * 4]:F2}, {matrixPtr[row * 4 + 1]:F2}, {matrixPtr[row * 4 + 2]:F2}, {matrixPtr[row * 4 + 3]:F2}]"); - } - } + ImGui.Text($"[{gizmoTransform.M11:F2}, {gizmoTransform.M12:F2}, {gizmoTransform.M13:F2}, {gizmoTransform.M14:F2}]"); + ImGui.Text($"[{gizmoTransform.M21:F2}, {gizmoTransform.M22:F2}, {gizmoTransform.M23:F2}, {gizmoTransform.M24:F2}]"); + ImGui.Text($"[{gizmoTransform.M31:F2}, {gizmoTransform.M32:F2}, {gizmoTransform.M33:F2}, {gizmoTransform.M34:F2}]"); + ImGui.Text($"[{gizmoTransform.M41:F2}, {gizmoTransform.M42:F2}, {gizmoTransform.M43:F2}, {gizmoTransform.M44:F2}]"); if (ImGui.Button("Reset Transform")) { @@ -95,15 +91,15 @@ public void Render() ImGuizmo.SetRect(gizmoPos.X, gizmoPos.Y, gizmoSize.X, gizmoSize.Y); // Create view and projection matrices for the gizmo - var view = gizmoView; - var proj = gizmoProjection; + Matrix4x4 view = gizmoView; + Matrix4x4 proj = gizmoProjection; // Draw grid Matrix4x4 identity = Matrix4x4.Identity; ImGuizmo.DrawGrid(ref view, ref proj, ref identity, 10.0f); // Draw the gizmo - var transform = gizmoTransform; + Matrix4x4 transform = gizmoTransform; if (ImGuizmo.Manipulate(ref view, ref proj, gizmoOperation, gizmoMode, ref transform)) { gizmoTransform = transform; diff --git a/ImGuiAppDemo/Demos/ImNodesDemo.cs b/ImGuiAppDemo/Demos/ImNodesDemo.cs index aabdfb0..d4233d2 100644 --- a/ImGuiAppDemo/Demos/ImNodesDemo.cs +++ b/ImGuiAppDemo/Demos/ImNodesDemo.cs @@ -84,7 +84,7 @@ public void Render() // Render nodes for (int i = 0; i < nodes.Count; i++) { - var node = nodes[i]; + SimpleNode node = nodes[i]; ImNodes.BeginNode(node.Id); // Node title @@ -118,7 +118,7 @@ public void Render() } // Render links - foreach (var link in links) + foreach (SimpleLink link in links) { ImNodes.Link(link.Id, link.InputPinId, link.OutputPinId); } @@ -126,17 +126,34 @@ public void Render() ImNodes.EndNodeEditor(); // Handle new links - int startPin, endPin; - if (ImNodes.IsLinkCreated(out startPin, out endPin)) + bool isLinkCreated; + int startPin = 0; + int endPin = 0; + + unsafe + { + isLinkCreated = ImNodes.IsLinkCreated(&startPin, &endPin); + } + + if (isLinkCreated) { links.Add(new SimpleLink(nextLinkId++, startPin, endPin)); } - // Handle link deletion - int linkId; - if (ImNodes.IsLinkDestroyed(out linkId)) + // Handle link destruction + bool isLinkDestroyed; + int linkId = 0; + int safeLinkId = 0; + + unsafe + { + isLinkDestroyed = ImNodes.IsLinkDestroyed(&linkId); + safeLinkId = linkId; // Store the link ID safely + } + + if (isLinkDestroyed) { - links.RemoveAll(link => link.Id == linkId); + links.RemoveAll(link => link.Id == safeLinkId); } // Display node count diff --git a/ImGuiAppDemo/Demos/ImPlotDemo.cs b/ImGuiAppDemo/Demos/ImPlotDemo.cs index 50d2dd2..34b2ea5 100644 --- a/ImGuiAppDemo/Demos/ImPlotDemo.cs +++ b/ImGuiAppDemo/Demos/ImPlotDemo.cs @@ -11,6 +11,7 @@ namespace ktsu.ImGuiApp.Demo.Demos; /// /// Demo for ImPlot advanced plotting /// +[System.Diagnostics.CodeAnalysis.SuppressMessage("Security", "CA5394:Do not use insecure randomness", Justification = "Used for dummy data purposes")] internal sealed class ImPlotDemo : IDemoTab { private readonly List sinData = []; @@ -31,7 +32,7 @@ public ImPlotDemo() float x = i * 0.1f; sinData.Add(MathF.Sin(x)); cosData.Add(MathF.Cos(x)); - noiseData.Add((float)(plotRandom.NextDouble() * 2.0 - 1.0)); + noiseData.Add((float)((plotRandom.NextDouble() * 2.0) - 1.0)); } } @@ -71,7 +72,7 @@ public void Render() float x = i * 0.1f; sinData.Add(MathF.Sin(x + plotTime)); cosData.Add(MathF.Cos(x + plotTime)); - noiseData.Add((float)(plotRandom.NextDouble() * 2.0 - 1.0)); + noiseData.Add((float)((plotRandom.NextDouble() * 2.0) - 1.0)); } } diff --git a/ImGuiAppDemo/Demos/InputHandlingDemo.cs b/ImGuiAppDemo/Demos/InputHandlingDemo.cs index 0071909..915b77c 100644 --- a/ImGuiAppDemo/Demos/InputHandlingDemo.cs +++ b/ImGuiAppDemo/Demos/InputHandlingDemo.cs @@ -15,7 +15,6 @@ internal sealed class InputHandlingDemo : IDemoTab { private readonly StringBuilder textBuffer = new(1024); private bool wrapText = true; - private float textSpeed = 50.0f; private bool showModal; private bool showPopup; private string modalResult = ""; @@ -30,11 +29,9 @@ public InputHandlingDemo() textBuffer.Append("ImGui supports multi-line text editing with syntax highlighting possibilities."); } - public void Update(float deltaTime) - { + public void Update(float deltaTime) => // Handle modals and popups HandleModalAndPopups(); - } public void Render() { diff --git a/ImGuiAppDemo/Demos/LayoutDemo.cs b/ImGuiAppDemo/Demos/LayoutDemo.cs index 6e1d2cf..cd24b73 100644 --- a/ImGuiAppDemo/Demos/LayoutDemo.cs +++ b/ImGuiAppDemo/Demos/LayoutDemo.cs @@ -10,6 +10,7 @@ namespace ktsu.ImGuiApp.Demo.Demos; /// /// Demo for layout systems and tables /// +[System.Diagnostics.CodeAnalysis.SuppressMessage("Security", "CA5394:Do not use insecure randomness", Justification = "Used for dummy data purposes")] internal sealed class LayoutDemo : IDemoTab { private readonly List tableData = []; diff --git a/ImGuiAppDemo/ImGuiAppDemo.cs b/ImGuiAppDemo/ImGuiAppDemo.cs index a3226c9..6c718eb 100644 --- a/ImGuiAppDemo/ImGuiAppDemo.cs +++ b/ImGuiAppDemo/ImGuiAppDemo.cs @@ -5,6 +5,7 @@ namespace ktsu.ImGuiApp.Demo; using Hexa.NET.ImGui; +using ktsu.Extensions; using ktsu.ImGuiApp; using ktsu.ImGuiApp.Demo.Demos; using ktsu.StrongPaths; @@ -60,7 +61,7 @@ private static void Main() => ImGuiApp.Start(new() private static void OnRender(float dt) { // Update all demo tabs - foreach (var demo in demoTabs) + foreach (IDemoTab demo in demoTabs) { demo.Update(dt); } @@ -81,7 +82,7 @@ private static void RenderMainDemoWindow() if (ImGui.BeginTabBar("DemoTabs", ImGuiTabBarFlags.None)) { // Render all demo tabs - foreach (var demo in demoTabs) + foreach (IDemoTab demo in demoTabs) { demo.Render(); } From 143024147c7d70a1058e6ff12c2dd6dd76d39eba Mon Sep 17 00:00:00 2001 From: Matt Edmondson Date: Fri, 1 Aug 2025 09:32:12 +1000 Subject: [PATCH 04/11] Refactor ImGuiApp to utilize ktsu.Semantics: Replaced ktsu.StrongPaths with ktsu.Semantics across multiple files, updated package references, and introduced ImGuiExtensionManager for managing ImGui extensions. Enhanced demo implementations to support new features and improved context management for extensions. --- Directory.Packages.props | 5 +- ImGuiApp.Test/AdvancedCoverageTests.cs | 5 +- ImGuiApp.Test/ImGuiAppCoreTests.cs | 2 +- ImGuiApp.Test/ImGuiAppDataStructureTests.cs | 2 +- ImGuiApp.Test/ImGuiAppTests.cs | 2 +- .../ImGuiAppWindowManagementTests.cs | 3 +- ImGuiApp/DebugLogger.cs | 2 +- ImGuiApp/ImGuiApp.cs | 2 +- ImGuiApp/ImGuiApp.csproj | 3 +- ImGuiApp/ImGuiAppTextureInfo.cs | 2 +- ImGuiApp/ImGuiController/ImGuiController.cs | 17 +- ImGuiApp/ImGuiExtensionManager.cs | 395 ++++++++++++++++++ ImGuiAppDemo/Demos/GraphicsDemo.cs | 2 +- ImGuiAppDemo/Demos/ImGuizmoDemo.cs | 9 +- ImGuiAppDemo/Demos/ImNodesDemo.cs | 3 - ImGuiAppDemo/ImGuiAppDemo.cs | 2 +- ImGuiAppDemo/ImGuiAppDemo.csproj | 1 + 17 files changed, 437 insertions(+), 20 deletions(-) create mode 100644 ImGuiApp/ImGuiExtensionManager.cs diff --git a/Directory.Packages.props b/Directory.Packages.props index 9fd1c2c..6e4cddf 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -14,7 +14,8 @@ - + + @@ -43,4 +44,4 @@ - \ No newline at end of file + diff --git a/ImGuiApp.Test/AdvancedCoverageTests.cs b/ImGuiApp.Test/AdvancedCoverageTests.cs index 4bd6413..d0f28f6 100644 --- a/ImGuiApp.Test/AdvancedCoverageTests.cs +++ b/ImGuiApp.Test/AdvancedCoverageTests.cs @@ -7,6 +7,7 @@ namespace ktsu.ImGuiApp.Test; using System; using Hexa.NET.ImGui; using ktsu.ImGuiApp.ImGuiController; +using ktsu.Semantics; using Microsoft.VisualStudio.TestTools.UnitTesting; /// @@ -179,8 +180,8 @@ public void ImGuiApp_WindowState_MultipleAccess_ReturnsConsistentValues() [TestMethod] public void ImGuiApp_Textures_MultipleAccess_ReturnsSameInstance() { - System.Collections.Concurrent.ConcurrentDictionary textures1 = ImGuiApp.Textures; - System.Collections.Concurrent.ConcurrentDictionary textures2 = ImGuiApp.Textures; + System.Collections.Concurrent.ConcurrentDictionary textures1 = ImGuiApp.Textures; + System.Collections.Concurrent.ConcurrentDictionary textures2 = ImGuiApp.Textures; // Should return the same collection instance Assert.AreSame(textures1, textures2); diff --git a/ImGuiApp.Test/ImGuiAppCoreTests.cs b/ImGuiApp.Test/ImGuiAppCoreTests.cs index 5fe2f9e..f91f860 100644 --- a/ImGuiApp.Test/ImGuiAppCoreTests.cs +++ b/ImGuiApp.Test/ImGuiAppCoreTests.cs @@ -6,7 +6,7 @@ namespace ktsu.ImGuiApp.Test; using System.Collections.Concurrent; using ktsu.Extensions; -using ktsu.StrongPaths; +using ktsu.Semantics; using Microsoft.VisualStudio.TestTools.UnitTesting; /// diff --git a/ImGuiApp.Test/ImGuiAppDataStructureTests.cs b/ImGuiApp.Test/ImGuiAppDataStructureTests.cs index b4c4b99..39cb960 100644 --- a/ImGuiApp.Test/ImGuiAppDataStructureTests.cs +++ b/ImGuiApp.Test/ImGuiAppDataStructureTests.cs @@ -6,7 +6,7 @@ namespace ktsu.ImGuiApp.Test; using System.Numerics; using ktsu.Extensions; -using ktsu.StrongPaths; +using ktsu.Semantics; using Microsoft.VisualStudio.TestTools.UnitTesting; using Silk.NET.Windowing; diff --git a/ImGuiApp.Test/ImGuiAppTests.cs b/ImGuiApp.Test/ImGuiAppTests.cs index 8ed4bf1..a8de52b 100644 --- a/ImGuiApp.Test/ImGuiAppTests.cs +++ b/ImGuiApp.Test/ImGuiAppTests.cs @@ -8,7 +8,7 @@ namespace ktsu.ImGuiApp.Test; using System.Numerics; using ktsu.Extensions; -using ktsu.StrongPaths; +using ktsu.Semantics; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using Silk.NET.Core.Contexts; diff --git a/ImGuiApp.Test/ImGuiAppWindowManagementTests.cs b/ImGuiApp.Test/ImGuiAppWindowManagementTests.cs index dfc4326..bbcbc10 100644 --- a/ImGuiApp.Test/ImGuiAppWindowManagementTests.cs +++ b/ImGuiApp.Test/ImGuiAppWindowManagementTests.cs @@ -5,8 +5,7 @@ namespace ktsu.ImGuiApp.Test; using System.Numerics; - -using ktsu.StrongPaths; +using ktsu.Semantics; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using Silk.NET.Windowing; diff --git a/ImGuiApp/DebugLogger.cs b/ImGuiApp/DebugLogger.cs index cd96905..b1447fa 100644 --- a/ImGuiApp/DebugLogger.cs +++ b/ImGuiApp/DebugLogger.cs @@ -5,7 +5,7 @@ namespace ktsu.ImGuiApp; using ktsu.Extensions; -using ktsu.StrongPaths; +using ktsu.Semantics; /// /// Simple file logger for debugging crashes diff --git a/ImGuiApp/ImGuiApp.cs b/ImGuiApp/ImGuiApp.cs index d6527a7..805c702 100644 --- a/ImGuiApp/ImGuiApp.cs +++ b/ImGuiApp/ImGuiApp.cs @@ -15,7 +15,7 @@ namespace ktsu.ImGuiApp; using ktsu.ImGuiApp.ImGuiController; using ktsu.Invoker; using ktsu.ScopedAction; -using ktsu.StrongPaths; +using ktsu.Semantics; using Silk.NET.Input; using Silk.NET.OpenGL; using Silk.NET.Windowing; diff --git a/ImGuiApp/ImGuiApp.csproj b/ImGuiApp/ImGuiApp.csproj index 2ac3da5..e9350d8 100644 --- a/ImGuiApp/ImGuiApp.csproj +++ b/ImGuiApp/ImGuiApp.csproj @@ -7,9 +7,10 @@ + - + diff --git a/ImGuiApp/ImGuiAppTextureInfo.cs b/ImGuiApp/ImGuiAppTextureInfo.cs index adc870b..88960af 100644 --- a/ImGuiApp/ImGuiAppTextureInfo.cs +++ b/ImGuiApp/ImGuiAppTextureInfo.cs @@ -4,7 +4,7 @@ namespace ktsu.ImGuiApp; using Hexa.NET.ImGui; -using ktsu.StrongPaths; +using ktsu.Semantics; /// /// Represents information about a texture, including its file path, texture ID, width, and height. diff --git a/ImGuiApp/ImGuiController/ImGuiController.cs b/ImGuiApp/ImGuiController/ImGuiController.cs index baf3f72..9d203d4 100644 --- a/ImGuiApp/ImGuiController/ImGuiController.cs +++ b/ImGuiApp/ImGuiController/ImGuiController.cs @@ -115,7 +115,16 @@ internal void Init(GL gl, IView view, IInputContext input) _windowWidth = view.Size.X; _windowHeight = view.Size.Y; - ImGui.CreateContext(); + ImGuiContextPtr imguiContext = ImGui.CreateContext(); + + // Initialize ImGui extensions (ImGuizmo, ImNodes, ImPlot) if available + ImGuiExtensionManager.Initialize(); + + // Set the ImGui context for all extensions after context creation + ImGuiExtensionManager.SetImGuiContext(imguiContext); + + // Create extension contexts and apply dark styles + ImGuiExtensionManager.CreateExtensionContexts(); ImGui.StyleColorsDark(); } @@ -124,6 +133,9 @@ internal void BeginFrame() { ImGui.NewFrame(); _frameBegun = true; + + // Call BeginFrame for all detected ImGui extensions + ImGuiExtensionManager.BeginFrame(); _keyboard = _input?.Keyboards[0]; _mouse = _input?.Mice[0]; if (_view is not null) @@ -933,6 +945,9 @@ protected virtual void Dispose(bool disposing) _fontTexture.Dispose(); _shader.Dispose(); + // Cleanup extension contexts before destroying ImGui context + ImGuiExtensionManager.Cleanup(); + ImGui.DestroyContext(); } } diff --git a/ImGuiApp/ImGuiExtensionManager.cs b/ImGuiApp/ImGuiExtensionManager.cs new file mode 100644 index 0000000..9ea78d4 --- /dev/null +++ b/ImGuiApp/ImGuiExtensionManager.cs @@ -0,0 +1,395 @@ +// Copyright (c) ktsu.dev +// All rights reserved. +// Licensed under the MIT license. + +namespace ktsu.ImGuiApp; + +using System.Reflection; +using Hexa.NET.ImGui; + +/// +/// Manages automatic initialization and lifecycle of ImGui extensions like ImGuizmo, ImNodes, and ImPlot. +/// +public static class ImGuiExtensionManager +{ + // Cached reflection info for performance + private static MethodInfo? imGuizmoBeginFrame; + private static MethodInfo? imGuizmoSetImGuiContext; + private static MethodInfo? imNodesBeginFrame; + private static MethodInfo? imNodesSetImGuiContext; + private static MethodInfo? imNodesCreateContext; + private static MethodInfo? imNodesSetCurrentContext; + private static MethodInfo? imNodesStyleColorsDark; + private static MethodInfo? imNodesGetStyle; + private static MethodInfo? imNodesDestroyContext; + private static MethodInfo? imPlotBeginFrame; + private static MethodInfo? imPlotSetImGuiContext; + private static MethodInfo? imPlotCreateContext; + private static MethodInfo? imPlotSetCurrentContext; + private static MethodInfo? imPlotStyleColorsDark; + private static MethodInfo? imPlotGetStyle; + private static MethodInfo? imPlotDestroyContext; + + // Extension contexts + private static object? nodesContext; + private static object? plotContext; + + private static bool initialized; + + /// + /// Initialize extension detection. Called once during application startup. + /// + public static void Initialize() + { + if (initialized) + { + return; + } + + initialized = true; + + InitializeImGuizmo(); + InitializeImNodes(); + InitializeImPlot(); + } + + private static void InitializeImGuizmo() + { + try + { + Assembly imGuizmoAssembly = Assembly.Load("Hexa.NET.ImGuizmo"); + Type? imGuizmoType = imGuizmoAssembly.GetType("Hexa.NET.ImGuizmo.ImGuizmo"); + imGuizmoBeginFrame = imGuizmoType?.GetMethod("BeginFrame", BindingFlags.Public | BindingFlags.Static, Type.EmptyTypes); + + // Find SetImGuiContext method that takes ImGuiContextPtr parameter + Type? imGuiContextPtrType = Assembly.Load("Hexa.NET.ImGui").GetType("Hexa.NET.ImGui.ImGuiContextPtr"); + if (imGuiContextPtrType != null) + { + imGuizmoSetImGuiContext = imGuizmoType?.GetMethod("SetImGuiContext", BindingFlags.Public | BindingFlags.Static, [imGuiContextPtrType]); + } + + if (imGuizmoBeginFrame != null) + { + DebugLogger.Log("ImGuiExtensionManager: ImGuizmo detected and will be auto-initialized"); + } + } + catch (Exception ex) when (ex is FileNotFoundException or FileLoadException or BadImageFormatException or AmbiguousMatchException) + { + // ImGuizmo not available or has ambiguous methods - this is fine + DebugLogger.Log($"ImGuiExtensionManager: ImGuizmo not available or has issues: {ex.Message}"); + } + } + + private static void InitializeImNodes() + { + try + { + Assembly imNodesAssembly = Assembly.Load("Hexa.NET.ImNodes"); + Type? imNodesType = imNodesAssembly.GetType("Hexa.NET.ImNodes.ImNodes"); + imNodesBeginFrame = imNodesType?.GetMethod("BeginFrame", BindingFlags.Public | BindingFlags.Static, Type.EmptyTypes); + imNodesCreateContext = imNodesType?.GetMethod("CreateContext", BindingFlags.Public | BindingFlags.Static, Type.EmptyTypes); + imNodesGetStyle = imNodesType?.GetMethod("GetStyle", BindingFlags.Public | BindingFlags.Static, Type.EmptyTypes); + + // Find SetImGuiContext method that takes ImGuiContextPtr parameter + Type? imGuiContextPtrType = Assembly.Load("Hexa.NET.ImGui").GetType("Hexa.NET.ImGui.ImGuiContextPtr"); + if (imGuiContextPtrType != null) + { + imNodesSetImGuiContext = imNodesType?.GetMethod("SetImGuiContext", BindingFlags.Public | BindingFlags.Static, [imGuiContextPtrType]); + } + + // Find context-related methods + if (imNodesCreateContext != null) + { + Type? contextType = imNodesCreateContext.ReturnType; + if (contextType != null) + { + imNodesSetCurrentContext = imNodesType?.GetMethod("SetCurrentContext", BindingFlags.Public | BindingFlags.Static, [contextType]); + + // Find DestroyContext method that takes the context type parameter + imNodesDestroyContext = imNodesType?.GetMethod("DestroyContext", BindingFlags.Public | BindingFlags.Static, [contextType]); + + // Find StyleColorsDark method that takes ImNodesStylePtr parameter + Type? styleType = imNodesAssembly.GetType("Hexa.NET.ImNodes.ImNodesStylePtr"); + if (styleType != null) + { + imNodesStyleColorsDark = imNodesType?.GetMethod("StyleColorsDark", BindingFlags.Public | BindingFlags.Static, [styleType]); + } + } + } + + if (imNodesBeginFrame != null) + { + DebugLogger.Log("ImGuiExtensionManager: ImNodes detected and will be auto-initialized"); + } + } + catch (Exception ex) when (ex is FileNotFoundException or FileLoadException or BadImageFormatException or AmbiguousMatchException) + { + // ImNodes not available or has ambiguous methods - this is fine + DebugLogger.Log($"ImGuiExtensionManager: ImNodes not available or has issues: {ex.Message}"); + } + } + + private static void InitializeImPlot() + { + try + { + Assembly imPlotAssembly = Assembly.Load("Hexa.NET.ImPlot"); + Type? imPlotType = imPlotAssembly.GetType("Hexa.NET.ImPlot.ImPlot"); + imPlotBeginFrame = imPlotType?.GetMethod("BeginFrame", BindingFlags.Public | BindingFlags.Static, Type.EmptyTypes); + imPlotCreateContext = imPlotType?.GetMethod("CreateContext", BindingFlags.Public | BindingFlags.Static, Type.EmptyTypes); + imPlotGetStyle = imPlotType?.GetMethod("GetStyle", BindingFlags.Public | BindingFlags.Static, Type.EmptyTypes); + + // Find SetImGuiContext method that takes ImGuiContextPtr parameter + Type? imGuiContextPtrType = Assembly.Load("Hexa.NET.ImGui").GetType("Hexa.NET.ImGui.ImGuiContextPtr"); + if (imGuiContextPtrType != null) + { + imPlotSetImGuiContext = imPlotType?.GetMethod("SetImGuiContext", BindingFlags.Public | BindingFlags.Static, [imGuiContextPtrType]); + } + + // Find context-related methods + if (imPlotCreateContext != null) + { + Type? contextType = imPlotCreateContext.ReturnType; + if (contextType != null) + { + imPlotSetCurrentContext = imPlotType?.GetMethod("SetCurrentContext", BindingFlags.Public | BindingFlags.Static, [contextType]); + + // Find DestroyContext method that takes the context type parameter + imPlotDestroyContext = imPlotType?.GetMethod("DestroyContext", BindingFlags.Public | BindingFlags.Static, [contextType]); + + // Find StyleColorsDark method that takes ImPlotStylePtr parameter + Type? styleType = imPlotAssembly.GetType("Hexa.NET.ImPlot.ImPlotStylePtr"); + if (styleType != null) + { + imPlotStyleColorsDark = imPlotType?.GetMethod("StyleColorsDark", BindingFlags.Public | BindingFlags.Static, [styleType]); + } + } + } + + if (imPlotBeginFrame != null) + { + DebugLogger.Log("ImGuiExtensionManager: ImPlot detected and will be auto-initialized"); + } + } + catch (Exception ex) when (ex is FileNotFoundException or FileLoadException or BadImageFormatException or AmbiguousMatchException) + { + // ImPlot not available or has ambiguous methods - this is fine + DebugLogger.Log($"ImGuiExtensionManager: ImPlot not available or has issues: {ex.Message}"); + } + } + + /// + /// Call BeginFrame for all detected extensions. Should be called once per frame after ImGui.NewFrame(). + /// + public static void BeginFrame() + { + // Call ImGuizmo.BeginFrame() if available + try + { + imGuizmoBeginFrame?.Invoke(null, null); + } + catch (TargetInvocationException ex) + { + DebugLogger.Log($"ImGuiExtensionManager: Error calling ImGuizmo.BeginFrame(): {ex.InnerException?.Message ?? ex.Message}"); + } + + // Call ImNodes.BeginFrame() if available + try + { + imNodesBeginFrame?.Invoke(null, null); + } + catch (TargetInvocationException ex) + { + DebugLogger.Log($"ImGuiExtensionManager: Error calling ImNodes.BeginFrame(): {ex.InnerException?.Message ?? ex.Message}"); + } + + // Call ImPlot.BeginFrame() if available + try + { + imPlotBeginFrame?.Invoke(null, null); + } + catch (TargetInvocationException ex) + { + DebugLogger.Log($"ImGuiExtensionManager: Error calling ImPlot.BeginFrame(): {ex.InnerException?.Message ?? ex.Message}"); + } + } + + /// + /// Sets the ImGui context for all detected extensions. Should be called once after ImGui.CreateContext(). + /// + /// The ImGui context to set for the extensions. If null, uses the current context. + public static void SetImGuiContext(ImGuiContextPtr? context = null) + { + // Use current context if none provided + ImGuiContextPtr contextToSet = context ?? ImGui.GetCurrentContext(); + + // Set context for ImGuizmo if available + try + { + imGuizmoSetImGuiContext?.Invoke(null, [contextToSet]); + } + catch (TargetInvocationException ex) + { + DebugLogger.Log($"ImGuiExtensionManager: Error calling ImGuizmo.SetImGuiContext(): {ex.InnerException?.Message ?? ex.Message}"); + } + + // Set context for ImNodes if available + try + { + imNodesSetImGuiContext?.Invoke(null, [contextToSet]); + } + catch (TargetInvocationException ex) + { + DebugLogger.Log($"ImGuiExtensionManager: Error calling ImNodes.SetImGuiContext(): {ex.InnerException?.Message ?? ex.Message}"); + } + + // Set context for ImPlot if available + try + { + imPlotSetImGuiContext?.Invoke(null, [contextToSet]); + } + catch (TargetInvocationException ex) + { + DebugLogger.Log($"ImGuiExtensionManager: Error calling ImPlot.SetImGuiContext(): {ex.InnerException?.Message ?? ex.Message}"); + } + } + + /// + /// Creates extension contexts and applies dark styles. Should be called once after SetImGuiContext(). + /// + public static void CreateExtensionContexts() + { + // Create and set ImNodes context and set style + if (imNodesCreateContext != null && imNodesSetCurrentContext != null) + { + try + { + nodesContext = imNodesCreateContext.Invoke(null, null); + if (nodesContext != null) + { + imNodesSetCurrentContext.Invoke(null, [nodesContext]); + + // Apply dark style if available + if (imNodesStyleColorsDark != null && imNodesGetStyle != null) + { + object? style = imNodesGetStyle.Invoke(null, null); + if (style != null) + { + imNodesStyleColorsDark.Invoke(null, [style]); + } + } + + DebugLogger.Log("ImGuiExtensionManager: ImNodes context created and dark style applied"); + } + } + catch (TargetInvocationException ex) + { + DebugLogger.Log($"ImGuiExtensionManager: Error creating ImNodes context: {ex.InnerException?.Message ?? ex.Message}"); + } + } + + // Create and set ImPlot context and set style + if (imPlotCreateContext != null && imPlotSetCurrentContext != null) + { + try + { + plotContext = imPlotCreateContext.Invoke(null, null); + if (plotContext != null) + { + imPlotSetCurrentContext.Invoke(null, [plotContext]); + + // Apply dark style if available + if (imPlotStyleColorsDark != null && imPlotGetStyle != null) + { + object? style = imPlotGetStyle.Invoke(null, null); + if (style != null) + { + imPlotStyleColorsDark.Invoke(null, [style]); + } + } + + DebugLogger.Log("ImGuiExtensionManager: ImPlot context created and dark style applied"); + } + } + catch (TargetInvocationException ex) + { + DebugLogger.Log($"ImGuiExtensionManager: Error creating ImPlot context: {ex.InnerException?.Message ?? ex.Message}"); + } + } + } + + /// + /// Cleanup extension contexts. Should be called during application shutdown. + /// + public static void Cleanup() + { + // Clear ImGuizmo context by setting it to null to free any internal state + if (imGuizmoSetImGuiContext != null) + { + try + { + imGuizmoSetImGuiContext.Invoke(null, [default(ImGuiContextPtr)]); + DebugLogger.Log("ImGuiExtensionManager: ImGuizmo context cleared"); + } + catch (TargetInvocationException ex) + { + DebugLogger.Log($"ImGuiExtensionManager: Error clearing ImGuizmo context: {ex.InnerException?.Message ?? ex.Message}"); + } + } + + // Destroy ImNodes context if created + if (nodesContext != null && imNodesDestroyContext != null) + { + try + { + imNodesDestroyContext.Invoke(null, [nodesContext]); + nodesContext = null; + DebugLogger.Log("ImGuiExtensionManager: ImNodes context destroyed"); + } + catch (TargetInvocationException ex) + { + DebugLogger.Log($"ImGuiExtensionManager: Error destroying ImNodes context: {ex.InnerException?.Message ?? ex.Message}"); + } + } + + // Destroy ImPlot context if created + if (plotContext != null && imPlotDestroyContext != null) + { + try + { + imPlotDestroyContext.Invoke(null, [plotContext]); + plotContext = null; + DebugLogger.Log("ImGuiExtensionManager: ImPlot context destroyed"); + } + catch (TargetInvocationException ex) + { + DebugLogger.Log($"ImGuiExtensionManager: Error destroying ImPlot context: {ex.InnerException?.Message ?? ex.Message}"); + } + } + } + + /// + /// Gets whether ImGuizmo is available and initialized. + /// + public static bool IsImGuizmoAvailable => imGuizmoBeginFrame != null; + + /// + /// Gets whether ImNodes is available and initialized. + /// + public static bool IsImNodesAvailable => imNodesBeginFrame != null; + + /// + /// Gets whether ImPlot is available and initialized. + /// + public static bool IsImPlotAvailable => imPlotBeginFrame != null; + + /// + /// Gets whether ImNodes context has been created. + /// + public static bool IsImNodesContextCreated => nodesContext != null; + + /// + /// Gets whether ImPlot context has been created. + /// + public static bool IsImPlotContextCreated => plotContext != null; +} diff --git a/ImGuiAppDemo/Demos/GraphicsDemo.cs b/ImGuiAppDemo/Demos/GraphicsDemo.cs index 6268bf6..417dd2e 100644 --- a/ImGuiAppDemo/Demos/GraphicsDemo.cs +++ b/ImGuiAppDemo/Demos/GraphicsDemo.cs @@ -8,7 +8,7 @@ namespace ktsu.ImGuiApp.Demo.Demos; using Hexa.NET.ImGui; using ktsu.Extensions; using ktsu.ImGuiApp; -using ktsu.StrongPaths; +using ktsu.Semantics; /// /// Demo for graphics and drawing capabilities diff --git a/ImGuiAppDemo/Demos/ImGuizmoDemo.cs b/ImGuiAppDemo/Demos/ImGuizmoDemo.cs index 964a19f..efc7810 100644 --- a/ImGuiAppDemo/Demos/ImGuizmoDemo.cs +++ b/ImGuiAppDemo/Demos/ImGuizmoDemo.cs @@ -87,7 +87,9 @@ public void Render() // Set up ImGuizmo for this viewport if (gizmoEnabled) { - ImGuizmo.SetDrawlist(ImGui.GetWindowDrawList()); + // IMPORTANT: Set the drawlist and enable ImGuizmo and set the rect, before using any ImGuizmo functions + ImGuizmo.SetDrawlist(); + ImGuizmo.Enable(true); ImGuizmo.SetRect(gizmoPos.X, gizmoPos.Y, gizmoSize.X, gizmoSize.Y); // Create view and projection matrices for the gizmo @@ -98,6 +100,9 @@ public void Render() Matrix4x4 identity = Matrix4x4.Identity; ImGuizmo.DrawGrid(ref view, ref proj, ref identity, 10.0f); + // IMPORTANT: Use ID management for proper gizmo isolation + ImGuizmo.PushID(0); + // Draw the gizmo Matrix4x4 transform = gizmoTransform; if (ImGuizmo.Manipulate(ref view, ref proj, gizmoOperation, gizmoMode, ref transform)) @@ -105,6 +110,8 @@ public void Render() gizmoTransform = transform; } + ImGuizmo.PopID(); + // Display gizmo state ImGui.SetCursorScreenPos(gizmoPos + new Vector2(10, gizmoSize.Y - 60)); ImGui.Text($"Gizmo Over: {ImGuizmo.IsOver()}"); diff --git a/ImGuiAppDemo/Demos/ImNodesDemo.cs b/ImGuiAppDemo/Demos/ImNodesDemo.cs index d4233d2..9a9a314 100644 --- a/ImGuiAppDemo/Demos/ImNodesDemo.cs +++ b/ImGuiAppDemo/Demos/ImNodesDemo.cs @@ -25,9 +25,6 @@ private sealed record SimpleLink(int Id, int InputPinId, int OutputPinId); public ImNodesDemo() { - // Initialize ImNodes context - ImNodes.CreateContext(); - // Initialize demo data for ImNodes nodes.Add(new SimpleNode(nextNodeId++, new Vector2(50, 50), "Input Node", [], [1, 2])); nodes.Add(new SimpleNode(nextNodeId++, new Vector2(250, 100), "Process Node", [3], [4])); diff --git a/ImGuiAppDemo/ImGuiAppDemo.cs b/ImGuiAppDemo/ImGuiAppDemo.cs index 6c718eb..09a1502 100644 --- a/ImGuiAppDemo/ImGuiAppDemo.cs +++ b/ImGuiAppDemo/ImGuiAppDemo.cs @@ -8,7 +8,7 @@ namespace ktsu.ImGuiApp.Demo; using ktsu.Extensions; using ktsu.ImGuiApp; using ktsu.ImGuiApp.Demo.Demos; -using ktsu.StrongPaths; +using ktsu.Semantics; internal static class ImGuiAppDemo { diff --git a/ImGuiAppDemo/ImGuiAppDemo.csproj b/ImGuiAppDemo/ImGuiAppDemo.csproj index d258925..b4f90a7 100644 --- a/ImGuiAppDemo/ImGuiAppDemo.csproj +++ b/ImGuiAppDemo/ImGuiAppDemo.csproj @@ -12,6 +12,7 @@ + From f1a543d2d2b08df2d50f2101d622ca9e1bac683a Mon Sep 17 00:00:00 2001 From: Matt Edmondson Date: Fri, 1 Aug 2025 09:42:10 +1000 Subject: [PATCH 05/11] Enhance README.md with updated features and demo details: Added validation for window management startup state, improved rendering precision with pixel-perfect alignment, and introduced error recovery features. Expanded demo tab descriptions to include advanced widgets, animation, and data visualization capabilities, providing a comprehensive overview of the ImGuiApp's functionalities. --- README.md | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 607e49c..b32f12a 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ ImGuiApp is a .NET library that provides application scaffolding for [Dear ImGui - **Simple API**: Create ImGui applications with minimal boilerplate code - **Full Integration**: Seamless integration with Silk.NET for OpenGL and input handling -- **Window Management**: Automatic window state, rendering, and input handling +- **Window Management**: Automatic window state, rendering, and input handling with startup state validation - **Performance Optimization**: Sleep-based throttled rendering with lowest-selection logic when unfocused, idle, or not visible to maximize resource savings - **PID Frame Limiting**: Precision frame rate control using a PID controller with comprehensive auto-tuning capabilities for highly accurate target FPS achievement - **DPI Awareness**: Built-in support for high-DPI displays and scaling @@ -27,6 +27,8 @@ ImGuiApp is a .NET library that provides application scaffolding for [Dear ImGui - **Lifecycle Callbacks**: Customizable delegate callbacks for application events - **Menu System**: Easy-to-use API for creating application menus - **Positioning Guards**: Offscreen positioning checks to keep windows visible +- **Rendering Precision**: Enhanced ImGui rendering with pixel-perfect alignment and sub-pixel precision controls +- **Error Recovery**: Built-in error recovery features with configurable debugging options - **Modern .NET**: Supports .NET 9 and newer - **Active Development**: Open-source and actively maintained @@ -34,7 +36,7 @@ ImGuiApp is a .NET library that provides application scaffolding for [Dear ImGui ### Prerequisites -- .NET 9.0 or later +- .NET 9.0 or later (currently using .NET 9.0.301) ## Installation @@ -522,11 +524,20 @@ Check out the included demo project to see a comprehensive working example: 1. Clone or download the repository 2. Open the solution in Visual Studio (or run dotnet build) 3. Start the ImGuiAppDemo project to see a feature-rich ImGui application -4. Explore the different tabs: - - **Unicode & Emojis**: Test character rendering with extended Unicode support - - **Widgets & Layout**: Comprehensive ImGui widget demonstrations - - **Graphics & Plotting**: Custom drawing and data visualization examples - - **Nerd Font Icons**: Browse and test various icon sets and glyphs +4. Explore the comprehensive demo tabs: + - **Basic Widgets**: Essential UI elements like buttons, inputs, sliders + - **Advanced Widgets**: Complex controls, combo boxes, list boxes, color pickers + - **Layout & Tables**: Column layouts, advanced tables with sorting and resizing + - **Graphics & Drawing**: Custom drawing using ImDrawList for canvas-like functionality + - **Data Visualization**: Real-time plotting with performance metrics and graphs + - **Input Handling**: Mouse input information and drag-and-drop demonstrations + - **Animation**: Dynamic content and animated elements + - **Unicode & Emojis**: Extended character support with comprehensive symbol sets + - **Nerd Font Icons**: Icon sets and specialized glyph demonstrations + - **ImGuizmo**: 3D gizmo controls for object manipulation + - **ImNodes**: Node-based editor demonstrations + - **ImPlot**: Advanced plotting and charting capabilities + - **Utilities & Tools**: Modal dialogs, popups, file operations, and system information 5. Use the debug menu to access additional features: - **Debug > Show Performance Monitor**: Real-time FPS graph showing PID controller performance with comprehensive auto-tuning capabilities - **Debug > Show ImGui Demo**: Official ImGui demo window @@ -541,6 +552,8 @@ The **Performance Monitor** includes: Perfect for seeing both the throttling system and PID controller work in real-time! +The demo application has been recently enhanced with comprehensive ImGui feature demonstrations, including advanced rendering precision improvements with pixel-perfect alignment, error recovery features, and extensive widget showcases across 13 different demo tabs. + ## Contributing Contributions are welcome! Here's how you can help: @@ -565,7 +578,8 @@ Check the [CHANGELOG.md](CHANGELOG.md) for detailed release notes and version ch - [Dear ImGui](https://github.com/ocornut/imgui) - The immediate mode GUI library - [Hexa.NET.ImGui](https://github.com/HexaEngine/Hexa.NET.ImGui) - .NET bindings for Dear ImGui -- [Silk.NET](https://github.com/dotnet/Silk.NET) - .NET bindings for OpenGL and windowing +- [Silk.NET](https://github.com/dotnet/Silk.NET) - .NET bindings for OpenGL and windowing (includes OpenGL, Input, SDL2, and additional extensions) +- [SixLabors.ImageSharp](https://github.com/SixLabors/ImageSharp) - Cross-platform image processing library - All contributors and the .NET community for their support ## Support From f5ea729739a9f351611a54babe4fe1e8a468e368 Mon Sep 17 00:00:00 2001 From: Matt Edmondson Date: Fri, 1 Aug 2025 10:11:10 +1000 Subject: [PATCH 06/11] Enhance ImGuiController with context management: Introduced SetupContext method to manage ImGui context for each frame, updated initialization process to include context setup, and refactored input handling for improved clarity and functionality. --- ImGuiApp/ImGuiApp.cs | 2 ++ ImGuiApp/ImGuiController/ImGuiController.cs | 40 ++++++++++++++------- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/ImGuiApp/ImGuiApp.cs b/ImGuiApp/ImGuiApp.cs index 805c702..67491e7 100644 --- a/ImGuiApp/ImGuiApp.cs +++ b/ImGuiApp/ImGuiApp.cs @@ -337,6 +337,8 @@ internal static void SetupWindowUpdateHandler(ImGuiAppConfig config) UpdateWindowPerformance(); UpdatePerformanceMonitoring((float)delta); + // SetupContext prepares ImGui context for this frame + controller?.SetupContext(); controller?.Update((float)delta); config.OnUpdate?.Invoke((float)delta); Invoker.DoInvokes(); diff --git a/ImGuiApp/ImGuiController/ImGuiController.cs b/ImGuiApp/ImGuiController/ImGuiController.cs index 9d203d4..30f7055 100644 --- a/ImGuiApp/ImGuiController/ImGuiController.cs +++ b/ImGuiApp/ImGuiController/ImGuiController.cs @@ -45,6 +45,8 @@ internal class ImGuiController : IDisposable internal bool _disposed; + internal ImGuiContextPtr imGuiContextPtr; + /// /// Constructs a new ImGuiController. /// @@ -102,8 +104,8 @@ public ImGuiController(GL gl, IView view, IInputContext input, ImGuiFontConfig? SetPerFrameImGuiData(1f / 60f); - DebugLogger.Log("ImGuiController: Beginning frame"); - BeginFrame(); + DebugLogger.Log("ImGuiController: Setting up input handlers"); + SetupInputHandlers(); DebugLogger.Log("ImGuiController: Initialization completed"); } @@ -115,27 +117,24 @@ internal void Init(GL gl, IView view, IInputContext input) _windowWidth = view.Size.X; _windowHeight = view.Size.Y; - ImGuiContextPtr imguiContext = ImGui.CreateContext(); + imGuiContextPtr = ImGui.CreateContext(); // Initialize ImGui extensions (ImGuizmo, ImNodes, ImPlot) if available ImGuiExtensionManager.Initialize(); - // Set the ImGui context for all extensions after context creation - ImGuiExtensionManager.SetImGuiContext(imguiContext); - // Create extension contexts and apply dark styles ImGuiExtensionManager.CreateExtensionContexts(); + SetupContext(); + ImGui.StyleColorsDark(); } - internal void BeginFrame() + /// + /// Sets up input event handlers. Should only be called once during initialization. + /// + internal void SetupInputHandlers() { - ImGui.NewFrame(); - _frameBegun = true; - - // Call BeginFrame for all detected ImGui extensions - ImGuiExtensionManager.BeginFrame(); _keyboard = _input?.Keyboards[0]; _mouse = _input?.Mice[0]; if (_view is not null) @@ -159,6 +158,16 @@ internal void BeginFrame() } } + /// + /// Sets up ImGui context for the current frame. Should be called every frame before Update(). + /// + internal void SetupContext() + { + // Set context for ImGui and extensions + ImGui.SetCurrentContext(imGuiContextPtr); + ImGuiExtensionManager.SetImGuiContext(imGuiContextPtr); + } + /// /// Delegate to receive keyboard key down events. /// @@ -277,8 +286,13 @@ internal void Update(float deltaSeconds) SetPerFrameImGuiData(deltaSeconds); UpdateImGuiInput(); - _frameBegun = true; + // Start ImGui frame first ImGui.NewFrame(); + _frameBegun = true; + + // IMPORTANT: Call extension BeginFrame methods AFTER ImGui.NewFrame() + // ImGuizmo, ImNodes, and ImPlot require ImGui to have started the frame first + ImGuiExtensionManager.BeginFrame(); } /// From 1243f411eb20e8469743f102408be681252d4243 Mon Sep 17 00:00:00 2001 From: Matt Edmondson Date: Sat, 2 Aug 2025 12:13:46 +1000 Subject: [PATCH 07/11] Refactor ImGuiApp to improve window management and visibility tracking: Renamed visibility flags for ImGui windows, added focus tracking for better user experience, and centralized window opening methods. Enhanced demo tab rendering with updated separator text for improved clarity. --- ImGuiApp/ImGuiApp.cs | 189 ++++++++++++++++++-- ImGuiApp/PidFrameLimiter.cs | 11 -- ImGuiAppDemo/Demos/AdvancedWidgetsDemo.cs | 10 +- ImGuiAppDemo/Demos/AnimationDemo.cs | 9 +- ImGuiAppDemo/Demos/BasicWidgetsDemo.cs | 15 +- ImGuiAppDemo/Demos/DataVisualizationDemo.cs | 13 +- ImGuiAppDemo/Demos/GraphicsDemo.cs | 9 +- ImGuiAppDemo/Demos/ImGuizmoDemo.cs | 37 ++-- ImGuiAppDemo/Demos/InputHandlingDemo.cs | 14 +- ImGuiAppDemo/Demos/LayoutDemo.cs | 11 +- ImGuiAppDemo/Demos/NerdFontDemo.cs | 31 +--- ImGuiAppDemo/Demos/UnicodeDemo.cs | 7 +- ImGuiAppDemo/Demos/UtilityDemo.cs | 45 ++--- ImGuiAppDemo/ImGuiAppDemo.cs | 6 +- 14 files changed, 239 insertions(+), 168 deletions(-) diff --git a/ImGuiApp/ImGuiApp.cs b/ImGuiApp/ImGuiApp.cs index 67491e7..3556468 100644 --- a/ImGuiApp/ImGuiApp.cs +++ b/ImGuiApp/ImGuiApp.cs @@ -101,9 +101,16 @@ public static ImGuiAppWindowState WindowState /// internal static void OnUserInput() => lastInputTime = DateTime.UtcNow; - internal static bool showImGuiMetrics; - internal static bool showImGuiDemo; - internal static bool showPerformanceMonitor; + internal static bool isImGuiMetricsVisible; + internal static bool isImGuiDemoVisible; + internal static bool isImGuiStyleEditorVisible; + internal static bool isPerformanceMonitorVisible; + + // Track whether we need to focus windows on their first frame + internal static bool shouldFocusImGuiDemo; + internal static bool shouldFocusImGuiMetrics; + internal static bool shouldFocusImGuiStyleEditor; + internal static bool shouldFocusPerformanceMonitor; // Performance monitoring data structures internal static readonly Queue performanceFrameTimes = new(); @@ -133,6 +140,54 @@ public static void Stop() window.Close(); } + /// + /// Opens the ImGui Demo window. + /// + public static void ShowImGuiDemo() + { + if (!isImGuiDemoVisible) + { + shouldFocusImGuiDemo = true; + } + isImGuiDemoVisible = true; + } + + /// + /// Opens the ImGui Metrics window. + /// + public static void ShowImGuiMetrics() + { + if (!isImGuiMetricsVisible) + { + shouldFocusImGuiMetrics = true; + } + isImGuiMetricsVisible = true; + } + + /// + /// Opens the ImGui Style Editor window. + /// + public static void ShowImGuiStyleEditor() + { + if (!isImGuiStyleEditorVisible) + { + shouldFocusImGuiStyleEditor = true; + } + isImGuiStyleEditorVisible = true; + } + + /// + /// Opens the Performance Monitor window. + /// + public static void ShowPerformanceMonitor() + { + if (!isPerformanceMonitorVisible) + { + shouldFocusPerformanceMonitor = true; + } + isPerformanceMonitorVisible = true; + } + internal static ImGuiAppConfig Config { get; set; } = new(); internal static void InitializeWindow(ImGuiAppConfig config) @@ -690,19 +745,54 @@ internal static void RenderAppMenu(Action? menuDelegate) if (ImGui.BeginMenu("Debug")) { - if (ImGui.MenuItem("Show ImGui Demo", "", showImGuiDemo)) + if (ImGui.MenuItem("Show ImGui Demo", "", isImGuiDemoVisible)) { - showImGuiDemo = !showImGuiDemo; + if (!isImGuiDemoVisible) + { + ShowImGuiDemo(); + } + else + { + isImGuiDemoVisible = false; + } } - if (ImGui.MenuItem("Show ImGui Metrics", "", showImGuiMetrics)) + if (ImGui.MenuItem("Show ImGui Metrics", "", isImGuiMetricsVisible)) { - showImGuiMetrics = !showImGuiMetrics; + if (!isImGuiMetricsVisible) + { + ShowImGuiMetrics(); + } + else + { + isImGuiMetricsVisible = false; + } } - if (ImGui.MenuItem("Show Performance Monitor", "", showPerformanceMonitor)) + if (ImGui.MenuItem("Show Style Editor", "", isImGuiStyleEditorVisible)) { - showPerformanceMonitor = !showPerformanceMonitor; + if (!isImGuiStyleEditorVisible) + { + ShowImGuiStyleEditor(); + } + else + { + isImGuiStyleEditorVisible = false; + } + } + + ImGui.Separator(); + + if (ImGui.MenuItem("Show Performance Monitor", "", isPerformanceMonitorVisible)) + { + if (!isPerformanceMonitorVisible) + { + ShowPerformanceMonitor(); + } + else + { + isPerformanceMonitorVisible = false; + } } ImGui.EndMenu(); @@ -725,7 +815,7 @@ internal static void RenderWindowContents(Action? tickDelegate, float dt) ImGui.SetNextWindowPos(ImGui.GetMainViewport().WorkPos); ImGuiStylePtr style = ImGui.GetStyle(); System.Numerics.Vector4 borderColor = style.Colors[(int)ImGuiCol.Border]; - if (ImGui.Begin("##mainWindow", ref b, ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoSavedSettings)) + if (ImGui.Begin("##mainWindow", ref b, ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoSavedSettings | ImGuiWindowFlags.NoBringToFrontOnFocus)) { style.Colors[(int)ImGuiCol.Border] = borderColor; tickDelegate?.Invoke(dt); @@ -733,14 +823,57 @@ internal static void RenderWindowContents(Action? tickDelegate, float dt) ImGui.End(); - if (showImGuiDemo) + if (isImGuiDemoVisible) + { + // Position the demo window to ensure it's visible and accessible + ImGui.SetNextWindowPos(new System.Numerics.Vector2(50, 50), ImGuiCond.FirstUseEver); + ImGui.SetNextWindowSize(new System.Numerics.Vector2(800, 600), ImGuiCond.FirstUseEver); + + // Focus on first frame after opening for good UX + if (shouldFocusImGuiDemo) + { + ImGui.SetNextWindowFocus(); + shouldFocusImGuiDemo = false; + } + + ImGui.ShowDemoWindow(ref isImGuiDemoVisible); + } + + if (isImGuiMetricsVisible) { - ImGui.ShowDemoWindow(ref showImGuiDemo); + // Position the metrics window to ensure it's visible and accessible + ImGui.SetNextWindowPos(new System.Numerics.Vector2(100, 100), ImGuiCond.FirstUseEver); + ImGui.SetNextWindowSize(new System.Numerics.Vector2(600, 500), ImGuiCond.FirstUseEver); + + // Focus on first frame after opening for good UX + if (shouldFocusImGuiMetrics) + { + ImGui.SetNextWindowFocus(); + shouldFocusImGuiMetrics = false; + } + + ImGui.ShowMetricsWindow(ref isImGuiMetricsVisible); } - if (showImGuiMetrics) + if (isImGuiStyleEditorVisible) { - ImGui.ShowMetricsWindow(ref showImGuiMetrics); + // Position and configure the style editor window for better accessibility + ImGui.SetNextWindowPos(new System.Numerics.Vector2(150, 150), ImGuiCond.FirstUseEver); + ImGui.SetNextWindowSize(new System.Numerics.Vector2(500, 400), ImGuiCond.FirstUseEver); + + // Focus on first frame after opening for good UX + if (shouldFocusImGuiStyleEditor) + { + ImGui.SetNextWindowFocus(); + shouldFocusImGuiStyleEditor = false; + } + + if (ImGui.Begin("Style Editor", ref isImGuiStyleEditorVisible)) + { + ImGui.ShowStyleEditor(); + } + + ImGui.End(); } } @@ -1200,9 +1333,16 @@ internal static void Reset() IsIdle = false; lastInputTime = DateTime.UtcNow; targetFrameTimeMs = 1000.0 / 30.0; - showImGuiMetrics = false; - showImGuiDemo = false; - showPerformanceMonitor = false; + isImGuiMetricsVisible = false; + isImGuiDemoVisible = false; + isImGuiStyleEditorVisible = false; + isPerformanceMonitorVisible = false; + + shouldFocusImGuiDemo = false; + shouldFocusImGuiMetrics = false; + shouldFocusImGuiStyleEditor = false; + shouldFocusPerformanceMonitor = false; + performanceFrameTimes.Clear(); performanceFrameTimeSum = 0; performanceFpsHistory.Clear(); @@ -1321,12 +1461,23 @@ internal static void UpdatePerformanceMonitoring(float dt) /// internal static void RenderPerformanceMonitor() { - if (!showPerformanceMonitor) + if (!isPerformanceMonitorVisible) { return; } - if (ImGui.Begin("Performance Monitor", ref showPerformanceMonitor)) + // Position the performance monitor window to ensure it's visible and accessible + ImGui.SetNextWindowPos(new System.Numerics.Vector2(200, 200), ImGuiCond.FirstUseEver); + ImGui.SetNextWindowSize(new System.Numerics.Vector2(500, 350), ImGuiCond.FirstUseEver); + + // Focus on first frame after opening for good UX + if (shouldFocusPerformanceMonitor) + { + ImGui.SetNextWindowFocus(); + shouldFocusPerformanceMonitor = false; + } + + if (ImGui.Begin("Performance Monitor", ref isPerformanceMonitorVisible)) { ImGui.TextWrapped("This window shows the current performance state and throttling behavior."); ImGui.Separator(); diff --git a/ImGuiApp/PidFrameLimiter.cs b/ImGuiApp/PidFrameLimiter.cs index 90b8891..be14c77 100644 --- a/ImGuiApp/PidFrameLimiter.cs +++ b/ImGuiApp/PidFrameLimiter.cs @@ -538,17 +538,6 @@ public void LimitFrameRate(double targetFrameTimeMs) { HandleAutoTuningProgression(error); } - - // Optional: Log PID state for debugging (remove in production) -#if DEBUG - if (DateTime.UtcNow.Millisecond % 100 < 16) // Log roughly every 100ms - { - Debug.WriteLine( - $"PID Frame Limiter - Target: {targetFrameTimeMs:F1}ms, " + - $"Actual: {smoothedFrameTime:F1}ms, Error: {error:F1}ms, " + - $"Sleep: {baseSleepMs:F1}ms, P: {CurrentKp * error:F2}, I: {CurrentKi * integral:F2}, D: {CurrentKd * derivative:F2}"); - } -#endif } internal static double CalculateStability(List errors) diff --git a/ImGuiAppDemo/Demos/AdvancedWidgetsDemo.cs b/ImGuiAppDemo/Demos/AdvancedWidgetsDemo.cs index c1c747f..b93681e 100644 --- a/ImGuiAppDemo/Demos/AdvancedWidgetsDemo.cs +++ b/ImGuiAppDemo/Demos/AdvancedWidgetsDemo.cs @@ -25,16 +25,14 @@ public void Render() if (ImGui.BeginTabItem(TabName)) { // Color controls - ImGui.Text("Color Controls:"); + ImGui.SeparatorText("Color Controls:"); ImGui.ColorEdit3("Color RGB", ref colorPickerValue); ImGui.ColorEdit4("Color RGBA", ref color4Value); ImGui.SetNextItemWidth(200.0f); ImGui.ColorPicker3("Color Picker", ref colorPickerValue); - ImGui.Separator(); - // Tree view - ImGui.Text("Tree View:"); + ImGui.SeparatorText("Tree View:"); if (ImGui.TreeNode("Root Node")) { for (int i = 0; i < 5; i++) @@ -66,10 +64,8 @@ public void Render() ImGui.TreePop(); } - ImGui.Separator(); - // Progress bars and loading indicators - ImGui.Text("Progress Indicators:"); + ImGui.SeparatorText("Progress Indicators:"); float progress = ((float)Math.Sin(animationTime * 2.0) * 0.5f) + 0.5f; ImGui.ProgressBar(progress, new Vector2(-1, 0), $"{progress * 100:F1}%"); diff --git a/ImGuiAppDemo/Demos/AnimationDemo.cs b/ImGuiAppDemo/Demos/AnimationDemo.cs index eaeb781..fcf930d 100644 --- a/ImGuiAppDemo/Demos/AnimationDemo.cs +++ b/ImGuiAppDemo/Demos/AnimationDemo.cs @@ -34,7 +34,7 @@ public void Render() { if (ImGui.BeginTabItem(TabName)) { - ImGui.Text("Animation Examples:"); + ImGui.SeparatorText("Animation Examples:"); // Simple animations ImGui.Text("Bouncing Animation:"); @@ -52,14 +52,9 @@ public void Render() ImGui.ColorConvertFloat4ToU32(new Vector4(0.5f, 0, 1, 0.7f))); ImGui.Dummy(new Vector2(100, 100)); - ImGui.Separator(); - - // Animation controls - ImGui.Text("Animation Controls:"); + ImGui.SeparatorText("Animated Text:"); ImGui.SliderFloat("Text Speed", ref textSpeed, 10.0f, 200.0f); - // Animated text (simplified) - ImGui.Text("Animated text effects:"); for (int i = 0; i < 20; i++) { float wave = (MathF.Sin((animationTime * 3.0f) + (i * 0.5f)) * 0.5f) + 0.5f; diff --git a/ImGuiAppDemo/Demos/BasicWidgetsDemo.cs b/ImGuiAppDemo/Demos/BasicWidgetsDemo.cs index cbdd2c0..4f8d96b 100644 --- a/ImGuiAppDemo/Demos/BasicWidgetsDemo.cs +++ b/ImGuiAppDemo/Demos/BasicWidgetsDemo.cs @@ -38,10 +38,9 @@ public void Render() if (ImGui.BeginTabItem(TabName)) { ImGui.TextWrapped("This tab demonstrates basic ImGui widgets and controls."); - ImGui.Separator(); // Buttons - ImGui.Text("Buttons:"); + ImGui.SeparatorText("Buttons:"); if (ImGui.Button("Regular Button")) { counter++; @@ -69,8 +68,7 @@ public void Render() ImGui.Text($"Counter: {counter}"); // Checkboxes and Radio buttons - ImGui.Separator(); - ImGui.Text("Selection Controls:"); + ImGui.SeparatorText("Selection Controls"); ImGui.Checkbox("Checkbox", ref checkboxState); ImGui.RadioButton("Option 1", ref radioSelection, 0); @@ -80,22 +78,19 @@ public void Render() ImGui.RadioButton("Option 3", ref radioSelection, 2); // Sliders - ImGui.Separator(); - ImGui.Text("Sliders:"); + ImGui.SeparatorText("Sliders"); ImGui.SliderFloat("Float Slider", ref sliderValue, 0.0f, 1.0f); ImGui.SliderFloat("Angle", ref angle, 0.0f, 360.0f, "%.1f deg"); ImGui.SliderInt("Int Slider", ref dragInt, 0, 100); // Input fields - ImGui.Separator(); - ImGui.Text("Input Fields:"); + ImGui.SeparatorText("Input Fields"); ImGui.InputText("Text Input", ref inputText, 100); ImGui.InputFloat("Float Input", ref dragFloat); ImGui.InputFloat3("Vector3 Input", ref dragVector); // Combo boxes - ImGui.Separator(); - ImGui.Text("Dropdowns:"); + ImGui.SeparatorText("Dropdowns"); ImGui.Combo("Combo Box", ref comboSelection, comboItems, comboItems.Length); ImGui.ListBox("List Box", ref listboxSelection, listboxItems, listboxItems.Length, 4); diff --git a/ImGuiAppDemo/Demos/DataVisualizationDemo.cs b/ImGuiAppDemo/Demos/DataVisualizationDemo.cs index 17c5f71..8a07ae3 100644 --- a/ImGuiAppDemo/Demos/DataVisualizationDemo.cs +++ b/ImGuiAppDemo/Demos/DataVisualizationDemo.cs @@ -40,7 +40,7 @@ public void Render() { if (ImGui.BeginTabItem(TabName)) { - ImGui.Text("Real-time Data Plots:"); + ImGui.SeparatorText("Real-time Data Plots:"); // Line plot if (plotValues.Count > 0) @@ -53,16 +53,12 @@ public void Render() "Histogram", 0.0f, 1.0f, new Vector2(ImGui.GetContentRegionAvail().X, 100)); } - ImGui.Separator(); - // Performance note - ImGui.Text("Performance Metrics:"); + ImGui.SeparatorText("Performance Metrics:"); ImGui.TextWrapped("Performance monitoring is now available in the Debug menu! Use 'Debug > Show Performance Monitor' to see real-time FPS graphs and throttling state."); - ImGui.Separator(); - // Font demonstrations - ImGui.Text("Custom Font Rendering:"); + ImGui.SeparatorText("Custom Font Rendering:"); using (new FontAppearance(nameof(Resources.CARDCHAR), 16)) { ImGui.Text("Small custom font text"); @@ -79,8 +75,7 @@ public void Render() } // Text formatting examples - ImGui.Separator(); - ImGui.Text("Text Formatting:"); + ImGui.SeparatorText("Text Formatting:"); ImGui.TextColored(new Vector4(1, 0, 0, 1), "Red text"); ImGui.TextColored(new Vector4(0, 1, 0, 1), "Green text"); ImGui.TextColored(new Vector4(0, 0, 1, 1), "Blue text"); diff --git a/ImGuiAppDemo/Demos/GraphicsDemo.cs b/ImGuiAppDemo/Demos/GraphicsDemo.cs index 417dd2e..a356a3e 100644 --- a/ImGuiAppDemo/Demos/GraphicsDemo.cs +++ b/ImGuiAppDemo/Demos/GraphicsDemo.cs @@ -32,17 +32,15 @@ public void Render() AbsoluteFilePath iconPath = AppContext.BaseDirectory.As() / "icon.png".As(); ImGuiAppTextureInfo iconTexture = ImGuiApp.GetOrLoadTexture(iconPath); - ImGui.Text("Image Display:"); + ImGui.SeparatorText("Image Display:"); ImGui.Image(iconTexture.TextureRef, new Vector2(64, 64)); ImGui.SameLine(); ImGui.Image(iconTexture.TextureRef, new Vector2(32, 32)); ImGui.SameLine(); ImGui.Image(iconTexture.TextureRef, new Vector2(16, 16)); - ImGui.Separator(); - // Custom drawing with ImDrawList - ImGui.Text("Custom Drawing Canvas:"); + ImGui.SeparatorText("Custom Drawing Canvas:"); ImGui.ColorEdit4("Draw Color", ref drawColor); ImGui.SliderFloat("Brush Size", ref brushSize, 1.0f, 20.0f); @@ -78,8 +76,7 @@ public void Render() } // Draw some simple shapes for demonstration - ImGui.Separator(); - ImGui.Text("Shape Examples:"); + ImGui.SeparatorText("Shape Examples:"); Vector2 shapeStart = ImGui.GetCursorScreenPos(); // Simple animated circle diff --git a/ImGuiAppDemo/Demos/ImGuizmoDemo.cs b/ImGuiAppDemo/Demos/ImGuizmoDemo.cs index efc7810..9a02d7b 100644 --- a/ImGuiAppDemo/Demos/ImGuizmoDemo.cs +++ b/ImGuiAppDemo/Demos/ImGuizmoDemo.cs @@ -4,6 +4,7 @@ namespace ktsu.ImGuiApp.Demo.Demos; +using System; using System.Numerics; using Hexa.NET.ImGui; using Hexa.NET.ImGuizmo; @@ -15,7 +16,7 @@ internal sealed class ImGuizmoDemo : IDemoTab { private Matrix4x4 gizmoTransform = Matrix4x4.Identity; private Matrix4x4 gizmoView = Matrix4x4.CreateLookAt(new Vector3(0, 0, 5), Vector3.Zero, Vector3.UnitY); - private Matrix4x4 gizmoProjection = Matrix4x4.CreatePerspectiveFieldOfView(MathF.PI / 4f, 16f / 9f, 0.1f, 100f); + private Matrix4x4 gizmoProjection; private ImGuizmoOperation gizmoOperation = ImGuizmoOperation.Translate; private ImGuizmoMode gizmoMode = ImGuizmoMode.Local; private bool gizmoEnabled = true; @@ -38,36 +39,31 @@ public void Render() if (ImGui.BeginTabItem(TabName)) { ImGui.TextWrapped("ImGuizmo provides 3D manipulation gizmos for translate, rotate, and scale operations."); - ImGui.Separator(); // Gizmo controls - ImGui.Text("Gizmo Controls:"); + ImGui.SeparatorText("Gizmo Controls:."); ImGui.Checkbox("Enable Gizmo", ref gizmoEnabled); // Operation selection - ImGui.Text("Operation:"); string[] operationNames = Enum.GetNames(); ImGuizmoOperation[] operations = Enum.GetValues(); int opIndex = Array.IndexOf(operations, gizmoOperation); - if (ImGui.Combo("##Operation", ref opIndex, operationNames, operationNames.Length)) + if (ImGui.Combo("Operation", ref opIndex, operationNames, operationNames.Length)) { gizmoOperation = operations[opIndex]; } // Mode selection - ImGui.Text("Mode:"); string[] modeNames = Enum.GetNames(); ImGuizmoMode[] modes = Enum.GetValues(); int modeIndex = Array.IndexOf(modes, gizmoMode); - if (ImGui.Combo("##Mode", ref modeIndex, modeNames, modeNames.Length)) + if (ImGui.Combo("Mode", ref modeIndex, modeNames, modeNames.Length)) { gizmoMode = modes[modeIndex]; } - ImGui.Separator(); - // Display transform matrix values - ImGui.Text("Transform Matrix:"); + ImGui.SeparatorText("Transform Matrix:"); ImGui.Text($"[{gizmoTransform.M11:F2}, {gizmoTransform.M12:F2}, {gizmoTransform.M13:F2}, {gizmoTransform.M14:F2}]"); ImGui.Text($"[{gizmoTransform.M21:F2}, {gizmoTransform.M22:F2}, {gizmoTransform.M23:F2}, {gizmoTransform.M24:F2}]"); ImGui.Text($"[{gizmoTransform.M31:F2}, {gizmoTransform.M32:F2}, {gizmoTransform.M33:F2}, {gizmoTransform.M34:F2}]"); @@ -78,12 +74,17 @@ public void Render() gizmoTransform = Matrix4x4.Identity; } - ImGui.Separator(); + // Gizmo viewport - use a reasonable size instead of all available space + Vector2 availableSize = ImGui.GetContentRegionAvail(); + Vector2 gizmoSize = new(availableSize.X, Math.Min(availableSize.Y, availableSize.X * 0.6f)); // Use width-based aspect ratio - // Gizmo viewport - Vector2 gizmoSize = new(400, 300); + // Get position for gizmo (NO space reservation - see what happens!) Vector2 gizmoPos = ImGui.GetCursorScreenPos(); + // Update projection matrix based on gizmo size + float aspectRatio = gizmoSize.Y > 0 ? gizmoSize.X / gizmoSize.Y : 1.0f; + gizmoProjection = Matrix4x4.CreatePerspectiveFieldOfView(MathF.PI / 4f, aspectRatio, 0.1f, 100f); + // Set up ImGuizmo for this viewport if (gizmoEnabled) { @@ -111,17 +112,15 @@ public void Render() } ImGuizmo.PopID(); + } - // Display gizmo state - ImGui.SetCursorScreenPos(gizmoPos + new Vector2(10, gizmoSize.Y - 60)); + // Display gizmo state below the gizmo area + if (gizmoEnabled) + { ImGui.Text($"Gizmo Over: {ImGuizmo.IsOver()}"); ImGui.Text($"Gizmo Using: {ImGuizmo.IsUsing()}"); } - // Reserve space for the gizmo viewport - ImGui.SetCursorScreenPos(gizmoPos + new Vector2(0, gizmoSize.Y)); - ImGui.Dummy(gizmoSize); - ImGui.EndTabItem(); } } diff --git a/ImGuiAppDemo/Demos/InputHandlingDemo.cs b/ImGuiAppDemo/Demos/InputHandlingDemo.cs index 915b77c..a12be6f 100644 --- a/ImGuiAppDemo/Demos/InputHandlingDemo.cs +++ b/ImGuiAppDemo/Demos/InputHandlingDemo.cs @@ -37,7 +37,7 @@ public void Render() { if (ImGui.BeginTabItem(TabName)) { - ImGui.Text("Mouse Information:"); + ImGui.SeparatorText("Mouse Information:"); Vector2 mousePos = ImGui.GetMousePos(); Vector2 mouseDelta = ImGui.GetMouseDragDelta(ImGuiMouseButton.Left); ImGui.Text($"Mouse Position: ({mousePos.X:F1}, {mousePos.Y:F1})"); @@ -45,19 +45,15 @@ public void Render() ImGui.Text($"Left Button: {(ImGui.IsMouseDown(ImGuiMouseButton.Left) ? "DOWN" : "UP")}"); ImGui.Text($"Right Button: {(ImGui.IsMouseDown(ImGuiMouseButton.Right) ? "DOWN" : "UP")}"); - ImGui.Separator(); - // Simple drag demonstration - ImGui.Text("Drag & Drop:"); + ImGui.SeparatorText("Drag & Drop:"); ImGui.Button("Drag Source", new Vector2(100, 50)); ImGui.SameLine(); ImGui.Button("Drop Target", new Vector2(100, 50)); ImGui.Text("(Drag and drop functionality would require more complex implementation)"); - ImGui.Separator(); - // Text editing - ImGui.Text("Multi-line Text Editor:"); + ImGui.SeparatorText("Multi-line Text Editor:"); ImGui.Checkbox("Word Wrap", ref wrapText); ImGuiInputTextFlags textFlags = ImGuiInputTextFlags.AllowTabInput; if (!wrapText) @@ -72,10 +68,8 @@ public void Render() textBuffer.Append(textContent); } - ImGui.Separator(); - // Popup and modal buttons - ImGui.Text("Popups and Modals:"); + ImGui.SeparatorText("Popups and Modals:"); if (ImGui.Button("Show Modal")) { showModal = true; diff --git a/ImGuiAppDemo/Demos/LayoutDemo.cs b/ImGuiAppDemo/Demos/LayoutDemo.cs index cd24b73..8c96b5b 100644 --- a/ImGuiAppDemo/Demos/LayoutDemo.cs +++ b/ImGuiAppDemo/Demos/LayoutDemo.cs @@ -48,10 +48,8 @@ public void Render() if (ImGui.BeginTabItem(TabName)) { // Columns - ImGui.Text("Columns Layout:"); + ImGui.SeparatorText("Columns Layout:"); ImGui.Columns(3, "DemoColumns"); - ImGui.Separator(); - ImGui.Text("Column 1"); ImGui.NextColumn(); ImGui.Text("Column 2"); @@ -66,10 +64,9 @@ public void Render() } ImGui.Columns(1); - ImGui.Separator(); // Tables - ImGui.Text("Advanced Tables:"); + ImGui.SeparatorText("Advanced Tables:"); ImGui.Checkbox("Show Headers", ref showTableHeaders); ImGui.SameLine(); ImGui.Checkbox("Show Borders", ref showTableBorders); @@ -121,10 +118,8 @@ public void Render() ImGui.EndTable(); } - ImGui.Separator(); - // Child windows - ImGui.Text("Child Windows:"); + ImGui.SeparatorText("Child Windows:"); if (ImGui.BeginChild("ScrollableChild", new Vector2(0, 150))) { for (int i = 0; i < 50; i++) diff --git a/ImGuiAppDemo/Demos/NerdFontDemo.cs b/ImGuiAppDemo/Demos/NerdFontDemo.cs index a49d61b..ef43465 100644 --- a/ImGuiAppDemo/Demos/NerdFontDemo.cs +++ b/ImGuiAppDemo/Demos/NerdFontDemo.cs @@ -24,64 +24,49 @@ public void Render() { ImGui.TextWrapped("Nerd Font Icons (Patched Fonts)"); ImGui.TextWrapped("This tab demonstrates Nerd Font icons if you're using a Nerd Font (like JetBrains Mono Nerd Font, Fira Code Nerd Font, etc.)."); - ImGui.Separator(); // Powerline symbols - ImGui.Text("Powerline Symbols:"); + ImGui.SeparatorText("Powerline Symbols:"); ImGui.Text("Basic: \uE0A0 \uE0A1 \uE0A2 \uE0B0 \uE0B1 \uE0B2 \uE0B3"); ImGui.Text("Extra: \uE0A3 \uE0B4 \uE0B5 \uE0B6 \uE0B7 \uE0B8 \uE0CA \uE0CC \uE0CD \uE0D0 \uE0D1 \uE0D4"); - ImGui.Separator(); - // Font Awesome icons - ImGui.Text("Font Awesome Icons:"); + ImGui.SeparatorText("Font Awesome Icons"); ImGui.Text("Files & Folders: \uF07B \uF07C \uF15B \uF15C \uF016 \uF017 \uF019 \uF01A \uF093 \uF095"); ImGui.Text("Git & Version Control: \uF1D3 \uF1D2 \uF126 \uF127 \uF128 \uF129 \uF12A \uF12B"); ImGui.Text("Media & UI: \uF04B \uF04C \uF04D \uF050 \uF051 \uF048 \uF049 \uF067 \uF068 \uF00C \uF00D"); - ImGui.Separator(); - // Material Design icons - ImGui.Text("Material Design Icons:"); + ImGui.SeparatorText("Material Design Icons"); ImGui.Text("Navigation: \uF52A \uF52B \uF544 \uF53F \uF540 \uF541 \uF542 \uF543"); ImGui.Text("Actions: \uF8D5 \uF8D6 \uF8D7 \uF8D8 \uF8D9 \uF8DA \uF8DB \uF8DC"); ImGui.Text("Content: \uF1C1 \uF1C2 \uF1C3 \uF1C4 \uF1C5 \uF1C6 \uF1C7 \uF1C8"); - ImGui.Separator(); - // Weather icons - ImGui.Text("Weather Icons:"); + ImGui.SeparatorText("Weather Icons"); ImGui.Text("Basic Weather: \uE30D \uE30E \uE30F \uE310 \uE311 \uE312 \uE313 \uE314"); ImGui.Text("Temperature: \uE315 \uE316 \uE317 \uE318 \uE319 \uE31A \uE31B \uE31C"); ImGui.Text("Wind & Pressure: \uE31D \uE31E \uE31F \uE320 \uE321 \uE322 \uE323 \uE324"); - ImGui.Separator(); - // Devicons - ImGui.Text("Developer Icons (Devicons):"); + ImGui.SeparatorText("Developer Icons (Devicons)"); ImGui.Text("Languages: \uE73C \uE73D \uE73E \uE73F \uE740 \uE741 \uE742 \uE743"); // Various programming languages ImGui.Text("Frameworks: \uE744 \uE745 \uE746 \uE747 \uE748 \uE749 \uE74A \uE74B"); ImGui.Text("Tools: \uE74C \uE74D \uE74E \uE74F \uE750 \uE751 \uE752 \uE753"); - ImGui.Separator(); - // Octicons - ImGui.Text("Octicons (GitHub Icons):"); + ImGui.SeparatorText("Octicons (GitHub Icons)"); ImGui.Text("Version Control: \uF418 \uF419 \uF41A \uF41B \uF41C \uF41D \uF41E \uF41F"); ImGui.Text("Issues & PRs: \uF420 \uF421 \uF422 \uF423 \uF424 \uF425 \uF426 \uF427"); ImGui.Text("Social: \u2665 \u26A1 \uF428 \uF429 \uF42A \uF42B \uF42C \uF42D"); - ImGui.Separator(); - // Font Logos - ImGui.Text("Brand Logos (Font Logos):"); + ImGui.SeparatorText("Brand Logos (Font Logos)"); ImGui.Text("Tech Brands: \uF300 \uF301 \uF302 \uF303 \uF304 \uF305 \uF306 \uF307"); ImGui.Text("More Logos: \uF308 \uF309 \uF30A \uF30B \uF30C \uF30D \uF30E \uF30F"); - ImGui.Separator(); - // Pomicons - ImGui.Text("Pomicons:"); + ImGui.SeparatorText("Pomicons"); ImGui.Text("Small Icons: \uE000 \uE001 \uE002 \uE003 \uE004 \uE005 \uE006 \uE007"); ImGui.Text("More Icons: \uE008 \uE009 \uE00A \uE00B \uE00C \uE00D"); diff --git a/ImGuiAppDemo/Demos/UnicodeDemo.cs b/ImGuiAppDemo/Demos/UnicodeDemo.cs index a659cfd..07f4216 100644 --- a/ImGuiAppDemo/Demos/UnicodeDemo.cs +++ b/ImGuiAppDemo/Demos/UnicodeDemo.cs @@ -24,9 +24,9 @@ public void Render() { ImGui.TextWrapped("Unicode and Emoji Support (Enabled by Default)"); ImGui.TextWrapped("ImGuiApp automatically includes support for Unicode characters and emojis. This feature works with your configured fonts."); - ImGui.Separator(); - ImGui.Text("Basic ASCII: Hello World!"); + ImGui.SeparatorText("Basic ASCII:"); + ImGui.Text("Hello World!"); ImGui.Text("Accented characters: café, naïve, résumé"); ImGui.Text("Mathematical symbols: ∞ ≠ ≈ ≤ ≥ ± × ÷ ∂ ∑ ∏ √ ∫"); ImGui.Text("Currency symbols: $ € £ ¥ ₹ ₿"); @@ -34,8 +34,7 @@ public void Render() ImGui.Text("Geometric shapes: ■ □ ▲ △ ● ○ ◆ ◇ ★ ☆"); ImGui.Text("Miscellaneous symbols: ♠ ♣ ♥ ♦ ☀ ☁ ☂ ☃ ♪ ♫"); - ImGui.Separator(); - ImGui.Text("Full Emoji Range Support (if font supports them):"); + ImGui.SeparatorText("Full Emoji Range Support (if font supports them)"); ImGui.Text("Faces: 😀 😃 😄 😁 😆 😅 😂 🤣 😊 😇 😍 😎 🤓 🧐 🤔 😴"); ImGui.Text("Gestures: 👍 👎 👌 ✌️ 🤞 🤟 🤘 🤙 👈 👉 👆 👇 ☝️ ✋ 🤚 🖐"); ImGui.Text("Objects: 🚀 💻 📱 🎸 🎨 🏆 🌟 💎 ⚡ 🔥 💡 🔧 ⚙️ 🔑 💰"); diff --git a/ImGuiAppDemo/Demos/UtilityDemo.cs b/ImGuiAppDemo/Demos/UtilityDemo.cs index 34dbdc5..9f90c74 100644 --- a/ImGuiAppDemo/Demos/UtilityDemo.cs +++ b/ImGuiAppDemo/Demos/UtilityDemo.cs @@ -6,6 +6,7 @@ namespace ktsu.ImGuiApp.Demo.Demos; using System.Text; using Hexa.NET.ImGui; +using ktsu.ImGuiApp; /// /// Demo for utility tools and debugging features @@ -14,31 +15,12 @@ internal sealed class UtilityDemo : IDemoTab { private string filePath = ""; private string fileContent = ""; - private bool showImGuiDemo; - private bool showStyleEditor; - private bool showMetrics; public string TabName => "Utilities & Tools"; public void Update(float deltaTime) { - // Handle additional windows - if (showImGuiDemo) - { - ImGui.ShowDemoWindow(ref showImGuiDemo); - } - - if (showStyleEditor) - { - ImGui.Begin("Style Editor", ref showStyleEditor); - ImGui.ShowStyleEditor(); - ImGui.End(); - } - - if (showMetrics) - { - ImGui.ShowMetricsWindow(ref showMetrics); - } + // No additional windows managed here - all tools are now centralized in ImGuiApp } public void Render() @@ -46,7 +28,7 @@ public void Render() if (ImGui.BeginTabItem(TabName)) { // File operations - ImGui.Text("File Operations:"); + ImGui.SeparatorText("File Operations:"); ImGui.InputText("File Path", ref filePath, 256); ImGui.SameLine(); if (ImGui.Button("Load") && !string.IsNullOrEmpty(filePath)) @@ -64,14 +46,12 @@ public void Render() if (!string.IsNullOrEmpty(fileContent)) { - ImGui.Text("File Content Preview:"); + ImGui.SeparatorText("File Content Preview:"); ImGui.TextWrapped(fileContent.Length > 500 ? fileContent[..500] + "..." : fileContent); } - ImGui.Separator(); - // System information - ImGui.Text("System Information:"); + ImGui.SeparatorText("System Information:"); unsafe { byte* ptr = ImGui.GetVersion(); @@ -84,23 +64,26 @@ public void Render() } ImGui.Text($"Display Size: {ImGui.GetIO().DisplaySize}"); - ImGui.Separator(); - // Debugging tools - ImGui.Text("Debug Tools:"); + ImGui.SeparatorText("Debug Tools:"); if (ImGui.Button("Show ImGui Demo")) { - showImGuiDemo = true; + ImGuiApp.ShowImGuiDemo(); } ImGui.SameLine(); if (ImGui.Button("Show Style Editor")) { - showStyleEditor = true; + ImGuiApp.ShowImGuiStyleEditor(); } ImGui.SameLine(); if (ImGui.Button("Show Metrics")) { - showMetrics = true; + ImGuiApp.ShowImGuiMetrics(); + } + ImGui.SameLine(); + if (ImGui.Button("Show Performance Monitor")) + { + ImGuiApp.ShowPerformanceMonitor(); } ImGui.EndTabItem(); diff --git a/ImGuiAppDemo/ImGuiAppDemo.cs b/ImGuiAppDemo/ImGuiAppDemo.cs index 09a1502..7da390c 100644 --- a/ImGuiAppDemo/ImGuiAppDemo.cs +++ b/ImGuiAppDemo/ImGuiAppDemo.cs @@ -93,8 +93,7 @@ private static void RenderMainDemoWindow() private static void RenderAboutWindow() { ImGui.Begin("About ImGuiApp Demo", ref showAbout); - ImGui.Text("ImGuiApp Demo Application"); - ImGui.Separator(); + ImGui.SeparatorText("ImGuiApp Demo Application"); ImGui.Text("This demo showcases extensive ImGui.NET features including:"); ImGui.BulletText("Basic and advanced widgets"); ImGui.BulletText("Layout systems (columns, tables, tabs)"); @@ -106,8 +105,7 @@ private static void RenderAboutWindow() ImGui.BulletText("3D manipulation gizmos (ImGuizmo)"); ImGui.BulletText("Node-based editing (ImNodes)"); ImGui.BulletText("Advanced plotting (ImPlot)"); - ImGui.Separator(); - ImGui.Text("Built with:"); + ImGui.SeparatorText("Built with"); ImGui.BulletText("Hexa.NET.ImGui"); ImGui.BulletText("Hexa.NET.ImGuizmo - 3D manipulation gizmos"); ImGui.BulletText("Hexa.NET.ImNodes - Node editor system"); From 5618619c101423562d7382e4d7a7f90b834ce452 Mon Sep 17 00:00:00 2001 From: Matt Edmondson Date: Sat, 2 Aug 2025 14:18:16 +1000 Subject: [PATCH 08/11] Enhance ImNodesDemo with physics simulation and improved node management: Introduced automatic layout with physics-based forces for node positioning, added detailed debug visualization options, and refined node initialization for better spacing and organization. Updated link handling to support more complex connections and improved overall demo functionality. --- ImGuiAppDemo/Demos/ImNodesDemo.cs | 1367 +++++++++++++++++++++++++++-- 1 file changed, 1285 insertions(+), 82 deletions(-) diff --git a/ImGuiAppDemo/Demos/ImNodesDemo.cs b/ImGuiAppDemo/Demos/ImNodesDemo.cs index 9a9a314..6002943 100644 --- a/ImGuiAppDemo/Demos/ImNodesDemo.cs +++ b/ImGuiAppDemo/Demos/ImNodesDemo.cs @@ -17,146 +17,1349 @@ internal sealed class ImNodesDemo : IDemoTab private int nextLinkId = 1; private readonly List nodes = []; private readonly List links = []; + private bool initialPositionsSet; + private bool automaticLayout; + private readonly Dictionary nodeVelocities = []; + private readonly Dictionary nodeForces = []; + private Vector2? physicsCenter; // Cached center point for physics simulation + private bool showDebugVisualization; // Show physics debug info - private sealed record SimpleNode(int Id, Vector2 Position, string Name, List InputPins, List OutputPins); + // Debug information + private List linkFixLog = []; + private string linkFixSummary = ""; + + // Physics parameters + private float repulsionStrength = 5000.0f; + private float attractionStrength = 0.5f; + private float centerForce = 0.12f; + private float idealLinkDistance = 200.0f; + private float damping = 0.8f; + private float maxVelocity = 200.0f; + + private sealed record SimpleNode(int Id, Vector2 Position, string Name, List InputPins, List OutputPins, Vector2 Dimensions); private sealed record SimpleLink(int Id, int InputPinId, int OutputPinId); public string TabName => "ImNodes Editor"; public ImNodesDemo() { - // Initialize demo data for ImNodes - nodes.Add(new SimpleNode(nextNodeId++, new Vector2(50, 50), "Input Node", [], [1, 2])); - nodes.Add(new SimpleNode(nextNodeId++, new Vector2(250, 100), "Process Node", [3], [4])); - nodes.Add(new SimpleNode(nextNodeId++, new Vector2(450, 50), "Output Node", [5, 6], [])); + // Initialize demo data for ImNodes with better spacing + nodes.Add(new SimpleNode(nextNodeId++, new Vector2(100, 150), "Input Node", [], [1, 2], Vector2.Zero)); + nodes.Add(new SimpleNode(nextNodeId++, new Vector2(400, 100), "Process Node A", [3], [4, 5], Vector2.Zero)); + nodes.Add(new SimpleNode(nextNodeId++, new Vector2(400, 250), "Process Node B", [6], [7], Vector2.Zero)); + nodes.Add(new SimpleNode(nextNodeId++, new Vector2(700, 175), "Output Node", [8, 9], [], Vector2.Zero)); - // Create some demo links - links.Add(new SimpleLink(nextLinkId++, 1, 3)); // Connect Input to Process - links.Add(new SimpleLink(nextLinkId++, 4, 5)); // Connect Process to Output + // Create some demo links showing a more complex flow + links.Add(new SimpleLink(nextLinkId++, 1, 3)); // Input to Process A + links.Add(new SimpleLink(nextLinkId++, 2, 6)); // Input to Process B + links.Add(new SimpleLink(nextLinkId++, 4, 8)); // Process A to Output + links.Add(new SimpleLink(nextLinkId++, 7, 9)); // Process B to Output + + // Update nextNodeId to account for all the pin IDs we used + nextNodeId = 10; } public void Update(float deltaTime) { - // No updates needed for ImNodes demo + if (automaticLayout && nodes.Count > 0) + { + // If we just enabled automatic layout, reset positioning flags + if (initialPositionsSet) + { + initialPositionsSet = false; + } + UpdatePhysicsSimulation(deltaTime); + } + else if (!automaticLayout) + { + // Reset physics center when automatic layout is disabled + physicsCenter = null; + } } - public void Render() + private void UpdatePhysicsSimulation(float deltaTime) { - if (ImGui.BeginTabItem(TabName)) + // Initialize forces and velocities for new nodes + foreach (SimpleNode node in nodes) + { + if (!nodeForces.ContainsKey(node.Id)) + { + nodeForces[node.Id] = Vector2.Zero; + nodeVelocities[node.Id] = Vector2.Zero; + } + } + + // Calculate all forces + CalculateForces(); + + // Apply forces and update positions + ApplyForces(deltaTime); + } + + private void CalculateForces() + { + // Reset all forces + foreach (int nodeId in nodeForces.Keys.ToList()) { - ImGui.TextWrapped("ImNodes provides a node editor with support for nodes, pins, and connections."); - ImGui.Separator(); + nodeForces[nodeId] = Vector2.Zero; + } - // Node editor controls - if (ImGui.Button("Add Node")) + // Node repulsion forces (nodes push each other away) + for (int i = 0; i < nodes.Count; i++) + { + for (int j = i + 1; j < nodes.Count; j++) { - Vector2 mousePos = ImGui.GetMousePos(); - Vector2 canvasPos = ImGui.GetCursorScreenPos(); - Vector2 nodePos = mousePos - canvasPos + new Vector2(0, 50); // Offset for controls + SimpleNode nodeA = nodes[i]; + SimpleNode nodeB = nodes[j]; + + // Use node centers for physics calculations + Vector2 centerA = nodeA.Position + (nodeA.Dimensions * 0.5f); + Vector2 centerB = nodeB.Position + (nodeB.Dimensions * 0.5f); + Vector2 direction = centerA - centerB; + float distance = direction.Length(); - nodes.Add(new SimpleNode( - nextNodeId++, - nodePos, - $"Node {nodes.Count + 1}", - [nextNodeId, nextNodeId + 1], // Input pins - [nextNodeId + 2, nextNodeId + 3] // Output pins - )); - nextNodeId += 4; // Reserve IDs for pins + if (distance > 0) + { + // Repulsion force decreases with distance + float force = repulsionStrength / ((distance * distance) + 1.0f); + Vector2 forceVector = Vector2.Normalize(direction) * force; + + nodeForces[nodeA.Id] += forceVector; + nodeForces[nodeB.Id] -= forceVector; + } } + } - ImGui.SameLine(); - if (ImGui.Button("Clear All")) + // Link attraction forces (connected nodes pull toward each other) + foreach (SimpleLink link in links) + { + SimpleNode? startNode = GetNodeByOutputPin(link.OutputPinId); + SimpleNode? endNode = GetNodeByInputPin(link.InputPinId); + + if (startNode != null && endNode != null) { - nodes.Clear(); - links.Clear(); - nextNodeId = 1; - nextLinkId = 1; + // Use node centers for physics calculations + Vector2 startCenter = startNode.Position + (startNode.Dimensions * 0.5f); + Vector2 endCenter = endNode.Position + (endNode.Dimensions * 0.5f); + Vector2 direction = endCenter - startCenter; + float distance = direction.Length(); + + if (distance > 0) + { + // Attraction force - stronger for longer links + float force = (distance - idealLinkDistance) * attractionStrength; + Vector2 forceVector = Vector2.Normalize(direction) * force; + + nodeForces[startNode.Id] += forceVector; + nodeForces[endNode.Id] -= forceVector; + } } + } - ImGui.Separator(); + // Center attraction (pull all nodes toward the canvas origin) + // Initialize physics center if not set - always use canvas origin (0,0) + if (!physicsCenter.HasValue) + { + physicsCenter = Vector2.Zero; // Canvas origin (0,0) + } - // Node editor - ImNodes.BeginNodeEditor(); + // Use the physics center (canvas origin) + Vector2 editorCenter = physicsCenter.Value; + foreach (SimpleNode node in nodes) + { + // Use node center for physics calculations + Vector2 nodeCenter = node.Position + (node.Dimensions * 0.5f); + Vector2 toCenter = editorCenter - nodeCenter; + float distance = toCenter.Length(); + if (distance > 10.0f) // Small deadzone to prevent jittering at center + { + // Centering force that increases with distance from center + float force = distance * centerForce; + nodeForces[node.Id] += Vector2.Normalize(toCenter) * force; + } + } + } - // Render nodes - for (int i = 0; i < nodes.Count; i++) + private void ApplyForces(float deltaTime) + { + + for (int i = 0; i < nodes.Count; i++) + { + SimpleNode node = nodes[i]; + Vector2 force = nodeForces[node.Id]; + + // Update velocity (F = ma, assuming mass = 1) + nodeVelocities[node.Id] += force * deltaTime; + nodeVelocities[node.Id] *= damping; // Apply damping + + // Limit velocity + Vector2 velocity = nodeVelocities[node.Id]; + if (velocity.Length() > maxVelocity) { - SimpleNode node = nodes[i]; - ImNodes.BeginNode(node.Id); + nodeVelocities[node.Id] = Vector2.Normalize(velocity) * maxVelocity; + } + + // Update position + Vector2 newPosition = node.Position + (nodeVelocities[node.Id] * deltaTime); + + // Create updated node and replace in list + nodes[i] = node with { Position = newPosition }; + + // Update ImNodes position in real-time + ImNodes.SetNodeEditorSpacePos(node.Id, newPosition); + } + } + + private SimpleNode? GetNodeByOutputPin(int pinId) => nodes.FirstOrDefault(n => n.OutputPins.Contains(pinId)); + + private SimpleNode? GetNodeByInputPin(int pinId) => nodes.FirstOrDefault(n => n.InputPins.Contains(pinId)); + + private void RenderDebugInformation() + { + ImGui.SeparatorText("Debug Information:"); + + // Get canvas panning once and reuse it throughout debug info + Vector2 canvasPanning = ImNodes.EditorContextGetPanning(); + + RenderGeneralDebugInfo(); + RenderCanvasDebugInfo(canvasPanning); + RenderNodeLayoutDebugInfo(canvasPanning); - // Node title - ImNodes.BeginNodeTitleBar(); - ImGui.TextUnformatted(node.Name); - ImNodes.EndNodeTitleBar(); + if (automaticLayout) + { + RenderPhysicsDebugInfo(); + } + else + { + RenderBasicNodeDebugInfo(); + } + } + + private void RenderGeneralDebugInfo() + { + ImGui.Text($"Total Nodes: {nodes.Count}"); + ImGui.Text($"Total Links: {links.Count}"); + } + + private static void RenderCanvasDebugInfo(Vector2 canvasPanning) + { + // Canvas panning info (flip Y for intuitive display) + Vector2 displayPanning = new(canvasPanning.X, -canvasPanning.Y); + ImGui.Text($"Origin Offset: ({displayPanning.X:F1}, {displayPanning.Y:F1})"); + ImGui.TextDisabled("(Where origin is relative to center of view)"); + + // Explain what the panning values mean + if (canvasPanning.X == 0.0f && canvasPanning.Y == 0.0f) + { + ImGui.TextColored(new Vector4(0.0f, 1.0f, 0.0f, 1.0f), "✓ Origin at center - (0,0) marker should be visible"); + } + else + { + string direction = GetDirectionString(canvasPanning); + ImGui.TextColored(new Vector4(1.0f, 1.0f, 0.0f, 1.0f), $"Origin is {direction} from center"); + } + } + + private static string GetDirectionString(Vector2 canvasPanning) + { + string direction = ""; + if (canvasPanning.X > 0) + { + direction += "right "; + } + else if (canvasPanning.X < 0) + { + direction += "left "; + } + + if (canvasPanning.Y > 0) + { + direction += "down"; + } + else if (canvasPanning.Y < 0) + { + direction += "up"; + } + + return direction.Trim(); + } + + private void RenderNodeLayoutDebugInfo(Vector2 canvasPanning) + { + if (nodes.Count == 0) + { + return; + } + + // Calculate accurate bounding box using cached node dimensions + SimpleNode firstNode = nodes[0]; + Vector2 firstNodePos = firstNode.Position; + Vector2 firstNodeDims = firstNode.Dimensions; + + Vector2 minPos = firstNodePos; + Vector2 maxPos = firstNodePos + firstNodeDims; + + // Area-weighted center of mass calculation + Vector2 weightedCenterSum = Vector2.Zero; + float totalArea = 0.0f; + + foreach (SimpleNode node in nodes) + { + Vector2 nodePos = node.Position; + Vector2 nodeDims = node.Dimensions; + + // Update bounding box to include full node rectangle + minPos.X = Math.Min(minPos.X, nodePos.X); + minPos.Y = Math.Min(minPos.Y, nodePos.Y); + maxPos.X = Math.Max(maxPos.X, nodePos.X + nodeDims.X); + maxPos.Y = Math.Max(maxPos.Y, nodePos.Y + nodeDims.Y); + + // Area-weighted center of mass + Vector2 nodeCenter = nodePos + (nodeDims * 0.5f); + float nodeArea = nodeDims.X * nodeDims.Y; + weightedCenterSum += nodeCenter * nodeArea; + totalArea += nodeArea; + } + + Vector2 centerOfMass = totalArea > 0 ? weightedCenterSum / totalArea : Vector2.Zero; + + Vector2 boundingSize = maxPos - minPos; + ImGui.Text($"Bounding Box: {boundingSize.X:F1} × {boundingSize.Y:F1} (including node dimensions)"); + Vector2 displayCenterOfMass = new(centerOfMass.X, -centerOfMass.Y); + ImGui.Text($"Center of Mass: ({displayCenterOfMass.X:F1}, {displayCenterOfMass.Y:F1}) (area-weighted)"); + + // Show distances from current view center to key points + float distanceToOrigin = canvasPanning.Length(); + Vector2 centerOffset = centerOfMass - (-canvasPanning); // Center relative to view center + float distanceToCenter = centerOffset.Length(); + + ImGui.Text($"Distance to Origin: {distanceToOrigin:F1}px"); + ImGui.Text($"Distance to Center: {distanceToCenter:F1}px"); + } + + private void RenderPhysicsDebugInfo() + { + // Physics center info + if (physicsCenter.HasValue) + { + Vector2 center = physicsCenter.Value; + Vector2 displayPhysicsCenter = new(center.X, -center.Y); + ImGui.Text($"Physics Center: ({displayPhysicsCenter.X:F1}, {displayPhysicsCenter.Y:F1})"); + } + else + { + ImGui.Text("Physics Center: Not set"); + } + + RenderNodePhysicsData(); + RenderPhysicsLinkDistances(); + } + + private void RenderNodePhysicsData() + { + ImGui.SeparatorText("Node Physics Data:"); + + foreach (SimpleNode node in nodes) + { + ImGui.PushID(node.Id); - // Input pins - for (int j = 0; j < node.InputPins.Count; j++) + if (ImGui.TreeNode($"Node {node.Id}: {node.Name}")) + { + Vector2 displayNodePos = new(node.Position.X, -node.Position.Y); + ImGui.Text($"Position: ({displayNodePos.X:F1}, {displayNodePos.Y:F1})"); + + if (nodeForces.TryGetValue(node.Id, out Vector2 force)) + { + float forceMagnitude = force.Length(); + Vector2 displayForce = new(force.X, -force.Y); + ImGui.Text($"Force: ({displayForce.X:F2}, {displayForce.Y:F2}) | Mag: {forceMagnitude:F2}"); + } + + if (nodeVelocities.TryGetValue(node.Id, out Vector2 velocity)) + { + float velocityMagnitude = velocity.Length(); + Vector2 displayVelocity = new(velocity.X, -velocity.Y); + ImGui.Text($"Velocity: ({displayVelocity.X:F2}, {displayVelocity.Y:F2}) | Mag: {velocityMagnitude:F2}"); + } + + ImGui.TreePop(); + } + + ImGui.PopID(); + } + } + + private void RenderPhysicsLinkDistances() + { + ImGui.SeparatorText("Link Distances:"); + ImGui.Text($"Total Links: {links.Count}"); + + if (links.Count == 0) + { + ImGui.TextColored(new Vector4(1.0f, 0.7f, 0.0f, 1.0f), "No links found - try creating connections between nodes"); + return; + } + + foreach (SimpleLink link in links) + { + SimpleNode? startNode = GetNodeByOutputPin(link.OutputPinId); + SimpleNode? endNode = GetNodeByInputPin(link.InputPinId); + + if (startNode != null && endNode != null) + { + float distance = (endNode.Position - startNode.Position).Length(); + Vector4 color = distance > idealLinkDistance + ? new Vector4(1.0f, 0.3f, 0.3f, 1.0f) // Red if too far + : new Vector4(0.3f, 1.0f, 0.3f, 1.0f); // Green if close enough + + ImGui.TextColored(color, $"Link {link.Id}: {distance:F1}px (ideal: {idealLinkDistance:F0}px)"); + } + else + { + ImGui.TextColored(new Vector4(1.0f, 0.3f, 0.3f, 1.0f), $"Link {link.Id}: ERROR - Missing nodes (Out:{link.OutputPinId} → In:{link.InputPinId})"); + } + } + } + + private void RenderBasicNodeDebugInfo() + { + // Basic node positions (when physics is not active) + if (nodes.Count > 0) + { + ImGui.SeparatorText("Node Positions:"); + + foreach (SimpleNode node in nodes) + { + Vector2 displayNodePos = new(node.Position.X, -node.Position.Y); + ImGui.Text($"Node {node.Id} ({node.Name}): ({displayNodePos.X:F1}, {displayNodePos.Y:F1})"); + } + } + + RenderBasicLinkDistances(); + } + + private void RenderBasicLinkDistances() + { + ImGui.SeparatorText("Link Distances:"); + ImGui.Text($"Total Links: {links.Count}"); + + // Show link fix results if available + if (!string.IsNullOrEmpty(linkFixSummary)) + { + ImGui.SeparatorText("Link Fix Results:"); + ImGui.TextColored(new Vector4(0.0f, 1.0f, 0.0f, 1.0f), linkFixSummary); + + if (linkFixLog.Count > 0) + { + if (ImGui.CollapsingHeader("Fix Details")) { - int pinId = node.InputPins[j]; - ImNodes.BeginInputAttribute(pinId); - ImGui.Text($"In {j + 1}"); - ImNodes.EndInputAttribute(); + foreach (string logEntry in linkFixLog) + { + ImGui.Text(logEntry); + } } + } + } - // Node content - ImGui.Text($"Node ID: {node.Id}"); + // Debug: Show all node pin configurations + ImGui.SeparatorText("Node Pin Debug:"); + foreach (SimpleNode node in nodes) + { + string inputPins = string.Join(",", node.InputPins); + string outputPins = string.Join(",", node.OutputPins); + ImGui.Text($"Node {node.Id} ({node.Name}): In=[{inputPins}] Out=[{outputPins}]"); + } + + if (links.Count == 0) + { + ImGui.TextColored(new Vector4(1.0f, 0.7f, 0.0f, 1.0f), "No links found - try creating connections between nodes"); + return; + } + + foreach (SimpleLink link in links) + { + SimpleNode? startNode = GetNodeByOutputPin(link.OutputPinId); + SimpleNode? endNode = GetNodeByInputPin(link.InputPinId); + + if (startNode != null && endNode != null) + { + float distance = (endNode.Position - startNode.Position).Length(); + ImGui.Text($"Link {link.Id}: {distance:F1}px"); + } + else + { + ImGui.TextColored(new Vector4(1.0f, 0.3f, 0.3f, 1.0f), $"Link {link.Id}: ERROR - Missing nodes (Out:{link.OutputPinId} → In:{link.InputPinId})"); + + // Debug: Show which nodes contain these pins + SimpleNode? nodeWithOutput = nodes.FirstOrDefault(n => n.OutputPins.Contains(link.OutputPinId) || n.InputPins.Contains(link.OutputPinId)); + SimpleNode? nodeWithInput = nodes.FirstOrDefault(n => n.InputPins.Contains(link.InputPinId) || n.OutputPins.Contains(link.InputPinId)); + + if (nodeWithOutput != null) + { + bool isOutput = nodeWithOutput.OutputPins.Contains(link.OutputPinId); + string pinType = isOutput ? "OUTPUT" : "INPUT"; + ImGui.Text($" Pin {link.OutputPinId} found in Node {nodeWithOutput.Id} as {pinType}"); + } + else + { + ImGui.Text($" Pin {link.OutputPinId} not found in any node"); + } - // Output pins - for (int j = 0; j < node.OutputPins.Count; j++) + if (nodeWithInput != null) + { + bool isInput = nodeWithInput.InputPins.Contains(link.InputPinId); + string pinType = isInput ? "INPUT" : "OUTPUT"; + ImGui.Text($" Pin {link.InputPinId} found in Node {nodeWithInput.Id} as {pinType}"); + } + else { - int pinId = node.OutputPins[j]; - ImNodes.BeginOutputAttribute(pinId); - ImGui.Indent(40); - ImGui.Text($"Out {j + 1}"); - ImNodes.EndOutputAttribute(); + ImGui.Text($" Pin {link.InputPinId} not found in any node"); } + } + } + } - ImNodes.EndNode(); + private void RenderAllDebugOverlays(Vector2 editorAreaPos, Vector2 editorAreaSize) + { + // Get window draw list for screen space drawing + ImDrawListPtr drawList = ImGui.GetWindowDrawList(); + + // Helper function to convert grid space coordinates to screen space + // For node-relative positions, use reference-based approach + // For absolute world positions, use direct mathematical transformation + Vector2 GridSpaceToScreenSpace(Vector2 gridPos, bool isAbsoluteWorldPosition = false) + { + if (isAbsoluteWorldPosition) + { + // For absolute world positions like origin (0,0) + // Transform directly using ImNodes coordinate system: add panning, not subtract + Vector2 panning = ImNodes.EditorContextGetPanning(); + Vector2 editorCenter = editorAreaPos + (editorAreaSize * 0.5f); + Vector2 screenPos = editorCenter + gridPos + panning; + return screenPos; } + else if (nodes.Count > 0) + { + // For positions relative to nodes (like bounding box, center of mass) + // Use the first node as a reference to ensure exact coordinate matching + SimpleNode referenceNode = nodes[0]; + Vector2 referenceGridPos = referenceNode.Position; + Vector2 referenceScreenPos = ImNodes.GetNodeScreenSpacePos(referenceNode.Id); + + // Calculate the offset from the reference node in grid space + Vector2 offset = gridPos - referenceGridPos; - // Render links - foreach (SimpleLink link in links) + // Apply the same offset in screen space + return referenceScreenPos + offset; + } + else { - ImNodes.Link(link.Id, link.InputPinId, link.OutputPinId); + // Fallback for when no nodes exist + Vector2 panning = ImNodes.EditorContextGetPanning(); + Vector2 editorCenter = editorAreaPos + (editorAreaSize * 0.5f); + Vector2 screenPos = editorCenter + gridPos + panning; + return screenPos; } + } - ImNodes.EndNodeEditor(); + // Colors + uint forceColor = ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 0.5f, 0.0f, 0.8f)); // Orange + uint velocityColor = ImGui.ColorConvertFloat4ToU32(new Vector4(0.0f, 1.0f, 0.5f, 0.8f)); // Green + uint centerColor = ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 0.0f, 1.0f, 0.8f)); // Magenta + uint repulsionColor = ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 0.0f, 0.0f, 0.3f)); // Red + uint originColor = ImGui.ColorConvertFloat4ToU32(new Vector4(0.0f, 0.8f, 1.0f, 1.0f)); // Cyan + uint boundingBoxColor = ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 0.0f, 0.6f)); // Yellow + uint centerOfMassColor = ImGui.ColorConvertFloat4ToU32(new Vector4(0.0f, 1.0f, 1.0f, 0.9f)); // Cyan - // Handle new links - bool isLinkCreated; - int startPin = 0; - int endPin = 0; + // Draw canvas origin (0,0) marker + Vector2 originScreen = GridSpaceToScreenSpace(new Vector2(0.0f, 0.0f), isAbsoluteWorldPosition: true); + drawList.AddLine(originScreen + new Vector2(-50, 0), originScreen + new Vector2(50, 0), originColor, 4.0f); + drawList.AddLine(originScreen + new Vector2(0, -50), originScreen + new Vector2(0, 50), originColor, 4.0f); + drawList.AddCircle(originScreen, 15.0f, originColor, 16, 3.0f); + drawList.AddCircle(originScreen, 25.0f, originColor, 16, 2.0f); + drawList.AddCircleFilled(originScreen, 5.0f, originColor); + drawList.AddText(originScreen + new Vector2(30, -15), originColor, "ORIGIN (0,0)"); - unsafe + // Physics-specific debug elements (only when physics is active) + if (automaticLayout) + { + // Draw physics center + if (physicsCenter.HasValue) { - isLinkCreated = ImNodes.IsLinkCreated(&startPin, &endPin); + Vector2 centerScreen = GridSpaceToScreenSpace(physicsCenter.Value, isAbsoluteWorldPosition: false); + drawList.AddCircleFilled(centerScreen, 8.0f, centerColor); + drawList.AddText(centerScreen + new Vector2(10, -5), centerColor, "Physics Center"); + } + + // Draw forces and velocities for each node + foreach (SimpleNode node in nodes) + { + // Draw from node center for accurate physics visualization + Vector2 nodeCenter = node.Position + (node.Dimensions * 0.5f); + Vector2 nodeCenterScreen = GridSpaceToScreenSpace(nodeCenter); + + // Draw force vector (scaled for visibility) + if (nodeForces.TryGetValue(node.Id, out Vector2 force)) + { + Vector2 forceEndScreen = GridSpaceToScreenSpace(nodeCenter + (force * 0.01f)); // Scale down for visibility + if (force.Length() > 0.1f) // Only draw if significant + { + drawList.AddLine(nodeCenterScreen, forceEndScreen, forceColor, 2.0f); + drawList.AddCircleFilled(forceEndScreen, 3.0f, forceColor); + } + } + + // Draw velocity vector (scaled for visibility) + if (nodeVelocities.TryGetValue(node.Id, out Vector2 velocity)) + { + Vector2 velocityEndScreen = GridSpaceToScreenSpace(nodeCenter + (velocity * 0.1f)); // Scale down for visibility + if (velocity.Length() > 0.1f) // Only draw if significant + { + drawList.AddLine(nodeCenterScreen, velocityEndScreen, velocityColor, 2.0f); + drawList.AddCircleFilled(velocityEndScreen, 3.0f, velocityColor); + } + } + + // Draw repulsion zones (faint circles) + drawList.AddCircle(nodeCenterScreen, 100.0f, repulsionColor, 32, 1.0f); } + } + + // Draw bounding box and center of mass for all nodes + if (nodes.Count > 0) + { + // Calculate accurate bounding box using cached node dimensions and area-weighted center of mass + SimpleNode firstNode = nodes[0]; + Vector2 firstNodePos = firstNode.Position; + Vector2 firstNodeDims = firstNode.Dimensions; + + // Initialize bounding box with first node's full rectangle + Vector2 minPosGrid = firstNodePos; + Vector2 maxPosGrid = firstNodePos + firstNodeDims; - if (isLinkCreated) + // For area-weighted center of mass calculation + Vector2 weightedCenterSum = Vector2.Zero; + float totalArea = 0.0f; + + // Calculate accurate bounding box and area-weighted center of mass + foreach (SimpleNode node in nodes) { - links.Add(new SimpleLink(nextLinkId++, startPin, endPin)); + Vector2 nodePos = node.Position; + Vector2 nodeDims = node.Dimensions; + + // Update bounding box to include full node rectangle + minPosGrid.X = Math.Min(minPosGrid.X, nodePos.X); + minPosGrid.Y = Math.Min(minPosGrid.Y, nodePos.Y); + maxPosGrid.X = Math.Max(maxPosGrid.X, nodePos.X + nodeDims.X); + maxPosGrid.Y = Math.Max(maxPosGrid.Y, nodePos.Y + nodeDims.Y); + + // Calculate area-weighted center of mass (center of each node weighted by its area) + Vector2 nodeCenter = nodePos + (nodeDims * 0.5f); + float nodeArea = nodeDims.X * nodeDims.Y; + weightedCenterSum += nodeCenter * nodeArea; + totalArea += nodeArea; } - // Handle link destruction - bool isLinkDestroyed; - int linkId = 0; - int safeLinkId = 0; + // Convert to screen coordinates + Vector2 minPosScreen = GridSpaceToScreenSpace(minPosGrid); + Vector2 maxPosScreen = GridSpaceToScreenSpace(maxPosGrid); + + // Calculate final area-weighted center of mass + Vector2 centerOfMassGrid = totalArea > 0 ? weightedCenterSum / totalArea : Vector2.Zero; + Vector2 centerOfMassScreen = GridSpaceToScreenSpace(centerOfMassGrid); - unsafe + // Draw accurate bounding box + drawList.AddRect(minPosScreen, maxPosScreen, boundingBoxColor, 0.0f, ImDrawFlags.None, 2.0f); + drawList.AddText(minPosScreen + new Vector2(5, -20), boundingBoxColor, "Bounding Box"); + + // Draw area-weighted center of mass + drawList.AddCircleFilled(centerOfMassScreen, 6.0f, centerOfMassColor); + drawList.AddCircle(centerOfMassScreen, 12.0f, centerOfMassColor, 16, 2.0f); + drawList.AddText(centerOfMassScreen + new Vector2(15, -8), centerOfMassColor, "Center of Mass"); + } + + // Draw link connections and distances (always when debug visualization is on) + foreach (SimpleLink link in links) + { + SimpleNode? startNode = GetNodeByOutputPin(link.OutputPinId); + SimpleNode? endNode = GetNodeByInputPin(link.InputPinId); + + if (startNode != null && endNode != null) { - isLinkDestroyed = ImNodes.IsLinkDestroyed(&linkId); - safeLinkId = linkId; // Store the link ID safely + Vector2 startScreen = GridSpaceToScreenSpace(startNode.Position); + Vector2 endScreen = GridSpaceToScreenSpace(endNode.Position); + float distance = (endNode.Position - startNode.Position).Length(); + + // Color based on distance vs ideal (only when physics is enabled) + Vector4 color; + if (automaticLayout) + { + color = distance > idealLinkDistance + ? new Vector4(1.0f, 0.0f, 0.0f, 0.5f) // Red if too far + : new Vector4(0.0f, 1.0f, 0.0f, 0.5f); // Green if close enough + } + else + { + // Use neutral blue color when physics is off + color = new Vector4(0.3f, 0.7f, 1.0f, 0.6f); // Light blue + } + + uint lineColor = ImGui.ColorConvertFloat4ToU32(color); + drawList.AddLine(startScreen, endScreen, lineColor, 1.0f); + + // Draw distance text at midpoint + Vector2 midpointScreen = (startScreen + endScreen) * 0.5f; + string distanceText = automaticLayout ? $"{distance:F0}px" : $"{distance:F0}px"; + drawList.AddText(midpointScreen, lineColor, distanceText); } + } - if (isLinkDestroyed) + // Draw compass (always visible when debug is on and not at origin) + Vector2 currentPanning = ImNodes.EditorContextGetPanning(); + if (currentPanning.X != 0.0f || currentPanning.Y != 0.0f) + { + Vector2 directionToOrigin = currentPanning; + float distance = directionToOrigin.Length(); + + if (distance > 10.0f) // Only show if we're not too close to origin { - links.RemoveAll(link => link.Id == safeLinkId); + Vector2 normalizedDirection = Vector2.Normalize(directionToOrigin); + + // Position compass in the center of the editor area in screen space + Vector2 compassCenter = editorAreaPos + (editorAreaSize * 0.5f); + + // Colors + uint compassBgColor = ImGui.ColorConvertFloat4ToU32(new Vector4(0.2f, 0.2f, 0.2f, 0.8f)); + uint compassArrowColor = ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 0.3f, 0.3f, 1.0f)); // Red arrow + + // Draw compass background circle + drawList.AddCircleFilled(compassCenter, 35.0f, compassBgColor); + drawList.AddCircle(compassCenter, 35.0f, originColor, 32, 2.0f); + + // Draw compass arrow pointing to origin + Vector2 arrowEnd = compassCenter + (normalizedDirection * 25.0f); + Vector2 arrowLeft = compassCenter + (new Vector2(-normalizedDirection.Y, normalizedDirection.X) * 8.0f) + (normalizedDirection * 15.0f); + Vector2 arrowRight = compassCenter + (new Vector2(normalizedDirection.Y, -normalizedDirection.X) * 8.0f) + (normalizedDirection * 15.0f); + + // Draw arrow shaft + drawList.AddLine(compassCenter, arrowEnd, compassArrowColor, 3.0f); + // Draw arrow head + drawList.AddTriangleFilled(arrowEnd, arrowLeft, arrowRight, compassArrowColor); + + // Add distance text + drawList.AddText(compassCenter + new Vector2(-15, 40), originColor, $"{distance:F0}px"); + drawList.AddText(compassCenter + new Vector2(-20, -50), originColor, "TO ORIGIN"); } + } + } - // Display node count - ImGui.Text($"Nodes: {nodes.Count}, Links: {links.Count}"); + public void Render() + { + if (ImGui.BeginTabItem(TabName)) + { + RenderHeader(); + RenderControls(); + RenderNodeEditor(); + HandleLinkEvents(); ImGui.EndTabItem(); } } + + private static void RenderHeader() + { + ImGui.TextWrapped("ImNodes provides a node editor with support for nodes, pins, and connections."); + ImGui.Separator(); + } + + private void RenderControls() + { + if (ImGui.Button("Add Node")) + { + // Place new nodes in a grid pattern to avoid overlap + int nodeIndex = nodes.Count; + int row = nodeIndex / 3; + int col = nodeIndex % 3; + Vector2 nodePos = new(150 + (col * 250), 100 + (row * 150)); + + nodes.Add(new SimpleNode( + nextNodeId++, + nodePos, + $"Custom Node {nodeIndex + 1}", + [nextNodeId, nextNodeId + 1], // Input pins + [nextNodeId + 2, nextNodeId + 3], // Output pins + Vector2.Zero // Dimensions will be updated after rendering +)); + nextNodeId += 4; // Reserve IDs for pins + } + + ImGui.SameLine(); + if (ImGui.Button("Clear All")) + { + ClearAllNodes(); + } + + ImGui.SameLine(); + if (ImGui.Button("Reset Demo")) + { + ResetToDemo(); + } + + ImGui.SameLine(); + if (ImGui.Button("Fix Links")) + { + FixCorruptedLinks(); + } + if (ImGui.IsItemHovered()) + { + ImGui.SetTooltip("Fix any corrupted links with incorrect pin mappings"); + } + + if (!string.IsNullOrEmpty(linkFixSummary)) + { + ImGui.SameLine(); + if (ImGui.Button("Clear Log")) + { + linkFixLog.Clear(); + linkFixSummary = ""; + } + } + } + + private void ClearAllNodes() + { + nodes.Clear(); + links.Clear(); + nodeVelocities.Clear(); + nodeForces.Clear(); + physicsCenter = null; + nextNodeId = 1; + nextLinkId = 1; + initialPositionsSet = false; + } + + private void ResetToDemo() + { + ClearAllNodes(); + + // Recreate the demo layout + nodes.Add(new SimpleNode(nextNodeId++, new Vector2(100, 150), "Input Node", [], [1, 2], Vector2.Zero)); + nodes.Add(new SimpleNode(nextNodeId++, new Vector2(400, 100), "Process Node A", [3], [4, 5], Vector2.Zero)); + nodes.Add(new SimpleNode(nextNodeId++, new Vector2(400, 250), "Process Node B", [6], [7], Vector2.Zero)); + nodes.Add(new SimpleNode(nextNodeId++, new Vector2(700, 175), "Output Node", [8, 9], [], Vector2.Zero)); + + links.Add(new SimpleLink(nextLinkId++, 1, 3)); // Input to Process A + links.Add(new SimpleLink(nextLinkId++, 2, 6)); // Input to Process B + links.Add(new SimpleLink(nextLinkId++, 4, 8)); // Process A to Output + links.Add(new SimpleLink(nextLinkId++, 7, 9)); // Process B to Output + + nextNodeId = 10; + } + + private void FixCorruptedLinks() + { + List fixedLinks = []; + int originalCount = links.Count; + int fixedCount = 0; + int correctCount = 0; + List fixLog = []; + + foreach (SimpleLink link in links) + { + fixLog.Add($"Processing Link {link.Id}: Out:{link.OutputPinId} → In:{link.InputPinId}"); + + // Find nodes containing these pins + SimpleNode? nodeWithOutputPin = nodes.FirstOrDefault(n => n.OutputPins.Contains(link.OutputPinId) || n.InputPins.Contains(link.OutputPinId)); + SimpleNode? nodeWithInputPin = nodes.FirstOrDefault(n => n.InputPins.Contains(link.InputPinId) || n.OutputPins.Contains(link.InputPinId)); + + fixLog.Add($" nodeWithOutputPin: {nodeWithOutputPin?.Name} (ID: {nodeWithOutputPin?.Id})"); + fixLog.Add($" nodeWithInputPin: {nodeWithInputPin?.Name} (ID: {nodeWithInputPin?.Id})"); + + if (nodeWithOutputPin != null && nodeWithInputPin != null) + { + bool outputPinIsActuallyOutput = nodeWithOutputPin.OutputPins.Contains(link.OutputPinId); + bool inputPinIsActuallyInput = nodeWithInputPin.InputPins.Contains(link.InputPinId); + + fixLog.Add($" outputPinIsActuallyOutput: {outputPinIsActuallyOutput}"); + fixLog.Add($" inputPinIsActuallyInput: {inputPinIsActuallyInput}"); + + if (outputPinIsActuallyOutput && inputPinIsActuallyInput) + { + // Link is correct + fixLog.Add($" Link {link.Id} is already correct"); + fixedLinks.Add(link); + correctCount++; + } + else + { + // Try to fix the link by finding the correct pin mappings + int actualOutputPin = -1; + int actualInputPin = -1; + + // Check if pins are swapped + bool canSwap = nodeWithOutputPin.InputPins.Contains(link.OutputPinId) && nodeWithInputPin.OutputPins.Contains(link.InputPinId); + fixLog.Add($" Can swap pins: {canSwap}"); + + if (canSwap) + { + // Pins are swapped + actualOutputPin = link.InputPinId; + actualInputPin = link.OutputPinId; + fixedCount++; + fixLog.Add($" Original: Out:{link.OutputPinId} → In:{link.InputPinId}"); + fixLog.Add($" Fixed to: Out:{actualOutputPin} → In:{actualInputPin}"); + } + + if (actualOutputPin != -1 && actualInputPin != -1) + { + // Create corrected link + fixedLinks.Add(new SimpleLink(link.Id, actualOutputPin, actualInputPin)); + } + else + { + fixLog.Add($" Link {link.Id} could not be fixed"); + } + } + } + else + { + fixLog.Add($" Link {link.Id} - nodes not found, removing link"); + } + } + + // Replace the links collection with fixed links + links.Clear(); + links.AddRange(fixedLinks); + + // Add final verification + fixLog.Add(""); + fixLog.Add("Final links after fix:"); + foreach (SimpleLink finalLink in links) + { + fixLog.Add($" Link {finalLink.Id}: Out:{finalLink.OutputPinId} → In:{finalLink.InputPinId}"); + } + + // Store the fix results for display + linkFixLog = fixLog; + linkFixSummary = $"Link Fix Results: {originalCount} original, {correctCount} already correct, {fixedCount} fixed, {fixedLinks.Count} total after fix"; + } + + private void RenderNodeEditor() + { + // Create horizontal layout: editor on left, parameters on right + ImGui.BeginTable("NodeEditorLayout", 2, ImGuiTableFlags.Resizable | ImGuiTableFlags.BordersInnerV); + ImGui.TableSetupColumn("Editor", ImGuiTableColumnFlags.WidthStretch, 0.75f); + ImGui.TableSetupColumn("Parameters", ImGuiTableColumnFlags.WidthStretch, 0.25f); + + ImGui.TableNextRow(); + ImGui.TableNextColumn(); + + // Store editor area position and size for compass rendering + Vector2 editorAreaPos = ImGui.GetCursorScreenPos(); + Vector2 editorAreaSize = ImGui.GetContentRegionAvail(); + + // Node editor + ImNodes.BeginNodeEditor(); + + // Set initial positions only once (skip if automatic layout is active) + if (!initialPositionsSet && nodes.Count > 0 && !automaticLayout) + { + foreach (SimpleNode node in nodes) + { + ImNodes.SetNodeEditorSpacePos(node.Id, node.Position); + } + initialPositionsSet = true; + } + + RenderNodes(); + RenderLinks(); + + // Sync node positions and dimensions from ImNodes back to our data structure + // This ensures manual node dragging works properly and keeps dimensions cached + for (int i = 0; i < nodes.Count; i++) + { + SimpleNode node = nodes[i]; + Vector2 currentImNodesPos = ImNodes.GetNodeEditorSpacePos(node.Id); + Vector2 currentImNodesDims = ImNodes.GetNodeDimensions(node.Id); + + // Update if position has changed or dimensions are not cached yet + bool positionChanged = Vector2.Distance(node.Position, currentImNodesPos) > 0.1f; + bool dimensionsNotCached = node.Dimensions == Vector2.Zero; + bool dimensionsChanged = Vector2.Distance(node.Dimensions, currentImNodesDims) > 0.1f; + + if (positionChanged || dimensionsNotCached || dimensionsChanged) + { + nodes[i] = node with { Position = currentImNodesPos, Dimensions = currentImNodesDims }; + } + } + + ImNodes.EndNodeEditor(); + + // Move to the parameters column + ImGui.TableNextColumn(); + RenderParametersPanel(); + + ImGui.EndTable(); + + // Draw all debug visualization after everything else so it appears on top + if (showDebugVisualization) + { + RenderAllDebugOverlays(editorAreaPos, editorAreaSize); + } + } + + private void RenderNodes() + { + // Render nodes + for (int i = 0; i < nodes.Count; i++) + { + SimpleNode node = nodes[i]; + ImNodes.BeginNode(node.Id); + + // Node title + ImNodes.BeginNodeTitleBar(); + ImGui.TextUnformatted(node.Name); + ImNodes.EndNodeTitleBar(); + + // Input pins + for (int j = 0; j < node.InputPins.Count; j++) + { + int pinId = node.InputPins[j]; + ImNodes.BeginInputAttribute(pinId); + ImGui.Text($"In {j + 1}"); + ImNodes.EndInputAttribute(); + } + + // Node content + ImGui.Text($"Node ID: {node.Id}"); + + // Output pins + for (int j = 0; j < node.OutputPins.Count; j++) + { + int pinId = node.OutputPins[j]; + ImNodes.BeginOutputAttribute(pinId); + ImGui.Indent(40); + ImGui.Text($"Out {j + 1}"); + ImNodes.EndOutputAttribute(); + } + + ImNodes.EndNode(); + } + } + + private void RenderLinks() + { + // Render links + foreach (SimpleLink link in links) + { + ImNodes.Link(link.Id, link.InputPinId, link.OutputPinId); + } + } + + private void RenderParametersPanel() + { + // Debug Visualization (always available) + ImGui.SeparatorText("Debug Visualization:"); + ImGui.Checkbox("Show Debug Visualization", ref showDebugVisualization); + if (ImGui.IsItemHovered()) + { + ImGui.SetTooltip("Show visual overlays: canvas origin, node bounding box, center of mass, and physics data (if enabled)"); + } + + // Show debug information when enabled + if (showDebugVisualization) + { + RenderDebugInformation(); + } + + ImGui.SeparatorText("Physics Layout:"); + + // Physics layout toggle + ImGui.Checkbox("Automatic Layout", ref automaticLayout); + ImGui.SameLine(); + ImGui.TextDisabled("(?)"); + if (ImGui.IsItemHovered()) + { + ImGui.SetTooltip("Physics simulation: node repulsion, link attraction, and center gravity"); + } + + if (automaticLayout) + { + ImGui.SameLine(); + ImGui.TextColored(new Vector4(0.0f, 1.0f, 0.0f, 1.0f), "● ACTIVE"); + } + + // Physics parameters panel + if (automaticLayout) + { + ImGui.SeparatorText("Physics Parameters:"); + + RenderPhysicsInputs(); + RenderPhysicsInfo(); + } + else + { + ImGui.TextDisabled("Enable Automatic Layout above"); + ImGui.TextDisabled("to show physics parameters"); + } + + // Canvas Navigation Controls + ImGui.SeparatorText("Canvas Navigation:"); + + if (ImGui.Button("Reset Canvas to Origin")) + { + // Reset canvas panning to origin (0,0) + ImNodes.EditorContextResetPanning(new Vector2(0.0f, 0.0f)); + } + if (ImGui.IsItemHovered()) + { + ImGui.SetTooltip("Pan the canvas so origin (0,0) is visible"); + } + + if (ImGui.Button("Center Canvas on Nodes")) + { + // Calculate area-weighted center of mass of all nodes using cached dimensions + if (nodes.Count > 0) + { + Vector2 weightedCenterSum = Vector2.Zero; + float totalArea = 0.0f; + + foreach (SimpleNode node in nodes) + { + // Use cached position and dimensions for efficient calculation + Vector2 nodePos = node.Position; + Vector2 nodeDims = node.Dimensions; + + // Calculate area-weighted center (center of each node weighted by its area) + Vector2 nodeCenter = nodePos + (nodeDims * 0.5f); + float nodeArea = nodeDims.X * nodeDims.Y; + weightedCenterSum += nodeCenter * nodeArea; + totalArea += nodeArea; + } + + Vector2 centerOfMass = totalArea > 0 ? weightedCenterSum / totalArea : Vector2.Zero; + + // Pan canvas to center the area-weighted center of mass + ImNodes.EditorContextResetPanning(centerOfMass); + } + } + if (ImGui.IsItemHovered()) + { + ImGui.SetTooltip("Pan the canvas to center all nodes in view"); + } + } + + private void RenderPhysicsInputs() + { + ImGui.InputFloat("Repulsion Strength", ref repulsionStrength, 100.0f, 1000.0f, "%.0f"); + if (ImGui.IsItemHovered()) + { + if (showDebugVisualization) + { + ImGui.SetTooltip("REPULSION FORCE IMPLEMENTATION:\n" + + "• Formula: force = repulsionStrength / ((distance²) + 1)\n" + + "• Applied between ALL node pairs (N² complexity)\n" + + "• Prevents nodes from overlapping\n" + + "• Higher values = stronger push-apart force\n" + + "• Visible as: Red circles around nodes\n" + + "• Default: 5000 (good balance for most layouts)"); + } + else + { + ImGui.SetTooltip("How strongly nodes push each other away"); + } + } + + ImGui.InputFloat("Attraction Strength", ref attractionStrength, 0.01f, 0.1f, "%.3f"); + if (ImGui.IsItemHovered()) + { + if (showDebugVisualization) + { + ImGui.SetTooltip("ATTRACTION FORCE IMPLEMENTATION:\n" + + "• Formula: force = (distance - idealLinkDistance) × attractionStrength\n" + + "• Applied only between CONNECTED nodes\n" + + "• Pulls connected nodes toward ideal distance\n" + + "• Spring-like behavior: stronger when farther from ideal\n" + + "• Visible as: Green/Red lines between connected nodes\n" + + "• Default: 0.5 (moderate spring strength)"); + } + else + { + ImGui.SetTooltip("How strongly connected nodes pull toward each other"); + } + } + + ImGui.InputFloat("Center Force", ref centerForce, 0.001f, 0.01f, "%.4f"); + if (ImGui.IsItemHovered()) + { + if (showDebugVisualization) + { + ImGui.SetTooltip("CENTER GRAVITY IMPLEMENTATION:\n" + + "• Formula: force = distance × centerForce\n" + + "• Applied to ALL nodes toward physics center\n" + + "• Prevents nodes from drifting to edges\n" + + "• Linear increase with distance from center\n" + + "• Physics center = canvas origin (0,0)\n" + + "• Visible as: Magenta circle at origin\n" + + "• Default: 0.12 (gentle centering force)"); + } + else + { + ImGui.SetTooltip("How strongly nodes are pulled toward the center"); + } + } + + ImGui.InputFloat("Ideal Link Distance", ref idealLinkDistance, 10.0f, 50.0f, "%.0f px"); + if (ImGui.IsItemHovered()) + { + if (showDebugVisualization) + { + ImGui.SetTooltip("IDEAL DISTANCE IMPLEMENTATION:\n" + + "• Target distance for connected nodes\n" + + "• Used in attraction force calculation\n" + + "• Links shorter than ideal: nodes pull apart\n" + + "• Links longer than ideal: nodes pull together\n" + + "• Visible as: Distance labels on connections\n" + + "• Green lines = close to ideal, Red lines = too far\n" + + "• Default: 200px (good for typical node sizes)"); + } + else + { + ImGui.SetTooltip("Preferred distance between connected nodes"); + } + } + + ImGui.InputFloat("Damping", ref damping, 0.01f, 0.1f, "%.3f"); + if (ImGui.IsItemHovered()) + { + if (showDebugVisualization) + { + ImGui.SetTooltip("VELOCITY DAMPING IMPLEMENTATION:\n" + + "• Formula: velocity = velocity × damping (each frame)\n" + + "• Applied to ALL nodes every simulation step\n" + + "• Simulates friction/air resistance\n" + + "• Higher values = nodes slow down faster\n" + + "• Prevents oscillation and ensures convergence\n" + + "• Visible as: Green arrows (velocity vectors)\n" + + "• Range: 0.1-0.95 (0.8 = good stability)"); + } + else + { + ImGui.SetTooltip("How quickly nodes slow down (higher = more stable)"); + } + } + + ImGui.InputFloat("Max Velocity", ref maxVelocity, 10.0f, 100.0f, "%.0f px/s"); + if (ImGui.IsItemHovered()) + { + if (showDebugVisualization) + { + ImGui.SetTooltip("VELOCITY LIMITING IMPLEMENTATION:\n" + + "• Applied after force integration each frame\n" + + "• Prevents explosive behavior with high forces\n" + + "• Clamps velocity magnitude to this maximum\n" + + "• Maintains velocity direction, only limits speed\n" + + "• Essential for simulation stability\n" + + "• Visible as: Length of green velocity arrows\n" + + "• Default: 200px/s (smooth but responsive)"); + } + else + { + ImGui.SetTooltip("Maximum speed limit for node movement"); + } + } + + if (ImGui.Button("Reset Parameters")) + { + repulsionStrength = 5000.0f; + attractionStrength = 0.5f; + centerForce = 0.12f; + idealLinkDistance = 200.0f; + damping = 0.8f; + maxVelocity = 200.0f; + } + if (ImGui.IsItemHovered()) + { + ImGui.SetTooltip("Restore default values"); + } + } + + private void RenderPhysicsInfo() + { + // Display current physics info + ImGui.SeparatorText("Physics Info:"); + ImGui.Text($"Active Nodes: {nodes.Count}"); + if (physicsCenter.HasValue) + { + Vector2 center = physicsCenter.Value; + ImGui.Text($"Center: ({center.X:F0}, {center.Y:F0})"); + } + + // Show total system energy (sum of all velocities) + float totalEnergy = 0.0f; + foreach (KeyValuePair kvp in nodeVelocities) + { + totalEnergy += kvp.Value.LengthSquared(); + } + ImGui.Text($"System Energy: {totalEnergy:F2}"); + } + + private void HandleLinkEvents() + { + // Handle new links + bool isLinkCreated; + int startPin = 0; + int endPin = 0; + + unsafe + { + isLinkCreated = ImNodes.IsLinkCreated(&startPin, &endPin); + } + + if (isLinkCreated) + { + // Copy to local variables for use in lambdas + int startPinId = startPin; + int endPinId = endPin; + + // Determine which pin is output and which is input + SimpleNode? nodeWithStartPin = nodes.FirstOrDefault(n => n.OutputPins.Contains(startPinId) || n.InputPins.Contains(startPinId)); + SimpleNode? nodeWithEndPin = nodes.FirstOrDefault(n => n.OutputPins.Contains(endPinId) || n.InputPins.Contains(endPinId)); + + if (nodeWithStartPin != null && nodeWithEndPin != null) + { + bool startIsOutput = nodeWithStartPin.OutputPins.Contains(startPinId); + bool endIsOutput = nodeWithEndPin.OutputPins.Contains(endPinId); + + // Create link with correct pin order: (linkId, outputPinId, inputPinId) + if (startIsOutput && !endIsOutput) + { + // Start pin is output, end pin is input - correct order + links.Add(new SimpleLink(nextLinkId++, startPinId, endPinId)); + } + else if (!startIsOutput && endIsOutput) + { + // Start pin is input, end pin is output - reverse order + links.Add(new SimpleLink(nextLinkId++, endPinId, startPinId)); + } + // If both are same type (output-output or input-input), don't create the link + } + } + + // Handle link destruction + bool isLinkDestroyed; + int linkId = 0; + int safeLinkId = 0; + + unsafe + { + isLinkDestroyed = ImNodes.IsLinkDestroyed(&linkId); + safeLinkId = linkId; // Store the link ID safely + } + + if (isLinkDestroyed) + { + links.RemoveAll(link => link.Id == safeLinkId); + } + } } From 4782ad698467ce7e1b0e9c274347d140bbfd4685 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 15 Nov 2025 00:02:25 +0000 Subject: [PATCH 09/11] Initial plan From 531877be29601e929490610d0f708733ed2336b6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 15 Nov 2025 00:18:12 +0000 Subject: [PATCH 10/11] Integrate hexa-extras branch - merge and remove old structure Co-authored-by: matt-edmondson <19528727+matt-edmondson@users.noreply.github.com> --- .github/copilot-instructions.md | 177 -- ImGui.App/CompatibilitySuppressions.xml | 724 -------- ImGui.App/DESCRIPTION.md | 1 - ImGui.App/DebugLogger.cs | 32 - ImGui.App/FontAppearance.cs | 71 - ImGui.App/FontHelper.cs | 355 ---- ImGui.App/ForceDpiAware.cs | 761 -------- ImGui.App/GdiPlusHelper.cs | 47 - ImGui.App/ImGui.App.csproj | 46 - ImGui.App/ImGuiApp.cs | 1645 ----------------- ImGui.App/ImGuiAppConfig.cs | 129 -- ImGui.App/ImGuiAppPerformanceSettings.cs | 48 - ImGui.App/ImGuiAppTextureInfo.cs | 38 - ImGui.App/ImGuiAppWindowState.cs | 29 - ImGui.App/ImGuiController/GLWrapper.cs | 130 -- ImGui.App/ImGuiController/IGL.cs | 92 - ImGui.App/ImGuiController/IOpenGLFactory.cs | 19 - ImGui.App/ImGuiController/IOpenGLProvider.cs | 19 - ImGui.App/ImGuiController/ImGuiController.cs | 945 ---------- ImGui.App/ImGuiController/ImGuiFontConfig.cs | 92 - ImGui.App/ImGuiController/OpenGLProvider.cs | 44 - ImGui.App/ImGuiController/Shader.cs | 181 -- ImGui.App/ImGuiController/Texture.cs | 150 -- ImGui.App/ImGuiController/Util.cs | 26 - .../ImGuiController/WindowOpenGLFactory.cs | 21 - ImGui.App/NativeMethods.cs | 177 -- ImGui.App/PidFrameLimiter.cs | 645 ------- ImGui.App/README.md | 573 ------ ImGui.App/Resources/NerdFont.ttf | Bin 2468976 -> 0 bytes ImGui.App/Resources/NotoEmoji.ttf | Bin 890808 -> 0 bytes ImGui.App/Resources/Resources.Designer.cs | 96 - ImGui.App/Resources/Resources.resx | 127 -- ImGui.App/UIScaler.cs | 77 - ImGui.Popups/CompatibilitySuppressions.xml | 52 - ImGui.Popups/DESCRIPTION.md | 1 - ImGui.Popups/FilesystemBrowser.cs | 393 ---- ImGui.Popups/ImGui.Popups.csproj | 18 - ImGui.Popups/Input.cs | 144 -- ImGui.Popups/MessageOK.cs | 38 - ImGui.Popups/Modal.cs | 106 -- ImGui.Popups/Prompt.cs | 139 -- ImGui.Popups/README.md | 251 --- ImGui.Popups/SearchableList.cs | 162 -- ImGui.Styler/Alignment.cs | 60 - ImGui.Styler/Button.cs | 41 - ImGui.Styler/Color.cs | 437 ----- ImGui.Styler/ColorExtensions.cs | 329 ---- ImGui.Styler/CompatibilitySuppressions.xml | 52 - ImGui.Styler/DESCRIPTION.md | 1 - ImGui.Styler/ImGui.Styler.csproj | 17 - ImGui.Styler/Indent.cs | 60 - ImGui.Styler/README.md | 350 ---- ImGui.Styler/ScopedColor.cs | 39 - ImGui.Styler/ScopedStyleVar.cs | 39 - ImGui.Styler/ScopedTextColor.cs | 14 - ImGui.Styler/ScopedTheme.cs | 60 - ImGui.Styler/ScopedThemeColor.cs | 61 - ImGui.Styler/Text.cs | 79 - ImGui.Styler/Theme.cs | 1304 ------------- ImGui.Styler/ThemeBrowser.cs | 176 -- ImGui.Styler/ThemeCard.cs | 375 ---- ImGui.Widgets/ColorIndicator.cs | 36 - ImGui.Widgets/Combo.cs | 80 - ImGui.Widgets/CompatibilitySuppressions.xml | 52 - ImGui.Widgets/DESCRIPTION.md | 1 - ImGui.Widgets/DividerContainer.cs | 390 ---- ImGui.Widgets/DividerZone.cs | 96 - ImGui.Widgets/Grid.cs | 471 ----- ImGui.Widgets/Icon.cs | 302 --- ImGui.Widgets/ImGui.Widgets.csproj | 14 - ImGui.Widgets/Image.cs | 158 -- ImGui.Widgets/Knob.cs | 726 -------- ImGui.Widgets/README.md | 265 --- ImGui.Widgets/ScopedDisable.cs | 28 - ImGui.Widgets/ScopedId.cs | 41 - ImGui.Widgets/SearchBox.cs | 164 -- ImGui.Widgets/TabPanel.cs | 548 ------ ImGui.Widgets/Text.cs | 111 -- ImGui.Widgets/Tree.cs | 88 - ImGui.sln | 148 -- examples/ImGuiAppDemo/ImGuiAppDemo.cs | 964 ---------- examples/ImGuiAppDemo/ImGuiAppDemo.csproj | 38 - .../Properties/Resources.Designer.cs | 73 - .../ImGuiAppDemo/Properties/Resources.resx | 124 -- .../Properties/launchSettings.json | 8 - examples/ImGuiAppDemo/icon.png | 3 - examples/ImGuiAppDemo/res/CARDCHAR.TTF | Bin 39136 -> 0 bytes examples/ImGuiAppDemo/res/CARDCHAR.TXT | 1 - examples/ImGuiPopupsDemo/ImGuiPopupsDemo.cs | 489 ----- .../ImGuiPopupsDemo/ImGuiPopupsDemo.csproj | 15 - examples/ImGuiStylerDemo/ImGuiStylerDemo.cs | 972 ---------- .../ImGuiStylerDemo/ImGuiStylerDemo.csproj | 16 - examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.cs | 834 --------- .../ImGuiWidgetsDemo/ImGuiWidgetsDemo.csproj | 15 - examples/ImGuiWidgetsDemo/ktsu.png | 3 - .../ImGui.App.Tests/AdvancedCoverageTests.cs | 284 --- .../ErrorHandlingAndEdgeCaseTests.cs | 365 ---- tests/ImGui.App.Tests/FontAndUITests.cs | 135 -- tests/ImGui.App.Tests/ForceDpiAwareTests.cs | 32 - tests/ImGui.App.Tests/ImGui.App.Tests.csproj | 24 - tests/ImGui.App.Tests/ImGuiAppCoreTests.cs | 222 --- .../ImGuiAppDataStructureTests.cs | 221 --- tests/ImGui.App.Tests/ImGuiAppTests.cs | 516 ------ .../ImGuiAppWindowManagementTests.cs | 620 ------- .../ImGuiControllerComponentTests.cs | 257 --- tests/ImGui.App.Tests/MockGL.cs | 117 -- tests/ImGui.App.Tests/PidFrameLimiterTests.cs | 565 ------ .../ImGui.App.Tests/PlatformSpecificTests.cs | 168 -- tests/ImGui.App.Tests/TestGL.cs | 104 -- tests/ImGui.App.Tests/TestHelpers.cs | 156 -- tests/ImGui.App.Tests/TestOpenGLProvider.cs | 34 - 111 files changed, 23409 deletions(-) delete mode 100644 .github/copilot-instructions.md delete mode 100644 ImGui.App/CompatibilitySuppressions.xml delete mode 100644 ImGui.App/DESCRIPTION.md delete mode 100644 ImGui.App/DebugLogger.cs delete mode 100644 ImGui.App/FontAppearance.cs delete mode 100644 ImGui.App/FontHelper.cs delete mode 100644 ImGui.App/ForceDpiAware.cs delete mode 100644 ImGui.App/GdiPlusHelper.cs delete mode 100644 ImGui.App/ImGui.App.csproj delete mode 100644 ImGui.App/ImGuiApp.cs delete mode 100644 ImGui.App/ImGuiAppConfig.cs delete mode 100644 ImGui.App/ImGuiAppPerformanceSettings.cs delete mode 100644 ImGui.App/ImGuiAppTextureInfo.cs delete mode 100644 ImGui.App/ImGuiAppWindowState.cs delete mode 100644 ImGui.App/ImGuiController/GLWrapper.cs delete mode 100644 ImGui.App/ImGuiController/IGL.cs delete mode 100644 ImGui.App/ImGuiController/IOpenGLFactory.cs delete mode 100644 ImGui.App/ImGuiController/IOpenGLProvider.cs delete mode 100644 ImGui.App/ImGuiController/ImGuiController.cs delete mode 100644 ImGui.App/ImGuiController/ImGuiFontConfig.cs delete mode 100644 ImGui.App/ImGuiController/OpenGLProvider.cs delete mode 100644 ImGui.App/ImGuiController/Shader.cs delete mode 100644 ImGui.App/ImGuiController/Texture.cs delete mode 100644 ImGui.App/ImGuiController/Util.cs delete mode 100644 ImGui.App/ImGuiController/WindowOpenGLFactory.cs delete mode 100644 ImGui.App/NativeMethods.cs delete mode 100644 ImGui.App/PidFrameLimiter.cs delete mode 100644 ImGui.App/README.md delete mode 100644 ImGui.App/Resources/NerdFont.ttf delete mode 100644 ImGui.App/Resources/NotoEmoji.ttf delete mode 100644 ImGui.App/Resources/Resources.Designer.cs delete mode 100644 ImGui.App/Resources/Resources.resx delete mode 100644 ImGui.App/UIScaler.cs delete mode 100644 ImGui.Popups/CompatibilitySuppressions.xml delete mode 100644 ImGui.Popups/DESCRIPTION.md delete mode 100644 ImGui.Popups/FilesystemBrowser.cs delete mode 100644 ImGui.Popups/ImGui.Popups.csproj delete mode 100644 ImGui.Popups/Input.cs delete mode 100644 ImGui.Popups/MessageOK.cs delete mode 100644 ImGui.Popups/Modal.cs delete mode 100644 ImGui.Popups/Prompt.cs delete mode 100644 ImGui.Popups/README.md delete mode 100644 ImGui.Popups/SearchableList.cs delete mode 100644 ImGui.Styler/Alignment.cs delete mode 100644 ImGui.Styler/Button.cs delete mode 100644 ImGui.Styler/Color.cs delete mode 100644 ImGui.Styler/ColorExtensions.cs delete mode 100644 ImGui.Styler/CompatibilitySuppressions.xml delete mode 100644 ImGui.Styler/DESCRIPTION.md delete mode 100644 ImGui.Styler/ImGui.Styler.csproj delete mode 100644 ImGui.Styler/Indent.cs delete mode 100644 ImGui.Styler/README.md delete mode 100644 ImGui.Styler/ScopedColor.cs delete mode 100644 ImGui.Styler/ScopedStyleVar.cs delete mode 100644 ImGui.Styler/ScopedTextColor.cs delete mode 100644 ImGui.Styler/ScopedTheme.cs delete mode 100644 ImGui.Styler/ScopedThemeColor.cs delete mode 100644 ImGui.Styler/Text.cs delete mode 100644 ImGui.Styler/Theme.cs delete mode 100644 ImGui.Styler/ThemeBrowser.cs delete mode 100644 ImGui.Styler/ThemeCard.cs delete mode 100644 ImGui.Widgets/ColorIndicator.cs delete mode 100644 ImGui.Widgets/Combo.cs delete mode 100644 ImGui.Widgets/CompatibilitySuppressions.xml delete mode 100644 ImGui.Widgets/DESCRIPTION.md delete mode 100644 ImGui.Widgets/DividerContainer.cs delete mode 100644 ImGui.Widgets/DividerZone.cs delete mode 100644 ImGui.Widgets/Grid.cs delete mode 100644 ImGui.Widgets/Icon.cs delete mode 100644 ImGui.Widgets/ImGui.Widgets.csproj delete mode 100644 ImGui.Widgets/Image.cs delete mode 100644 ImGui.Widgets/Knob.cs delete mode 100644 ImGui.Widgets/README.md delete mode 100644 ImGui.Widgets/ScopedDisable.cs delete mode 100644 ImGui.Widgets/ScopedId.cs delete mode 100644 ImGui.Widgets/SearchBox.cs delete mode 100644 ImGui.Widgets/TabPanel.cs delete mode 100644 ImGui.Widgets/Text.cs delete mode 100644 ImGui.Widgets/Tree.cs delete mode 100644 ImGui.sln delete mode 100644 examples/ImGuiAppDemo/ImGuiAppDemo.cs delete mode 100644 examples/ImGuiAppDemo/ImGuiAppDemo.csproj delete mode 100644 examples/ImGuiAppDemo/Properties/Resources.Designer.cs delete mode 100644 examples/ImGuiAppDemo/Properties/Resources.resx delete mode 100644 examples/ImGuiAppDemo/Properties/launchSettings.json delete mode 100644 examples/ImGuiAppDemo/icon.png delete mode 100644 examples/ImGuiAppDemo/res/CARDCHAR.TTF delete mode 100644 examples/ImGuiAppDemo/res/CARDCHAR.TXT delete mode 100644 examples/ImGuiPopupsDemo/ImGuiPopupsDemo.cs delete mode 100644 examples/ImGuiPopupsDemo/ImGuiPopupsDemo.csproj delete mode 100644 examples/ImGuiStylerDemo/ImGuiStylerDemo.cs delete mode 100644 examples/ImGuiStylerDemo/ImGuiStylerDemo.csproj delete mode 100644 examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.cs delete mode 100644 examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.csproj delete mode 100644 examples/ImGuiWidgetsDemo/ktsu.png delete mode 100644 tests/ImGui.App.Tests/AdvancedCoverageTests.cs delete mode 100644 tests/ImGui.App.Tests/ErrorHandlingAndEdgeCaseTests.cs delete mode 100644 tests/ImGui.App.Tests/FontAndUITests.cs delete mode 100644 tests/ImGui.App.Tests/ForceDpiAwareTests.cs delete mode 100644 tests/ImGui.App.Tests/ImGui.App.Tests.csproj delete mode 100644 tests/ImGui.App.Tests/ImGuiAppCoreTests.cs delete mode 100644 tests/ImGui.App.Tests/ImGuiAppDataStructureTests.cs delete mode 100644 tests/ImGui.App.Tests/ImGuiAppTests.cs delete mode 100644 tests/ImGui.App.Tests/ImGuiAppWindowManagementTests.cs delete mode 100644 tests/ImGui.App.Tests/ImGuiControllerComponentTests.cs delete mode 100644 tests/ImGui.App.Tests/MockGL.cs delete mode 100644 tests/ImGui.App.Tests/PidFrameLimiterTests.cs delete mode 100644 tests/ImGui.App.Tests/PlatformSpecificTests.cs delete mode 100644 tests/ImGui.App.Tests/TestGL.cs delete mode 100644 tests/ImGui.App.Tests/TestHelpers.cs delete mode 100644 tests/ImGui.App.Tests/TestOpenGLProvider.cs diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md deleted file mode 100644 index b2c8fb7..0000000 --- a/.github/copilot-instructions.md +++ /dev/null @@ -1,177 +0,0 @@ -# Copilot Instructions for ktsu ImGui Suite - -## Project Overview - -This is a comprehensive C#/.NET suite of libraries for building ImGui applications. The project consists of four main libraries: -- **ImGui.App** - Application foundation and scaffolding -- **ImGui.Widgets** - Custom UI components and controls -- **ImGui.Popups** - Modal dialogs and popup systems -- **ImGui.Styler** - Theming and styling utilities - -## Technology Stack - -- **.NET 9.0** - Target framework -- **C#** with latest language features -- **Dear ImGui** via Hexa.NET.ImGui bindings -- **Silk.NET** for cross-platform windowing -- **MSTest** for unit testing -- **PowerShell** for build automation (PSBuild.psm1) - -## Code Style and Conventions - -### C# Coding Standards - -Use tabs for indentation in C# files (not spaces). - -Follow these naming conventions: -- PascalCase for types, methods, properties, and public members -- Interfaces must start with `I` prefix -- Do not use `this.` qualifier -- Use language keywords instead of framework types (e.g., `int` not `Int32`) - -Expression preferences: -- Use object and collection initializers -- Use explicit tuple names -- Prefer auto-properties -- Use pattern matching over `is` with cast -- Use switch expressions where appropriate -- No `var` - always use explicit types - -File organization: -- Use file-scoped namespaces -- Place using directives inside namespace -- One class per file - -Code structure: -- Always use braces for control flow statements -- No top-level statements - use traditional program structure -- Use primary constructors when appropriate -- Expression-bodied members only when on single line -- New line before opening braces for all constructs - -### Code Quality Rules - -All analyzer diagnostics are treated as errors. Key rules: -- Validate all public method arguments (CA1062) -- Implement IDisposable correctly (CA1063) -- Avoid catching general exception types (CA1031) -- Use StringComparison explicitly (CA1307) -- Avoid excessive complexity (CA1502) -- All code must pass static analysis - -### File Headers - -All C# source files must include this header: -```csharp -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. -``` - -## Build and Testing - -### Building - -Use the PSBuild pipeline for builds: -```powershell -Import-Module ./scripts/PSBuild.psm1 -``` - -Or use standard .NET commands: -```bash -dotnet restore -dotnet build -``` - -### Testing - -Run tests using: -```bash -dotnet test -``` - -Tests use MSTest framework and are located in the `tests/` directory. - -All code changes should include appropriate unit tests unless there is no existing test infrastructure for that component. - -### CI/CD - -The project uses GitHub Actions with a custom PowerShell build pipeline (`.github/workflows/dotnet.yml`): -- Builds, tests, and releases automatically -- Uses SonarQube for code analysis -- Generates code coverage reports -- Publishes to NuGet -- Runs on Windows - -## Project Structure - -``` -ImGui.App/ - Core application framework -ImGui.Widgets/ - UI widgets and components -ImGui.Popups/ - Modal and popup systems -ImGui.Styler/ - Theme and styling utilities -examples/ - Demo applications -tests/ - Unit tests -scripts/ - Build scripts (PowerShell) -.github/ - GitHub Actions workflows -``` - -## Package Management - -Dependencies are managed centrally via `Directory.Packages.props` for version consistency across all projects. - -Use NuGet for package management: -```bash -dotnet add package -``` - -## Documentation - -Update README.md files when making changes to APIs or adding new features. - -Each library has its own README with: -- Feature documentation -- API examples -- Usage patterns - -## Dependencies and Security - -Before adding new NuGet packages, verify they are secure and well-maintained. - -The project has scheduled security scans via GitHub Actions. - -## Git Workflow - -- Main development happens on `develop` branch -- Releases are made to `main` branch -- Follow conventional commit messages -- All commits must pass CI checks -- CI runs on push to main/develop and on all PRs - -## Common Tasks - -### Adding a new widget -1. Add class to `ImGui.Widgets/` -2. Follow existing widget patterns -3. Add demo usage to `examples/ImGuiWidgetsDemo/` -4. Update `ImGui.Widgets/README.md` -5. Add unit tests if applicable - -### Adding a new theme -1. Add theme definition to `ImGui.Styler/` -2. Follow existing theme structure -3. Test in `examples/ImGuiStylerDemo/` -4. Update theme gallery documentation - -### Modifying application framework -1. Changes to `ImGui.App/` affect all consumers -2. Ensure backward compatibility when possible -3. Update breaking changes in CHANGELOG.md -4. Test with all example applications - -## Notes - -- This is a cross-platform library targeting Windows, macOS, and Linux -- Performance is critical - use efficient patterns -- The project uses Dear ImGui's immediate mode paradigm -- Font and texture management requires careful resource handling diff --git a/ImGui.App/CompatibilitySuppressions.xml b/ImGui.App/CompatibilitySuppressions.xml deleted file mode 100644 index 2d32f4b..0000000 --- a/ImGui.App/CompatibilitySuppressions.xml +++ /dev/null @@ -1,724 +0,0 @@ - - - - - CP0001 - T:System.Diagnostics.CodeAnalysis.ExperimentalAttribute - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0001 - T:System.Runtime.CompilerServices.CollectionBuilderAttribute - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0001 - T:System.Diagnostics.CodeAnalysis.FeatureGuardAttribute - lib/net8.0/ktsu.ImGui.App.dll - lib/net9.0/ktsu.ImGui.App.dll - - - CP0001 - T:System.Diagnostics.CodeAnalysis.FeatureSwitchDefinitionAttribute - lib/net8.0/ktsu.ImGui.App.dll - lib/net9.0/ktsu.ImGui.App.dll - - - CP0001 - T:System.Diagnostics.DebuggerDisableUserUnhandledExceptionsAttribute - lib/net8.0/ktsu.ImGui.App.dll - lib/net9.0/ktsu.ImGui.App.dll - - - CP0001 - T:System.Runtime.CompilerServices.OverloadResolutionPriorityAttribute - lib/net8.0/ktsu.ImGui.App.dll - lib/net9.0/ktsu.ImGui.App.dll - - - CP0001 - T:System.Runtime.CompilerServices.ParamCollectionAttribute - lib/net8.0/ktsu.ImGui.App.dll - lib/net9.0/ktsu.ImGui.App.dll - - - CP0001 - T:System.Threading.Lock - lib/net8.0/ktsu.ImGui.App.dll - lib/net9.0/ktsu.ImGui.App.dll - - - CP0008 - T:ktsu.ImGui.App.ImGuiController.TextureCoordinate - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0008 - T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0008 - T:System.IO.UnixFileMode - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0014 - M:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.get_UrlFormat:[T:System.Runtime.CompilerServices.CompilerGeneratedAttribute] - lib/net8.0/ktsu.ImGui.App.dll - lib/net9.0/ktsu.ImGui.App.dll - - - CP0014 - M:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.set_UrlFormat(System.String):[T:System.Runtime.CompilerServices.CompilerGeneratedAttribute] - lib/net8.0/ktsu.ImGui.App.dll - lib/net9.0/ktsu.ImGui.App.dll - - - CP0016 - F:System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute.CallConvs:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - F:System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute.EntryPoint:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.FontHelper.AddCustomFont(Hexa.NET.ImGui.ImGuiIOPtr,System.Byte[],System.Single,System.UInt32*,System.Boolean)$1:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiApp.TryGetTexture(ktsu.Semantics.Paths.AbsoluteFilePath,ktsu.ImGui.App.ImGuiAppTextureInfo@)$1:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiApp.TryGetTexture(System.String,ktsu.ImGui.App.ImGuiAppTextureInfo@)$1:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiAppConfig.get_FrameWrapperFactory->System.Func<ktsu.ScopedAction.ScopedAction?>:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiAppConfig.set_FrameWrapperFactory(System.Func{ktsu.ScopedAction.ScopedAction})$0:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiController.GLWrapper.#ctor(Silk.NET.OpenGL.GL):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiController.GLWrapper.get_UnderlyingGL:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiController.ImGuiFontConfig.#ctor(System.String,System.Int32,System.Func{Hexa.NET.ImGui.ImGuiIOPtr,System.IntPtr})$2:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiController.ImGuiFontConfig.Equals(System.Object):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiController.ImGuiFontConfig.get_GetGlyphRange:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiController.IOpenGLProvider.GetGL:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Collections.Generic.KeyValuePair.Create``2(``0,``1)->System.Collections.Generic.KeyValuePair<TKey, TValue>:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Collections.Generic.KeyValuePair.Create``2(``0,``1):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Collections.Generic.KeyValuePair.Create``2(``0,``1)<0>:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Collections.Generic.KeyValuePair.Create``2(``0,``1)<1>:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.#ctor(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes,System.String,System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.#ctor(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes,System.Type):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.#ctor(System.String,System.String,System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.#ctor(System.String,System.Type):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.#ctor(System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute.get_Url:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute.set_Url(System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.get_Url:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.set_Url(System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.StringSyntaxAttribute.#ctor(System.String,System.Object[])$1:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.StringSyntaxAttribute.get_Arguments->object?[]:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.#ctor(System.String,System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.get_Category:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.get_CheckId:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Index.Equals(System.Object):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Index.ToString:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Range.Equals(System.Object):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Range.ToString:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Reflection.NullabilityInfo.get_ElementType:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.ObsoletedOSPlatformAttribute.#ctor(System.String,System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.ObsoletedOSPlatformAttribute.#ctor(System.String,System.String)$1:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.ObsoletedOSPlatformAttribute.#ctor(System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.SupportedOSPlatformAttribute.#ctor(System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.SupportedOSPlatformGuardAttribute.#ctor(System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.TargetPlatformAttribute.#ctor(System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.UnsupportedOSPlatformAttribute.#ctor(System.String,System.String)$1:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.UnsupportedOSPlatformAttribute.get_Message:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.UnsupportedOSPlatformGuardAttribute.#ctor(System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:ktsu.ImGui.App.ImGuiAppConfig.FrameWrapperFactory:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:ktsu.ImGui.App.ImGuiController.GLWrapper.UnderlyingGL:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:ktsu.ImGui.App.ImGuiController.ImGuiFontConfig.GetGlyphRange:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute.Url:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.Url:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:System.Diagnostics.CodeAnalysis.StringSyntaxAttribute.Arguments:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.Category:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.CheckId:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:System.Reflection.NullabilityInfo.ElementType:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:System.Runtime.Versioning.UnsupportedOSPlatformAttribute.Message:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.FontAppearance:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.FontAppearance:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiApp:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiApp:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiAppConfig:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiAppConfig:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiAppTextureInfo:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiAppTextureInfo:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiController.ImGuiFontConfig:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiController.ImGuiFontConfig:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiController.IOpenGLFactory:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiController.OpenGLProvider:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiController.OpenGLProvider:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiController.WindowOpenGLFactory:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiController.WindowOpenGLFactory:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.MemberNotNullAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.MemberNotNullAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.StringSyntaxAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.StringSyntaxAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.UnreachableException:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.UnreachableException:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Reflection.NullabilityInfo:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Reflection.NullabilityInfo:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Reflection.NullabilityInfoContext:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Reflection.NullabilityInfoContext:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.CompilerServices.CallerArgumentExpressionAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.CompilerServices.CallerArgumentExpressionAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.CompilerServices.RequiredMemberAttribute:[T:System.ComponentModel.EditorBrowsableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.Versioning.ObsoletedOSPlatformAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.Versioning.ObsoletedOSPlatformAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.Versioning.OSPlatformAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.Versioning.OSPlatformAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.Versioning.RequiresPreviewFeaturesAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.Versioning.RequiresPreviewFeaturesAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.Versioning.UnsupportedOSPlatformAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.Versioning.UnsupportedOSPlatformAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - \ No newline at end of file diff --git a/ImGui.App/DESCRIPTION.md b/ImGui.App/DESCRIPTION.md deleted file mode 100644 index ad5e398..0000000 --- a/ImGui.App/DESCRIPTION.md +++ /dev/null @@ -1 +0,0 @@ -A comprehensive .NET library that provides complete application scaffolding for Dear ImGui applications, featuring window management, DPI-aware rendering, precision PID-controlled frame limiting with comprehensive auto-tuning, advanced font handling with Unicode/emoji support, texture management, and debug tooling. Built on Silk.NET for cross-platform OpenGL support and Hexa.NET.ImGui for modern Dear ImGui bindings. diff --git a/ImGui.App/DebugLogger.cs b/ImGui.App/DebugLogger.cs deleted file mode 100644 index e6b86c3..0000000 --- a/ImGui.App/DebugLogger.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -using ktsu.Semantics.Paths; -using ktsu.Semantics.Strings; - -/// -/// Simple file logger for debugging crashes -/// -internal static class DebugLogger -{ - internal static AbsoluteDirectoryPath AppDataPath => Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData, Environment.SpecialFolderOption.Create).As(); - internal static RelativeDirectoryPath AppDomain => System.AppDomain.CurrentDomain.FriendlyName.As(); - internal static AbsoluteDirectoryPath DomainAppDataPath => AppDataPath / AppDomain; - internal static AbsoluteFilePath LogFilePath => DomainAppDataPath / "ImGuiApp_Debug.log".As(); - - static DebugLogger() - { - Directory.CreateDirectory(LogFilePath.DirectoryPath); - File.Delete(LogFilePath); - } - - public static void Log(string message) - { - string logEntry = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] {message}"; - File.AppendAllText(LogFilePath, logEntry + Environment.NewLine); - Console.WriteLine(logEntry); - } -} diff --git a/ImGui.App/FontAppearance.cs b/ImGui.App/FontAppearance.cs deleted file mode 100644 index 84c653e..0000000 --- a/ImGui.App/FontAppearance.cs +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -using Hexa.NET.ImGui; - -using ktsu.ScopedAction; - -/// -/// Class responsible for applying fonts in ImGui. -/// -public class FontAppearance : ScopedAction -{ - /// - /// The default font name. - /// - internal const string DefaultFontName = "default"; - - /// - /// The default font point size. - /// - internal const int DefaultFontPointSize = 14; - - /// - /// Initializes a new instance of the class. - /// Applies the specified font appearance to ImGui. - /// - /// The name of the font. - /// The size of the font in points. - /// The size of the font in pixels. - public FontAppearance(string name, int sizePoints, out float sizePixels) - { - // ImGui 1.92.0+ uses dynamic font scaling with PushFont(font, size) - // The font system handles glyph loading and scaling automatically - - ImFontPtr font = ImGuiApp.FindBestFontForAppearance(name, sizePoints, out sizePixels); - ImGui.PushFont(font, sizePixels); - - OnClose = () => ImGuiApp.Invoker.Invoke(() => ImGui.PopFont()); - } - - /// - /// Initializes a new instance of the class. - /// Applies the specified font appearance to ImGui. - /// - /// The name of the font. - /// The size of the font in points. - public FontAppearance(string name, int sizePoints) : this(name, sizePoints, out _) - { - } - - /// - /// Initializes a new instance of the class. - /// Applies the default font appearance to ImGui with the specified size in points. - /// - /// The size of the font in points. - public FontAppearance(int sizePoints) : this(DefaultFontName, sizePoints, out _) - { - } - - /// - /// Initializes a new instance of the class. - /// Applies the specified font appearance to ImGui with the default font size. - /// - /// The name of the font. - public FontAppearance(string name) : this(name, DefaultFontPointSize, out _) - { - } -} diff --git a/ImGui.App/FontHelper.cs b/ImGui.App/FontHelper.cs deleted file mode 100644 index f3153c0..0000000 --- a/ImGui.App/FontHelper.cs +++ /dev/null @@ -1,355 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -using System; -using System.Runtime.InteropServices; -using Hexa.NET.ImGui; - -/// -/// Helper class for configuring ImGui fonts with Unicode and emoji support. -/// Works with user-configured fonts rather than forcing system fonts. -/// -public static class FontHelper -{ - /// - /// Stores GCHandle instances for custom fonts to prevent memory leaks. - /// - internal static readonly List customFontHandles = []; - - /// - /// Stores the extended Unicode glyph ranges to prevent memory deallocation. - /// - internal static ImVector extendedUnicodeRanges; - - /// - /// Stores the emoji glyph ranges to prevent memory deallocation. - /// - internal static ImVector emojiRanges; - - /// - /// Tracks whether the extended Unicode ranges have been initialized. - /// - internal static bool extendedUnicodeRangesInitialized; - - /// - /// Tracks whether the emoji ranges have been initialized. - /// - internal static bool emojiRangesInitialized; - - /// - /// Cleans up all pinned memory handles for custom fonts and glyph ranges. - /// This should be called when shutting down the application. - /// - public static void CleanupCustomFonts() - { - foreach (GCHandle handle in customFontHandles) - { - try - { - if (handle.IsAllocated) - { - handle.Free(); - } - } - catch (InvalidOperationException) - { - // Handle was already freed, ignore - } - } - customFontHandles.Clear(); - - // Reset glyph ranges - CleanupGlyphRanges(); - } - - /// - /// Cleans up the cached glyph ranges and resets initialization flags. - /// This allows the ranges to be rebuilt if needed after cleanup. - /// - public static void CleanupGlyphRanges() - { - extendedUnicodeRangesInitialized = false; - emojiRangesInitialized = false; - // Note: ImVector instances are value types managed by ImGui - // and will be properly cleaned up when reassigned - } - - /// - /// Gets the extended Unicode glyph ranges that ImGuiApp uses for main fonts. - /// Includes ASCII, Latin Extended, symbols, arrows, math, shapes, and Nerd Font icons. - /// Note: Emoji ranges (1F*** blocks) are handled separately to avoid conflicts. - /// - /// The font atlas to use for building ranges. - /// Pointer to the extended Unicode glyph ranges for main fonts. - public static unsafe uint* GetExtendedUnicodeRanges(ImFontAtlasPtr fontAtlasPtr) - { - // Only build ranges once and store them to prevent memory deallocation - if (!extendedUnicodeRangesInitialized) - { - ImFontGlyphRangesBuilderPtr builder = new(ImGui.ImFontGlyphRangesBuilder()); - - // Add default ranges (ASCII) - builder.AddRanges(fontAtlasPtr.GetGlyphRangesDefault()); - - // Add Latin Extended ranges - AddLatinExtendedRanges(builder); - - // Add common Unicode symbol blocks - AddSymbolRanges(builder); - - // Add Nerd Font icon ranges - AddNerdFontRanges(builder); - - // Build the ranges and store them in the static field - extendedUnicodeRanges = new ImVector(); - fixed (ImVector* rangesPtr = &extendedUnicodeRanges) - { - builder.BuildRanges(rangesPtr); - } - extendedUnicodeRangesInitialized = true; - } - - return extendedUnicodeRanges.Data; - } - - /// - /// Adds emoji-specific ranges to the glyph ranges builder. - /// Only includes true emoji ranges (1F*** blocks) to avoid conflicts with main font symbol ranges. - /// - /// The glyph ranges builder to add emoji ranges to. - internal static void AddEmojiRanges(ImFontGlyphRangesBuilderPtr builder) - { - // Variation Selectors (important for emoji presentation vs text presentation) - for (uint c = 0xFE00; c <= 0xFE0F; c++) // Variation Selectors 1-16 - { - builder.AddChar(c); - } - - // Emoji-specific Unicode ranges (1F*** blocks only to avoid main font conflicts) - (uint start, uint end, string description)[] emojiRangeDefinitions = [ - (0x1F300, 0x1F5FF, "Miscellaneous Symbols and Pictographs"), - (0x1F600, 0x1F64F, "Emoticons"), - (0x1F650, 0x1F67F, "Ornamental Dingbats"), - (0x1F680, 0x1F6FF, "Transport and Map Symbols"), - (0x1F700, 0x1F77F, "Alchemical Symbols"), - (0x1F780, 0x1F7FF, "Geometric Shapes Extended"), - (0x1F800, 0x1F8FF, "Supplemental Arrows-C"), - (0x1F900, 0x1F9FF, "Supplemental Symbols and Pictographs"), - (0x1FA00, 0x1FA6F, "Chess Symbols"), - (0x1FA70, 0x1FAFF, "Symbols and Pictographs Extended-A"), - (0x1FB00, 0x1FBFF, "Symbols for Legacy Computing"), - ]; - - foreach ((uint start, uint end, string _) in emojiRangeDefinitions) - { - for (uint c = start; c <= end; c++) - { - builder.AddChar(c); - } - } - } - - /// - /// Gets emoji-specific glyph ranges for loading emoji fonts. - /// Includes only true emoji ranges (1F*** blocks) plus ASCII and variation selectors. - /// - /// Pointer to the emoji glyph ranges. - public static unsafe uint* GetEmojiRanges() - { - // Only build ranges once and store them to prevent memory deallocation - if (!emojiRangesInitialized) - { - ImFontGlyphRangesBuilderPtr builder = new(ImGui.ImFontGlyphRangesBuilder()); - - // Add emoji-specific ranges - AddEmojiRanges(builder); - - // Build the ranges and store them in the static field - emojiRanges = new ImVector(); - fixed (ImVector* rangesPtr = &emojiRanges) - { - builder.BuildRanges(rangesPtr); - } - emojiRangesInitialized = true; - } - - return emojiRanges.Data; - } - - /// - /// Adds Latin Extended character ranges to the glyph ranges builder. - /// Includes Latin Extended-A and Latin Extended-B character blocks. - /// - /// The glyph ranges builder to add Latin Extended ranges to. - internal static void AddLatinExtendedRanges(ImFontGlyphRangesBuilderPtr builder) - { - // Latin Extended-A (U+0100–U+017F) - for (uint c = 0x0100; c <= 0x017F; c++) - { - builder.AddChar(c); - } - // Latin Extended-B (U+0180–U+024F) - for (uint c = 0x0180; c <= 0x024F; c++) - { - builder.AddChar(c); - } - } - - /// - /// Adds common Unicode symbol blocks to the glyph ranges builder. - /// Includes punctuation, currency, mathematical symbols, arrows, and various technical symbols. - /// - /// The glyph ranges builder to add symbol ranges to. - internal static void AddSymbolRanges(ImFontGlyphRangesBuilderPtr builder) - { - // Define symbol ranges to add (avoiding emoji ranges which are handled separately) - (uint start, uint end, string description)[] symbolRanges = [ - (0x2000, 0x206F, "General Punctuation"), - (0x20A0, 0x20CF, "Currency Symbols"), - (0x2100, 0x214F, "Letterlike Symbols"), - (0x2190, 0x21FF, "Arrows"), - (0x2200, 0x22FF, "Mathematical Operators"), - (0x2300, 0x23FF, "Miscellaneous Technical"), - (0x2460, 0x24FF, "Enclosed Alphanumerics"), - (0x2500, 0x257F, "Box Drawing"), - (0x2580, 0x259F, "Block Elements"), - (0x25A0, 0x25FF, "Geometric Shapes"), - (0x2600, 0x26FF, "Miscellaneous Symbols"), // Includes ☀️ ⭐ ❤️ etc. (non-emoji variants) - (0x2700, 0x27BF, "Dingbats") // Includes ✂️ ✈️ ☎️ etc. (non-emoji variants) - ]; - - foreach ((uint start, uint end, string _) in symbolRanges) - { - for (uint c = start; c <= end; c++) - { - builder.AddChar(c); - } - } - } - - /// - /// Adds Nerd Font icon ranges to the glyph ranges builder. - /// Includes Font Awesome, Material Design Icons, Octicons, Weather Icons, and other common icon sets. - /// - /// The glyph ranges builder to add Nerd Font ranges to. - internal static void AddNerdFontRanges(ImFontGlyphRangesBuilderPtr builder) - { - // Define Nerd Font ranges to add - (uint start, uint end, string description)[] nerdFontRanges = [ - // Powerline symbols - (0xE0A0, 0xE0A2, "Powerline symbols"), - (0xE0B0, 0xE0B3, "Powerline symbols"), - // Pomicons - (0xE000, 0xE00D, "Pomicons"), - // Powerline Extra Symbols - (0xE0A3, 0xE0A3, "Powerline Extra"), - (0xE0B4, 0xE0C8, "Powerline Extra"), - (0xE0CA, 0xE0CA, "Powerline Extra"), - (0xE0CC, 0xE0D2, "Powerline Extra"), - (0xE0D4, 0xE0D4, "Powerline Extra"), - // Weather Icons - (0xE300, 0xE3EB, "Weather Icons"), - // Font Awesome Extension - (0xE200, 0xE2A9, "Font Awesome Extension"), - // Font Logos - (0xF300, 0xF313, "Font Logos"), - // Octicons (main range) - (0xF400, 0xF4A8, "Octicons"), - // Font Awesome - (0xF000, 0xF2E0, "Font Awesome"), - // Material Design Icons - (0xF500, 0xFD46, "Material Design Icons"), - // Devicons - (0xE700, 0xE7C5, "Devicons"), - ]; - - foreach ((uint start, uint end, string _) in nerdFontRanges) - { - for (uint c = start; c <= end; c++) - { - builder.AddChar(c); - } - } - - // Add individual Octicon symbols that are outside the main range - uint[] individualOcticons = [0x2665, 0x26A1]; - foreach (uint c in individualOcticons) - { - builder.AddChar(c); - } - } - - /// - /// Adds a custom font with specific glyph ranges to the ImGui font atlas. - /// This allows you to load fonts with exactly the character ranges you need. - /// The font data is pinned in memory and tracked for proper cleanup. - /// Call when shutting down to prevent memory leaks. - /// - /// The ImGui IO pointer. - /// The font data as a byte array. - /// The font size in pixels. - /// The glyph ranges to include, or null for default ASCII. - /// Whether to merge this font with the previously added font. - /// The ImFont pointer for the added font, or null if failed. - public static unsafe ImFontPtr? AddCustomFont(ImGuiIOPtr io, byte[] fontData, float fontSize, uint* glyphRanges = null, bool mergeWithPrevious = false) - { - ArgumentNullException.ThrowIfNull(fontData); - - GCHandle fontHandle = default; - try - { - // Pin the font data in memory - fontHandle = GCHandle.Alloc(fontData, GCHandleType.Pinned); - nint fontPtr = fontHandle.AddrOfPinnedObject(); - - // Create font configuration - ImFontConfigPtr fontConfig = ImGui.ImFontConfig(); - fontConfig.FontDataOwnedByAtlas = false; // We manage the memory - fontConfig.PixelSnapH = true; - fontConfig.MergeMode = mergeWithPrevious; - - // Use provided glyph ranges or default to ASCII - uint* ranges = glyphRanges != null ? glyphRanges : io.Fonts.GetGlyphRangesDefault(); - - // Add font to atlas - ImFont* font = io.Fonts.AddFontFromMemoryTTF((void*)fontPtr, fontData.Length, fontSize, fontConfig, ranges); - - if (font is null) - { - // Font addition failed, free the handle immediately - fontHandle.Free(); - return null; - } - - // Store the handle for proper cleanup to prevent memory leaks - customFontHandles.Add(fontHandle); - - return font; - } - catch (ArgumentException ex) - { - // Free the handle if it was allocated - if (fontHandle.IsAllocated) - { - fontHandle.Free(); - } - - DebugLogger.Log($"FontHelper.AddCustomFont failed with ArgumentException: {ex.Message}"); - return null; - } - catch (OutOfMemoryException ex) - { - // Free the handle if it was allocated - if (fontHandle.IsAllocated) - { - fontHandle.Free(); - } - - DebugLogger.Log($"FontHelper.AddCustomFont failed with OutOfMemoryException: {ex.Message}"); - return null; - } - } -} diff --git a/ImGui.App/ForceDpiAware.cs b/ImGui.App/ForceDpiAware.cs deleted file mode 100644 index 5fe76c0..0000000 --- a/ImGui.App/ForceDpiAware.cs +++ /dev/null @@ -1,761 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -#pragma warning disable IDE0078 // Use pattern matching - -namespace ktsu.ImGui.App; - -using System.ComponentModel; -using System.Globalization; -using System.Linq; -using System.Runtime.InteropServices; - -/// -/// Contains methods to set the application as DPI-Aware and to get the actual and window scale factors. -/// -public static partial class ForceDpiAware -{ - internal const double StandardDpiScale = 96.0; - internal const double MaxScaleFactor = 10.25; - - /// - /// Marks the application as DPI-Aware when running on the Windows operating system. - /// Uses modern DPI awareness APIs for better compatibility with windowing libraries. - /// - public static void Windows() - { - // Make process DPI aware for proper window sizing on high-res screens. - // Use the most modern API available for better compatibility with GLFW and other windowing libraries. - - if (OperatingSystem.IsWindowsVersionAtLeast(10, 0, 14393)) // Windows 10 Version 1607 - { - // Try the modern DPI awareness context API first (recommended) - try - { - nint result = NativeMethods.SetProcessDpiAwarenessContext(NativeMethods.DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2); - if (result != IntPtr.Zero) - { - return; // Success - } - } - catch (EntryPointNotFoundException) - { - // SetProcessDpiAwarenessContext not available, fall back to older API - } - } - - if (OperatingSystem.IsWindowsVersionAtLeast(6, 3)) // Windows 8.1 - { - // Fall back to SetProcessDpiAwareness - try - { - int result = NativeMethods.SetProcessDpiAwareness(NativeMethods.ProcessDpiAwareness.ProcessPerMonitorDpiAware); - if (result == 0) // S_OK - { - return; // Success - } - } - catch (EntryPointNotFoundException) - { - // SetProcessDpiAwareness not available, fall back to oldest API - } - } - - if (OperatingSystem.IsWindowsVersionAtLeast(6)) // Windows Vista - { - // Fall back to the legacy API as last resort - NativeMethods.SetProcessDPIAware(); - } - } - - /// - /// Gets the actual scale factor based on the current operating system and display settings. - /// - /// The actual scale factor. - public static double GetActualScaleFactor() - { - double userDpiScale; - - try - { - if (OperatingSystem.IsWindows()) - { - userDpiScale = GdiPlusHelper.GetDpiX(IntPtr.Zero); - } - else - { - string? xdgSessionType = Environment.GetEnvironmentVariable("XDG_SESSION_TYPE")?.ToLower(); - - if (xdgSessionType is null or "x11") - { - nint display = NativeMethods.XOpenDisplay(null!); - if (display == IntPtr.Zero) - { - userDpiScale = GetWaylandDpiScale(); - } - else - { - string? dpiString = Marshal.PtrToStringAnsi(NativeMethods.XGetDefault(display, "Xft", "dpi")); - - if (dpiString == null || !double.TryParse(dpiString, NumberStyles.Any, CultureInfo.InvariantCulture, out userDpiScale)) - { - int width = NativeMethods.XDisplayWidth(display, 0); - int widthMM = NativeMethods.XDisplayWidthMM(display, 0); - userDpiScale = width * 25.4 / widthMM; - } - - if (NativeMethods.XCloseDisplay(display) != 0) - { - throw new InvalidOperationException("Failed to close X11 display connection"); - } - - // If X11 gives us standard DPI, try WSL-specific detection - if (Math.Abs(userDpiScale - StandardDpiScale) < 1.0) - { - double wslScale = GetWaylandDpiScale(); // This includes WSL host detection - if (Math.Abs(wslScale - StandardDpiScale) > 1.0) - { - userDpiScale = wslScale; - } - } - } - } - else if (xdgSessionType == "wayland") - { - userDpiScale = GetWaylandDpiScale(); - } - else - { - userDpiScale = GetWaylandDpiScale(); - } - } - } - catch (Exception) - { - //Logger.Warning?.Print(LogClass.Application, $"Couldn't determine monitor DPI: {e.Message}"); - throw; - } - - return userDpiScale; - } - - /// - /// Gets the window scale factor based on the actual scale factor and standard DPI scale. - /// - /// The window scale factor. - public static double GetWindowScaleFactor() - { - double userDpiScale = GetActualScaleFactor(); - - return Math.Min(userDpiScale / StandardDpiScale, MaxScaleFactor); - } - - /// - /// Gets the DPI scale factor for Wayland sessions. - /// - /// The DPI scale factor in dots per inch. - internal static double GetWaylandDpiScale() - { - // Method 1: Check environment variables (most reliable for WSL) - if (TryGetEnvironmentScale(out double envScale)) - { - return envScale * StandardDpiScale; - } - - // Method 2: Try to get GNOME settings (your Arch setup has gsettings) - if (TryGetGnomeScale(out double gnomeScale) && gnomeScale > 1.0) - { - return gnomeScale * StandardDpiScale; - } - - // Method 3: Try WSLg-specific detection - if (TryGetWslgScale(out double wslgScale)) - { - return wslgScale * StandardDpiScale; - } - - // Method 4: WSL-specific fallback - try to detect Windows host DPI - if (TryGetWslHostDpiScale(out double hostScale)) - { - return hostScale * StandardDpiScale; - } - - // Fallback: Return standard DPI - return StandardDpiScale; - } - - /// - /// Tries to get scale factor from environment variables. - /// - /// The scale factor if found. - /// True if a scale factor was found, false otherwise. - internal static bool TryGetEnvironmentScale(out double scale) - { - scale = 1.0; - - // Check for manual override first (for WSL users to match Windows host DPI) - string? dpiOverride = Environment.GetEnvironmentVariable("IMGUI_DPI_SCALE"); - if (!string.IsNullOrEmpty(dpiOverride) && double.TryParse(dpiOverride, NumberStyles.Any, CultureInfo.InvariantCulture, out scale)) - { - return true; - } - - // Check GDK_SCALE (used by GTK applications - you have gtk3 installed) - string? gdkScale = Environment.GetEnvironmentVariable("GDK_SCALE"); - if (!string.IsNullOrEmpty(gdkScale) && double.TryParse(gdkScale, NumberStyles.Any, CultureInfo.InvariantCulture, out scale)) - { - return true; - } - - // Check QT_SCALE_FACTOR (for Qt applications) - string? qtScale = Environment.GetEnvironmentVariable("QT_SCALE_FACTOR"); - if (!string.IsNullOrEmpty(qtScale) && double.TryParse(qtScale, NumberStyles.Any, CultureInfo.InvariantCulture, out scale)) - { - return true; - } - - // Check WSL-specific environment variables - string? wslDistro = Environment.GetEnvironmentVariable("WSL_DISTRO_NAME"); - if (!string.IsNullOrEmpty(wslDistro)) - { - // In WSL, check for Windows DPI settings that might be forwarded - string? wslScale = Environment.GetEnvironmentVariable("WSL_DPI_SCALE"); - if (!string.IsNullOrEmpty(wslScale) && double.TryParse(wslScale, NumberStyles.Any, CultureInfo.InvariantCulture, out scale)) - { - return true; - } - } - - return false; - } - - /// - /// Tries to get scale factor from GNOME settings (your setup has gsettings support). - /// - /// The scale factor if found. - /// True if a scale factor was found, false otherwise. - internal static bool TryGetGnomeScale(out double scale) - { - scale = 1.0; - - try - { - // Try to get GNOME scaling factor using gsettings (you have gsettings-desktop-schemas) - using System.Diagnostics.Process process = new(); - process.StartInfo.FileName = "gsettings"; - process.StartInfo.Arguments = "get org.gnome.desktop.interface scaling-factor"; - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.CreateNoWindow = true; - - process.Start(); - string output = process.StandardOutput.ReadToEnd().Trim(); - process.WaitForExit(); - - // Parse the output (usually in format "uint32 2" for 2x scaling) - if (output.StartsWith("uint32 ") && - int.TryParse(output[7..], out int intScale) && - intScale > 0) - { - scale = intScale; - return true; - } - - // Also try text scaling factor - process.StartInfo.Arguments = "get org.gnome.desktop.interface text-scaling-factor"; - process.Start(); - output = process.StandardOutput.ReadToEnd().Trim(); - process.WaitForExit(); - - if (double.TryParse(output, NumberStyles.Any, CultureInfo.InvariantCulture, out scale) && scale > 0) - { - return true; - } - } - catch (Win32Exception) - { - // gsettings not found - } - catch (IOException) - { - // IO error - } - catch (InvalidOperationException) - { - // Process operation failed - } - - return false; - } - - /// - /// Tries to get scale factor optimized for WSLg (Windows Subsystem for Linux GUI). - /// - /// The scale factor if found. - /// True if a scale factor was found, false otherwise. - internal static bool TryGetWslgScale(out double scale) - { - scale = 1.0; - - try - { - // Check if we're in WSL - string? wslDistro = Environment.GetEnvironmentVariable("WSL_DISTRO_NAME"); - if (wslDistro is null or "") - { - return false; - } - - // Try to get DPI from X11 resources (WSLg provides X11 compatibility) - using System.Diagnostics.Process process = new(); - process.StartInfo.FileName = "xrdb"; - process.StartInfo.Arguments = "-query"; - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.CreateNoWindow = true; - - process.Start(); - string output = process.StandardOutput.ReadToEnd(); - process.WaitForExit(); - - // Look for Xft.dpi setting - string[] lines = output.Split('\n'); - foreach (string line in lines) - { - if (line.Contains("Xft.dpi:") && line.Contains('\t')) - { - string dpiValue = line.Split('\t')[1].Trim(); - if (double.TryParse(dpiValue, NumberStyles.Any, CultureInfo.InvariantCulture, out double dpi)) - { - scale = dpi / StandardDpiScale; - return true; - } - } - } - - // Fallback: Try to detect Windows host DPI scaling - // WSLg sometimes forwards Windows display settings - if (TryGetWslHostDpiScale(out double hostScale)) - { - scale = hostScale; - return true; - } - } - catch (Win32Exception) - { - // xrdb not found - } - catch (IOException) - { - // IO error - } - catch (InvalidOperationException) - { - // Process operation failed - } - - return false; - } - - /// - /// Tries to get the DPI scale factor from the Windows host when running in WSL. - /// - /// The scale factor if detected. - /// True if a scale factor was detected. - internal static bool TryGetWslHostDpiScale(out double scale) - { - scale = 1.0; - - try - { - // Check if we're running in WSL - string? wslDistro = Environment.GetEnvironmentVariable("WSL_DISTRO_NAME"); - if (string.IsNullOrEmpty(wslDistro)) - { - return false; - } - - // Try Windows host DPI detection methods - if (TryGetWindowsRegistryDpi(out scale)) - { - return true; - } - - // Try WSLg-specific Windows DPI detection - if (TryGetWslgWindowsDpi(out scale)) - { - return true; - } - - // Try heuristic detection for high-DPI displays - if (TryDetectHighDpiDisplay(out scale)) - { - return true; - } - } - catch (Win32Exception) - { - // Process execution failed - } - catch (IOException) - { - // File system access failed - } - catch (InvalidOperationException) - { - // Process operation failed - } - - return false; - } - - /// - /// Tries to get DPI from Windows registry via WSL interop. - /// - /// The detected scale factor. - /// True if DPI was detected. - internal static bool TryGetWindowsRegistryDpi(out double scale) - { - scale = 1.0; - - // Try multiple registry approaches - if (TryGetSystemDpiFromPowerShell(out scale)) - { - return true; - } - - if (TryGetLogPixelsFromRegistry(out scale)) - { - return true; - } - - if (TryGetDpiFromSystemMetrics(out scale)) - { - return true; - } - - return false; - } - - /// - /// Tries to get system DPI directly via PowerShell. - /// - /// The detected scale factor. - /// True if DPI was detected. - internal static bool TryGetSystemDpiFromPowerShell(out double scale) - { - scale = 1.0; - - try - { - // Use PowerShell to get system DPI directly - using System.Diagnostics.Process process = new(); - process.StartInfo.FileName = "powershell.exe"; - process.StartInfo.Arguments = "-Command \"Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.Screen]::PrimaryScreen.WorkingArea.Width; [System.Windows.Forms.SystemInformation]::WorkingArea.Width; [System.Drawing.Graphics]::FromHwnd([System.IntPtr]::Zero).DpiX\""; - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.RedirectStandardError = true; - process.StartInfo.CreateNoWindow = true; - - process.Start(); - string output = process.StandardOutput.ReadToEnd().Trim(); - string errorOutput = process.StandardError.ReadToEnd().Trim(); - process.WaitForExit(); - - if (process.ExitCode == 0 && !string.IsNullOrEmpty(output)) - { - string[] lines = [.. output.Split('\n').Where(l => !string.IsNullOrWhiteSpace(l))]; - if (lines.Length >= 1) - { - string dpiLine = lines[^1].Trim(); - if (double.TryParse(dpiLine, NumberStyles.Any, CultureInfo.InvariantCulture, out double dpi) && dpi > 0) - { - scale = dpi / 96.0; - bool isValid = scale > 1.0 && scale <= MaxScaleFactor; - return isValid; - } - } - } - } - catch (Win32Exception) - { - // Logger.Warning?.Print(LogClass.Application, $"Win32Exception in system DPI detection: {ex.Message}"); - } - catch (IOException) - { - // Logger.Warning?.Print(LogClass.Application, $"IOException in system DPI detection: {ex.Message}"); - } - catch (InvalidOperationException) - { - // Logger.Warning?.Print(LogClass.Application, $"InvalidOperationException in system DPI detection: {ex.Message}"); - } - - return false; - } - - /// - /// Tries to get LogPixels from Windows registry. - /// - /// The detected scale factor. - /// True if LogPixels was found. - internal static bool TryGetLogPixelsFromRegistry(out double scale) - { - scale = 1.0; - - try - { - // Try multiple registry locations for LogPixels - string[] registryCommands = [ - "Get-ItemProperty -Path 'HKCU:\\Control Panel\\Desktop' -Name LogPixels -ErrorAction SilentlyContinue | Select-Object -ExpandProperty LogPixels", - "Get-ItemProperty -Path 'HKCU:\\Control Panel\\Desktop\\WindowMetrics' -Name AppliedDPI -ErrorAction SilentlyContinue | Select-Object -ExpandProperty AppliedDPI", - "Get-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\FontDPI' -Name LogPixels -ErrorAction SilentlyContinue | Select-Object -ExpandProperty LogPixels" - ]; - - foreach (string command in registryCommands) - { - using System.Diagnostics.Process process = new(); - process.StartInfo.FileName = "powershell.exe"; - process.StartInfo.Arguments = $"-Command \"{command}\""; - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.CreateNoWindow = true; - - process.Start(); - string output = process.StandardOutput.ReadToEnd().Trim(); - process.WaitForExit(); - - if (process.ExitCode == 0 && !string.IsNullOrEmpty(output) && int.TryParse(output, out int logPixels)) - { - scale = logPixels / 96.0; - bool isValid = scale > 1.0 && scale <= MaxScaleFactor; - return isValid; - } - } - } - catch (Win32Exception) - { - // Logger.Warning?.Print(LogClass.Application, $"Win32Exception in registry LogPixels detection: {ex.Message}"); - } - catch (IOException) - { - // Logger.Warning?.Print(LogClass.Application, $"IOException in registry LogPixels detection: {ex.Message}"); - } - catch (InvalidOperationException) - { - // Logger.Warning?.Print(LogClass.Application, $"InvalidOperationException in registry LogPixels detection: {ex.Message}"); - } - - return false; - } - - /// - /// Tries to get DPI from Windows system metrics. - /// - /// The detected scale factor. - /// True if DPI was detected. - internal static bool TryGetDpiFromSystemMetrics(out double scale) - { - scale = 1.0; - - try - { - // Try to get system DPI using GetDeviceCaps equivalent - using System.Diagnostics.Process process = new(); - process.StartInfo.FileName = "powershell.exe"; - process.StartInfo.Arguments = "-Command \"Add-Type -Name Win32 -Namespace System -MemberDefinition '[DllImport(\\\"user32.dll\\\")] public static extern IntPtr GetDC(IntPtr hwnd); [DllImport(\\\"gdi32.dll\\\")] public static extern int GetDeviceCaps(IntPtr hdc, int nIndex); [DllImport(\\\"user32.dll\\\")] public static extern int ReleaseDC(IntPtr hwnd, IntPtr hdc);'; $hdc = [System.Win32]::GetDC([System.IntPtr]::Zero); $dpi = [System.Win32]::GetDeviceCaps($hdc, 88); [System.Win32]::ReleaseDC([System.IntPtr]::Zero, $hdc); $dpi\""; - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.RedirectStandardError = true; - process.StartInfo.CreateNoWindow = true; - - process.Start(); - string output = process.StandardOutput.ReadToEnd().Trim(); - string errorOutput = process.StandardError.ReadToEnd().Trim(); - process.WaitForExit(); - - if (process.ExitCode == 0 && int.TryParse(output, out int dpi) && dpi > 0) - { - scale = dpi / 96.0; - bool isValid = scale > 1.0 && scale <= MaxScaleFactor; - return isValid; - } - } - catch (Win32Exception) - { - // Logger.Warning?.Print(LogClass.Application, $"Win32Exception in system metrics detection: {ex.Message}"); - } - catch (IOException) - { - // Logger.Warning?.Print(LogClass.Application, $"IOException in system metrics detection: {ex.Message}"); - } - catch (InvalidOperationException) - { - // Logger.Warning?.Print(LogClass.Application, $"InvalidOperationException in system metrics detection: {ex.Message}"); - } - - return false; - } - - /// - /// Tries to get DPI from WSLg Windows host. - /// - /// The detected scale factor. - /// True if DPI was detected. - internal static bool TryGetWslgWindowsDpi(out double scale) - { - scale = 1.0; - - try - { - // Try to get system DPI via Windows interop using PowerShell (wmic is deprecated) - using System.Diagnostics.Process process = new(); - process.StartInfo.FileName = "powershell.exe"; - process.StartInfo.Arguments = "-Command \"Get-WmiObject -Class Win32_DesktopMonitor | Select-Object PixelsPerXLogicalInch | Format-List\""; - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.RedirectStandardError = true; - process.StartInfo.CreateNoWindow = true; - - process.Start(); - string output = process.StandardOutput.ReadToEnd(); - string errorOutput = process.StandardError.ReadToEnd().Trim(); - process.WaitForExit(); - - if (process.ExitCode == 0) - { - foreach (string line in output.Split('\n')) - { - if (line.Contains("PixelsPerXLogicalInch") && line.Contains(':')) - { - string[] parts = line.Split(':', 2); - if (parts.Length > 1) - { - string value = parts[1].Trim(); - if (int.TryParse(value, out int dpi) && dpi > 0) - { - scale = dpi / 96.0; - bool isValid = scale > 1.0 && scale <= MaxScaleFactor; - return isValid; - } - } - } - } - } - - // Alternative approach using CIM (newer than WMI) - process.StartInfo.Arguments = "-Command \"Get-CimInstance -Class Win32_DesktopMonitor | Select-Object PixelsPerXLogicalInch | Format-List\""; - process.Start(); - output = process.StandardOutput.ReadToEnd(); - errorOutput = process.StandardError.ReadToEnd().Trim(); - process.WaitForExit(); - - if (process.ExitCode == 0) - { - foreach (string line in output.Split('\n')) - { - if (line.Contains("PixelsPerXLogicalInch") && line.Contains(':')) - { - string[] parts = line.Split(':', 2); - if (parts.Length > 1) - { - string value = parts[1].Trim(); - if (int.TryParse(value, out int dpi) && dpi > 0) - { - scale = dpi / 96.0; - bool isValid = scale > 1.0 && scale <= MaxScaleFactor; - return isValid; - } - } - } - } - } - } - catch (Win32Exception) - { - // Logger.Warning?.Print(LogClass.Application, $"Win32Exception in WSLg detection: {ex.Message}"); - } - catch (IOException) - { - // Logger.Warning?.Print(LogClass.Application, $"IOException in WSLg detection: {ex.Message}"); - } - catch (InvalidOperationException) - { - // Logger.Warning?.Print(LogClass.Application, $"InvalidOperationException in WSLg detection: {ex.Message}"); - } - - return false; - } - - /// - /// Tries to detect high-DPI displays using heuristics. - /// - /// The detected scale factor. - /// True if a high-DPI display was detected. - internal static bool TryDetectHighDpiDisplay(out double scale) - { - scale = 1.0; - - try - { - // Get display information from xrandr - using System.Diagnostics.Process process = new(); - process.StartInfo.FileName = "xrandr"; - process.StartInfo.Arguments = "--current"; - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.CreateNoWindow = true; - - process.Start(); - string output = process.StandardOutput.ReadToEnd(); - process.WaitForExit(); - - if (process.ExitCode == 0) - { - // Look for high-resolution displays that typically use scaling - foreach (string line in output.Split('\n')) - { - if (line.Contains(" connected ") && line.Contains('x')) - { - // Extract resolution (e.g., "2560x1440") - string[] parts = line.Split(' '); - foreach (string part in parts) - { - if (part.Contains('x') && !part.Contains('+')) - { - string[] dimensions = part.Split('x'); - if (dimensions.Length == 2 && - int.TryParse(dimensions[0], out int width) && - int.TryParse(dimensions[1], out int height)) - { - // Common high-DPI resolutions that typically use 125% scaling - if ((width >= 2560 && height >= 1440) || // 1440p+ - (width >= 1920 && height >= 1080 && (width > 1920 || height > 1080))) // >1080p - { - scale = 1.25; // 125% scaling is common for these resolutions - return true; - } - } - } - } - } - } - } - } - catch (Win32Exception) - { - // Process execution failed - } - catch (IOException) - { - // File system access failed - } - catch (InvalidOperationException) - { - // Process operation failed - } - - return false; - } -} - diff --git a/ImGui.App/GdiPlusHelper.cs b/ImGui.App/GdiPlusHelper.cs deleted file mode 100644 index adf7ca8..0000000 --- a/ImGui.App/GdiPlusHelper.cs +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -using System.Runtime.Versioning; - -/// -/// Helper class for GDI+ operations. -/// -[SupportedOSPlatform("windows")] -public static partial class GdiPlusHelper -{ - /// - /// Static constructor to initialize GDI+. - /// - static GdiPlusHelper() => CheckStatus(NativeMethods.GdiplusStartup(out _, NativeMethods.StartupInputEx.Default, out _)); - - /// - /// Checks the status of a GDI+ operation and throws an exception if it failed. - /// - /// The status code returned by a GDI+ operation. - /// Thrown when the GDI+ operation fails. - internal static void CheckStatus(int gdiStatus) - { - if (gdiStatus != 0) - { - throw new InvalidOperationException($"GDI Status Error: {gdiStatus}"); - } - } - - /// - /// Gets the DPI (dots per inch) along the X axis for a given window handle. - /// - /// The handle to the window. - /// The DPI along the X axis. - /// Thrown when a GDI+ operation fails. - public static float GetDpiX(IntPtr hwnd) - { - CheckStatus(NativeMethods.GdipCreateFromHWND(hwnd, out nint graphicsHandle)); - CheckStatus(NativeMethods.GdipGetDpiX(graphicsHandle, out float result)); - CheckStatus(NativeMethods.GdipDeleteGraphics(graphicsHandle)); - - return result; - } -} diff --git a/ImGui.App/ImGui.App.csproj b/ImGui.App/ImGui.App.csproj deleted file mode 100644 index 51f151e..0000000 --- a/ImGui.App/ImGui.App.csproj +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - true - net8.0;net9.0;net7.0 - - - - - - - - - - - - - - - - - - - - True - True - Resources.resx - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - - - diff --git a/ImGui.App/ImGuiApp.cs b/ImGui.App/ImGuiApp.cs deleted file mode 100644 index afa8aca..0000000 --- a/ImGui.App/ImGuiApp.cs +++ /dev/null @@ -1,1645 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -using System.Buffers; -using System.Collections.Concurrent; -using System.Collections.ObjectModel; -using System.Diagnostics; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using Hexa.NET.ImGui; -using ktsu.ImGui.App.ImGuiController; -using ktsu.Invoker; -using ktsu.ScopedAction; -using ktsu.Semantics.Paths; -using ktsu.Semantics.Strings; -using Silk.NET.Input; -using Silk.NET.OpenGL; -using Silk.NET.Windowing; -using SixLabors.ImageSharp; -using SixLabors.ImageSharp.PixelFormats; -using SixLabors.ImageSharp.Processing; -using Color = System.Drawing.Color; -using Texture = ImGuiController.Texture; - -/// -/// Provides static methods and properties to manage the ImGui application. -/// -[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling", Justification = "This class is the main entry point for the ImGui application and requires many dependencies. Consider refactoring in the future.")] -public static partial class ImGuiApp -{ - internal static IWindow? window; - internal static GL? gl; - internal static ImGuiController.ImGuiController? controller; - internal static IInputContext? inputContext; - internal static OpenGLProvider? glProvider; - internal static IntPtr currentGLContextHandle; // Track the current GL context handle - - internal static ImGuiAppWindowState LastNormalWindowState { get; set; } = new(); - - /// - /// Gets the current state of the ImGui application window. - /// - /// - /// A new instance of representing the current window state, - /// including size, position, and layout state. - /// - public static ImGuiAppWindowState WindowState - { - get => new() - { - Size = LastNormalWindowState.Size, - Pos = LastNormalWindowState.Pos, - LayoutState = window?.WindowState ?? Silk.NET.Windowing.WindowState.Normal - }; - } - - internal static ConcurrentDictionary FontIndices { get; } = []; - internal static float lastFontScaleFactor; - internal static readonly List currentPinnedFontData = []; - - /// - /// Stores unmanaged memory handles for font data that needs to be freed with Marshal.FreeHGlobal. - /// - internal static readonly List currentFontMemoryHandles = []; - - /// - /// List of common font sizes to load for crisp rendering at multiple sizes - /// - internal static readonly int[] CommonFontSizes = [10, 12, 14, 16, 18, 20, 24, 32, 48]; - - /// - /// Gets an instance of the class to delegate tasks to the window thread. - /// - public static Invoker Invoker { get; internal set; } = null!; - - /// - /// Gets a value indicating whether the ImGui application window is focused. - /// - public static bool IsFocused { get; private set; } = true; - - /// - /// Gets a value indicating whether the ImGui application window is visible. - /// - public static bool IsVisible => (window?.WindowState != Silk.NET.Windowing.WindowState.Minimized) && (window?.IsVisible ?? false); - - /// - /// Gets a value indicating whether the application is currently idle (no user input for a specified time). - /// - public static bool IsIdle { get; private set; } - - internal static DateTime lastInputTime = DateTime.UtcNow; - internal static double targetFrameTimeMs = 1000.0 / 30.0; // Default to 30 FPS (33.33ms per frame) - internal static readonly PidFrameLimiter frameLimiter = new(); - internal static double previousTargetFrameTimeMs = 1000.0 / 30.0; - - /// - /// Updates the last input time to the current time. Called by the input system when user input is detected. - /// - internal static void OnUserInput() => lastInputTime = DateTime.UtcNow; - - internal static bool showImGuiMetrics; - internal static bool showImGuiDemo; - internal static bool showPerformanceMonitor; - - // Performance monitoring data structures - internal static readonly Queue performanceFrameTimes = new(); - internal static float performanceFrameTimeSum; - internal static readonly Queue performanceFpsHistory = new(); - internal static float performanceLastFpsUpdateTime; - internal static int performanceFrameCount; - - /// - /// Gets the scale factor for the ImGui application. - /// - public static float ScaleFactor { get; private set; } = 1; - - internal static ConcurrentDictionary Textures { get; } = []; - - /// - /// Stops the ImGui application by closing the window. - /// - /// Thrown when the application is not running. - public static void Stop() - { - if (window == null) - { - throw new InvalidOperationException("Cannot stop the application because it is not running."); - } - - window.Close(); - } - - internal static ImGuiAppConfig Config { get; set; } = new(); - - internal static void InitializeWindow(ImGuiAppConfig config) - { - if (config.TestMode) - { - // In test mode, use the test window from config - window = config.TestWindow ?? throw new InvalidOperationException("TestWindow must be set when TestMode is true"); - return; - } - - WindowOptions silkWindowOptions = WindowOptions.Default with - { - Title = config.Title, - Size = new((int)config.InitialWindowState.Size.X, (int)config.InitialWindowState.Size.Y), - Position = new((int)config.InitialWindowState.Pos.X, (int)config.InitialWindowState.Pos.Y), - WindowState = Silk.NET.Windowing.WindowState.Normal, - VSync = false, // Disable VSync to allow PID frame limiter to control frame rate - API = OperatingSystem.IsLinux() ? - new GraphicsAPI( - ContextAPI.OpenGL, - ContextProfile.Core, - ContextFlags.Default, - new APIVersion(3, 0)) : - new GraphicsAPI( - ContextAPI.OpenGL, - ContextProfile.Core, - ContextFlags.ForwardCompatible, - new APIVersion(3, 3)), - PreferredDepthBufferBits = 24, - PreferredStencilBufferBits = 8 - }; - - LastNormalWindowState = config.InitialWindowState; - LastNormalWindowState.LayoutState = Silk.NET.Windowing.WindowState.Normal; - - window = Window.Create(silkWindowOptions); - } - - internal static void SetupWindowLoadHandler(ImGuiAppConfig config) - { - window!.Load += () => - { - DebugLogger.Log("Window.Load: Starting window load handler"); - - if (!string.IsNullOrEmpty(config.IconPath)) - { - DebugLogger.Log("Window.Load: Setting window icon"); - SetWindowIcon(config.IconPath); - } - - DebugLogger.Log("Window.Load: Creating OpenGL factory"); - WindowOpenGLFactory glFactory = new(window); - glProvider = new OpenGLProvider(glFactory); - GLWrapper glWrapper = (GLWrapper)glProvider.GetGL(); - gl = glWrapper.UnderlyingGL; - DebugLogger.Log("Window.Load: OpenGL initialized"); - - DebugLogger.Log("Window.Load: Creating input context"); - inputContext = window.CreateInput(); - DebugLogger.Log("Window.Load: Input context created"); - - DebugLogger.Log("Window.Load: Creating ImGuiController"); - controller = new( - gl, - view: window, - input: inputContext, - onConfigureIO: () => - { - DebugLogger.Log("onConfigureIO: Starting configuration"); - unsafe - { - currentGLContextHandle = (nint)ImGui.GetCurrentContext().Handle; - - ImGuiIOPtr io = ImGui.GetIO(); - - // Configure imgui.ini file saving based on user preference - if (!config.SaveIniSettings) - { - io.IniFilename = null; - } - - io.ConfigDebugIsDebuggerPresent = Debugger.IsAttached; - io.ConfigErrorRecoveryEnableAssert = false; - io.ConfigErrorRecoveryEnableTooltip = true; - io.ConfigErrorRecoveryEnableDebugLog = true; - } - DebugLogger.Log("onConfigureIO: Context configured"); - - DebugLogger.Log("onConfigureIO: Updating DPI scale"); - UpdateDpiScale(); - DebugLogger.Log("onConfigureIO: Initializing fonts"); - InitFonts(); - DebugLogger.Log("onConfigureIO: Calling user OnStart"); - config.OnStart?.Invoke(); - DebugLogger.Log("onConfigureIO: Configuration completed"); - } - ); - DebugLogger.Log("Window.Load: ImGuiController created"); - - ImGui.GetStyle().WindowRounding = 0; - window.WindowState = config.InitialWindowState.LayoutState; - DebugLogger.Log("Window.Load: Window load handler completed"); - }; - } - - internal static void SetupWindowResizeHandler(ImGuiAppConfig config) - { - window!.FramebufferResize += s => - { - gl?.Viewport(s); - CaptureWindowNormalState(); - UpdateDpiScale(); - CheckAndHandleContextChange(); - - // Force validation on next update cycle since window size changed - ForceWindowPositionValidation(); - - config.OnMoveOrResize?.Invoke(); - }; - } - - internal static void SetupWindowMoveHandler(ImGuiAppConfig config) - { - window!.Move += (p) => - { - CaptureWindowNormalState(); - UpdateDpiScale(); - CheckAndHandleContextChange(); - - // Force validation on next update cycle since window may have moved to different monitor - ForceWindowPositionValidation(); - - config.OnMoveOrResize?.Invoke(); - }; - } - - internal static void UpdateWindowPerformance() - { - ImGuiAppPerformanceSettings settings = Config.PerformanceSettings; - - if (!settings.EnableThrottledRendering) - { - return; - } - - // Skip throttling during PID auto-tuning to maintain consistent target frame rate - (bool isTuningActive, _, _, _, _) = frameLimiter.GetTuningStatus(); - if (isTuningActive) - { - return; - } - - // Update idle state if idle detection is enabled - if (settings.EnableIdleDetection) - { - double timeSinceLastInput = (DateTime.UtcNow - lastInputTime).TotalSeconds; - IsIdle = timeSinceLastInput >= settings.IdleTimeoutSeconds; - } - else - { - IsIdle = false; - } - - // Evaluate all throttling conditions and select the lowest frame rate - List<(double fps, string reason)> candidateRates = []; - - // Add focused/unfocused rate - if (IsFocused) - { - candidateRates.Add((settings.FocusedFps, "Focused")); - } - else - { - candidateRates.Add((settings.UnfocusedFps, "Unfocused")); - } - - // Add idle rate if applicable - if (IsIdle && settings.EnableIdleDetection) - { - candidateRates.Add((settings.IdleFps, "Idle")); - } - - // Add not visible rate if applicable - if (!IsVisible) - { - candidateRates.Add((settings.NotVisibleFps, "Not Visible")); - } - - // Select the lowest frame rate - (double targetFps, string _) = candidateRates - .OrderBy(rate => rate.fps) - .First(); - - // Update target frame time (convert FPS to milliseconds per frame) - double newTargetFrameTimeMs = targetFps > 0 ? (1000.0 / targetFps) : 10000.0; // Cap at 10 seconds for very low FPS - targetFrameTimeMs = newTargetFrameTimeMs; - } - - internal static void SetupWindowUpdateHandler(ImGuiAppConfig config) - { - window!.Update += (delta) => - { - if (!controller?.FontsConfigured ?? true) - { - throw new InvalidOperationException("Fonts are not configured before Update()"); - } - - EnsureWindowPositionIsValid(); - UpdateWindowPerformance(); - UpdatePerformanceMonitoring((float)delta); - - controller?.Update((float)delta); - config.OnUpdate?.Invoke((float)delta); - Invoker.DoInvokes(); - }; - } - - internal static void SetupWindowRenderHandler(ImGuiAppConfig config) - { - window!.Render += delta => - { - if (!controller?.FontsConfigured ?? true) - { - throw new InvalidOperationException("Fonts are not configured before Render()"); - } - - gl?.ClearColor(Color.FromArgb(255, (int)(.45f * 255), (int)(.55f * 255), (int)(.60f * 255))); - gl?.Clear(ClearBufferMask.ColorBufferBit); - - RenderWithScaling(() => - { - using ScopedAction? frameWrapper = config.FrameWrapperFactory.Invoke(); - RenderAppMenu(config.OnAppMenu); - RenderWindowContents(config.OnRender, (float)delta); - RenderPerformanceMonitor(); - }); - - controller?.Render(); - - // Apply sleep-based frame rate limiting - ApplyFrameRateLimit(); - }; - } - - internal static void ApplyFrameRateLimit() - { - // Reset PID controller if target frame rate has changed - if (Math.Abs(targetFrameTimeMs - previousTargetFrameTimeMs) > 0.1) - { - frameLimiter.Reset(); - previousTargetFrameTimeMs = targetFrameTimeMs; - } - - // Use PID controller for accurate frame rate limiting - frameLimiter.LimitFrameRate(targetFrameTimeMs); - } - - internal static void RenderWithScaling(Action renderAction) - { - FindBestFontForAppearance(FontAppearance.DefaultFontName, FontAppearance.DefaultFontPointSize, out float bestFontSize); - float scaleRatio = bestFontSize / FontAppearance.DefaultFontPointSize; - using (new UIScaler(scaleRatio)) - { - RenderWithDefaultFont(renderAction); - } - } - - internal static void SetupWindowClosingHandler() - { - window!.Closing += () => - { - CleanupPinnedFontData(); - FontHelper.CleanupCustomFonts(); - CleanupController(); - CleanupInputContext(); - CleanupOpenGL(); - }; - } - - internal static void CleanupPinnedFontData() - { - // Free our font data handles since we own the data - foreach (GCHandle handle in currentPinnedFontData) - { - try - { - if (handle.IsAllocated) - { - handle.Free(); - } - } - catch (InvalidOperationException) - { - // Handle was already freed, ignore - } - } - - currentPinnedFontData.Clear(); - - // Free unmanaged font memory handles - foreach (nint memoryHandle in currentFontMemoryHandles) - { - try - { - Marshal.FreeHGlobal(memoryHandle); - } - catch (ArgumentException) - { - // Handle was already freed or invalid, ignore - } - } - - currentFontMemoryHandles.Clear(); - } - - internal static void CleanupController() - { - controller?.Dispose(); - controller = null; - } - - internal static void CleanupInputContext() - { - inputContext?.Dispose(); - inputContext = null; - } - - internal static void CleanupOpenGL() - { - if (gl != null) - { - gl.Dispose(); - gl = null; - } - - if (glProvider != null) - { - glProvider.Dispose(); - glProvider = null; - } - } - - /// - /// Starts the ImGui application with the specified configuration. - /// - /// The configuration settings for the ImGui application. - public static void Start(ImGuiAppConfig config) - { - DebugLogger.Log("ImGuiApp.Start: Starting application"); - ArgumentNullException.ThrowIfNull(config); - - if (window != null) - { - throw new InvalidOperationException("Application is already running."); - } - - AdjustConfigForStartup(config); - - DebugLogger.Log("ImGuiApp.Start: Creating invoker and setting config"); - Invoker = new(); - Config = config; - - DebugLogger.Log("ImGuiApp.Start: Validating config"); - ValidateConfig(config); - - DebugLogger.Log("ImGuiApp.Start: Setting DPI awareness"); - ForceDpiAware.Windows(); - - DebugLogger.Log("ImGuiApp.Start: Initializing window"); - InitializeWindow(config); - DebugLogger.Log("ImGuiApp.Start: Setting up window handlers"); - SetupWindowLoadHandler(config); - SetupWindowResizeHandler(config); - SetupWindowMoveHandler(config); - SetupWindowUpdateHandler(config); - SetupWindowRenderHandler(config); - SetupWindowClosingHandler(); - - window!.FocusChanged += (focused) => IsFocused = focused; - - if (!config.TestMode) - { - // Temporarily keep console window visible for debugging - // if (OperatingSystem.IsWindows()) - // { - // DebugLogger.Log("ImGuiApp.Start: Hiding console window"); - // nint handle = NativeMethods.GetConsoleWindow(); - // NativeMethods.ShowWindow(handle, SW_HIDE); - // } - - DebugLogger.Log("ImGuiApp.Start: Starting window run loop"); - window.Run(); - DebugLogger.Log("ImGuiApp.Start: Window run loop completed"); - window.Dispose(); - } - } - - internal static void AdjustConfigForStartup(ImGuiAppConfig config) - { - if (config.InitialWindowState.LayoutState == Silk.NET.Windowing.WindowState.Minimized) - { - // Automatically convert minimized state to normal to prevent startup issues - // This commonly happens when restoring persisted window state - config.InitialWindowState.LayoutState = Silk.NET.Windowing.WindowState.Normal; - DebugLogger.Log("ImGuiApp.Start: Initial window state was minimized, automatically converted to normal for proper startup."); - } - } - - internal static void ValidateConfig(ImGuiAppConfig config) - { - if (!string.IsNullOrEmpty(config.IconPath) && !File.Exists(config.IconPath)) - { - throw new FileNotFoundException("Icon file not found.", config.IconPath); - } - - foreach (KeyValuePair font in config.Fonts) - { - if (string.IsNullOrEmpty(font.Key) || font.Value == null) - { - throw new ArgumentException("Font name and data must be specified.", nameof(config)); - } - } - - if (config.DefaultFonts.Count == 0) - { - throw new ArgumentException("At least one default font must be specified in the configuration.", nameof(config)); - } - - foreach (KeyValuePair font in config.DefaultFonts) - { - if (string.IsNullOrEmpty(font.Key) || font.Value == null) - { - throw new ArgumentException("Default font name and data must be specified.", nameof(config)); - } - } - } - - internal static void RenderWithDefaultFont(Action action) - { - using (new FontAppearance(FontAppearance.DefaultFontName, FontAppearance.DefaultFontPointSize)) - { - action(); - } - } - - internal static void CaptureWindowNormalState() - { - if (window?.WindowState == Silk.NET.Windowing.WindowState.Normal) - { - LastNormalWindowState = new() - { - Size = new(window.Size.X, window.Size.Y), - Pos = new(window.Position.X, window.Position.Y), - LayoutState = Silk.NET.Windowing.WindowState.Normal - }; - } - } - - internal static ImFontPtr FindBestFontForAppearance(string name, int sizePoints, out float sizePixels) - { - ImGuiIOPtr io = ImGui.GetIO(); - ImVector fonts = io.Fonts.Fonts; - - // Calculate the pixel size for this point size - sizePixels = CalculateOptimalPixelSize(sizePoints); - - // First, try to find the exact font with the requested size - string exactFontKey = $"{name}_{sizePoints}"; - if (FontIndices.TryGetValue(exactFontKey, out int fontIndex)) - { - return fonts[fontIndex]; - } - - // If exact size not found, try to find the closest size for this font name - int closestSize = -1; - int smallestDifference = int.MaxValue; - - foreach (int size in CommonFontSizes) - { - string fontKey = $"{name}_{size}"; - if (FontIndices.ContainsKey(fontKey)) - { - int difference = Math.Abs(size - sizePoints); - if (difference < smallestDifference) - { - smallestDifference = difference; - closestSize = size; - } - } - } - - // If we found a closest size, use it - if (closestSize != -1) - { - string closestFontKey = $"{name}_{closestSize}"; - fontIndex = FontIndices[closestFontKey]; - return fonts[fontIndex]; - } - - // Try to get font index for the specified name directly (for backwards compatibility) - if (FontIndices.TryGetValue(name, out fontIndex)) - { - return fonts[fontIndex]; - } - - // Fallback to Default font - if (FontIndices.TryGetValue("Default", out fontIndex)) - { - return fonts[fontIndex]; - } - - // If no default font, use the first font - fontIndex = 0; - return fonts[fontIndex]; - } - - // Cache to avoid checking every frame - private static Silk.NET.Maths.Vector2D? lastCheckedWindowPosition; - private static Silk.NET.Maths.Vector2D? lastCheckedWindowSize; - private static bool needsPositionValidation = true; - - /// - /// Ensures the window is positioned on a visible monitor. This method provides improved - /// multi-monitor support, better visibility detection, and performance optimizations. - /// - internal static void EnsureWindowPositionIsValid() - { - // Early exit for invalid states - if (window is null || window.WindowState == Silk.NET.Windowing.WindowState.Minimized) - { - return; - } - - // Performance optimization: only check when position/size changes or forced - if (!needsPositionValidation && - lastCheckedWindowPosition == window.Position && - lastCheckedWindowSize == window.Size) - { - return; - } - - try - { - // Update cache - lastCheckedWindowPosition = window.Position; - lastCheckedWindowSize = window.Size; - needsPositionValidation = false; - - // Get all available monitors for better multi-monitor support - IMonitor[] availableMonitors = GetAvailableMonitors(); - if (availableMonitors.Length == 0) - { - DebugLogger.Log("EnsureWindowPositionIsValid: No monitors available, skipping validation"); - return; - } - - // Check if window has sufficient visibility on any monitor - IMonitor? bestMonitor = FindBestMonitorForWindow(window, availableMonitors); - - if (bestMonitor is null) - { - // Window is not sufficiently visible on any monitor - relocate it - IMonitor targetMonitor = GetPrimaryMonitor(availableMonitors) ?? availableMonitors[0]; - RelocateWindowToMonitor(window, targetMonitor); - DebugLogger.Log($"EnsureWindowPositionIsValid: Relocated window to monitor bounds {targetMonitor.Bounds}"); - } - else if (window.Monitor != bestMonitor) - { - DebugLogger.Log($"EnsureWindowPositionIsValid: Window is visible on monitor {bestMonitor.Bounds}"); - } - } - catch (InvalidOperationException ex) - { - DebugLogger.Log($"EnsureWindowPositionIsValid: Error during validation - {ex.Message}"); - // Don't crash the application, just log the error - } - catch (NullReferenceException ex) - { - DebugLogger.Log($"EnsureWindowPositionIsValid: Error during validation - {ex.Message}"); - // Don't crash the application, just log the error - } - } - - /// - /// Gets all available monitors from the windowing system. - /// - private static IMonitor[] GetAvailableMonitors() - { - try - { - // Try to get monitors from the current window's context first - if (window?.Monitor?.Bounds is not null) - { - // For Silk.NET, we need to work with what's available - // In many cases, we only have access to the current monitor - return [window.Monitor]; - } - - // Fallback: if no monitor available, return empty array - return []; - } - catch (InvalidOperationException) - { - return []; - } - catch (NullReferenceException) - { - return []; - } - } - - /// - /// Finds the monitor where the window has the most visibility. - /// Returns null if the window is not sufficiently visible on any monitor. - /// - private static IMonitor? FindBestMonitorForWindow(IWindow window, IMonitor[] monitors) - { - if (monitors.Length == 0) - { - return null; - } - - IMonitor? bestMonitor = null; - int maxVisibleArea = 0; - - // Window rectangle - Silk.NET.Maths.Rectangle windowRect = new( - window.Position.X, - window.Position.Y, - window.Size.X, - window.Size.Y); - - foreach (IMonitor monitor in monitors) - { - // Calculate intersection area with this monitor - Silk.NET.Maths.Rectangle intersection = CalculateRectangleIntersection(windowRect, monitor.Bounds); - int visibleArea = intersection.Size.X * intersection.Size.Y; - - if (visibleArea > maxVisibleArea) - { - maxVisibleArea = visibleArea; - bestMonitor = monitor; - } - } - - // Require at least 25% of the window to be visible (or minimum 100x100 pixels) - int windowArea = windowRect.Size.X * windowRect.Size.Y; - int minimumVisibleArea = Math.Max(10000, windowArea / 4); // 100x100 or 25% of window - - return maxVisibleArea >= minimumVisibleArea ? bestMonitor : null; - } - - /// - /// Gets the primary monitor from the available monitors. - /// - private static IMonitor? GetPrimaryMonitor(IMonitor[] monitors) => - // In Silk.NET, we typically work with the monitor associated with the window - // For now, we'll use the first monitor as primary - monitors.Length > 0 ? monitors[0] : null; - - /// - /// Relocates the window to the specified monitor, preserving the current window size - /// unless it's too large for the target monitor. - /// - private static void RelocateWindowToMonitor(IWindow window, IMonitor monitor) - { - Silk.NET.Maths.Rectangle monitorBounds = monitor.Bounds; - Silk.NET.Maths.Vector2D currentSize = window.Size; - - // Preserve current size if it fits, otherwise use default size - Silk.NET.Maths.Vector2D newSize; - if (currentSize.X <= monitorBounds.Size.X - 100 && currentSize.Y <= monitorBounds.Size.Y - 100) - { - // Current size fits with some margin - keep it - newSize = currentSize; - } - else - { - // Current size is too large - use default size or fit to monitor - ImGuiAppWindowState defaultState = new(); - int maxWidth = Math.Min((int)defaultState.Size.X, monitorBounds.Size.X - 100); - int maxHeight = Math.Min((int)defaultState.Size.Y, monitorBounds.Size.Y - 100); - newSize = new(Math.Max(640, maxWidth), Math.Max(480, maxHeight)); // Minimum 640x480 - } - - // Center the window on the target monitor - Silk.NET.Maths.Vector2D halfSize = new(newSize.X / 2, newSize.Y / 2); - Silk.NET.Maths.Vector2D centerPosition = monitorBounds.Center - halfSize; - - // Ensure the window is fully within the monitor bounds - int posX = Math.Max(monitorBounds.Origin.X, Math.Min(centerPosition.X, monitorBounds.Origin.X + monitorBounds.Size.X - newSize.X)); - int posY = Math.Max(monitorBounds.Origin.Y, Math.Min(centerPosition.Y, monitorBounds.Origin.Y + monitorBounds.Size.Y - newSize.Y)); - - // Apply the new position and size - window.Size = newSize; - window.Position = new(posX, posY); - window.WindowState = Silk.NET.Windowing.WindowState.Normal; - - DebugLogger.Log($"EnsureWindowPositionIsValid: Repositioned window to ({posX}, {posY}) with size ({newSize.X}, {newSize.Y})"); - } - - /// - /// Calculates the intersection rectangle of two rectangles. - /// - private static Silk.NET.Maths.Rectangle CalculateRectangleIntersection( - Silk.NET.Maths.Rectangle rect1, - Silk.NET.Maths.Rectangle rect2) - { - int left = Math.Max(rect1.Origin.X, rect2.Origin.X); - int top = Math.Max(rect1.Origin.Y, rect2.Origin.Y); - int right = Math.Min(rect1.Origin.X + rect1.Size.X, rect2.Origin.X + rect2.Size.X); - int bottom = Math.Min(rect1.Origin.Y + rect1.Size.Y, rect2.Origin.Y + rect2.Size.Y); - - // If rectangles don't intersect, return empty rectangle - if (left >= right || top >= bottom) - { - return new Silk.NET.Maths.Rectangle(0, 0, 0, 0); - } - - return new Silk.NET.Maths.Rectangle(left, top, right - left, bottom - top); - } - - /// - /// Forces the window position validation to run on the next update cycle. - /// Call this when monitor configuration may have changed. - /// - internal static void ForceWindowPositionValidation() - { - needsPositionValidation = true; - DebugLogger.Log("EnsureWindowPositionIsValid: Forced validation requested"); - } - - /// - /// Renders the application menu using the provided delegate. - /// - /// The delegate to render the menu. - internal static void RenderAppMenu(Action? menuDelegate) - { - if (menuDelegate is not null) - { - if (ImGui.BeginMainMenuBar()) - { - menuDelegate(); - - if (ImGui.BeginMenu("Debug")) - { - if (ImGui.MenuItem("Show ImGui Demo", "", showImGuiDemo)) - { - showImGuiDemo = !showImGuiDemo; - } - - if (ImGui.MenuItem("Show ImGui Metrics", "", showImGuiMetrics)) - { - showImGuiMetrics = !showImGuiMetrics; - } - - if (ImGui.MenuItem("Show Performance Monitor", "", showPerformanceMonitor)) - { - showPerformanceMonitor = !showPerformanceMonitor; - } - - ImGui.EndMenu(); - } - - ImGui.EndMainMenuBar(); - } - } - } - - /// - /// Renders the main window contents and handles ImGui demo and metrics windows. - /// - /// The delegate to render the main window contents. - /// The delta time since the last frame. - internal static void RenderWindowContents(Action? tickDelegate, float dt) - { - bool b = true; - ImGui.SetNextWindowSize(ImGui.GetMainViewport().WorkSize, ImGuiCond.Always); - ImGui.SetNextWindowPos(ImGui.GetMainViewport().WorkPos); - ImGuiStylePtr style = ImGui.GetStyle(); - System.Numerics.Vector4 borderColor = style.Colors[(int)ImGuiCol.Border]; - if (ImGui.Begin("##mainWindow", ref b, ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoSavedSettings)) - { - style.Colors[(int)ImGuiCol.Border] = borderColor; - tickDelegate?.Invoke(dt); - } - - ImGui.End(); - - if (showImGuiDemo) - { - ImGui.ShowDemoWindow(ref showImGuiDemo); - } - - if (showImGuiMetrics) - { - ImGui.ShowMetricsWindow(ref showImGuiMetrics); - } - } - - /// - /// Sets the window icon using the specified icon file path. - /// - /// The file path to the icon image. - public static void SetWindowIcon(string iconPath) - { - using FileStream stream = File.OpenRead(iconPath); - using Image sourceImage = Image.Load(stream); - - int[] iconSizes = [128, 64, 48, 32, 28, 24, 22, 20, 18, 16]; - - Collection icons = []; - - foreach (int size in iconSizes) - { - Image resizeImage = sourceImage.Clone(); - int sourceSize = Math.Min(sourceImage.Width, sourceImage.Height); - resizeImage.Mutate(x => x.Crop(sourceSize, sourceSize).Resize(size, size, KnownResamplers.Welch)); - - UseImageBytes(resizeImage, bytes => - { - // Create a permanent copy since RawImage needs to keep the data - byte[] iconData = new byte[bytes.Length]; - Array.Copy(bytes, iconData, bytes.Length); - icons.Add(new(size, size, new Memory(iconData))); - }); - } - - Invoker.Invoke(() => window?.SetWindowIcon([.. icons])); - } - - internal static readonly ArrayPool _bytePool = ArrayPool.Shared; - - /// - /// Gets or loads a texture from the specified file path with optimized memory usage. - /// - public static ImGuiAppTextureInfo GetOrLoadTexture(AbsoluteFilePath path) - { - // Check if the texture is already loaded - if (Textures.TryGetValue(path, out ImGuiAppTextureInfo? existingTexture)) - { - return existingTexture; - } - - using Image image = Image.Load(path); - - ImGuiAppTextureInfo textureInfo = new() - { - Path = path, - Width = image.Width, - Height = image.Height - }; - - UseImageBytes(image, bytes => - { - textureInfo.TextureId = UploadTextureRGBA(bytes, image.Width, image.Height); - unsafe - { - textureInfo.TextureRef = new ImTextureRef(default, textureInfo.TextureId); - } - }); - - Textures[path] = textureInfo; - return textureInfo; - } - - /// - /// Executes an action with temporary access to image bytes using pooled memory for efficiency. - /// The bytes are returned to the pool after the action completes. - /// - /// The image to process. - /// The action to perform with the image bytes. - public static void UseImageBytes(Image image, Action action) - { - ArgumentNullException.ThrowIfNull(image); - ArgumentNullException.ThrowIfNull(action); - - int bufferSize = image.Width * image.Height * Unsafe.SizeOf(); - - // Rent buffer from pool - byte[] pooledBuffer = _bytePool.Rent(bufferSize); - try - { - // Copy the image data to the pooled buffer - image.CopyPixelDataTo(pooledBuffer.AsSpan(0, bufferSize)); - - // Execute the action with the pooled buffer - action(pooledBuffer); - } - finally - { - // Always return the buffer to the pool - _bytePool.Return(pooledBuffer); - } - } - - /// - /// Tries to get a texture from the texture dictionary without loading it. - /// - /// The path to the texture file. - /// When this method returns, contains the texture information if the texture is found; otherwise, null. - /// true if the texture was found; otherwise, false. - public static bool TryGetTexture(AbsoluteFilePath path, out ImGuiAppTextureInfo? textureInfo) => Textures.TryGetValue(path, out textureInfo); - - /// - /// Tries to get a texture from the texture dictionary without loading it. - /// - /// The path to the texture file as a string. - /// When this method returns, contains the texture information if the texture is found; otherwise, null. - /// true if the texture was found; otherwise, false. - public static bool TryGetTexture(string path, out ImGuiAppTextureInfo? textureInfo) => TryGetTexture(path.As(), out textureInfo); - - /// - /// Uploads a texture to the GPU using the specified RGBA byte array, width, and height. - /// - internal static uint UploadTextureRGBA(byte[] bytes, int width, int height) - { - return Invoker.Invoke(() => - { - if (gl is null) - { - throw new InvalidOperationException("OpenGL context is not initialized."); - } - - // Upload texture to graphics system - gl.GetInteger(GLEnum.TextureBinding2D, out int previousTextureId); - - nint textureHandle = Marshal.AllocHGlobal(bytes.Length); - try - { - Marshal.Copy(bytes, 0, textureHandle, bytes.Length); - Texture texture = new(gl, width, height, textureHandle, pxFormat: PixelFormat.Rgba); - texture.Bind(); - texture.SetMagFilter(TextureMagFilter.Linear); - texture.SetMinFilter(TextureMinFilter.Linear); - - // Restore state - gl.BindTexture(GLEnum.Texture2D, (uint)previousTextureId); - - return texture.GlTexture; - } - finally - { - Marshal.FreeHGlobal(textureHandle); - } - }); - } - - /// - /// Deletes the specified texture from the GPU. - /// - /// The OpenGL texture ID to delete. - /// Thrown if the OpenGL context is not initialized. - public static void DeleteTexture(uint textureId) - { - Invoker.Invoke(() => - { - if (gl is null) - { - throw new InvalidOperationException("OpenGL context is not initialized."); - } - - gl.DeleteTexture(textureId); - Textures.Where(x => x.Value.TextureId == textureId).ToList().ForEach(x => Textures.Remove(x.Key, out ImGuiAppTextureInfo? _)); - }); - } - - /// - /// Deletes the specified texture from the GPU. - /// - /// The texture info containing the texture ID to delete. - /// Thrown if the OpenGL context is not initialized. - /// Thrown if the textureInfo is null. - public static void DeleteTexture(ImGuiAppTextureInfo textureInfo) => DeleteTexture(textureInfo?.TextureId ?? throw new ArgumentNullException(nameof(textureInfo))); - - internal static void UpdateDpiScale() - { - float newScaleFactor = (float)ForceDpiAware.GetWindowScaleFactor(); - - // Only update if the scale factor changed significantly (more than 1% difference) - if (Math.Abs(ScaleFactor - newScaleFactor) > 0.01f) - { - float oldScaleFactor = ScaleFactor; - ScaleFactor = newScaleFactor; - - // Only reload fonts if scale factor changed significantly (more than 5% difference) - // This prevents unnecessary font reloading for minor DPI changes - if (controller?.FontsConfigured == true && Math.Abs(oldScaleFactor - newScaleFactor) > 0.05f) - { - InitFonts(); - } - } - } - - // Using the new ImGui 1.92.0 dynamic font system - // Fonts can now be rendered at any size dynamically - no need to preload multiple sizes! - internal static unsafe void InitFonts() - { - DebugLogger.Log("InitFonts: Starting font initialization"); - - // Only load fonts if they haven't been loaded or if scale factor has changed - if (controller?.FontsConfigured == true && Math.Abs(lastFontScaleFactor - ScaleFactor) < 0.01f) - { - DebugLogger.Log("InitFonts: Skipping font reload - already configured"); - return; // Skip reloading fonts if they're already loaded and scale hasn't changed - } - - lastFontScaleFactor = ScaleFactor; - - ImGuiIOPtr io = ImGui.GetIO(); - ImFontAtlasPtr fontAtlasPtr = io.Fonts; - - // Clear existing font data and indices - fontAtlasPtr.Clear(); - FontIndices.Clear(); - - // Track fonts that need disposal after rebuilding the atlas - List fontPinnedData = []; - - // Load fonts from configuration at multiple sizes - IEnumerable> fontsToLoad = Config.Fonts.Concat(Config.DefaultFonts); - int defaultFontIndex = -1; - - // Pre-allocate emoji font memory outside the loops for reuse - nint emojiHandle = IntPtr.Zero; - int emojiLength = 0; - byte[]? emojiBytes = ImGuiAppConfig.EmojiFont; - if (emojiBytes != null) - { - emojiHandle = Marshal.AllocHGlobal(emojiBytes.Length); - currentFontMemoryHandles.Add(emojiHandle); - Marshal.Copy(emojiBytes, 0, emojiHandle, emojiBytes.Length); - emojiLength = emojiBytes.Length; - } - - foreach ((string name, byte[] fontBytes) in fontsToLoad) - { - // Pre-allocate main font memory outside the size loop for reuse - nint fontHandle = Marshal.AllocHGlobal(fontBytes.Length); - currentFontMemoryHandles.Add(fontHandle); - Marshal.Copy(fontBytes, 0, fontHandle, fontBytes.Length); - - foreach (int size in CommonFontSizes) - { - LoadFontFromMemory($"{name}_{size}", fontHandle, fontBytes.Length, fontAtlasPtr, size); - - // Load and merge emoji font immediately after main font for proper merging - if (emojiHandle != IntPtr.Zero) - { - LoadEmojiFontFromMemory(emojiHandle, emojiLength, fontAtlasPtr, size); - } - - // Prioritize DefaultFonts over custom Fonts for setting the default font - if (size == FontAppearance.DefaultFontPointSize) - { - // If this is from DefaultFonts, use it as the default font - if (Config.DefaultFonts.ContainsKey(name)) - { - defaultFontIndex = FontIndices[$"{name}_{size}"]; - } - // If no DefaultFonts font has been set yet, use the first custom font as fallback - else if (defaultFontIndex == -1) - { - defaultFontIndex = FontIndices[$"{name}_{size}"]; - } - } - } - } - - // Set the font indices for the default font - if (defaultFontIndex != -1) - { - FontIndices["default"] = defaultFontIndex; // Store with "default" key for FontAppearance.DefaultFontName - FontIndices["Default"] = defaultFontIndex; // Store with "Default" key for FindBestFontForAppearance fallback - FontIndices[$"Default_{FontAppearance.DefaultFontPointSize}"] = defaultFontIndex; // Store with "Default_12" key for compatibility - } - - // Add ImGui default font as fallback if no custom fonts were loaded - if (defaultFontIndex == -1) - { - defaultFontIndex = fontAtlasPtr.Fonts.Size; - fontAtlasPtr.AddFontDefault(); - FontIndices[$"Default_{FontAppearance.DefaultFontPointSize}"] = defaultFontIndex; - FontIndices["default"] = defaultFontIndex; - FontIndices["Default"] = defaultFontIndex; - } - - // Build the font atlas to generate the texture - ImGuiP.ImFontAtlasBuildMain(fontAtlasPtr); - - // Set the default font for ImGui rendering - if (defaultFontIndex != -1 && defaultFontIndex < fontAtlasPtr.Fonts.Size) - { - io.FontDefault = fontAtlasPtr.Fonts[defaultFontIndex]; - } - - // Store the pinned font data for later cleanup - StorePinnedFontData(fontPinnedData); - DebugLogger.Log("InitFonts: Font initialization completed"); - } - - /// - /// Loads a font from pre-allocated memory into the font atlas with custom glyph ranges. - /// This method reuses already allocated memory to avoid duplicate allocations for multiple font sizes. - /// - /// The name of the font. - /// The handle to pre-allocated font data. - /// The length of the font data in bytes. - /// The ImGui font atlas. - /// The point size for the font. - /// Custom glyph ranges, or null for default ranges. - internal static unsafe void LoadFontFromMemory(string name, nint fontHandle, int fontLength, ImFontAtlasPtr fontAtlasPtr, int pointSize, uint* glyphRanges = null) - { - // Calculate optimal pixel size for the font - float fontSize = CalculateOptimalPixelSize(pointSize); - - // Create font configuration - ImFontConfigPtr fontConfig = ImGui.ImFontConfig(); - fontConfig.FontDataOwnedByAtlas = false; // We manage the memory ourselves - fontConfig.PixelSnapH = true; - - // Use custom glyph ranges if provided, otherwise use extended Unicode ranges if enabled - uint* ranges = glyphRanges != null ? glyphRanges : (Config.EnableUnicodeSupport ? FontHelper.GetExtendedUnicodeRanges(fontAtlasPtr) : fontAtlasPtr.GetGlyphRangesDefault()); - - // Add font to atlas using pre-allocated memory - int fontIndex = fontAtlasPtr.Fonts.Size; - fontAtlasPtr.AddFontFromMemoryTTF((void*)fontHandle, fontLength, fontSize, fontConfig, ranges); - - // Store the font index for later retrieval - FontIndices[name] = fontIndex; - } - - /// - /// Loads emoji font from pre-allocated memory and merges it with the previously loaded font for emoji support. - /// This method reuses already allocated emoji font memory to avoid duplicate allocations for multiple font sizes. - /// - /// The handle to pre-allocated emoji font data. - /// The length of the emoji font data in bytes. - /// The ImGui font atlas. - /// The font size to load emoji font for. - internal static unsafe void LoadEmojiFontFromMemory(nint emojiHandle, int emojiLength, ImFontAtlasPtr fontAtlasPtr, int size) - { - // Get emoji-specific ranges (separate from main font to avoid conflicts) - uint* emojiRanges = FontHelper.GetEmojiRanges(); - - // Calculate optimal pixel size for the emoji font - float fontSize = CalculateOptimalPixelSize(size); - - // Create font configuration for merging - ImFontConfigPtr emojiConfig = ImGui.ImFontConfig(); - emojiConfig.FontDataOwnedByAtlas = false; // We manage the memory ourselves - emojiConfig.PixelSnapH = true; - emojiConfig.MergeMode = true; // This is the key - merge with previous font - emojiConfig.GlyphMinAdvanceX = fontSize; // Ensure emoji have consistent width - - // Merge emoji font with the previously added font using pre-allocated memory - fontAtlasPtr.AddFontFromMemoryTTF((void*)emojiHandle, emojiLength, fontSize, emojiConfig, emojiRanges); - } - - /// - /// Calculates the optimal pixel size for a given point size based on current scale factor. - /// - /// The desired point size. - /// The optimal pixel size for crisp rendering. - internal static float CalculateOptimalPixelSize(int pointSize) => - // Round to exact pixels for crisp rendering, avoiding fractional sizes that cause blurry text - Math.Max(1.0f, MathF.Round(pointSize * ScaleFactor)); - - internal static void StorePinnedFontData(List newPinnedData) - { - // Free old font data handles before storing new ones to prevent memory leak - foreach (GCHandle handle in currentPinnedFontData) - { - try - { - if (handle.IsAllocated) - { - handle.Free(); - } - } - catch (InvalidOperationException) - { - // Handle was already freed, ignore - } - } - - // Clear the old list and store the new handles - currentPinnedFontData.Clear(); - currentPinnedFontData.AddRange(newPinnedData); - - // Note: currentFontMemoryHandles is managed separately in LoadFont method - // and will be cleaned up by CleanupPinnedFontData when needed - } - - /// - public static void CleanupAllTextures() - { - if (gl == null) - { - return; - } - - // Make a copy of the keys to avoid collection modification issues - List texturesToRemove = [.. Textures.Keys]; - - foreach (AbsoluteFilePath? texturePath in texturesToRemove) - { - if (Textures.TryGetValue(texturePath, out ImGuiAppTextureInfo? info)) - { - DeleteTexture(info.TextureId); - } - } - - Textures.Clear(); - } - - /// - /// Converts a value in ems to pixels based on the current ImGui font size. - /// - /// The value in ems to convert to pixels. - /// The equivalent value in pixels. - public static int EmsToPx(float ems) - { - // if imgui is not initialized, use default font size - return controller is null - ? (int)(ems * FontAppearance.DefaultFontPointSize) - : Invoker.Invoke(() => (int)(ems * ImGui.GetFontSize())); - } - - /// - /// Converts a value in points to pixels based on the current scale factor. - /// - /// The value in points to convert to pixels. - /// The equivalent value in pixels. - public static int PtsToPx(int pts) => (int)(pts * ScaleFactor); - - /// - /// Resets all static state for testing purposes. - /// - internal static void Reset() - { - window = null; - gl = null; - controller = null; - inputContext = null; - glProvider = null; - LastNormalWindowState = new(); - FontIndices.Clear(); - lastFontScaleFactor = 0; - currentPinnedFontData.Clear(); - currentFontMemoryHandles.Clear(); - Invoker = null!; - IsFocused = true; - IsIdle = false; - lastInputTime = DateTime.UtcNow; - targetFrameTimeMs = 1000.0 / 30.0; - showImGuiMetrics = false; - showImGuiDemo = false; - showPerformanceMonitor = false; - performanceFrameTimes.Clear(); - performanceFrameTimeSum = 0; - performanceFpsHistory.Clear(); - performanceLastFpsUpdateTime = 0; - performanceFrameCount = 0; - ScaleFactor = 1; - Textures.Clear(); - Config = new(); - } - - /// - /// Checks if the OpenGL context has changed and handles texture reloading if needed - /// - internal static void CheckAndHandleContextChange() - { - if (gl == null) - { - return; - } - - // Get the current context handle - nint newContextHandle; - unsafe - { - newContextHandle = (nint)ImGui.GetCurrentContext().Handle; - } - - // If context has changed, reload all textures - if (newContextHandle != currentGLContextHandle && newContextHandle != nint.Zero) - { - currentGLContextHandle = newContextHandle; - ReloadAllTextures(); - } - } - - /// - /// Reloads all previously loaded textures in the new context - /// - internal static void ReloadAllTextures() - { - if (gl == null) - { - return; - } - - // Make a copy to avoid modification issues during iteration - List> texturesToReload = [.. Textures]; - - foreach (KeyValuePair texture in texturesToReload) - { - try - { - AbsoluteFilePath path = texture.Key; - ImGuiAppTextureInfo oldInfo = texture.Value; - - // Only reload from file if the path exists - if (File.Exists(path)) - { - using Image image = Image.Load(path); - uint oldTextureId = oldInfo.TextureId; - - // Upload new texture - UseImageBytes(image, bytes => - { - oldInfo.TextureId = UploadTextureRGBA(bytes, image.Width, image.Height); - unsafe - { - oldInfo.TextureRef = new ImTextureRef(default, oldInfo.TextureId); - } - }); - - // No need to delete old texture as the context is already gone - } - } - catch (Exception ex) when (ex is IOException or InvalidOperationException or ArgumentException) - { - } - } - } - - /// - /// Updates performance monitoring metrics. - /// - /// The delta time since the last frame. - internal static void UpdatePerformanceMonitoring(float dt) - { - performanceFrameTimes.Enqueue(dt); - performanceFrameTimeSum += dt; - - while (performanceFrameTimes.Count > 60) // Keep last 60 frames - { - performanceFrameTimeSum -= performanceFrameTimes.Dequeue(); - } - - // Track FPS over time (update every 0.5 seconds for smoother graph) - performanceFrameCount++; - performanceLastFpsUpdateTime += dt; - - if (performanceLastFpsUpdateTime >= 0.5f) - { - float currentFps = performanceFrameCount / performanceLastFpsUpdateTime; - performanceFpsHistory.Enqueue(currentFps); - - while (performanceFpsHistory.Count > 120) // Keep last 2 minutes of data (120 * 0.5s = 60s) - { - performanceFpsHistory.Dequeue(); - } - - performanceFrameCount = 0; - performanceLastFpsUpdateTime = 0; - } - } - - /// - /// Renders the performance monitor window. - /// - internal static void RenderPerformanceMonitor() - { - if (!showPerformanceMonitor) - { - return; - } - - if (ImGui.Begin("Performance Monitor", ref showPerformanceMonitor)) - { - ImGui.TextWrapped("This window shows the current performance state and throttling behavior."); - ImGui.Separator(); - - ImGui.Text($"Window Focused: {IsFocused}"); - ImGui.Text($"Application Idle: {IsIdle}"); - ImGui.Text($"Window Visible: {IsVisible}"); - - ImGui.Separator(); - ImGui.TextWrapped("Throttling uses sleep-based timing to control frame rate and save resources. It evaluates all conditions and uses the lowest frame rate. VSync is disabled to allow proper frame rate control below monitor refresh rate."); - ImGui.Text("Rates: Focused=30 FPS, Unfocused=5 FPS, Idle=10 FPS, Not Visible=2 FPS (0.5s per frame)"); - ImGui.TextWrapped("The system automatically selects the lowest applicable rate using Thread.Sleep for precise timing control. Try combining conditions (e.g., unfocused + idle, or minimized) to see the effect."); - - // Real-time FPS graph - ImGui.Separator(); - ImGui.Text("Real-Time Frame Rate Graph:"); - - if (performanceFpsHistory.Count > 1) - { - float[] fpsArray = [.. performanceFpsHistory]; - float currentFps = fpsArray[^1]; - float avgFps = performanceFrameTimes.Count > 0 ? performanceFrameTimes.Count / performanceFrameTimeSum : 0; - - ImGui.Text($"Current FPS: {currentFps:F1} | Average FPS: {avgFps:F1}"); - - // Show PID controller diagnostics - ImGui.Separator(); - ImGui.Text("PID Frame Limiter Diagnostics:"); - double currentTargetFps = 1000.0 / targetFrameTimeMs; - ImGui.Text($"Target: {currentTargetFps:F1} FPS ({targetFrameTimeMs:F1}ms)"); - ImGui.Text(frameLimiter.GetDiagnosticInfo()); - (double currentKp, double currentKi, double currentKd) = frameLimiter.GetCurrentParameters(); - ImGui.Text($"PID Gains: Kp={currentKp:F3}, Ki={currentKi:F3}, Kd={currentKd:F3}"); - ImGui.TextWrapped("The PID controller uses high-precision timing (Thread.Sleep + Stopwatch spin-wait) for accurate frame rate control, replacing simple Thread.Sleep limitations for better precision at higher frame rates. VSync is disabled to prevent interference with frame limiting."); - - // PID Auto-Tuning Section - ImGui.Separator(); - ImGui.Text("PID Auto-Tuning:"); - - (bool isTuningActive, int currentStep, int totalSteps, double progressPercent, PidFrameLimiter.TuningResult? bestResult, string phase) = frameLimiter.GetTuningStatusDetailed(); - - if (isTuningActive) - { - ImGui.Text($"Phase: {phase}"); - ImGui.Text($"Progress: Step {currentStep}/{totalSteps} ({progressPercent:F1}%)"); - ImGui.ProgressBar((float)(progressPercent / 100.0), new System.Numerics.Vector2(300, 0)); - ImGui.TextColored(new System.Numerics.Vector4(1.0f, 0.8f, 0.4f, 1.0f), "⚠️ Throttling disabled during tuning for consistent results"); - ImGui.TextWrapped("Comprehensive tuning: Coarse (8s/test) → Fine (12s/test) → Precision (15s/test)"); - - if (ImGui.Button("Stop Auto-Tuning")) - { - frameLimiter.StopAutoTuning(); - } - } - else - { - ImGui.TextWrapped("Comprehensive auto-tuning tests different PID parameter combinations across multiple phases to find optimal settings for maximum accuracy. Throttling is automatically disabled during tuning for consistent results."); - ImGui.TextWrapped("• Phase 1: Coarse tuning (8s per test, 24 parameters)"); - ImGui.TextWrapped("• Phase 2: Fine tuning (12s per test, 25 parameters around best result)"); - ImGui.TextWrapped("• Phase 3: Precision tuning (15s per test, 9 parameters for final optimization)"); - ImGui.TextColored(new System.Numerics.Vector4(1.0f, 0.6f, 0.6f, 1.0f), "⏱️ Total time: ~12-15 minutes for maximum accuracy"); - - if (ImGui.Button("Start Comprehensive Auto-Tuning")) - { - frameLimiter.StartAutoTuning(); - } - - if (bestResult.HasValue) - { - ImGui.Text("Best tuned parameters:"); - ImGui.Text($" Kp: {bestResult.Value.Kp:F3}, Ki: {bestResult.Value.Ki:F3}, Kd: {bestResult.Value.Kd:F3}"); - ImGui.Text($" Score: {bestResult.Value.Score:F3} (Avg Error: {bestResult.Value.AverageError:F2}ms)"); - } - } - - // Show current throttling state - string currentState = "Unknown"; - if (isTuningActive) - { - currentState = "Throttling Disabled (PID Tuning Active)"; - } - else if (!IsVisible) - { - currentState = "Not Visible (2 FPS target)"; - } - else if (!IsFocused && IsIdle) - { - currentState = "Unfocused + Idle (5 FPS target)"; - } - else if (!IsFocused) - { - currentState = "Unfocused (5 FPS target)"; - } - else if (IsIdle) - { - currentState = "Idle (10 FPS target)"; - } - else - { - currentState = "Focused (30 FPS target)"; - } - - ImGui.Text($"Current State: {currentState}"); - - // Create the plot - ImGui.PlotLines("##FPS", ref fpsArray[0], fpsArray.Length, 0, - $"FPS Over Time (Last {performanceFpsHistory.Count * 0.5f:F0}s)", 0.0f, 35.0f, - new System.Numerics.Vector2(400, 100)); - - ImGui.TextWrapped("Graph shows FPS over the last 60 seconds. Watch it change as you focus/unfocus the window or minimize it!"); - ImGui.Separator(); - ImGui.TextColored(new System.Numerics.Vector4(0.7f, 0.9f, 0.7f, 1.0f), "💡 Testing Tips:"); - ImGui.BulletText("Click on another window to see unfocused throttling (5 FPS)"); - ImGui.BulletText("Stop moving the mouse for 5+ seconds to see idle throttling (10 FPS)"); - ImGui.BulletText("Minimize this window to see not visible throttling (2 FPS)"); - ImGui.BulletText("The lowest applicable rate always wins!"); - } - else - { - ImGui.Text("Collecting data for graph..."); - } - } - - ImGui.End(); - } -} diff --git a/ImGui.App/ImGuiAppConfig.cs b/ImGui.App/ImGuiAppConfig.cs deleted file mode 100644 index 8e1bae8..0000000 --- a/ImGui.App/ImGuiAppConfig.cs +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -using System.Resources; -using ktsu.ScopedAction; -using Silk.NET.Windowing; - -/// -/// Represents the configuration settings for the ImGui application. -/// -public class ImGuiAppConfig -{ - /// - /// Gets or sets a value indicating whether the application is running in test mode. - /// When true, the window will be invisible and optimized for testing. - /// - public bool TestMode { get; init; } - - /// - /// Gets or sets the test window to use when TestMode is true. - /// This must be set when TestMode is true. - /// - internal IWindow? TestWindow { get; init; } - - /// - /// Gets or sets the title of the application window. - /// - public string Title { get; init; } = nameof(ImGuiApp); - - /// - /// Gets or sets the file path to the application window icon. - /// - public string IconPath { get; init; } = string.Empty; - - /// - /// Gets or sets the initial state of the application window. - /// - public ImGuiAppWindowState InitialWindowState { get; init; } = new(); - - /// - /// Gets or sets the action to be performed when the application starts. - /// - public Action OnStart { get; init; } = () => { }; - - /// - /// Gets or sets a scoped action to enclose the frame rendering. - /// - public Func FrameWrapperFactory { get; init; } = () => null; - - /// - /// Gets or sets the action to be performed on each update tick. - /// - public Action OnUpdate { get; init; } = (delta) => { }; - - /// - /// Gets or sets the action to be performed on each render tick. - /// - public Action OnRender { get; init; } = (delta) => { }; - - /// - /// Gets or sets the action to be performed when rendering the application menu. - /// - public Action OnAppMenu { get; init; } = () => { }; - - /// - /// Gets or sets the action to be performed when the application window is moved or resized. - /// - public Action OnMoveOrResize { get; init; } = () => { }; - - /// - /// Gets or sets the fonts to be used in the application. - /// - /// - /// A dictionary where the key is the font name and the value is the byte array representing the font data. - /// - public Dictionary Fonts { get; init; } = []; - - /// - /// Gets or sets a value indicating whether to enable extended Unicode support for fonts. - /// When true, fonts will include extended character ranges for accented characters, - /// mathematical symbols, currency symbols, emojis, and other Unicode blocks. - /// When false, only basic ASCII characters (0-127) will be available. - /// Default is true. - /// - public bool EnableUnicodeSupport { get; init; } = true; - - /// - /// Gets or sets a value indicating whether ImGui should save window settings to imgui.ini. - /// When false, window positions and sizes will not be persisted between sessions. - /// - public bool SaveIniSettings { get; init; } = true; - - /// - /// Gets or sets the performance settings for throttled rendering. - /// - public ImGuiAppPerformanceSettings PerformanceSettings { get; init; } = new(); - - internal Dictionary DefaultFonts { get; init; } = new Dictionary - { - { "default", Resources.Resources.NerdFont} - }; - - /// - /// Gets the emoji font data if available, null otherwise. - /// - internal static byte[]? EmojiFont - { - get - { - try - { - return Resources.Resources.NotoEmoji; - } - catch (MissingManifestResourceException) - { - // NotoEmoji.ttf not available in resources - return null; - } - catch (InvalidOperationException) - { - // Resource manager not available - return null; - } - } - } -} diff --git a/ImGui.App/ImGuiAppPerformanceSettings.cs b/ImGui.App/ImGuiAppPerformanceSettings.cs deleted file mode 100644 index ec0918c..0000000 --- a/ImGui.App/ImGuiAppPerformanceSettings.cs +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -/// -/// Represents performance settings for throttled rendering to save system resources. -/// -public class ImGuiAppPerformanceSettings -{ - /// - /// Gets or sets a value indicating whether throttled rendering is enabled. - /// When true, the application will reduce frame rate when unfocused or idle. - /// - public bool EnableThrottledRendering { get; init; } = true; - - /// - /// Gets or sets the target frame rate (FPS) when the application window is focused and active. - /// - public double FocusedFps { get; init; } = 30.0; - - /// - /// Gets or sets the target frame rate (FPS) when the application window is unfocused. - /// - public double UnfocusedFps { get; init; } = 5.0; - - /// - /// Gets or sets the target frame rate (FPS) when the application is idle (no user input). - /// - public double IdleFps { get; init; } = 10.0; - - /// - /// Gets or sets the target frame rate (FPS) when the application window is not visible (minimized or hidden). - /// - public double NotVisibleFps { get; init; } = 2.0; - - /// - /// Gets or sets a value indicating whether idle detection is enabled. - /// When true, the application will detect when there's no user input and reduce frame rate further. - /// - public bool EnableIdleDetection { get; init; } = true; - - /// - /// Gets or sets the time (in seconds) of no user input before the application is considered idle. - /// - public double IdleTimeoutSeconds { get; init; } = 30.0; -} diff --git a/ImGui.App/ImGuiAppTextureInfo.cs b/ImGui.App/ImGuiAppTextureInfo.cs deleted file mode 100644 index 33b26b9..0000000 --- a/ImGui.App/ImGuiAppTextureInfo.cs +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; -using Hexa.NET.ImGui; -using ktsu.Semantics.Paths; - -/// -/// Represents information about a texture, including its file path, texture ID, width, and height. -/// -public class ImGuiAppTextureInfo -{ - /// - /// Gets or sets the file path of the texture. - /// - public AbsoluteFilePath Path { get; set; } = new(); - - /// - /// Gets or sets the OpenGL texture ID. - /// - public uint TextureId { get; set; } - - /// - /// Gets or sets the ImGui texture reference for ImGui 1.92+ texture system. - /// - public ImTextureRef TextureRef { get; set; } - - /// - /// Gets or sets the width of the texture. - /// - public int Width { get; set; } - - /// - /// Gets or sets the height of the texture. - /// - public int Height { get; set; } -} diff --git a/ImGui.App/ImGuiAppWindowState.cs b/ImGui.App/ImGuiAppWindowState.cs deleted file mode 100644 index 920a894..0000000 --- a/ImGui.App/ImGuiAppWindowState.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; -using System.Numerics; - -using Silk.NET.Windowing; - -/// -/// Represents the state of the ImGui application window, including size, position, and layout state. -/// -public class ImGuiAppWindowState -{ - /// - /// Gets or sets the size of the window. - /// - public Vector2 Size { get; set; } = new(1280, 720); - - /// - /// Gets or sets the position of the window. - /// - public Vector2 Pos { get; set; } = new(-short.MinValue, -short.MinValue); - - /// - /// Gets or sets the layout state of the window. - /// - public WindowState LayoutState { get; set; } -} diff --git a/ImGui.App/ImGuiController/GLWrapper.cs b/ImGui.App/ImGuiController/GLWrapper.cs deleted file mode 100644 index 7d69bbe..0000000 --- a/ImGui.App/ImGuiController/GLWrapper.cs +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using Silk.NET.Maths; -using Silk.NET.OpenGL; -using Color = System.Drawing.Color; - -/// -/// Wrapper class that implements IGL by delegating to a real GL instance. -/// -public sealed class GLWrapper(GL gl) : IGL -{ - internal bool _disposed; - - /// - /// Gets the underlying GL instance. - /// - public GL UnderlyingGL { get; } = gl ?? throw new ArgumentNullException(nameof(gl)); - - /// - public void GetInteger(GLEnum pname, out int data) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.GetInteger(pname, out data); - } - - /// - public float GetFloat(GLEnum pname) - { - ObjectDisposedException.ThrowIf(_disposed, this); - return UnderlyingGL.GetFloat(pname); - } - - /// - public void Enable(GLEnum cap) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.Enable(cap); - } - - /// - public void Disable(GLEnum cap) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.Disable(cap); - } - - /// - public void BlendEquation(GLEnum mode) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.BlendEquation(mode); - } - - /// - public void BlendFuncSeparate(GLEnum srcRGB, GLEnum dstRGB, GLEnum srcAlpha, GLEnum dstAlpha) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.BlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); - } - - /// - public void Viewport(Vector2D size) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.Viewport(size); - } - - /// - public void ClearColor(Color color) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.ClearColor(color.R / 255f, color.G / 255f, color.B / 255f, color.A / 255f); - } - - /// - public void Clear(uint mask) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.Clear(mask); - } - - /// - public void BindTexture(GLEnum target, uint texture) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.BindTexture(target, texture); - } - - /// - public void DeleteTexture(uint texture) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.DeleteTexture(texture); - } - - /// - public uint GenTexture() - { - ObjectDisposedException.ThrowIf(_disposed, this); - return UnderlyingGL.GenTexture(); - } - - /// - public void TexParameter(GLEnum target, GLEnum pname, int param) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.TexParameter(target, pname, param); - } - - /// - public unsafe void TexImage2D(GLEnum target, int level, int internalformat, uint width, uint height, int border, GLEnum format, GLEnum type, void* pixels) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.TexImage2D(target, level, internalformat, width, height, border, format, type, pixels); - } - - /// - public void Dispose() - { - if (!_disposed) - { - UnderlyingGL.Dispose(); - _disposed = true; - } - } -} diff --git a/ImGui.App/ImGuiController/IGL.cs b/ImGui.App/ImGuiController/IGL.cs deleted file mode 100644 index 105d9d0..0000000 --- a/ImGui.App/ImGuiController/IGL.cs +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using Silk.NET.Maths; -using Silk.NET.OpenGL; -using Color = System.Drawing.Color; - -/// -/// Interface that abstracts OpenGL functionality for testing purposes. -/// -public interface IGL : IDisposable -{ - /// - /// Gets an integer parameter value. - /// - /// The parameter name. - /// The output parameter value. - public void GetInteger(GLEnum pname, out int data); - - /// - /// Gets a float parameter value. - /// - /// The parameter name. - /// The parameter value. - public float GetFloat(GLEnum pname); - - /// - /// Enables a GL capability. - /// - /// The capability to enable. - public void Enable(GLEnum cap); - - /// - /// Disables a GL capability. - /// - /// The capability to disable. - public void Disable(GLEnum cap); - - /// - /// Sets the blend equation. - /// - /// The blend equation mode. - public void BlendEquation(GLEnum mode); - - /// - /// Sets the blend function parameters. - /// - public void BlendFuncSeparate(GLEnum srcRGB, GLEnum dstRGB, GLEnum srcAlpha, GLEnum dstAlpha); - - /// - /// Sets the viewport dimensions. - /// - public void Viewport(Vector2D size); - - /// - /// Sets the clear color. - /// - public void ClearColor(Color color); - - /// - /// Clears the specified buffer bits. - /// - public void Clear(uint mask); - - /// - /// Binds a texture to the specified target. - /// - public void BindTexture(GLEnum target, uint texture); - - /// - /// Deletes a texture. - /// - public void DeleteTexture(uint texture); - - /// - /// Generates a new texture. - /// - public uint GenTexture(); - - /// - /// Sets a texture parameter. - /// - public void TexParameter(GLEnum target, GLEnum pname, int param); - - /// - /// Specifies a two-dimensional texture image. - /// - public unsafe void TexImage2D(GLEnum target, int level, int internalformat, uint width, uint height, int border, GLEnum format, GLEnum type, void* pixels); -} diff --git a/ImGui.App/ImGuiController/IOpenGLFactory.cs b/ImGui.App/ImGuiController/IOpenGLFactory.cs deleted file mode 100644 index 97235ef..0000000 --- a/ImGui.App/ImGuiController/IOpenGLFactory.cs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using Silk.NET.OpenGL; - -/// -/// Interface for creating OpenGL contexts. -/// -public interface IOpenGLFactory -{ - /// - /// Creates an OpenGL context. - /// - /// The created OpenGL context. - public GL CreateGL(); -} diff --git a/ImGui.App/ImGuiController/IOpenGLProvider.cs b/ImGui.App/ImGuiController/IOpenGLProvider.cs deleted file mode 100644 index 839cfe6..0000000 --- a/ImGui.App/ImGuiController/IOpenGLProvider.cs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using Silk.NET.OpenGL; - -/// -/// Provides an interface for accessing an OpenGL context. -/// -public interface IOpenGLProvider : IDisposable -{ - /// - /// Retrieves the OpenGL context. - /// - /// An instance of the class representing the OpenGL context. - public GL GetGL(); -} diff --git a/ImGui.App/ImGuiController/ImGuiController.cs b/ImGui.App/ImGuiController/ImGuiController.cs deleted file mode 100644 index 5b3e013..0000000 --- a/ImGui.App/ImGuiController/ImGuiController.cs +++ /dev/null @@ -1,945 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using System; -using System.Collections.Generic; -using System.Numerics; - -using Hexa.NET.ImGui; - -using Silk.NET.Input; -using Silk.NET.Maths; -using Silk.NET.OpenGL; -using Silk.NET.Windowing; - -using ktsu.ImGui.App; - -internal sealed class ImGuiController : IDisposable -{ - - internal GL? _gl; - internal IView? _view; - internal IInputContext? _input; - internal bool _frameBegun; - internal readonly List _pressedChars = []; - internal IKeyboard? _keyboard; - internal IMouse? _mouse; - - internal int _attribLocationTex; - internal int _attribLocationProjMtx; - internal int _attribLocationVtxPos; - internal int _attribLocationVtxUV; - internal int _attribLocationVtxColor; - internal uint _vboHandle; - internal uint _elementsHandle; - internal uint _vertexArrayObject; - - internal Texture? _fontTexture; - internal Shader? _shader; - - internal int _windowWidth; - internal int _windowHeight; - - internal bool FontsConfigured { get; private set; } - - internal bool _disposed; - - /// - /// Constructs a new ImGuiController. - /// - public ImGuiController(GL gl, IView view, IInputContext input) : this(gl, view, input, null, null) - { - } - - /// - /// Constructs a new ImGuiController with font configuration. - /// - public ImGuiController(GL gl, IView view, IInputContext input, ImGuiFontConfig imGuiFontConfig) : this(gl, view, input, imGuiFontConfig, null) - { - } - - /// - /// Constructs a new ImGuiController with an onConfigureIO Action. - /// - public ImGuiController(GL gl, IView view, IInputContext input, Action onConfigureIO) : this(gl, view, input, null, onConfigureIO) - { - } - - /// - /// Constructs a new ImGuiController with font configuration and onConfigure Action. - /// - public ImGuiController(GL gl, IView view, IInputContext input, ImGuiFontConfig? imGuiFontConfig = null, Action? onConfigureIO = null) - { - DebugLogger.Log("ImGuiController: Starting initialization"); - Init(gl, view, input); - DebugLogger.Log("ImGuiController: Init completed"); - - ImGuiIOPtr io = ImGui.GetIO(); - if (imGuiFontConfig is not null) - { - DebugLogger.Log("ImGuiController: Adding font from config"); - nint glyphRange = imGuiFontConfig.Value.GetGlyphRange?.Invoke(io) ?? default; - - unsafe - { - fixed (byte* fontPathPtr = System.Text.Encoding.UTF8.GetBytes(imGuiFontConfig.Value.FontPath + "\0")) - { - io.Fonts.AddFontFromFileTTF(fontPathPtr, imGuiFontConfig.Value.FontSize, null, (uint*)glyphRange); - } - } - } - - DebugLogger.Log("ImGuiController: Calling onConfigureIO"); - onConfigureIO?.Invoke(); - DebugLogger.Log("ImGuiController: onConfigureIO completed"); - - io.BackendFlags |= ImGuiBackendFlags.RendererHasVtxOffset; - - DebugLogger.Log("ImGuiController: Creating device resources"); - CreateDeviceResources(); - DebugLogger.Log("ImGuiController: Device resources created"); - - SetPerFrameImGuiData(1f / 60f); - - DebugLogger.Log("ImGuiController: Beginning frame"); - BeginFrame(); - DebugLogger.Log("ImGuiController: Initialization completed"); - } - - internal void Init(GL gl, IView view, IInputContext input) - { - _gl = gl; - _view = view; - _input = input; - _windowWidth = view.Size.X; - _windowHeight = view.Size.Y; - - ImGui.CreateContext(); - - ImGui.StyleColorsDark(); - } - - internal void BeginFrame() - { - ImGui.NewFrame(); - _frameBegun = true; - _keyboard = _input?.Keyboards[0]; - _mouse = _input?.Mice[0]; - if (_view is not null) - { - _view.Resize += WindowResized; - } - - if (_keyboard is not null) - { - _keyboard.KeyDown += OnKeyDown; - _keyboard.KeyUp += OnKeyUp; - _keyboard.KeyChar += OnKeyChar; - } - - if (_mouse is not null) - { - _mouse.MouseDown += OnMouseDown; - _mouse.MouseUp += OnMouseUp; - _mouse.MouseMove += OnMouseMove; - _mouse.Scroll += OnMouseScroll; - } - } - - /// - /// Delegate to receive keyboard key down events. - /// - /// The keyboard context generating the event. - /// The native keycode of the pressed key. - /// The native scancode of the pressed key. - internal static void OnKeyDown(IKeyboard keyboard, Key keycode, int scancode) - { - ImGuiApp.OnUserInput(); - OnKeyEvent(keyboard, keycode, scancode, down: true); - } - - /// - /// Delegate to receive keyboard key up events. - /// - /// The keyboard context generating the event. - /// The native keycode of the released key. - /// The native scancode of the released key. - internal static void OnKeyUp(IKeyboard keyboard, Key keycode, int scancode) - { - ImGuiApp.OnUserInput(); - OnKeyEvent(keyboard, keycode, scancode, down: false); - } - - internal static void OnMouseScroll(IMouse mouse, ScrollWheel scroll) - { - ImGuiApp.OnUserInput(); - ImGuiIOPtr io = ImGui.GetIO(); - io.AddMouseWheelEvent(scroll.X, scroll.Y); - } - - internal static void OnMouseDown(IMouse mouse, MouseButton button) - { - ImGuiApp.OnUserInput(); - OnMouseButton(mouse, button, down: true); - } - - internal static void OnMouseUp(IMouse mouse, MouseButton button) - { - ImGuiApp.OnUserInput(); - OnMouseButton(mouse, button, down: false); - } - - internal static void OnMouseButton(IMouse _, MouseButton button, bool down) - { - // Only process supported mouse buttons (Left, Right, Middle) - if (button is MouseButton.Left or MouseButton.Right or MouseButton.Middle) - { - ImGuiMouseButton imguiMouseButton = TranslateMouseButtonToImGuiMouseButton(button); - ImGuiIOPtr io = ImGui.GetIO(); - io.AddMouseButtonEvent((int)imguiMouseButton, down); - } - // Auxiliary buttons (Button4-Button12, Unknown) are ignored - } - - internal void OnMouseMove(IMouse _, Vector2 position) - { - ImGuiApp.OnUserInput(); - ImGuiIOPtr io = ImGui.GetIO(); - io.AddMousePosEvent(position.X, position.Y); - } - - /// - /// Delegate to receive keyboard key events. - /// - /// The keyboard context generating the event. - /// The native keycode of the key generating the event. - /// The native scancode of the key generating the event. - /// True if the event is a key down event, otherwise False - internal static void OnKeyEvent(IKeyboard _, Key keycode, int scancode, bool down) - { - ImGuiIOPtr io = ImGui.GetIO(); - ImGuiKey imGuiKey = TranslateInputKeyToImGuiKey(keycode); - io.AddKeyEvent(imGuiKey, down); - io.SetKeyEventNativeData(imGuiKey, (int)keycode, scancode); - - ImGuiKey imguiModKey = TranslateImGuiKeyToImGuiModKey(imGuiKey); - if (imguiModKey != ImGuiKey.None) - { - io.AddKeyEvent(imguiModKey, down); - } - } - - internal void OnKeyChar(IKeyboard arg1, char arg2) - { - ImGuiApp.OnUserInput(); - _pressedChars.Add(arg2); - } - - internal void WindowResized(Vector2D size) - { - _windowWidth = size.X; - _windowHeight = size.Y; - } - - internal void Render() - { - if (_frameBegun) - { - _frameBegun = false; - ImGui.Render(); - RenderImDrawData(ImGui.GetDrawData()); - } - } - - /// - /// Updates ImGui input and IO configuration state. - /// - internal void Update(float deltaSeconds) - { - if (_frameBegun) - { - ImGui.Render(); - } - - SetPerFrameImGuiData(deltaSeconds); - UpdateImGuiInput(); - - _frameBegun = true; - ImGui.NewFrame(); - } - - /// - /// Sets per-frame data based on the associated window. - /// This is called by Update(float). - /// - internal void SetPerFrameImGuiData(float deltaSeconds) - { - ImGuiIOPtr io = ImGui.GetIO(); - io.DisplaySize = new Vector2(_windowWidth, _windowHeight); - - if (_windowWidth > 0 && _windowHeight > 0 && _view is not null) - { - // Force framebuffer scale to 1.0 on Linux to prevent blurry text rendering - // WSL and Linux often have framebuffer scaling issues that cause blur - if (OperatingSystem.IsLinux()) - { - io.DisplayFramebufferScale = Vector2.One; - } - else - { - io.DisplayFramebufferScale = new Vector2(_view.FramebufferSize.X / _windowWidth, - _view.FramebufferSize.Y / _windowHeight); - } - } - - io.DeltaTime = deltaSeconds; // DeltaTime is in seconds. - } - - internal void UpdateImGuiInput() - { - ImGuiIOPtr io = ImGui.GetIO(); - - if (_input is null || _keyboard is null) - { - return; - } - - foreach (char c in _pressedChars) - { - io.AddInputCharacter(c); - } - - _pressedChars.Clear(); - } - - internal void PressChar(char keyChar) => _pressedChars.Add(keyChar); - - /// - /// Translates a Silk.NET.Input.Key to an ImGuiKey. - /// - /// The Silk.NET.Input.Key to translate. - /// The corresponding ImGuiKey. - /// When the key has not been implemented yet. - internal static ImGuiKey TranslateInputKeyToImGuiKey(Key key) - { - return key switch - { - Key.Tab => ImGuiKey.Tab, - Key.Left => ImGuiKey.LeftArrow, - Key.Right => ImGuiKey.RightArrow, - Key.Up => ImGuiKey.UpArrow, - Key.Down => ImGuiKey.DownArrow, - Key.PageUp => ImGuiKey.PageUp, - Key.PageDown => ImGuiKey.PageDown, - Key.Home => ImGuiKey.Home, - Key.End => ImGuiKey.End, - Key.Insert => ImGuiKey.Insert, - Key.Delete => ImGuiKey.Delete, - Key.Backspace => ImGuiKey.Backspace, - Key.Space => ImGuiKey.Space, - Key.Enter => ImGuiKey.Enter, - Key.Escape => ImGuiKey.Escape, - Key.Apostrophe => ImGuiKey.Apostrophe, - Key.Comma => ImGuiKey.Comma, - Key.Minus => ImGuiKey.Minus, - Key.Period => ImGuiKey.Period, - Key.Slash => ImGuiKey.Slash, - Key.Semicolon => ImGuiKey.Semicolon, - Key.Equal => ImGuiKey.Equal, - Key.LeftBracket => ImGuiKey.LeftBracket, - Key.BackSlash => ImGuiKey.Backslash, - Key.RightBracket => ImGuiKey.RightBracket, - Key.GraveAccent => ImGuiKey.GraveAccent, - Key.CapsLock => ImGuiKey.CapsLock, - Key.ScrollLock => ImGuiKey.ScrollLock, - Key.NumLock => ImGuiKey.NumLock, - Key.PrintScreen => ImGuiKey.PrintScreen, - Key.Pause => ImGuiKey.Pause, - Key.Keypad0 => ImGuiKey.Keypad0, - Key.Keypad1 => ImGuiKey.Keypad1, - Key.Keypad2 => ImGuiKey.Keypad2, - Key.Keypad3 => ImGuiKey.Keypad3, - Key.Keypad4 => ImGuiKey.Keypad4, - Key.Keypad5 => ImGuiKey.Keypad5, - Key.Keypad6 => ImGuiKey.Keypad6, - Key.Keypad7 => ImGuiKey.Keypad7, - Key.Keypad8 => ImGuiKey.Keypad8, - Key.Keypad9 => ImGuiKey.Keypad9, - Key.KeypadDecimal => ImGuiKey.KeypadDecimal, - Key.KeypadDivide => ImGuiKey.KeypadDivide, - Key.KeypadMultiply => ImGuiKey.KeypadMultiply, - Key.KeypadSubtract => ImGuiKey.KeypadSubtract, - Key.KeypadAdd => ImGuiKey.KeypadAdd, - Key.KeypadEnter => ImGuiKey.KeypadEnter, - Key.KeypadEqual => ImGuiKey.KeypadEqual, - Key.ShiftLeft => ImGuiKey.LeftShift, - Key.ControlLeft => ImGuiKey.LeftCtrl, - Key.AltLeft => ImGuiKey.LeftAlt, - Key.SuperLeft => ImGuiKey.LeftSuper, - Key.ShiftRight => ImGuiKey.RightShift, - Key.ControlRight => ImGuiKey.RightCtrl, - Key.AltRight => ImGuiKey.RightAlt, - Key.SuperRight => ImGuiKey.RightSuper, - Key.Menu => ImGuiKey.Menu, - Key.Number0 => ImGuiKey.Key0, - Key.Number1 => ImGuiKey.Key1, - Key.Number2 => ImGuiKey.Key2, - Key.Number3 => ImGuiKey.Key3, - Key.Number4 => ImGuiKey.Key4, - Key.Number5 => ImGuiKey.Key5, - Key.Number6 => ImGuiKey.Key6, - Key.Number7 => ImGuiKey.Key7, - Key.Number8 => ImGuiKey.Key8, - Key.Number9 => ImGuiKey.Key9, - Key.A => ImGuiKey.A, - Key.B => ImGuiKey.B, - Key.C => ImGuiKey.C, - Key.D => ImGuiKey.D, - Key.E => ImGuiKey.E, - Key.F => ImGuiKey.F, - Key.G => ImGuiKey.G, - Key.H => ImGuiKey.H, - Key.I => ImGuiKey.I, - Key.J => ImGuiKey.J, - Key.K => ImGuiKey.K, - Key.L => ImGuiKey.L, - Key.M => ImGuiKey.M, - Key.N => ImGuiKey.N, - Key.O => ImGuiKey.O, - Key.P => ImGuiKey.P, - Key.Q => ImGuiKey.Q, - Key.R => ImGuiKey.R, - Key.S => ImGuiKey.S, - Key.T => ImGuiKey.T, - Key.U => ImGuiKey.U, - Key.V => ImGuiKey.V, - Key.W => ImGuiKey.W, - Key.X => ImGuiKey.X, - Key.Y => ImGuiKey.Y, - Key.Z => ImGuiKey.Z, - Key.F1 => ImGuiKey.F1, - Key.F2 => ImGuiKey.F2, - Key.F3 => ImGuiKey.F3, - Key.F4 => ImGuiKey.F4, - Key.F5 => ImGuiKey.F5, - Key.F6 => ImGuiKey.F6, - Key.F7 => ImGuiKey.F7, - Key.F8 => ImGuiKey.F8, - Key.F9 => ImGuiKey.F9, - Key.F10 => ImGuiKey.F10, - Key.F11 => ImGuiKey.F11, - Key.F12 => ImGuiKey.F12, - Key.F13 => ImGuiKey.F13, - Key.F14 => ImGuiKey.F14, - Key.F15 => ImGuiKey.F15, - Key.F16 => ImGuiKey.F16, - Key.F17 => ImGuiKey.F17, - Key.F18 => ImGuiKey.F18, - Key.F19 => ImGuiKey.F19, - Key.F20 => ImGuiKey.F20, - Key.F21 => ImGuiKey.F21, - Key.F22 => ImGuiKey.F22, - Key.F23 => ImGuiKey.F23, - Key.F24 => ImGuiKey.F24, - Key.F25 => ImGuiKey.None, - Key.Unknown => ImGuiKey.None, - Key.World1 => ImGuiKey.None, - Key.World2 => ImGuiKey.None, - _ => ImGuiKey.None, - }; - } - - internal static ImGuiMouseButton TranslateMouseButtonToImGuiMouseButton(MouseButton mouseButton) - { - return mouseButton switch - { - MouseButton.Left => ImGuiMouseButton.Left, - MouseButton.Right => ImGuiMouseButton.Right, - MouseButton.Middle => ImGuiMouseButton.Middle, - _ => ImGuiMouseButton.Middle, - }; - } - - /// - /// Translate an ImGuiKey to the matching ImGuiKey.Mod*. - /// - /// The ImGuiKey to translate. - /// The matching ImGuiKey.Mod*. - [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0072:Add missing cases", Justification = "We're only translating mod keys here.")] - internal static ImGuiKey TranslateImGuiKeyToImGuiModKey(ImGuiKey key) - { - return key switch - { - ImGuiKey.LeftShift => ImGuiKey.ModShift, - ImGuiKey.RightShift => ImGuiKey.ModShift, - ImGuiKey.LeftCtrl => ImGuiKey.ModCtrl, - ImGuiKey.RightCtrl => ImGuiKey.ModCtrl, - ImGuiKey.LeftAlt => ImGuiKey.ModAlt, - ImGuiKey.RightAlt => ImGuiKey.ModAlt, - ImGuiKey.LeftSuper => ImGuiKey.ModSuper, - ImGuiKey.RightSuper => ImGuiKey.ModSuper, - _ => ImGuiKey.None - }; - } - - internal unsafe void SetupRenderState(ImDrawDataPtr drawDataPtr, int framebufferWidth, int framebufferHeight) - { - if (_gl is null || _shader is null) - { - return; - } - - // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill - _gl.Enable(GLEnum.Blend); - _gl.BlendEquation(GLEnum.FuncAdd); - _gl.BlendFuncSeparate(GLEnum.SrcAlpha, GLEnum.OneMinusSrcAlpha, GLEnum.One, GLEnum.OneMinusSrcAlpha); - _gl.Disable(GLEnum.CullFace); - _gl.Disable(GLEnum.DepthTest); - _gl.Disable(GLEnum.StencilTest); - _gl.Enable(GLEnum.ScissorTest); -#if !GLES && !LEGACY - _gl.Disable(GLEnum.PrimitiveRestart); - _gl.PolygonMode(GLEnum.FrontAndBack, GLEnum.Fill); - // Disable multisampling for pixel-perfect rendering - _gl.Disable(GLEnum.Multisample); -#endif - - float L = drawDataPtr.DisplayPos.X; - float R = drawDataPtr.DisplayPos.X + drawDataPtr.DisplaySize.X; - float T = drawDataPtr.DisplayPos.Y; - float B = drawDataPtr.DisplayPos.Y + drawDataPtr.DisplaySize.Y; - - // Use double precision for more accurate orthographic projection - double dL = L, dR = R, dT = T, dB = B; - - Span orthoProjection = [ - (float)(2.0 / (dR - dL)), 0.0f, 0.0f, 0.0f, - 0.0f, (float)(2.0 / (dT - dB)), 0.0f, 0.0f, - 0.0f, 0.0f, -1.0f, 0.0f, - (float)((dR + dL) / (dL - dR)), (float)((dT + dB) / (dB - dT)), 0.0f, 1.0f, - ]; - - _shader.UseShader(); - _gl.Uniform1(_attribLocationTex, 0); - _gl.UniformMatrix4(_attribLocationProjMtx, 1, false, orthoProjection); - _gl.CheckGlError("Projection"); - - _gl.BindSampler(0, 0); - - // Setup desired GL state - // Recreate the VAO every time (this is to easily allow multiple GL contexts to be rendered to. VAO are not shared among GL contexts) - // The renderer would actually work without any VAO bound, but then our VertexAttrib calls would overwrite the default one currently bound. - _vertexArrayObject = _gl.GenVertexArray(); - _gl.BindVertexArray(_vertexArrayObject); - _gl.CheckGlError("VAO"); - - // Bind vertex/index buffers and setup attributes for ImDrawVert - _gl.BindBuffer(GLEnum.ArrayBuffer, _vboHandle); - _gl.BindBuffer(GLEnum.ElementArrayBuffer, _elementsHandle); - _gl.EnableVertexAttribArray((uint)_attribLocationVtxPos); - _gl.EnableVertexAttribArray((uint)_attribLocationVtxUV); - _gl.EnableVertexAttribArray((uint)_attribLocationVtxColor); - _gl.VertexAttribPointer((uint)_attribLocationVtxPos, 2, GLEnum.Float, false, (uint)sizeof(ImDrawVert), (void*)0); - _gl.VertexAttribPointer((uint)_attribLocationVtxUV, 2, GLEnum.Float, false, (uint)sizeof(ImDrawVert), (void*)8); - _gl.VertexAttribPointer((uint)_attribLocationVtxColor, 4, GLEnum.UnsignedByte, true, (uint)sizeof(ImDrawVert), (void*)16); - } - - internal unsafe void RenderImDrawData(ImDrawDataPtr drawDataPtr) - { - if (_gl is null) - { - return; - } - - int framebufferWidth = (int)(drawDataPtr.DisplaySize.X * drawDataPtr.FramebufferScale.X); - int framebufferHeight = (int)(drawDataPtr.DisplaySize.Y * drawDataPtr.FramebufferScale.Y); - if (framebufferWidth <= 0 || framebufferHeight <= 0) - { - return; - } - - // Backup GL state - _gl.GetInteger(GLEnum.ActiveTexture, out int lastActiveTexture); - _gl.ActiveTexture(GLEnum.Texture0); - - _gl.GetInteger(GLEnum.CurrentProgram, out int lastProgram); - _gl.GetInteger(GLEnum.TextureBinding2D, out int lastTexture); - - _gl.GetInteger(GLEnum.SamplerBinding, out int lastSampler); - - _gl.GetInteger(GLEnum.ArrayBufferBinding, out int lastArrayBuffer); - _gl.GetInteger(GLEnum.VertexArrayBinding, out int lastVertexArrayObject); - -#if !GLES - Span lastPolygonMode = stackalloc int[2]; - _gl.GetInteger(GLEnum.PolygonMode, lastPolygonMode); -#endif - - Span lastScissorBox = stackalloc int[4]; - _gl.GetInteger(GLEnum.ScissorBox, lastScissorBox); - - _gl.GetInteger(GLEnum.BlendSrcRgb, out int lastBlendSrcRgb); - _gl.GetInteger(GLEnum.BlendDstRgb, out int lastBlendDstRgb); - - _gl.GetInteger(GLEnum.BlendSrcAlpha, out int lastBlendSrcAlpha); - _gl.GetInteger(GLEnum.BlendDstAlpha, out int lastBlendDstAlpha); - - _gl.GetInteger(GLEnum.BlendEquationRgb, out int lastBlendEquationRgb); - _gl.GetInteger(GLEnum.BlendEquationAlpha, out int lastBlendEquationAlpha); - - bool lastEnableBlend = _gl.IsEnabled(GLEnum.Blend); - bool lastEnableCullFace = _gl.IsEnabled(GLEnum.CullFace); - bool lastEnableDepthTest = _gl.IsEnabled(GLEnum.DepthTest); - bool lastEnableStencilTest = _gl.IsEnabled(GLEnum.StencilTest); - bool lastEnableScissorTest = _gl.IsEnabled(GLEnum.ScissorTest); - -#if !GLES && !LEGACY - bool lastEnablePrimitiveRestart = _gl.IsEnabled(GLEnum.PrimitiveRestart); -#endif - - SetupRenderState(drawDataPtr, framebufferWidth, framebufferHeight); - - // Will project scissor/clipping rectangles into framebuffer space - Vector2 clipOff = drawDataPtr.DisplayPos; // (0,0) unless using multi-viewports - Vector2 clipScale = drawDataPtr.FramebufferScale; // (1,1) unless using retina display which are often (2,2) - - // Render command lists - for (int n = 0; n < drawDataPtr.CmdListsCount; n++) - { - ImDrawListPtr cmdListPtr = drawDataPtr.CmdLists[n]; - - // Upload vertex/index buffers - - _gl.BufferData(GLEnum.ArrayBuffer, (nuint)(cmdListPtr.VtxBuffer.Size * sizeof(ImDrawVert)), cmdListPtr.VtxBuffer.Data, GLEnum.StreamDraw); - _gl.CheckGlError($"Data Vert {n}"); - _gl.BufferData(GLEnum.ElementArrayBuffer, (nuint)(cmdListPtr.IdxBuffer.Size * sizeof(ushort)), cmdListPtr.IdxBuffer.Data, GLEnum.StreamDraw); - _gl.CheckGlError($"Data Idx {n}"); - - for (int cmd_i = 0; cmd_i < cmdListPtr.CmdBuffer.Size; cmd_i++) - { - ImDrawCmd cmdPtr = cmdListPtr.CmdBuffer[cmd_i]; - - unsafe - { - if (cmdPtr.UserCallback != null) - { - throw new NotImplementedException(); - } - else - { - Vector4 clipRect; - clipRect.X = (cmdPtr.ClipRect.X - clipOff.X) * clipScale.X; - clipRect.Y = (cmdPtr.ClipRect.Y - clipOff.Y) * clipScale.Y; - clipRect.Z = (cmdPtr.ClipRect.Z - clipOff.X) * clipScale.X; - clipRect.W = (cmdPtr.ClipRect.W - clipOff.Y) * clipScale.Y; - - if (clipRect.X < framebufferWidth && clipRect.Y < framebufferHeight && clipRect.Z >= 0.0f && clipRect.W >= 0.0f) - { - // Round scissor rectangle to pixel boundaries to avoid sub-pixel rendering issues - int scissorX = (int)Math.Floor(clipRect.X); - int scissorY = (int)Math.Floor(framebufferHeight - clipRect.W); - uint scissorWidth = (uint)Math.Max(0, Math.Ceiling(clipRect.Z - clipRect.X)); - uint scissorHeight = (uint)Math.Max(0, Math.Ceiling(clipRect.W - clipRect.Y)); - - // Apply scissor/clipping rectangle - _gl.Scissor(scissorX, scissorY, scissorWidth, scissorHeight); - _gl.CheckGlError("Scissor"); - - // Bind texture, Draw - // In ImGui 1.92.0+, use GetTexID() method to get texture ID - // This method returns the texture ID compatible with OpenGL - uint textureId = (uint)cmdPtr.GetTexID(); - _gl.BindTexture(GLEnum.Texture2D, textureId); - _gl.CheckGlError("Texture"); - - _gl.DrawElementsBaseVertex(GLEnum.Triangles, cmdPtr.ElemCount, GLEnum.UnsignedShort, (void*)(cmdPtr.IdxOffset * sizeof(ushort)), (int)cmdPtr.VtxOffset); - _gl.CheckGlError("Draw"); - } - } - } - } - } - - // Destroy the temporary VAO - _gl.DeleteVertexArray(_vertexArrayObject); - _vertexArrayObject = 0; - - // Restore modified GL state - _gl.UseProgram((uint)lastProgram); - _gl.BindTexture(GLEnum.Texture2D, (uint)lastTexture); - - _gl.BindSampler(0, (uint)lastSampler); - - _gl.ActiveTexture((GLEnum)lastActiveTexture); - - _gl.BindVertexArray((uint)lastVertexArrayObject); - - _gl.BindBuffer(GLEnum.ArrayBuffer, (uint)lastArrayBuffer); - _gl.BlendEquationSeparate((GLEnum)lastBlendEquationRgb, (GLEnum)lastBlendEquationAlpha); - _gl.BlendFuncSeparate((GLEnum)lastBlendSrcRgb, (GLEnum)lastBlendDstRgb, (GLEnum)lastBlendSrcAlpha, (GLEnum)lastBlendDstAlpha); - - if (lastEnableBlend) - { - _gl.Enable(GLEnum.Blend); - } - else - { - _gl.Disable(GLEnum.Blend); - } - - if (lastEnableCullFace) - { - _gl.Enable(GLEnum.CullFace); - } - else - { - _gl.Disable(GLEnum.CullFace); - } - - if (lastEnableDepthTest) - { - _gl.Enable(GLEnum.DepthTest); - } - else - { - _gl.Disable(GLEnum.DepthTest); - } - - if (lastEnableStencilTest) - { - _gl.Enable(GLEnum.StencilTest); - } - else - { - _gl.Disable(GLEnum.StencilTest); - } - - if (lastEnableScissorTest) - { - _gl.Enable(GLEnum.ScissorTest); - } - else - { - _gl.Disable(GLEnum.ScissorTest); - } - -#if !GLES && !LEGACY - if (lastEnablePrimitiveRestart) - { - _gl.Enable(GLEnum.PrimitiveRestart); - } - else - { - _gl.Disable(GLEnum.PrimitiveRestart); - } - - _gl.PolygonMode(GLEnum.FrontAndBack, (GLEnum)lastPolygonMode[0]); -#endif - - _gl.Scissor(lastScissorBox[0], lastScissorBox[1], (uint)lastScissorBox[2], (uint)lastScissorBox[3]); - } - - internal void CreateDeviceResources() - { - if (_gl is null) - { - return; - } - - // Backup GL state - - _gl.GetInteger(GLEnum.TextureBinding2D, out int lastTexture); - _gl.GetInteger(GLEnum.ArrayBufferBinding, out int lastArrayBuffer); - _gl.GetInteger(GLEnum.VertexArrayBinding, out int lastVertexArray); - - string vertexSource = - @"#version 330 - layout (location = 0) in vec2 Position; - layout (location = 1) in vec2 UV; - layout (location = 2) in vec4 Color; - uniform mat4 ProjMtx; - out vec2 Frag_UV; - out vec4 Frag_Color; - void main() - { - Frag_UV = UV; - Frag_Color = Color; - // Round position to nearest pixel to improve line alignment - vec2 roundedPos = floor(Position.xy + 0.5); - gl_Position = ProjMtx * vec4(roundedPos, 0, 1); - }"; - - string fragmentSource = - @"#version 330 - in vec2 Frag_UV; - in vec4 Frag_Color; - uniform sampler2D Texture; - layout (location = 0) out vec4 Out_Color; - void main() - { - // Use precise texture sampling to avoid floating point errors - vec2 texelSize = 1.0 / textureSize(Texture, 0); - vec2 adjustedUV = clamp(Frag_UV, texelSize * 0.5, 1.0 - texelSize * 0.5); - Out_Color = Frag_Color * texture(Texture, adjustedUV); - }"; - - _shader = new Shader(_gl, vertexSource, fragmentSource); - - _attribLocationTex = _shader.GetUniformLocation("Texture"); - _attribLocationProjMtx = _shader.GetUniformLocation("ProjMtx"); - _attribLocationVtxPos = _shader.GetAttribLocation("Position"); - _attribLocationVtxUV = _shader.GetAttribLocation("UV"); - _attribLocationVtxColor = _shader.GetAttribLocation("Color"); - - _vboHandle = _gl.GenBuffer(); - _elementsHandle = _gl.GenBuffer(); - - RecreateFontDeviceTexture(); - - // Restore modified GL state - _gl.BindTexture(GLEnum.Texture2D, (uint)lastTexture); - _gl.BindBuffer(GLEnum.ArrayBuffer, (uint)lastArrayBuffer); - - _gl.BindVertexArray((uint)lastVertexArray); - - _gl.CheckGlError("End of ImGui setup"); - } - - /// - /// Creates the texture used to render text. - /// - internal unsafe void RecreateFontDeviceTexture() - { - DebugLogger.Log("RecreateFontDeviceTexture: Starting"); - if (_gl is null) - { - DebugLogger.Log("RecreateFontDeviceTexture: OpenGL is null, returning"); - return; - } - - // Build texture atlas - ImGuiIOPtr io = ImGui.GetIO(); - DebugLogger.Log("RecreateFontDeviceTexture: Got ImGui IO"); - unsafe - { - // Build font atlas if it's not already built - if (!io.Fonts.TexIsBuilt) - { - DebugLogger.Log("RecreateFontDeviceTexture: Font atlas not built yet, building now"); - - // Build the font atlas using ImFontAtlasBuildMain - // This is required when the backend doesn't support ImGuiBackendFlags_RendererHasTextures - ImGuiP.ImFontAtlasBuildMain(io.Fonts); - - DebugLogger.Log("RecreateFontDeviceTexture: Font atlas built successfully"); - } - else - { - DebugLogger.Log("RecreateFontDeviceTexture: Font atlas already built"); - } - - // Get texture data using the correct API for Hexa.NET.ImGui 2.2.8 - ImTextureDataPtr texData = io.Fonts.TexData; - DebugLogger.Log($"RecreateFontDeviceTexture: Got texture data - Width: {texData.Width}, Height: {texData.Height}"); - - // Only proceed if we have valid texture data - if (texData.Pixels != null && texData.Width > 0 && texData.Height > 0) - { - DebugLogger.Log("RecreateFontDeviceTexture: Texture data is valid, creating OpenGL texture"); - - // Create OpenGL texture from font atlas data - _gl.GetInteger(GLEnum.TextureBinding2D, out int lastTexture); - DebugLogger.Log("RecreateFontDeviceTexture: Got last texture binding"); - - // Create texture with the font atlas data - DebugLogger.Log("RecreateFontDeviceTexture: Creating Texture object"); - _fontTexture = new Texture(_gl, texData.Width, texData.Height, - (nint)texData.Pixels, false, false, PixelFormat.Rgba); - DebugLogger.Log("RecreateFontDeviceTexture: Texture object created"); - - // Store texture ID in ImGui's font atlas - DebugLogger.Log("RecreateFontDeviceTexture: Setting texture ID"); - texData.SetTexID((nint)_fontTexture.GlTexture); - DebugLogger.Log("RecreateFontDeviceTexture: Texture ID set"); - - // Set texture filtering - DebugLogger.Log("RecreateFontDeviceTexture: Setting texture filtering"); - _fontTexture.Bind(); - _fontTexture.SetMagFilter(TextureMagFilter.Nearest); - _fontTexture.SetMinFilter(TextureMinFilter.Nearest); - _fontTexture.SetWrap(TextureCoordinate.S, TextureWrapMode.ClampToEdge); - _fontTexture.SetWrap(TextureCoordinate.T, TextureWrapMode.ClampToEdge); - DebugLogger.Log("RecreateFontDeviceTexture: Texture filtering set"); - - // Restore previous texture binding - _gl.BindTexture(GLEnum.Texture2D, (uint)lastTexture); - DebugLogger.Log("RecreateFontDeviceTexture: Restored previous texture binding"); - - // Clear font atlas texture data to save memory - io.Fonts.ClearTexData(); - DebugLogger.Log("RecreateFontDeviceTexture: Cleared font atlas texture data"); - - // Mark fonts as configured - FontsConfigured = true; - DebugLogger.Log("RecreateFontDeviceTexture: Marked fonts as configured"); - } - else - { - DebugLogger.Log("RecreateFontDeviceTexture: Invalid texture data - skipping"); - } - } - DebugLogger.Log("RecreateFontDeviceTexture: Completed"); - } - - /// - /// Frees all graphics resources used by the renderer. - /// - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// - /// Protected implementation of Dispose pattern. - /// - /// true if disposing managed resources, false if called from finalizer - private void Dispose(bool disposing) - { - if (_disposed) - { - return; - } - - if (disposing) - { - // Dispose managed resources - if (_gl is not null && _view is not null && _keyboard is not null && _mouse is not null && _fontTexture is not null && _shader is not null) - { - _view.Resize -= WindowResized; - _keyboard.KeyDown -= OnKeyDown; - _keyboard.KeyUp -= OnKeyUp; - _keyboard.KeyChar -= OnKeyChar; - _mouse.MouseDown -= OnMouseDown; - _mouse.MouseUp -= OnMouseUp; - _mouse.MouseMove -= OnMouseMove; - _mouse.Scroll -= OnMouseScroll; - - _gl.DeleteBuffer(_vboHandle); - _gl.DeleteBuffer(_elementsHandle); - _gl.DeleteVertexArray(_vertexArrayObject); - - _fontTexture.Dispose(); - _shader.Dispose(); - - ImGui.DestroyContext(); - } - } - - // Mark as disposed - _disposed = true; - } -} diff --git a/ImGui.App/ImGuiController/ImGuiFontConfig.cs b/ImGui.App/ImGuiController/ImGuiFontConfig.cs deleted file mode 100644 index d694175..0000000 --- a/ImGui.App/ImGuiController/ImGuiFontConfig.cs +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using System; - -using Hexa.NET.ImGui; - -/// -/// Represents the configuration for an ImGui font. -/// -public readonly struct ImGuiFontConfig : IEquatable -{ - /// - /// Initializes a new instance of the struct. - /// - /// The path to the font file. - /// The size of the font. - /// A function to get the glyph range for the font. - /// Thrown when is less than or equal to zero. - /// Thrown when is null. - [System.Diagnostics.CodeAnalysis.SuppressMessage("Maintainability", "CA1512:Use ArgumentOutOfRangeException throw helper", Justification = "")] - public ImGuiFontConfig(string fontPath, int fontSize, Func? getGlyphRange = null) - { - if (fontSize <= 0) - { - throw new ArgumentOutOfRangeException(nameof(fontSize)); - } - - FontPath = fontPath ?? throw new ArgumentNullException(nameof(fontPath)); - FontSize = fontSize; - GetGlyphRange = getGlyphRange; - } - - /// - /// Gets the path to the font file. - /// - public string FontPath { get; } - - /// - /// Gets the size of the font. - /// - public int FontSize { get; } - - /// - /// Gets the function to retrieve the glyph range for the font. - /// - public Func? GetGlyphRange { get; } - - /// - /// Determines whether the specified object is equal to the current object. - /// - /// The object to compare with the current object. - /// true if the specified object is equal to the current object; otherwise, false. - public override bool Equals(object? obj) => obj is ImGuiFontConfig config && Equals(config); - - /// - /// Serves as the default hash function. - /// - /// A hash code for the current object. - public override int GetHashCode() => HashCode.Combine(FontPath, FontSize, GetGlyphRange); - - /// - /// Determines whether two specified instances of are equal. - /// - /// The first to compare. - /// The second to compare. - /// true if the two instances are equal; otherwise, false. - public static bool operator ==(ImGuiFontConfig left, ImGuiFontConfig right) => left.Equals(right); - - /// - /// Determines whether two specified instances of are not equal. - /// - /// The first to compare. - /// The second to compare. - /// true if the two instances are not equal; otherwise, false. - public static bool operator !=(ImGuiFontConfig left, ImGuiFontConfig right) => !(left == right); - - /// - /// Indicates whether the current object is equal to another object of the same type. - /// - /// An object to compare with this object. - /// true if the current object is equal to the other parameter; otherwise, false. - public bool Equals(ImGuiFontConfig other) - { - return FontPath == other.FontPath - && FontSize == other.FontSize - && GetGlyphRange == other.GetGlyphRange; - } -} diff --git a/ImGui.App/ImGuiController/OpenGLProvider.cs b/ImGui.App/ImGuiController/OpenGLProvider.cs deleted file mode 100644 index 622b0cd..0000000 --- a/ImGui.App/ImGuiController/OpenGLProvider.cs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -/// -/// Provides access to OpenGL functionality. -/// -public sealed class OpenGLProvider(IOpenGLFactory factory) : IDisposable -{ - internal readonly IOpenGLFactory _factory = factory ?? throw new ArgumentNullException(nameof(factory)); - internal GLWrapper? _gl; - internal bool _disposed; - - /// - /// Gets the OpenGL instance, creating it if necessary. - /// - /// The OpenGL instance. - /// Thrown when the provider has been disposed. - public IGL GetGL() - { - ObjectDisposedException.ThrowIf(_disposed, this); - - if (_gl == null) - { - Silk.NET.OpenGL.GL gl = _factory.CreateGL(); - _gl = new GLWrapper(gl); - } - - return _gl; - } - - /// - public void Dispose() - { - if (!_disposed) - { - _gl?.Dispose(); - _gl = null; - _disposed = true; - } - } -} diff --git a/ImGui.App/ImGuiController/Shader.cs b/ImGui.App/ImGuiController/Shader.cs deleted file mode 100644 index 8bc5e91..0000000 --- a/ImGui.App/ImGuiController/Shader.cs +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Runtime.CompilerServices; - -using Silk.NET.OpenGL; - -internal struct UniformFieldInfo -{ - public int Location; - public string Name; - public int Size; - public UniformType Type; -} - -internal sealed class Shader : IDisposable -{ - public uint Program { get; private set; } - internal readonly Dictionary _uniformToLocation = []; - internal readonly Dictionary _attribLocation = []; - internal bool _initialized; - internal readonly GL _gl; - internal readonly (ShaderType Type, string Path)[] _files; - internal bool _disposed; - - public Shader(GL gl, string vertexShader, string fragmentShader) - { - _gl = gl; - _files = - [ - (ShaderType.VertexShader, vertexShader), - (ShaderType.FragmentShader, fragmentShader), - ]; - Program = CreateProgram(_files); - } - public void UseShader() => _gl.UseProgram(Program); - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// - /// Protected implementation of Dispose pattern. - /// - /// true if disposing managed resources, false if called from finalizer - private void Dispose(bool disposing) - { - if (_disposed) - { - return; - } - - if (disposing) - { - // Dispose managed resources - if (_initialized) - { - _gl.DeleteProgram(Program); - _initialized = false; - } - } - - // Mark as disposed - _disposed = true; - } - - public UniformFieldInfo[] GetUniforms() - { - _gl.GetProgram(Program, GLEnum.ActiveUniforms, out int uniformCount); - - UniformFieldInfo[] uniforms = new UniformFieldInfo[uniformCount]; - - for (int i = 0; i < uniformCount; i++) - { - string name = _gl.GetActiveUniform(Program, (uint)i, out int size, out UniformType type); - - UniformFieldInfo fieldInfo; - fieldInfo.Location = GetUniformLocation(name); - fieldInfo.Name = name; - fieldInfo.Size = size; - fieldInfo.Type = type; - - uniforms[i] = fieldInfo; - } - - return uniforms; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public int GetUniformLocation(string uniform) - { - if (!_uniformToLocation.TryGetValue(uniform, out int location)) - { - location = _gl.GetUniformLocation(Program, uniform); - _uniformToLocation.Add(uniform, location); - - if (location == -1) - { - Debug.Print($"The uniform '{uniform}' does not exist in the shader!"); - } - } - - return location; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public int GetAttribLocation(string attrib) - { - if (!_attribLocation.TryGetValue(attrib, out int location)) - { - location = _gl.GetAttribLocation(Program, attrib); - _attribLocation.Add(attrib, location); - - if (location == -1) - { - Debug.Print($"The attrib '{attrib}' does not exist in the shader!"); - } - } - - return location; - } - - internal uint CreateProgram(params (ShaderType Type, string source)[] shaderPaths) - { - uint program = _gl.CreateProgram(); - - Span shaders = stackalloc uint[shaderPaths.Length]; - for (int i = 0; i < shaderPaths.Length; i++) - { - shaders[i] = CompileShader(shaderPaths[i].Type, shaderPaths[i].source); - } - - foreach (uint shader in shaders) - { - _gl.AttachShader(program, shader); - } - - _gl.LinkProgram(program); - - _gl.GetProgram(program, GLEnum.LinkStatus, out int success); - if (success == 0) - { - string info = _gl.GetProgramInfoLog(program); - Debug.WriteLine($"GL.LinkProgram had info log:\n{info}"); - } - - foreach (uint shader in shaders) - { - _gl.DetachShader(program, shader); - _gl.DeleteShader(shader); - } - - _initialized = true; - - return program; - } - - internal uint CompileShader(ShaderType type, string source) - { - uint shader = _gl.CreateShader(type); - _gl.ShaderSource(shader, source); - _gl.CompileShader(shader); - - _gl.GetShader(shader, ShaderParameterName.CompileStatus, out int success); - if (success == 0) - { - string info = _gl.GetShaderInfoLog(shader); - Debug.WriteLine($"GL.CompileShader for shader [{type}] had info log:\n{info}"); - } - - return shader; - } -} diff --git a/ImGui.App/ImGuiController/Texture.cs b/ImGui.App/ImGuiController/Texture.cs deleted file mode 100644 index 7af3be1..0000000 --- a/ImGui.App/ImGuiController/Texture.cs +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using System; - -using Silk.NET.OpenGL; - -/// -/// Specifies the texture coordinate axes for texture wrapping. -/// -public enum TextureCoordinate -{ - /// - /// No texture coordinate. - /// - None = 0, - - /// - /// The S coordinate (corresponds to the x-axis in texture space). - /// - S = TextureParameterName.TextureWrapS, - - /// - /// The T coordinate (corresponds to the y-axis in texture space). - /// - T = TextureParameterName.TextureWrapT, - - /// - /// The R coordinate (corresponds to the z-axis in texture space). - /// - R = TextureParameterName.TextureWrapR -} - -internal sealed class Texture : IDisposable -{ - public const SizedInternalFormat Srgb8Alpha8 = (SizedInternalFormat)GLEnum.Srgb8Alpha8; - public const SizedInternalFormat Rgb32F = (SizedInternalFormat)GLEnum.Rgb32f; - - public const GLEnum MaxTextureMaxAnisotropy = (GLEnum)0x84FF; - - public static float? MaxAniso; - internal readonly GL _gl; - public readonly uint GlTexture; - public readonly uint Width, Height; - public readonly uint MipmapLevels; - public readonly SizedInternalFormat InternalFormat; - internal bool _disposed; - - public unsafe Texture(GL gl, int width, int height, IntPtr data, bool generateMipmaps = false, bool srgb = false, PixelFormat pxFormat = PixelFormat.Bgra) - { - _gl = gl; - MaxAniso ??= gl.GetFloat(MaxTextureMaxAnisotropy); - Width = (uint)width; - Height = (uint)height; - InternalFormat = srgb ? Srgb8Alpha8 : SizedInternalFormat.Rgba8; - MipmapLevels = (uint)(!generateMipmaps ? 1 : (int)Math.Floor(Math.Log(Math.Max(Width, Height), 2))); - - GlTexture = _gl.GenTexture(); - Bind(); - - _gl.TexStorage2D(GLEnum.Texture2D, MipmapLevels, InternalFormat, Width, Height); - _gl.TexSubImage2D(GLEnum.Texture2D, 0, 0, 0, Width, Height, pxFormat, PixelType.UnsignedByte, (void*)data); - - if (generateMipmaps) - { - _gl.GenerateTextureMipmap(GlTexture); - } - - SetWrap(TextureCoordinate.S, TextureWrapMode.ClampToEdge); - SetWrap(TextureCoordinate.T, TextureWrapMode.ClampToEdge); - - // Set default filtering to prevent sampling artifacts - if (generateMipmaps) - { - SetMinFilter(TextureMinFilter.LinearMipmapLinear); - SetMagFilter(TextureMagFilter.Linear); - } - else - { - SetMinFilter(TextureMinFilter.Nearest); - SetMagFilter(TextureMagFilter.Nearest); - } - - uint mip = MipmapLevels - 1; - _gl.TexParameterI(GLEnum.Texture2D, TextureParameterName.TextureMaxLevel, ref mip); - } - - public void Bind() => _gl.BindTexture(GLEnum.Texture2D, GlTexture); - - public void SetMinFilter(TextureMinFilter filter) - { - int intFilter = (int)filter; - _gl.TexParameterI(GLEnum.Texture2D, TextureParameterName.TextureMinFilter, ref intFilter); - } - - public void SetMagFilter(TextureMagFilter filter) - { - int intFilter = (int)filter; - _gl.TexParameterI(GLEnum.Texture2D, TextureParameterName.TextureMagFilter, ref intFilter); - } - - public void SetAnisotropy(float level) - { - const TextureParameterName textureMaxAnisotropy = (TextureParameterName)0x84FE; - _gl.TexParameter(GLEnum.Texture2D, (GLEnum)textureMaxAnisotropy, Util.Clamp(level, 1, MaxAniso.GetValueOrDefault())); - } - - public void SetLod(int @base, int min, int max) - { - _gl.TexParameterI(GLEnum.Texture2D, TextureParameterName.TextureLodBias, ref @base); - _gl.TexParameterI(GLEnum.Texture2D, TextureParameterName.TextureMinLod, ref min); - _gl.TexParameterI(GLEnum.Texture2D, TextureParameterName.TextureMaxLod, ref max); - } - - public void SetWrap(TextureCoordinate coord, TextureWrapMode mode) - { - int intMode = (int)mode; - _gl.TexParameterI(GLEnum.Texture2D, (TextureParameterName)coord, ref intMode); - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// - /// Protected implementation of Dispose pattern. - /// - /// true if disposing managed resources, false if called from finalizer - private void Dispose(bool disposing) - { - if (_disposed) - { - return; - } - - if (disposing) - { - // Dispose managed resources - _gl.DeleteTexture(GlTexture); - } - - // Mark as disposed - _disposed = true; - } -} diff --git a/ImGui.App/ImGuiController/Util.cs b/ImGui.App/ImGuiController/Util.cs deleted file mode 100644 index b8bc1cc..0000000 --- a/ImGui.App/ImGuiController/Util.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using System.Diagnostics; -using System.Diagnostics.Contracts; - -using Silk.NET.OpenGL; - -internal static class Util -{ - [Pure] - public static float Clamp(float value, float min, float max) => value < min ? min : value > max ? max : value; - - [Conditional("DEBUG")] - public static void CheckGlError(this GL gl, string title) - { - GLEnum error = gl.GetError(); - if (error != GLEnum.NoError) - { - Debug.Print($"{title}: {error}"); - } - } -} diff --git a/ImGui.App/ImGuiController/WindowOpenGLFactory.cs b/ImGui.App/ImGuiController/WindowOpenGLFactory.cs deleted file mode 100644 index 11f2ccb..0000000 --- a/ImGui.App/ImGuiController/WindowOpenGLFactory.cs +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using Silk.NET.OpenGL; -using Silk.NET.Windowing; - -/// -/// Implementation of that creates OpenGL contexts from a window. -/// -/// The window to create OpenGL contexts from. -/// Thrown when window is null. -public class WindowOpenGLFactory(IWindow window) : IOpenGLFactory -{ - internal readonly IWindow _window = window ?? throw new ArgumentNullException(nameof(window)); - - /// - public GL CreateGL() => GL.GetApi(_window); -} diff --git a/ImGui.App/NativeMethods.cs b/ImGui.App/NativeMethods.cs deleted file mode 100644 index 6d1ec77..0000000 --- a/ImGui.App/NativeMethods.cs +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; -using System.Runtime.InteropServices; - -internal static partial class NativeMethods -{ - [LibraryImport("kernel32.dll")] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial nint GetConsoleWindow(); - - [LibraryImport("user32.dll")] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static partial bool ShowWindow(nint hWnd, int nCmdShow); - - /// - /// Sets the process as DPI-Aware on Windows. - /// - /// True if the operation was successful; otherwise, false. - [LibraryImport("user32.dll")] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static partial bool SetProcessDPIAware(); - - /// - /// Sets the DPI awareness context for the process (Windows 10 version 1607 and later). - /// - /// The DPI awareness context to set. - /// The previous DPI awareness context, or null if the function failed. - [LibraryImport("user32.dll")] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial nint SetProcessDpiAwarenessContext(nint dpiContext); - - /// - /// Sets the DPI awareness for the process (Windows 8.1 and later). - /// - /// The DPI awareness value to set. - /// HRESULT indicating success or failure. - [LibraryImport("Shcore.dll")] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial int SetProcessDpiAwareness(ProcessDpiAwareness value); - - /// - /// DPI awareness values for SetProcessDpiAwareness. - /// - internal enum ProcessDpiAwareness - { - /// - /// DPI unaware. This app does not scale for DPI changes and is always assumed to have a scale factor of 100% (96 DPI). - /// - ProcessDpiUnaware = 0, - - /// - /// System DPI aware. This app does not scale for DPI changes. - /// - ProcessSystemDpiAware = 1, - - /// - /// Per monitor DPI aware. This app checks for the DPI when it is created and adjusts the scale factor whenever the DPI changes. - /// - ProcessPerMonitorDpiAware = 2 - } - - // DPI Awareness Context constants - internal static readonly nint DPI_AWARENESS_CONTEXT_UNAWARE = new(-1); - internal static readonly nint DPI_AWARENESS_CONTEXT_SYSTEM_AWARE = new(-2); - internal static readonly nint DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE = new(-3); - internal static readonly nint DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 = new(-4); - internal static readonly nint DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED = new(-5); - - internal const string X11LibraryName = "libX11.so.6"; - - /// - /// Opens a connection to the X server that controls a display. - /// - /// The name of the display. - /// A handle to the display structure. - [LibraryImport(X11LibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial IntPtr XOpenDisplay([MarshalAs(UnmanagedType.LPStr)] string display); - - /// - /// Returns the value of a default setting. - /// - /// A handle to the display structure. - /// The program name. - /// The option name. - /// The value of the default setting. - [LibraryImport(X11LibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial IntPtr XGetDefault(IntPtr display, [MarshalAs(UnmanagedType.LPStr)] string program, [MarshalAs(UnmanagedType.LPStr)] string option); - - /// - /// Returns the width of the screen in pixels. - /// - /// A handle to the display structure. - /// The screen number. - /// The width of the screen in pixels. - [LibraryImport(X11LibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial int XDisplayWidth(IntPtr display, int screenNumber); - - /// - /// Returns the width of the screen in millimeters. - /// - /// A handle to the display structure. - /// The screen number. - /// The width of the screen in millimeters. - [LibraryImport(X11LibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial int XDisplayWidthMM(IntPtr display, int screenNumber); - - /// - /// Closes the connection to the X server. - /// - /// A handle to the display structure. - /// Zero if the operation was successful; otherwise, a non-zero value. - [LibraryImport(X11LibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial int XCloseDisplay(IntPtr display); - - /// - /// Structure containing startup input parameters for GDI+. - /// - internal struct StartupInputEx - { - public int GdiplusVersion; - - public IntPtr DebugEventCallback; - public int SuppressBackgroundThread; - public int SuppressExternalCodecs; - public int StartupParameters; - - /// - /// Gets the default startup input parameters. - /// - public static StartupInputEx Default => new() - { - // We assume Windows 8 and upper - GdiplusVersion = 2, - DebugEventCallback = IntPtr.Zero, - SuppressBackgroundThread = 0, - SuppressExternalCodecs = 0, - StartupParameters = 0, - }; - } - - /// - /// Structure containing startup output parameters for GDI+. - /// - internal struct StartupOutput - { - public IntPtr NotificationHook; - public IntPtr NotificationUnhook; - } - - private const string GDILibraryName = "gdiplus.dll"; - - [LibraryImport(GDILibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial int GdiplusStartup(out IntPtr token, in StartupInputEx input, out StartupOutput output); - - [LibraryImport(GDILibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial int GdipCreateFromHWND(IntPtr hwnd, out IntPtr graphics); - - [LibraryImport(GDILibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial int GdipDeleteGraphics(IntPtr graphics); - - [LibraryImport(GDILibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial int GdipGetDpiX(IntPtr graphics, out float dpi); -} diff --git a/ImGui.App/PidFrameLimiter.cs b/ImGui.App/PidFrameLimiter.cs deleted file mode 100644 index 1adb85d..0000000 --- a/ImGui.App/PidFrameLimiter.cs +++ /dev/null @@ -1,645 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -using System.Diagnostics; -using System.Threading; - -/// -/// A PID controller-based frame limiter that provides accurate frame rate control -/// by learning from past errors and dynamically adjusting sleep times. -/// -internal sealed class PidFrameLimiter -{ - internal readonly double kp; // Proportional gain - internal readonly double ki; // Integral gain - internal readonly double kd; // Derivative gain - - internal double previousError; - internal double integral; - internal DateTime lastFrameTime; - internal double baseSleepMs; - internal bool isInitialized; - - // Smoothing for frame time measurements - internal readonly Queue recentFrameTimes = new(); - internal double frameTimeSum; - internal const int FrameHistorySize = 10; - - // Auto-tuning state - internal bool isTuning; - internal int currentTuningStep; - internal DateTime tuningStartTime; - internal readonly List tuningResults = []; - internal TuningResult? bestTuningResult; - - internal readonly struct TuningResult - { - public double Kp { get; init; } - public double Ki { get; init; } - public double Kd { get; init; } - public double AverageError { get; init; } - public double MaxError { get; init; } - public double Stability { get; init; } // Lower is better - public double Score { get; init; } // Higher is better - } - - // Predefined parameter sets to test during auto-tuning - internal static readonly (double kp, double ki, double kd)[] CoarseTuningParameterSets = - [ - // Phase 1: Coarse tuning - wider range, longer tests - // Conservative settings - (0.1, 0.02, 0.005), - (0.2, 0.05, 0.01), - (0.3, 0.07, 0.015), - (0.4, 0.08, 0.02), - (0.5, 0.09, 0.025), - (0.6, 0.10, 0.03), - - // Balanced settings - (0.7, 0.09, 0.04), - (0.8, 0.10, 0.05), // Previous default - (0.9, 0.11, 0.06), - (1.0, 0.12, 0.07), - (1.1, 0.13, 0.08), - (1.2, 0.15, 0.09), - - // Aggressive settings (including new optimal default) - (1.3, 0.16, 0.10), - (1.4, 0.18, 0.11), - (1.5, 0.20, 0.12), - (1.7, 0.22, 0.14), - (1.8, 0.048, 0.237), // New optimal default - (2.0, 0.25, 0.15), - (2.3, 0.28, 0.17), - - // Specialized configurations - (0.6, 0.30, 0.02), // High integral for steady-state accuracy - (0.4, 0.35, 0.01), // Very high integral - (1.8, 0.05, 0.25), // High derivative for fast response - (2.2, 0.03, 0.30), // Very high derivative - (0.9, 0.08, 0.01), // Low derivative for stability - (1.1, 0.06, 0.005), // Very low derivative - ]; - - // Fine tuning around best coarse result - internal (double kp, double ki, double kd)[] currentFineTuningParameters = []; - internal (double kp, double ki, double kd)[] currentPrecisionTuningParameters = []; - - internal enum TuningPhase - { - Coarse, - Fine, - Precision, - Complete - } - - internal TuningPhase currentTuningPhase = TuningPhase.Coarse; - internal const double CoarseTuningDurationSeconds = 8.0; // Longer tests for coarse tuning - internal const double FineTuningDurationSeconds = 12.0; // Even longer for fine tuning - internal const double PrecisionTuningDurationSeconds = 15.0; // Longest for precision tuning - - /// - /// Initializes a new instance of the PidFrameLimiter class. - /// - /// Proportional gain (Kp) - how strongly to react to current error - /// Integral gain (Ki) - how strongly to react to accumulated error over time - /// Derivative gain (Kd) - how strongly to react to rate of change of error - public PidFrameLimiter(double proportionalGain = 1.8, double integralGain = 0.048, double derivativeGain = 0.237) - { - kp = proportionalGain; - ki = integralGain; - kd = derivativeGain; - Reset(); - } - - /// - /// Starts the comprehensive PID auto-tuning procedure with multiple phases. - /// Phase 1: Coarse tuning (8s per test, 24 parameters) - /// Phase 2: Fine tuning (12s per test, 25 parameters around best result) - /// Phase 3: Precision tuning (15s per test, 9 parameters for final optimization) - /// Total time: ~12-15 minutes for maximum accuracy - /// Defaults: Kp=1.8, Ki=0.048, Kd=0.237 (from comprehensive tuning results) - /// - public void StartAutoTuning() - { - isTuning = true; - currentTuningStep = 0; - currentTuningPhase = TuningPhase.Coarse; - tuningStartTime = DateTime.UtcNow; - tuningResults.Clear(); - bestTuningResult = null; - tuningErrors.Clear(); - - // Reset phase-specific arrays - currentFineTuningParameters = []; - currentPrecisionTuningParameters = []; - - // Start with first coarse parameter set - if (CoarseTuningParameterSets.Length > 0) - { - (double newKp, double newKi, double newKd) = CoarseTuningParameterSets[0]; - SetTuningParameters(newKp, newKi, newKd); - } - } - - /// - /// Stops the auto-tuning procedure and applies the best found parameters. - /// - public void StopAutoTuning() - { - if (isTuning && bestTuningResult.HasValue) - { - TuningResult best = bestTuningResult.Value; - SetTuningParameters(best.Kp, best.Ki, best.Kd); - } - - isTuning = false; - currentTuningStep = 0; - } - - /// - /// Gets the current auto-tuning progress and status with phase information. - /// - /// Tuning progress information - public (bool isActive, int currentStep, int totalSteps, double progressPercent, TuningResult? bestResult, string phase) GetTuningStatusDetailed() - { - if (!isTuning) - { - return (false, 0, 0, 0.0, bestTuningResult, "Complete"); - } - - (int currentSteps, int totalSteps, string phaseName) = currentTuningPhase switch - { - TuningPhase.Coarse => (currentTuningStep, CoarseTuningParameterSets.Length, "Coarse Tuning"), - TuningPhase.Fine => (currentTuningStep, currentFineTuningParameters.Length, "Fine Tuning"), - TuningPhase.Precision => (currentTuningStep, currentPrecisionTuningParameters.Length, "Precision Tuning"), - _ => (0, 1, "Complete") - }; - - double progress = totalSteps > 0 ? currentSteps / (double)totalSteps * 100.0 : 100.0; - return (isTuning, currentSteps + 1, totalSteps, progress, bestTuningResult, phaseName); - } - - // Keep the old method for compatibility - public (bool isActive, int currentStep, int totalSteps, double progressPercent, TuningResult? bestResult) GetTuningStatus() - { - (bool isActive, int currentStep, int totalSteps, double progressPercent, TuningResult? bestResult, string _) = GetTuningStatusDetailed(); - return (isActive, currentStep, totalSteps, progressPercent, bestResult); - } - - internal double GetCurrentTuningDuration() => currentTuningPhase switch - { - TuningPhase.Coarse => CoarseTuningDurationSeconds, - TuningPhase.Fine => FineTuningDurationSeconds, - TuningPhase.Precision => PrecisionTuningDurationSeconds, - _ => CoarseTuningDurationSeconds - }; - - internal void GenerateFineTuningParameters(TuningResult bestResult) - { - // Generate 25 parameter combinations around the best coarse result - List<(double kp, double ki, double kd)> fineParams = []; - - double baseKp = bestResult.Kp; - double baseKi = bestResult.Ki; - double baseKd = bestResult.Kd; - - // Create a 5x5 grid around the best parameters (25 combinations) - double[] kpMultipliers = [0.8, 0.9, 1.0, 1.1, 1.2]; - double[] kiMultipliers = [0.7, 0.85, 1.0, 1.15, 1.3]; - - foreach (double kpMult in kpMultipliers) - { - foreach (double kiMult in kiMultipliers) - { - double newKp = Math.Max(0.05, baseKp * kpMult); - double newKi = Math.Max(0.01, baseKi * kiMult); - double newKd = baseKd; // Keep Kd constant for fine tuning - fineParams.Add((newKp, newKi, newKd)); - } - } - - currentFineTuningParameters = [.. fineParams]; - } - - internal void GeneratePrecisionTuningParameters(TuningResult bestResult) - { - // Generate 9 parameter combinations for final precision tuning - List<(double kp, double ki, double kd)> precisionParams = []; - - double baseKp = bestResult.Kp; - double baseKi = bestResult.Ki; - double baseKd = bestResult.Kd; - - // Create a tight 3x3 grid for precision (9 combinations) - double[] multipliers = [0.95, 1.0, 1.05]; - - foreach (double kpMult in multipliers) - { - foreach (double kiMult in multipliers) - { - double newKp = Math.Max(0.05, baseKp * kpMult); - double newKi = Math.Max(0.01, baseKi * kiMult); - double newKd = Math.Max(0.001, baseKd * kiMult); // Fine-tune derivative too - precisionParams.Add((newKp, newKi, newKd)); - } - } - - currentPrecisionTuningParameters = [.. precisionParams]; - } - - internal void HandleAutoTuningProgression(double error) - { - tuningErrors.Add(Math.Abs(error)); - - // Check if we've tested current parameter set long enough - double testDuration = (DateTime.UtcNow - tuningStartTime).TotalSeconds; - if (testDuration >= GetCurrentTuningDuration() && tuningErrors.Count > 10) // Ensure we have enough data - { - // Verify we have valid arrays and indices before proceeding - if (!ValidateCurrentTuningState()) - { - StopAutoTuning(); - return; - } - - // Process current test results - ProcessCurrentTuningResults(); - - // Advance to next parameter or phase - AdvanceToNextTuningStep(); - } - } - - internal bool ValidateCurrentTuningState() - { - return currentTuningPhase switch - { - TuningPhase.Coarse => currentTuningStep >= 0 && currentTuningStep < CoarseTuningParameterSets.Length, - TuningPhase.Fine => currentFineTuningParameters.Length > 0 && currentTuningStep >= 0 && currentTuningStep < currentFineTuningParameters.Length, - TuningPhase.Precision => currentPrecisionTuningParameters.Length > 0 && currentTuningStep >= 0 && currentTuningStep < currentPrecisionTuningParameters.Length, - _ => false - }; - } - - internal void ProcessCurrentTuningResults() - { - // Calculate performance metrics for current parameter set - double avgError = tuningErrors.Average(); - double maxError = tuningErrors.Max(); - double stability = CalculateStability(tuningErrors); - double score = CalculateScore(avgError, maxError, stability); - - // Store result - get parameters based on current phase - (double currentKp, double currentKi, double currentKd) = GetCurrentTuningParameters(); - - TuningResult result = new() - { - Kp = currentKp, - Ki = currentKi, - Kd = currentKd, - AverageError = avgError, - MaxError = maxError, - Stability = stability, - Score = score - }; - - tuningResults.Add(result); - - // Update best result if this one is better - if (!bestTuningResult.HasValue || score > bestTuningResult.Value.Score) - { - bestTuningResult = result; - } - } - - internal (double kp, double ki, double kd) GetCurrentTuningParameters() - { - return currentTuningPhase switch - { - TuningPhase.Coarse => CoarseTuningParameterSets[currentTuningStep], - TuningPhase.Fine => currentFineTuningParameters[currentTuningStep], - TuningPhase.Precision => currentPrecisionTuningParameters[currentTuningStep], - _ => (CurrentKp, CurrentKi, CurrentKd) // Fallback to current values - }; - } - - internal void AdvanceToNextTuningStep() - { - currentTuningStep++; - bool advanceToNextPhase = CheckAndHandlePhaseTransition(); - - // Start next parameter test - (double nextKp, double nextKi, double nextKd) = GetNextTuningParameters(advanceToNextPhase); - SetTuningParameters(nextKp, nextKi, nextKd); - - tuningStartTime = DateTime.UtcNow; - tuningErrors.Clear(); - } - - internal bool CheckAndHandlePhaseTransition() - { - switch (currentTuningPhase) - { - case TuningPhase.Coarse: - if (currentTuningStep >= CoarseTuningParameterSets.Length) - { - if (bestTuningResult.HasValue) - { - GenerateFineTuningParameters(bestTuningResult.Value); - currentTuningPhase = TuningPhase.Fine; - currentTuningStep = 0; - return true; - } - else - { - StopAutoTuning(); - return false; - } - } - break; - - case TuningPhase.Fine: - if (currentTuningStep >= currentFineTuningParameters.Length) - { - if (bestTuningResult.HasValue) - { - GeneratePrecisionTuningParameters(bestTuningResult.Value); - currentTuningPhase = TuningPhase.Precision; - currentTuningStep = 0; - return true; - } - else - { - StopAutoTuning(); - return false; - } - } - break; - - case TuningPhase.Precision: - if (currentTuningStep >= currentPrecisionTuningParameters.Length) - { - StopAutoTuning(); - return false; - } - break; - } - return false; - } - - internal (double kp, double ki, double kd) GetNextTuningParameters(bool isNewPhase) - { - if (isNewPhase) - { - // Starting new phase - get first parameter of new phase - return currentTuningPhase switch - { - TuningPhase.Fine when currentFineTuningParameters.Length > 0 - => currentFineTuningParameters[0], - TuningPhase.Precision when currentPrecisionTuningParameters.Length > 0 - => currentPrecisionTuningParameters[0], - _ => (CurrentKp, CurrentKi, CurrentKd) // Safe fallback - }; - } - else - { - // Continue with current phase - return currentTuningPhase switch - { - TuningPhase.Coarse when currentTuningStep < CoarseTuningParameterSets.Length - => CoarseTuningParameterSets[currentTuningStep], - TuningPhase.Fine when currentFineTuningParameters.Length > 0 && currentTuningStep < currentFineTuningParameters.Length - => currentFineTuningParameters[currentTuningStep], - TuningPhase.Precision when currentPrecisionTuningParameters.Length > 0 && currentTuningStep < currentPrecisionTuningParameters.Length - => currentPrecisionTuningParameters[currentTuningStep], - _ => (CurrentKp, CurrentKi, CurrentKd) // Safe fallback - }; - } - } - - internal void SetTuningParameters(double newKp, double newKi, double newKd) - { - // Use reflection or create new fields to temporarily override the readonly kp, ki, kd - // For now, we'll store them in temporary fields and use them during tuning - tuningKp = newKp; - tuningKi = newKi; - tuningKd = newKd; - Reset(); // Reset PID state when changing parameters - } - - // Temporary fields for tuning (will override readonly values during tuning) - internal double tuningKp; - internal double tuningKi; - internal double tuningKd; - internal readonly List tuningErrors = []; - - // Get current PID gains (accounting for tuning mode) - internal double CurrentKp => isTuning ? tuningKp : kp; - internal double CurrentKi => isTuning ? tuningKi : ki; - internal double CurrentKd => isTuning ? tuningKd : kd; - - /// - /// Manually sets PID parameters for custom tuning. - /// - /// Proportional gain (Kp) - /// Integral gain (Ki) - /// Derivative gain (Kd) - public void SetManualPidParameters(double proportionalGain, double integralGain, double derivativeGain) - { - tuningKp = proportionalGain; - tuningKi = integralGain; - tuningKd = derivativeGain; - isTuning = false; // Use manual parameters - Reset(); // Reset PID state when changing parameters - } - - /// - /// Gets the current PID parameters being used. - /// - /// Current Kp, Ki, Kd values - public (double kp, double ki, double kd) GetCurrentParameters() => (CurrentKp, CurrentKi, CurrentKd); - - /// - /// Resets the PID controller state. Call this when changing target frame rates. - /// - public void Reset() - { - previousError = 0; - integral = 0; - lastFrameTime = DateTime.UtcNow; - baseSleepMs = 0; - isInitialized = false; - recentFrameTimes.Clear(); - frameTimeSum = 0; - } - - /// - /// Applies frame rate limiting using PID control to achieve the target frame time. - /// - /// Target time per frame in milliseconds - public void LimitFrameRate(double targetFrameTimeMs) - { - DateTime currentTime = DateTime.UtcNow; - - if (!isInitialized) - { - lastFrameTime = currentTime; - baseSleepMs = Math.Max(0, targetFrameTimeMs - 1); // Less conservative estimate for faster start - isInitialized = true; - return; - } - - // Measure actual frame time (includes previous sleep + rendering time) - double actualFrameTimeMs = (currentTime - lastFrameTime).TotalMilliseconds; - - // Update lastFrameTime for next frame measurement - lastFrameTime = currentTime; - - // Smooth the frame time measurement to reduce noise - UpdateFrameTimeHistory(actualFrameTimeMs); - double smoothedFrameTime = GetSmoothedFrameTime(); - - // Calculate error (positive = running too fast, negative = running too slow) - double error = targetFrameTimeMs - smoothedFrameTime; - - // PID calculations - integral += error; - - // Prevent integral windup - clamp integral term to reasonable bounds - double maxIntegral = targetFrameTimeMs * 2; - integral = Math.Clamp(integral, -maxIntegral, maxIntegral); - - double derivative = error - previousError; - - // Calculate PID output (adjustment to sleep time) - double pidOutput = (CurrentKp * error) + (CurrentKi * integral) + (CurrentKd * derivative); - - // Update base sleep time with PID adjustment - use moderate scaling - baseSleepMs += pidOutput * 0.2; // Reduced from 0.5 for more stable control - - // Clamp sleep time to reasonable bounds - baseSleepMs = Math.Clamp(baseSleepMs, 0, targetFrameTimeMs * 1.2); // Reduced upper bound to prevent excessive sleep - - // Apply sleep if needed - lowered threshold for better precision - if (baseSleepMs > 0.1) // Reduced from 0.5ms to allow finer control - { - ApplyHighPrecisionSleep(baseSleepMs); - } - - // Store values for next iteration - previousError = error; - - // Handle auto-tuning progression - if (isTuning) - { - HandleAutoTuningProgression(error); - } - - // Optional: Log PID state for debugging (remove in production) -#if DEBUG - if (DateTime.UtcNow.Millisecond % 100 < 16) // Log roughly every 100ms - { - Debug.WriteLine( - $"PID Frame Limiter - Target: {targetFrameTimeMs:F1}ms, " + - $"Actual: {smoothedFrameTime:F1}ms, Error: {error:F1}ms, " + - $"Sleep: {baseSleepMs:F1}ms, P: {CurrentKp * error:F2}, I: {CurrentKi * integral:F2}, D: {CurrentKd * derivative:F2}"); - } -#endif - } - - internal static double CalculateStability(List errors) - { - if (errors.Count < 2) - { - return 0; - } - - double mean = errors.Average(); - double variance = errors.Sum(x => Math.Pow(x - mean, 2)) / errors.Count; - return Math.Sqrt(variance); // Standard deviation - lower is more stable - } - - internal static double CalculateScore(double avgError, double maxError, double stability) - { - // Higher score is better - // Prioritize low average error, penalize high max error and instability - double accuracyScore = 1.0 / (1.0 + avgError); // Higher when avgError is low - double maxErrorPenalty = 1.0 / (1.0 + (maxError * 0.5)); // Penalize high max errors - double stabilityScore = 1.0 / (1.0 + stability); // Higher when stability is low (more stable) - - return accuracyScore * maxErrorPenalty * stabilityScore; - } - - /// - /// Applies high-precision sleep using a hybrid approach: - /// Thread.Sleep for coarse timing + Stopwatch spin-waiting for fine precision. - /// - /// Target sleep time in milliseconds - internal static void ApplyHighPrecisionSleep(double sleepTimeMs) - { - if (sleepTimeMs <= 0) - { - return; - } - - const double CoarseSleepThreshold = 5.0; // Reduced from 10ms for better precision - const double SpinWaitThreshold = 0.5; // Reduced from 1ms for finer control - - Stopwatch sw = Stopwatch.StartNew(); - double targetMs = sleepTimeMs; - - // Phase 1: Coarse sleep using Thread.Sleep for bulk of time - if (sleepTimeMs > CoarseSleepThreshold) - { - double coarseSleepMs = sleepTimeMs - SpinWaitThreshold; - int coarseSleepInt = (int)Math.Floor(coarseSleepMs); - - if (coarseSleepInt > 0) - { - Thread.Sleep(coarseSleepInt); - } - } - - // Phase 2: Fine-grained spin-waiting for remaining time - while (sw.Elapsed.TotalMilliseconds < targetMs) - { - // Yield to other threads occasionally to prevent 100% CPU usage - if (sw.Elapsed.TotalMilliseconds < targetMs - 0.05) // Reduced threshold for tighter control - { - Thread.Yield(); // More cooperative than Thread.Sleep(0) - } - // Final microsecond precision with tight spin - } - - sw.Stop(); - } - - internal void UpdateFrameTimeHistory(double frameTimeMs) - { - recentFrameTimes.Enqueue(frameTimeMs); - frameTimeSum += frameTimeMs; - - while (recentFrameTimes.Count > FrameHistorySize) - { - frameTimeSum -= recentFrameTimes.Dequeue(); - } - } - - internal double GetSmoothedFrameTime() => - recentFrameTimes.Count > 0 ? frameTimeSum / recentFrameTimes.Count : 0; - - /// - /// Gets diagnostic information about the PID controller state. - /// - /// A formatted string with PID state information - public string GetDiagnosticInfo() - { - double smoothedFrameTime = GetSmoothedFrameTime(); - double actualFps = smoothedFrameTime > 0 ? 1000.0 / smoothedFrameTime : 0; - return $"PID State - Sleep: {baseSleepMs:F2}ms (High-Precision), Error: {previousError:F2}ms, Integral: {integral:F2}, Frame Time: {smoothedFrameTime:F2}ms, Actual FPS: {actualFps:F1}"; - } -} diff --git a/ImGui.App/README.md b/ImGui.App/README.md deleted file mode 100644 index 607e49c..0000000 --- a/ImGui.App/README.md +++ /dev/null @@ -1,573 +0,0 @@ -# ktsu.ImGuiApp - -> A .NET library that provides application scaffolding for Dear ImGui, using Silk.NET and Hexa.NET.ImGui. - -[![NuGet](https://img.shields.io/nuget/v/ktsu.ImGuiApp.svg)](https://www.nuget.org/packages/ktsu.ImGuiApp/) -[![License](https://img.shields.io/github/license/ktsu-dev/ImGuiApp.svg)](LICENSE.md) -[![NuGet Downloads](https://img.shields.io/nuget/dt/ktsu.ImGuiApp.svg)](https://www.nuget.org/packages/ktsu.ImGuiApp/) -[![GitHub Stars](https://img.shields.io/github/stars/ktsu-dev/ImGuiApp?style=social)](https://github.com/ktsu-dev/ImGuiApp/stargazers) - -## Introduction - -ImGuiApp is a .NET library that provides application scaffolding for [Dear ImGui](https://github.com/ocornut/imgui), using [Silk.NET](https://github.com/dotnet/Silk.NET) for OpenGL and window management and [Hexa.NET.ImGui](https://github.com/HexaEngine/Hexa.NET.ImGui) for the ImGui bindings. It simplifies the creation of ImGui-based applications by abstracting away the complexities of window management, rendering, and input handling. - -## Features - -- **Simple API**: Create ImGui applications with minimal boilerplate code -- **Full Integration**: Seamless integration with Silk.NET for OpenGL and input handling -- **Window Management**: Automatic window state, rendering, and input handling -- **Performance Optimization**: Sleep-based throttled rendering with lowest-selection logic when unfocused, idle, or not visible to maximize resource savings -- **PID Frame Limiting**: Precision frame rate control using a PID controller with comprehensive auto-tuning capabilities for highly accurate target FPS achievement -- **DPI Awareness**: Built-in support for high-DPI displays and scaling -- **Font Management**: Flexible font loading system with customization options and dynamic scaling -- **Unicode & Emoji Support**: Built-in support for Unicode characters and emojis (enabled by default) -- **Texture Support**: Built-in texture management with caching and automatic cleanup for ImGui -- **Debug Logging**: Comprehensive debug logging system for troubleshooting crashes and performance issues -- **Context Handling**: Automatic OpenGL context change detection and texture reloading -- **Lifecycle Callbacks**: Customizable delegate callbacks for application events -- **Menu System**: Easy-to-use API for creating application menus -- **Positioning Guards**: Offscreen positioning checks to keep windows visible -- **Modern .NET**: Supports .NET 9 and newer -- **Active Development**: Open-source and actively maintained - -## Getting Started - -### Prerequisites - -- .NET 9.0 or later - -## Installation - -### Package Manager Console - -```powershell -Install-Package ktsu.ImGuiApp -``` - -### .NET CLI - -```bash -dotnet add package ktsu.ImGuiApp -``` - -### Package Reference - -```xml - -``` - -## Usage Examples - -### Basic Application - -Create a new class and call `ImGuiApp.Start()` with your application config: - -```csharp -using ktsu.ImGuiApp; -using Hexa.NET.ImGui; - -static class Program -{ - static void Main() - { - ImGuiApp.Start(new ImGuiAppConfig() - { - Title = "ImGuiApp Demo", - OnStart = () => { /* Initialization code */ }, - OnUpdate = delta => { /* Logic updates */ }, - OnRender = delta => { ImGui.Text("Hello, ImGuiApp!"); }, - OnAppMenu = () => - { - if (ImGui.BeginMenu("File")) - { - // Menu items - if (ImGui.MenuItem("Exit")) - { - ImGuiApp.Stop(); - } - ImGui.EndMenu(); - } - } - }); - } -} -``` - -### Custom Font Management - -Use the resource designer to add font files to your project, then load the fonts: - -```csharp -ImGuiApp.Start(new() -{ - Title = "ImGuiApp Demo", - OnRender = OnRender, - Fonts = new Dictionary - { - { nameof(Resources.MY_FONT), Resources.MY_FONT } - }, -}); -``` - -Or load the font data manually: - -```csharp -var fontData = File.ReadAllBytes("path/to/font.ttf"); -ImGuiApp.Start(new() -{ - Title = "ImGuiApp Demo", - OnRender = OnRender, - Fonts = new Dictionary - { - { "MyFont", fontData } - }, -}); -``` - -Then apply the font to ImGui using the `FontAppearance` class: - -```csharp -private static void OnRender(float deltaTime) -{ - ImGui.Text("Hello, I am normal text!"); - - using (new FontAppearance("MyFont", 24)) - { - ImGui.Text("Hello, I am BIG fancy text!"); - } - - using (new FontAppearance(32)) - { - ImGui.Text("Hello, I am just huge text!"); - } - - using (new FontAppearance("MyFont")) - { - ImGui.Text("Hello, I am somewhat fancy!"); - } -} -``` - -### Unicode and Emoji Support - -ImGuiApp automatically includes support for Unicode characters and emojis. This feature is **enabled by default**, so you can use extended characters without any configuration: - -```csharp -private static void OnRender(float deltaTime) -{ - ImGui.Text("Basic ASCII: Hello World!"); - ImGui.Text("Accented characters: café, naïve, résumé"); - ImGui.Text("Mathematical symbols: ∞ ≠ ≈ ≤ ≥ ± × ÷ ∂ ∑"); - ImGui.Text("Currency symbols: $ € £ ¥ ₹ ₿"); - ImGui.Text("Arrows: ← → ↑ ↓ ↔ ↕"); - ImGui.Text("Emojis (if font supports): 😀 🚀 🌟 💻 🎨 🌈"); -} -``` - -**Note**: Character display depends on your font's Unicode support. Most modern fonts include extended Latin characters and symbols, but emojis require specialized fonts. - -To disable Unicode support (ASCII only), set `EnableUnicodeSupport = false`: - -```csharp -ImGuiApp.Start(new() -{ - Title = "ASCII Only App", - EnableUnicodeSupport = false, // Disables Unicode support - // ... other settings -}); -``` - -### Texture Management - -Load and manage textures with the built-in texture management system: - -```csharp -private static void OnRender(float deltaTime) -{ - // Load texture from file path - var textureInfo = ImGuiApp.GetOrLoadTexture("path/to/texture.png"); - - // Use the texture in ImGui (using the new TextureRef API for Hexa.NET.ImGui) - ImGui.Image(textureInfo.TextureRef, new Vector2(128, 128)); - - // Clean up when done (optional - textures are cached and managed automatically) - ImGuiApp.DeleteTexture(textureInfo); -} -``` - -### PID Frame Limiting - -ImGuiApp features a sophisticated **PID (Proportional-Integral-Derivative) controller** for precise frame rate limiting. This system provides highly accurate target FPS control that learns and adapts to your system's characteristics. - -#### Key Features - -- **High-Precision Timing**: Hybrid sleep system combining `Thread.Sleep()` for coarse delays with spin-waiting for sub-millisecond accuracy -- **PID Controller**: Advanced control algorithm that learns from frame timing errors and dynamically adjusts sleep times -- **Comprehensive Auto-Tuning**: Multi-phase tuning procedure that automatically finds optimal PID parameters for your system -- **VSync Independence**: Works independently of monitor refresh rates for any target FPS -- **Real-Time Diagnostics**: Built-in performance monitoring and tuning visualization - -#### Optimized Defaults - -ImGuiApp comes pre-configured with optimal PID parameters derived from comprehensive auto-tuning: - -- **Kp: 1.800** - Proportional gain for current error response -- **Ki: 0.048** - Integral gain for accumulated error correction -- **Kd: 0.237** - Derivative gain for predictive adjustment - -These defaults provide excellent frame timing accuracy out-of-the-box for most systems. - -#### Configuration - -Configure frame limiting through `ImGuiAppPerformanceSettings`: - -```csharp -ImGuiApp.Start(new ImGuiAppConfig -{ - Title = "PID Frame Limited App", - OnRender = OnRender, - PerformanceSettings = new ImGuiAppPerformanceSettings - { - EnableThrottledRendering = true, - FocusedFps = 30.0, // Target 30 FPS when focused - UnfocusedFps = 5.0, // Target 5 FPS when unfocused - IdleFps = 10.0, // Target 10 FPS when idle - NotVisibleFps = 2.0, // Target 2 FPS when minimized - EnableIdleDetection = true, - IdleTimeoutSeconds = 30.0 // Idle after 30 seconds - } -}); -``` - -#### Auto-Tuning Procedure - -For maximum accuracy, ImGuiApp includes a comprehensive **3-phase auto-tuning system**: - -1. **Coarse Phase** (8s per test): Tests 24 parameter combinations to find the general optimal range -2. **Fine Phase** (12s per test): Tests 25 refined parameters around the best coarse result -3. **Precision Phase** (15s per test): Final optimization with 9 precision-focused parameters - -**Total tuning time**: ~12-15 minutes for maximum accuracy - -Access auto-tuning through the **Debug > Show Performance Monitor** menu, which provides: -- Real-time tuning progress visualization -- Performance metrics (Average Error, Max Error, Stability, Score) -- Interactive tuning controls and results display -- Live FPS graphs showing PID controller performance - -#### Technical Details - -The PID controller works by: -- **Measuring** actual frame times vs. target frame times -- **Calculating** error using smoothed measurements to reduce noise -- **Adjusting** sleep duration using PID mathematics: `output = Kp×error + Ki×∫error + Kd×Δerror` -- **Learning** from past performance to minimize future timing errors - -The system automatically: -- Disables VSync to prevent interference with custom frame limiting -- Pauses throttling during auto-tuning for accurate measurements -- Uses integral windup prevention to maintain stability -- Applies high-precision sleep for sub-millisecond timing accuracy - -### Full Application with Multiple Windows - -```csharp -using ktsu.ImGuiApp; -using Hexa.NET.ImGui; -using System.Numerics; - -class Program -{ - private static bool _showDemoWindow = true; - private static bool _showCustomWindow = true; - - static void Main() - { - ImGuiApp.Start(new ImGuiAppConfig - { - Title = "Advanced ImGuiApp Demo", - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(1280, 720), - Pos = new Vector2(100, 100) - }, - OnStart = OnStart, - OnUpdate = OnUpdate, - OnRender = OnRender, - OnAppMenu = OnAppMenu, - }); - } - - private static void OnStart() - { - // Initialize your application state - Console.WriteLine("Application started"); - } - - private static void OnUpdate(float deltaTime) - { - // Update your application state - // This runs before rendering each frame - } - - private static void OnRender(float deltaTime) - { - // ImGui demo window - if (_showDemoWindow) - ImGui.ShowDemoWindow(ref _showDemoWindow); - - // Custom window - if (_showCustomWindow) - { - ImGui.Begin("Custom Window", ref _showCustomWindow); - - ImGui.Text($"Frame time: {deltaTime * 1000:F2} ms"); - ImGui.Text($"FPS: {1.0f / deltaTime:F1}"); - - if (ImGui.Button("Click Me")) - Console.WriteLine("Button clicked!"); - - ImGui.ColorEdit3("Background Color", ref _backgroundColor); - - ImGui.End(); - } - } - - private static void OnAppMenu() - { - if (ImGui.BeginMenu("File")) - { - if (ImGui.MenuItem("Exit")) - ImGuiApp.Stop(); - - ImGui.EndMenu(); - } - - if (ImGui.BeginMenu("Windows")) - { - ImGui.MenuItem("Demo Window", string.Empty, ref _showDemoWindow); - ImGui.MenuItem("Custom Window", string.Empty, ref _showCustomWindow); - ImGui.EndMenu(); - } - } - - private static Vector3 _backgroundColor = new Vector3(0.45f, 0.55f, 0.60f); -} -``` - -## API Reference - -### `ImGuiApp` Static Class - -The main entry point for creating and managing ImGui applications. - -#### Properties - -| Name | Type | Description | -|------|------|-------------| -| `WindowState` | `ImGuiAppWindowState` | Gets the current state of the application window | -| `Invoker` | `Invoker` | Gets an instance to delegate tasks to the window thread | -| `IsFocused` | `bool` | Gets whether the application window is focused | -| `IsVisible` | `bool` | Gets whether the application window is visible | -| `IsIdle` | `bool` | Gets whether the application is currently idle | -| `ScaleFactor` | `float` | Gets the current DPI scale factor | - -#### Methods - -| Name | Parameters | Return Type | Description | -|------|------------|-------------|-------------| -| `Start` | `ImGuiAppConfig config` | `void` | Starts the ImGui application with the provided configuration | -| `Stop` | | `void` | Stops the running application | -| `GetOrLoadTexture` | `AbsoluteFilePath path` | `ImGuiAppTextureInfo` | Loads a texture from file or returns cached texture info if already loaded | -| `TryGetTexture` | `AbsoluteFilePath path, out ImGuiAppTextureInfo textureInfo` | `bool` | Attempts to get a cached texture by path | -| `DeleteTexture` | `uint textureId` | `void` | Deletes a texture and frees its resources | -| `DeleteTexture` | `ImGuiAppTextureInfo textureInfo` | `void` | Deletes a texture and frees its resources (convenience overload) | -| `CleanupAllTextures` | | `void` | Cleans up all loaded textures | -| `SetWindowIcon` | `string iconPath` | `void` | Sets the window icon using the specified icon file path | -| `EmsToPx` | `float ems` | `int` | Converts a value in ems to pixels based on current font size | -| `PtsToPx` | `int pts` | `int` | Converts a value in points to pixels based on current scale factor | -| `UseImageBytes` | `Image image, Action action` | `void` | Executes an action with temporary access to image bytes using pooled memory | - -### `ImGuiAppConfig` Class - -Configuration for the ImGui application. - -#### Properties - -| Name | Type | Default | Description | -|------|------|---------|-------------| -| `TestMode` | `bool` | `false` | Whether the application is running in test mode | -| `Title` | `string` | `"ImGuiApp"` | The window title | -| `IconPath` | `string` | `""` | The file path to the application window icon | -| `InitialWindowState` | `ImGuiAppWindowState` | `new()` | The initial state of the application window | -| `Fonts` | `Dictionary` | `[]` | Font name to font data mapping | -| `EnableUnicodeSupport` | `bool` | `true` | Whether to enable Unicode and emoji support | -| `SaveIniSettings` | `bool` | `true` | Whether ImGui should save window settings to imgui.ini | -| `PerformanceSettings` | `ImGuiAppPerformanceSettings` | `new()` | Performance settings for throttled rendering | -| `OnStart` | `Action` | `() => { }` | Called when the application starts | -| `FrameWrapperFactory` | `Func` | `() => null` | Factory for creating frame wrappers | -| `OnUpdate` | `Action` | `(delta) => { }` | Called each frame before rendering (param: delta time) | -| `OnRender` | `Action` | `(delta) => { }` | Called each frame for rendering (param: delta time) | -| `OnAppMenu` | `Action` | `() => { }` | Called each frame for rendering the application menu | -| `OnMoveOrResize` | `Action` | `() => { }` | Called when the application window is moved or resized | - -### `ImGuiAppPerformanceSettings` Class - -Configuration for performance optimization and throttled rendering. Uses a sophisticated **PID controller with high-precision timing** to achieve accurate target frame rates while maintaining system resource efficiency. The system combines Thread.Sleep for coarse delays with spin-waiting for sub-millisecond precision, and automatically disables VSync to prevent interference with custom frame limiting. - -#### Properties - -| Name | Type | Default | Description | -|------|------|---------|-------------| -| `EnableThrottledRendering` | `bool` | `true` | Enables/disables throttled rendering feature | -| `FocusedFps` | `double` | `30.0` | Target frame rate when the window is focused and active | -| `UnfocusedFps` | `double` | `5.0` | Target frame rate when the window is unfocused | -| `IdleFps` | `double` | `10.0` | Target frame rate when the application is idle (no user input) | -| `NotVisibleFps` | `double` | `2.0` | Target frame rate when the window is not visible (minimized or hidden) | -| `EnableIdleDetection` | `bool` | `true` | Enables/disables idle detection based on user input | -| `IdleTimeoutSeconds` | `double` | `30.0` | Time in seconds without user input before considering the app idle | - -#### Example Usage - -```csharp -ImGuiApp.Start(new ImGuiAppConfig -{ - Title = "My Application", - OnRender = OnRender, - PerformanceSettings = new ImGuiAppPerformanceSettings - { - EnableThrottledRendering = true, - FocusedFps = 60.0, // Custom higher rate when focused - UnfocusedFps = 15.0, // Custom rate when unfocused - IdleFps = 2.0, // Custom very low rate when idle - NotVisibleFps = 1.0, // Custom ultra-low rate when minimized - EnableIdleDetection = true, - IdleTimeoutSeconds = 10.0 // Custom idle timeout - } - // PID controller uses optimized defaults: Kp=1.8, Ki=0.048, Kd=0.237 - // For fine-tuning, use Debug > Show Performance Monitor > Start Auto-Tuning -}); -``` - -This feature automatically: -- Uses a **PID controller** with optimized defaults for highly accurate frame rate targeting -- Combines **Thread.Sleep** with **spin-waiting** for sub-millisecond timing precision -- Disables **VSync** automatically to prevent interference with custom frame limiting -- Detects when the window loses/gains focus and visibility state (minimized/hidden) -- Tracks user input (keyboard, mouse movement, clicks, scrolling) for idle detection -- Evaluates all applicable throttling conditions and selects the lowest frame rate -- Saves significant CPU and GPU resources without affecting user experience -- Provides instant transitions between different performance states -- Uses conservative defaults: 30 FPS focused, 5 FPS unfocused, 10 FPS idle, 2 FPS not visible - -The **PID controller** learns from timing errors and adapts to your system's characteristics, providing much more accurate frame rate control than simple sleep-based methods. The throttling system uses a "lowest wins" approach - if multiple conditions apply (e.g., unfocused + idle), the lowest frame rate is automatically selected for maximum resource savings. - -### `FontAppearance` Class - -A utility class for applying font styles using a using statement. - -#### Constructors - -| Constructor | Parameters | Description | -|-------------|------------|-------------| -| `FontAppearance` | `string fontName` | Creates a font appearance with the named font at default size | -| `FontAppearance` | `float fontSize` | Creates a font appearance with the default font at the specified size | -| `FontAppearance` | `string fontName, float fontSize` | Creates a font appearance with the named font at the specified size | - -### `ImGuiAppWindowState` Class - -Represents the state of the application window. - -#### Properties - -| Name | Type | Description | -|------|------|-------------| -| `Size` | `Vector2` | The size of the window | -| `Pos` | `Vector2` | The position of the window | -| `LayoutState` | `WindowState` | The layout state of the window (Normal, Maximized, etc.) | - -## Debug Features - -ImGuiApp includes comprehensive debug logging capabilities to help troubleshoot crashes and performance issues: - -### Debug Logging - -The application automatically creates debug logs on the desktop (`ImGuiApp_Debug.log`) when issues occur. These logs include: -- Window initialization steps -- OpenGL context creation -- Font loading progress -- Error conditions and exceptions - -### Debug Menu - -When using the `OnAppMenu` callback, ImGuiApp automatically adds a Debug menu with options to: -- Show ImGui Demo Window -- Show ImGui Metrics Window -- Show Performance Monitor (real-time FPS graphs and throttling visualization) - -### Performance Monitoring - -The core library includes a built-in performance monitor accessible via the debug menu. It provides: -- Real-time FPS tracking and visualization -- Throttling state monitoring (focused/unfocused/idle/not visible) -- Performance testing tips and interactive guidance -- Historical performance data graphing - -Access it through: **Debug > Show Performance Monitor** - -## Demo Application - -Check out the included demo project to see a comprehensive working example: - -1. Clone or download the repository -2. Open the solution in Visual Studio (or run dotnet build) -3. Start the ImGuiAppDemo project to see a feature-rich ImGui application -4. Explore the different tabs: - - **Unicode & Emojis**: Test character rendering with extended Unicode support - - **Widgets & Layout**: Comprehensive ImGui widget demonstrations - - **Graphics & Plotting**: Custom drawing and data visualization examples - - **Nerd Font Icons**: Browse and test various icon sets and glyphs -5. Use the debug menu to access additional features: - - **Debug > Show Performance Monitor**: Real-time FPS graph showing PID controller performance with comprehensive auto-tuning capabilities - - **Debug > Show ImGui Demo**: Official ImGui demo window - - **Debug > Show ImGui Metrics**: ImGui internal metrics and debugging info - -The **Performance Monitor** includes: -- **Live FPS graphs** that visualize frame rate changes as you focus/unfocus the window, let it go idle, or minimize it -- **PID Controller diagnostics** showing real-time proportional, integral, and derivative values -- **Comprehensive Auto-Tuning** with 3-phase optimization (Coarse, Fine, Precision phases) -- **Performance metrics** including Average Error, Max Error, Stability, and composite Score -- **Interactive tuning controls** to start/stop optimization and view detailed results - -Perfect for seeing both the throttling system and PID controller work in real-time! - -## Contributing - -Contributions are welcome! Here's how you can help: - -1. Fork the repository -2. Create your feature branch (`git checkout -b feature/amazing-feature`) -3. Commit your changes (`git commit -m 'Add some amazing feature'`) -4. Push to the branch (`git push origin feature/amazing-feature`) -5. Open a Pull Request - -Please make sure to update tests as appropriate and adhere to the existing coding style. - -## License - -This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details. - -## Versioning - -Check the [CHANGELOG.md](CHANGELOG.md) for detailed release notes and version changes. - -## Acknowledgements - -- [Dear ImGui](https://github.com/ocornut/imgui) - The immediate mode GUI library -- [Hexa.NET.ImGui](https://github.com/HexaEngine/Hexa.NET.ImGui) - .NET bindings for Dear ImGui -- [Silk.NET](https://github.com/dotnet/Silk.NET) - .NET bindings for OpenGL and windowing -- All contributors and the .NET community for their support - -## Support - -If you encounter any issues or have questions, please [open an issue](https://github.com/ktsu-dev/ImGuiApp/issues). diff --git a/ImGui.App/Resources/NerdFont.ttf b/ImGui.App/Resources/NerdFont.ttf deleted file mode 100644 index 79a4b1f4d888185d28cd7b39345ddda5b47477da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2468976 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 z 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

!<2JsdS?(>yG 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󥋠HAE^|Tah@KFNib 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

  • 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�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

    3e_-k> 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

    )jm!W8{YrtCYFjfV!xQZCx(#}j~I*j=Q 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

    ET=j8W2L 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

    +DeNe2ZiDtLZ$tq(f%}Y!mnS|`Sm6-S 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

    IbF00E~6^} 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 )90g|5^ISR-( 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

    F?34;yluaG_i8{q5?EZslGcUH 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≠eALY5TuPtvG%lyR|f9~_lgz}@D|9f)>W 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

    R*}vcp3RKBhjMh%U2s)OrEBAh2#q#z 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

    j}p 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

    A;q@JI?={D(I(zsl$lqYnU;%h zIJP~}#cgomh}=-2En8RGSXbIuSK3%t+E`cG*wEY9(A(J1lWpk9HuPj`HQ8ECw!tRb zV3V!tWUD&as!q1blC827t1QJTOR>sQtg;lF#}u2#6stPLs!p-ar&tRq)uJ_{T5JV-|J%DH&+H}PQbtMP5R^P+Y1WrC8+)4dAe2$Oy zk{%x&mh|ROe6(ji-d^hCqdoKS(O#7C(O#7C(P_Tn7@2YDIYr)uB|h3qc6@Xvm7Sl5 zsbKOHAMH))_!w_W$J?uSyuEtI+pBkcjCH_Xz2oiGJ3hub5aY!kZ?E3*_UavPuio+Y z>Kz|r&Bl0R93Nxt*{gTFy?V#T+JIwi!1h`mZ?EO?v57wKUjb5c3bQ?rW0U02{QUoi zxOV}Mt2)nxw`OMV8A+q7^Sh$qwFJ<~mnLbu45L$i;dE+iT51}UjBE`C zbD%v))k*J=ODH=$F*-1Q*;oyUq=OC=S}E7xcs2TrDe>WhdJBYA%5Ml2i!rnn7dVbBW^e8%>)(hLx`}45Md7?!X82-x^gz6NTgP#2G_!r^vIyGtpU<% zr1w1SAD#W#&?oEk_dYw zk+$}lk@U{Q8pOelON70W2zwV>F97D&t@m+~{wiBbQkwliS%gW`ogP1%) zPOjV)XC=)3Ph{mvdoa0Yk1Ok_%c30=)g}foK-7F#*;O|@ks6d{OQw4nAv;46c7`JC z3`N?P)lMc-?eWx(R63i$ask@tjB$n&821@R-53V5=rXuIF^8I%6gw}6hU2rgVx*s4 zox*fYT*lsV^ns| zmWIbrmLygzN{ncr4nAG>nIh~nMLL#a;;=#!x;teeNi}0wHUJ&0kUQ7_bnszz@I~n8 zZpdaZTphyHRHj!zLw2(1?PN>Tx$HE_wt;kdhdy#yN5E9TPE2cIwSxgz`a0Pjcd|L` zWa;Zx54gLtb}SR0Ok~;<@xk#Kp?|CiR4l%`*E#HI_8eXhf>LHSfUwPB`b6rk{DJF zYAgSRceItS6O|J>1+qSoDsx@Jo?k2adh`;SNReo&=SS)W&~235?=!jIdVVy3B@}(B zThDK+mcE7NLUNKMVvJff;6*Z^Qm!=Yz$;wBU)U=62YDO}Jiee4ksMKW` z{AMsZOO(m9e2GjIV&|}xox@gk4qKPD)@&2)v?8WAeFIzBA#7b5vv(lN61BVHsF2p9 zqm$NGrj?z-R(1+omv*%bVvvrGoilmWo1uckXgVsZML!>TG3|=-i>r|okz9z z4Ki0>=JusW1B0lR>>cs=K-?Kkk6$y9s2-n8VLE+iA`wJ~29?*aqdm)bHD1O`JLGv+ zXLqH^YO}*Kb*s{vZCD336cwK9cRab<^*fFw(v-_}Z0dT((ARj*8V}*bNXd6NyDKr` zMF=%E3@0<$Nl}B0YLKfMhC&V3FVt}Tsv0g=HC)f4hU*z>khyBO4yr+iJ~z$GCet2PF$1NnaoOI9jYEoWU(L)g)}7lWUcIzwQ^FZb$P4?ozt?8RBPLE zKdRPR6X)9exy}x(d!`2C8CyPd&<4Mi4OwevS6HhrXb5EnHD9{48Ej>P z(8}7rl~s2utL|1--L2i7$gHtTw_PmDMuE|EJSh=GIUdF;IbBO<520@?lPld=iI!Yy zPY!iWa-Jc|0dkZB#-_a)2D=06EHvHM&Gwk0^)5Q4EVUWo^Ww91ll1 z9*%N69OZa8%JDE3;57ip!%>chqZ|)MIUbI3JRIeCILh&Gl;hzj$HP&Mhoc-1M>!tG zn!QHNDlf_^FUs+7bSdpys?}YT)m@b1-zdkwQI3D3tm>ky>Y^O~MmheCvT}>Ea*MKZ zi*o!M<=7(1@o$vl-zdkwQI3D39REf+{*5kcpC_LQ;PG_Cv*rn1o|){EZwKa|dJ7c| z`W)W#<48Hmk#dwHEGzerH!mTdo{D$({UXe zML7{1WknTT8O3-Zh1H}9)TilG{a6|kg^7-MMi*u3OMP_do2sfSSJsSq3x?HOlSB9- z2W@wCD&04l#fOZ#q3HlN2tc5ACx?Ik6n&#B!7q z%hC33H_JA}B}UBR>XcoS!=xyy>L{z~Xh$TpD~WkkEHY}u94SRR+VMe;%p}16gx14R zj(nmV`9wRq>(Que#TqTX4#5C)EF_;wNk)aohusAV46*RpN@{RoLt+#|R{!usHYAOB z9P`Z$(j*OKWVF~ff>+YsHJnI{gyfBDpGfPdHOhfZlmnS42QpC(WTG6%M7vt+v@^6a znL&gpZH%H_?G2bgP&Yb_$(?cStwlMOh;}cl-GOQAKCIv4>4kOn+jZDz5YvgkI6B1P zZ6ne}?u$=sO=N1uci>46q-AC!K9NoLBK-Jpd{^xl$i&zN6uTX@8JQx_^oh?f`bcPa z*_{hdq6eJbMMo{>3=%2##@GaubbZwh;Hy0MhV%;g>6i8jN!>VI2jirJak@7cr+Y)= zBySi_;6sZpe0er9E>Ec*Qx^EzWsseL@f!WoL^}XA8cJzcJs}&UPLkpgV^bDmQx;=W z7GqNuV^bDmQx;=W7GqNuV^bDmQx;=W7GqNuV^bD8zq4LHknwb4g4%?}*rdhSq{Y~z z#n`09*rdglwz`$B)a+yN5t)?KDA>Bi*t*4*#?G1A{$oV3Mm|AUnHmJ`lm0eZ0*2N1 zEXLL^#?~*!)-T4^FUHm{#?~*!)-UGH{w{BG*JDiyYvAkEH=LOm z8iJ$QWmQW38<OigcW1Rer zaq>6D$=?_!e`B2djdAif#>w9pCx2s{{Ecz)H^#}|7?*})TpEsX;y1>L-xw!;W0?5G zpnH9q#h>%PG0y+SIR6{t3UMroNy$Wf+vF;F!)^51hw!v9fbGE0-5$Wi)W{;Y_hNcA z(xriQ((6Fc+aTj6eeK3;C-H$I?r0xnN}vsx+MRFuE$dNSCVQ{|jPT^~>;iN1vXqRM z+}JP2+mCi9J6tc5PN)npMwIBo^6k+bS4KLS|mDm%DNqc1WA8f zh0<|a50hoOTT%&(W70V|5+CS5BOSze5i=s=HN)D-$?SRvgX}E672%u3&P}XMd*!h< z?WD%ov59fAIM$|};u!lhG4^R zw#P?6ZJ9pERBP)ok&UP9@f{PX9g=TSnWdfdq{QlAy%f*T9!R2n4vZ(_BOyF4>D3Me zdt;;*m8qQ3Nrne_MFq4WAaw^*^oy%lqcBNG2N+)$Wp;C@@-@z$fFPCqa#cN;y z5&B0GLxF90uyz(OTs=O4I%hbMNr#o~Od`LMDSUFUEg^lu@oW={juaXx1s*jF!39Bv>hSED3I%7~6{X42g}Ph{R>x$OPpac3#3(*}<)uQXs<<0`vZbQcq6AGC5%hZld?Ae3KrDS4jB9z6m z+#oqLmO#%M_4%-WFcr7))!2FGJD4`wIx*fTVY_zAum&{=3I#rjO3NIwjoHnuI~TJsA(lSmNqnSs5DPAsZqu(v8{&ibejGD4Sm79i;O?Uc56ioO*%j%|W^H{X>`Z)5Iunw&1CuU0{PEq1&|q>hz6R4LXj)R+)AiDn;DbJ_ zN6AOp)lv^-D2w4VdavVH?$|Ym4l?SL5qzJ4ifI^& z6wYW8m089?U4q%c;MmB7w7}u0c8uxFHXKF_iBT^u=g+`sG^8?~oD6O$1eJLKJ+qBE8dnulwHt)^G!}>%* zMt|@#(}*xzjE|z@BkTuou6hloI3?m*jAz8Z@M?TTt4fXGLq%CG96uBFuTCiH#{?WR ztduSb7Wa_}=#BuLC5u9J@>#g&!ou9hsLZ;^EzDPrj9xY-bPkGG>DMMJvm1sJ z8Ot3B^R*;>BMkY)VWfR;T*L5@;~E&{?bTT$<`ebri-3 zTB|yV+QC02@~iQ)p$zh5B8&GUy`v6Ug~910fAQdKi)Zl0YCX73R~s^6#5aQFO#MZK zy?p|$ImYO0o*EIqJetx9ep){)qGvNW!TSRf+T#P0bJ#$v#yVMLgLj&DL%z(aY#nFt zo}{C#u{87cSQ4ea8o!E=H)=fV$ea_ZT+Cp}I~GJ)!%#01#%%L&3S)yI_>mT9in<~G zKqfAwQr35oO;Q?aEe=zqAw2CPp_^ z<3u>uNG~ckLC*~@u1%gu;w_h%*jyFVX=DiQnqLx2_}OK8=^YWm^PDe|%e^o%N#92l z^<~4(C#ZPvAB_z`SSYC^}FQh zd5X;_IX%@HJ((L%slVt&6WW8G_Ida@7*9DsUNI)sUKbO zQl{%&>Pc3+gxGP#0mZF~gNnSnP5F@GuwqhiyW$ST5yer(l%lF;k14-KQ8ly2m1h+v z6n84_QdDK_N#%P4YcNB%HKEbh;;Tb^@pRQNR&E-d7iA8I_Uix_1z{_R4Y~fs7Pv%Ujlf!gbpn?PtQYu(K(9cbzy^WK1U3p>F0e`9n*vt=8qg0KTDfg#7~{Bc zjG$`OJ%YY#GVXG;Sjl*k%F*becZRh|tl{x)YA~J2#ATU&XeCC%BXP{nDxHu~W<4F~ z|6=-oYrNTYCh;vAekwCCF&M8?5$5>hXRU6WXxovx^w5S@W+n#WGn9>^t&)$eR*$1^ zImmG4cPi9HT*b{TgNgBBHA8g7 z??qgH3ADWv9v{N*h1KkK3^Vs=e{!fDdZ#q~K76B{!LN=IqmxV|kr{=x41ht0(L?&8 z$@ok$usuBvt9ufeJ&B<-CIgw17<$Q^M7)t+CUz#Ww2M(;{E-})qxbN;6%6P$CNr3r zb4_>sOr#P?+A}eN0k@k)?GqXFE92eq@ibMO$Y9Q&9y{XrxiCg48VU~7Xz7&3hHg!K zkk7RP_F$$jnAl-VxjNA2kvn!Sg_EevyS1GYX{0avutwA zl(>#P=p(vnbS6^xwZjg5YO7GN;wd!!u)i~jlCui$n)~27w_l#hXtnwB-= z@G?~6>e@Pi(w6dUb zRUdqJa(hzK!vIJ;(^n>eg%l`;a;dr5jUm1)EkkkqS`haz9Y2WyelmV~N!BM*vG|d| z1{pVsZHaMJcvT!TYZ}ceyc_O=Sd~cQZDUQf3NG)`Y$fIsq;E zsjhH&uhJ@HJU;NlJe}GD=O{xUf8_`Hd=XboK(X<}B;(Z_S4)}s?fB_+e8Rmq31w7o zbeP-%&?Dp9Oq`_`j-gBN-xtr|WpOLs9t^kf3afUj(U?P1jRRxLBuxWDrv^EuYOY3x z8gdOoVZjoiRChceEJCi0GuKv+XX1$wMwg9`Fp-N<38P4=&KF}+&Nb~~%#g%W>Q}!Q z(PDTB=8JX=OB1CxE=i;&nJbqhQJJ7*X)Kqd$J0C08bF`qC215z-kI2itYB1=nW4!& z5|wJdCY~NwFZfgqm9ZMKCV>_(&DL;DVjQz4tR&YYF`?i-aqvmDi)%3ZhELwG&Yi%| z5T!6-MS6Hb+E7h!4VIWtpUET zz=3t5#JH*r2j3--EZa!@gdH`{$cX!HxKU#~ox(Im!gXR^1D3lFbZuOmNw-;Bi*J-L zdqW)(yOUd)lWS#;TpzpU&02K4(>s}~_-!pF-Km_^efZ5NlfiFp6R8B&kv%6ytN6Os zjRA8`Ci3(id7+@6mgTi5xv1RGIF0g2tizxO@0&jKb~+Zr*5~We8BD{v6}VagNp@IEm3C&- ziRa1mw8c^pUQ|2`sd~!msY_8+YhJC#l#W-F*F(7p4GO07jR;p(|LEgbkEll3fx?{X zL>yM}wRhuFlP0xbtWRVnG;7wQ8Pp#DB*wMYTc6Bs#Z0AXUl}jDZ1@I7%ItcWHZc^( zI8z*`Yjiz5t@-^8Oop;-;`eW;n>EXNWxSMRLFh#%#qHnpPT&XJ%wFv%>I;D>Tgi}A zn%$%L#9(q|CXNTINn@EmD|%?OeNu4ZBdT5>x^3=r?8B&H7_)eZaYm7p^0X#_g2@Ch z^MRSWOv1e@Glb}ZC79uT_*nw-+)Yh>qX5PA3HC_?Z@L2P-SxpP6l6vu?E!lqXG^|l zt>V`E%4IHkS90rc`8&rO=Sq(|3h@SBS^x8mqBseJT)1 zGM({`iPSJFf(=1uDa{TUFNpV9Mljxib|vk0`dGPdn84>I6WaT^ ztnbo^tbRq}J~VwhF6%qB?|j)1EMoGP?T}GILX$xE1asU{e!DPljwTw*Do_QPE_2GL zUX$2I2?F|Cr}OCaLP;OKGfnXMUWU&MCgPKtYnSaAz|^o9qVK^*nSIRiRo;j=F!1WY z$6H$3H{u=HgXd1&Fg2USL)C1>=Sr?RVEB1T_e6Fg#b)Yqc_0~#-tZd>zMtPrAnPju5qGE^-*AhywOA6x5ARbV zw9oHe*%cG)hzfRg2)1_#wyC_WTjkwaWuYJ5`9?hdsP&L>BC|d{rMB=HP5lapQ`u`oSfhDhsEiTA!#}WbonCBAn_2A3m$i znv4DQ{*!+Q=d+%Z6QHfvtm8NjOLifre%D(UTKoTh{PV%;GR^FdkRNlQojeKE@Yapi zd$+E+wf)w%ThF`o>|5vE+IXvT%V)QIe9Q4$-oEAGTMqoz@NW%YfBSbI|L()zJ#gK} z*Dd(YC*OJcJ9mF)=XbV$XTx_cy!PR1YrcK;x6j#oWbb`@8^87Tw{G~>z_&ts9+>=O z^0vu+ld~qnyN~T|+x5V%?5+!TE!wqUS9s^gJ3rj{#!hGAmlK7FdD-sq&&OXLw=#>b z*>uf$>F=curydwRIodvQ^Nxet-{1c1_M5j~w>`Uk%l6*w-P`9UKTaM>ejlB^i<1k7 zKOKH%_@3e2!|R669-6al%i5bd@8}$nzm7*b?r#5Sd!)T)<%X5#uCy+C^`eDe|Mct6 ze0|o1S6>*tF#MYvSKPf~=ZZBeE?O~bMa^$SFBrIBW9<622ik5}{_OI5m+x7=e)&1e z=Pj>a?u&jJJsLf?H5+*>5?c25vPDZXOMA}GF1h>HfBNf@^R8X|_Tq;Z-?aGZ#nHv# zuO0i^!LNPqYlC0A;A@TNet7PZbDggq`RYSo-S^ckiw-Qh_A7_J(tOV5FaO}|6K7v= zcH>zq&Ky4D_JxmsDfgu(zO;YAu?344EIj?w)6bm0?zH`LPtI+xYYcxFel+aV9;rR2 zW~};$)q&8u;C}3CxfnZ+TG+YtY3#DP(_Ry(!T#9a$6nqS`xat1^JnnBoQ?Nk4$64g z{v(wA6N*K}f?{3~rv{e!yhD8o7Hz?TVqUS*=O3z1!J;i#P|Pb<`ovkcNL{d~SWwI> zR{F%Lv+yZcR4gdw6)Sz-ralFWwqQXqub8vuVn6+Ju?K&1m1F%9XBi%|UbUXK9889oJziUq~I zVx>=&(^t7I>S_>9!!GdC5F$bj9y!OIv zv^I<~YArHqEsRJ_?4Wo=&i;P+eqt=GeAGH=4 zwH8LL4V#|UEvmI((H1Ny<`r{5YRzje+(v7|D5KUQqt?QxwPEx}twlzyg;8t6rl<7` z)mpG<3lJ`*-g6mcv`=KTPyEq7kqM(e+9xvFC;n)k$b?neSFhR$7Hz?TVqUSbZLCwD zf<;@fpqN+8RYk%J!Zo#@)*h>Uw)Tg$Kd8N}_S)L*wHs^OYtO5lSL@V#T=RC#(>0IO z+*9+tnmsk!YIrQ`HYuf4};s>YddC)$6J+s6MBjJFdt19|Jf=q#Y-boQcy+d^i#17*17r0w=TF zgVSBE#|be5I9=vq|Ani6xw^3W*y>kTKfU^~)eo)y!Rk9#e{c2mt9P#6zIw~*-qk&; zFI*j2eeUXot7oka`y;D;Jtun#IPYd*&+|P`^*q}1P|ty$@Aur^b5qZCJv)0wdIown z^{ngZ?75(4NzXYw^Zm1WntMX4KF8@gzEww8y}Ig|RZpxsxaxsb_pZ8g)h(-TT(x&q zX4UYjEvq)Hx_H$^tD>tG`%bPpbJd(x^*GDt{q7UpA9f$Ry18gP!WPx<2j7bsg(E-1ThNlU+aTda&yU zU3Yce*0rze+OBNZ_O7eDHg>J?J=)dY)z)<$&M7+3)!5~9e%ASM=kd_BCyr*-2=l42q=-k_x#dveDa|6yj+TXdRv$JyrPDt9x#O9RCp#YPco?TE?e*=%IZWH_u$Du?qVj@bUNL7MllLf4u;10|&#Lyywdz~; zzsMD5ksQNYfS!~3AQL~z;7jh}{c`UL<6SWKF5Wcvt}xyObMNAvbMFe{T`>19-ahxP zFx~~j-KS*C1PesNw}oRQ1h@T!%Iie#yAek$NT2UMxl>h~;x0^a=cl-Hh*!fiX7qn5 z-Nh;H!W4IYiaV$AOI<{LPE2uApVEEmQ*u)uxGVH2xv5XdO?^sk>Qi!4AE^h+^(ncT zUnMv7DY>Z++!gwi+|;M!ramP%^(ncj51xI6J|#ExDY=BE)Os6^6;oZD#D9f^TUl#+~wiLT^=5FPepifmxmX3xjy1951*S7 zUfkv3#a$j=+IV6j_mfXY^HbmNGPgdTGPgdTGPgdTGPjmL*RA_sJ}`XCZ(4$VU$S;q)ZrPQi>=O)@z-GGhFxK+}AOj6}t)N%U*;tX%}JsyrrrJ zi(#KyIn1CRww|?~w0>wkh&lATtlMyM_qCWsPhsBgYU>JXgSF1;v8&ZG!J_hlVqP&9 z98k+1fQuIL+6y@?lsm>&!+2LLe{9 ziUq~IVh+eW=d~AZlhcM##{3nT=CAr=u8K@^Rb|Xek!fD4j5#PW%|YbY)7InGBi0wq z6Zc>xG-{n^of9}In)$ZyYKL8SKdu3hWBtUiqQ?pz%X=(GCN-AF+z^ntA;8=aQk%G8 z`%MU6Kh`FgTE7VanMtEx?V65Fzi@5RD{P{>A6H|OVMR|?@L1ksIWo0LLx8yYq*>6FR9CmNezQF%cz zub2aBnRKtcxVmN1W0Yx`RGF4ZWm+aZMt@o+Ri6Eh@N?B#u&BJCm{-gJ zsWq>?a2u@+ql{XMj9Lq$)`rm^wH6t*7DlZNtC-sg{HtmwSX5q6%qvzt%M$BG^+cr5R+9MY0B zP?9}X^jN`Td5=xkrgvPM^a`8k?#I>GWLVLY6+D*rSdL6>(hy*72rxGUm>UAj4WTwM z4ZNLhe0V!OX405;jbk5mZPF`jqPrhgW0PS;Pgd|)-eWm3=z79qZV0tWV^Nz7b3>?2 zOhark%%p)@)RRs3Iep;Tq_bYI>4;nQKJaWZtY{ln@L1ksIn0}xvS(P)lgX?a@8&(0 zLt2t=QuYihdaU5FyvL?%(_gzb=@mB7-H)qzPKFgdS;1p@kLAepIcW$mH-tVXBXdJQ z=7vz4n1(zj!%Q0ToQ$lpHhEBM6TxCYu%MV%oYtB_V5i0)SX5q6%q!-AtXFyMh1=At zhEc|PRb;GJg|S{WjQ&`!ij4KDFnLOS8ndwJwFVQawO}zISWwI>=77|i*Iu}d)`n3= ztwlzyg;8t6=#N^9j9Lq$)`m?_>#S-mSPTdj6!VHXAhqVT7jC1qVU$s8kx^@5)Y>rm zqt+s$*21W@Vbjw(qgo3V1A+y`ykZVWt$FQ*+h}bVWzUJ82wRekx^@5)Y`D=X+5S|3l;-{ z1;xB#4oIze?S#k}J5YMYeC zAXp3t78LV}IUw!hwHIzPVYHf zr7;K=1A+y`ykZW>=fG<(+~zqLMj4-j$oL$D@i`bqe|!!i<8u(k=U`anbJ(QX2^Ir_ z1;xB#WlmhKJ_U;b!GdC5vC`*8^(iP{hlx)?`T7js!Bvd5E`#JmK(MG-P|Pb<`rM#C z1&aZ}f?{5=(r2Ig6f6b=3yOKgN}s*zQ?M8iEGXs`D}8=LeF_!>f(6CAVx`X>^(j~k z2o@Ccij_XQ)TdxEAXre$D^~iHZ?H}T1dECV#k^vrPx%tzL_n~pSWwI>=KfF3as_Nn zMX;#6pqN+81qZc6KL8g?Hm|*qvt-L1Q^pPBT`AeT%hE1)wX|zkDeb(=axZsu<{1*F5d;YD@?<>^G(ptorM~-O0!(#oaGX3X1T~qax=>%ax=>%+{|*3 zm;9SqE|LEyX1M|Z&3nP3@`7SsF$ZLx^V$oy$!WtVWB!Uv^H=>bS4F0|sxs!K$TTli z#vBxx=HRsELGYUeluN;)VnH#lm;+L4UVGs-S{p_gwH6t*7DlZNqd#gbGHNZ1S{pX4 z9)ka4(OR*nSWwI>=76fTd+o*5)!Ji}sn#k}t(B?P9-}|iT4k!WGS%8+QhKH{XK}Y^ z=G$WH6=N*A`*Ag6EW?VPtl+V{$8uyk#?lZv#xl$e0ht>@$5@P6#*K!VG-P~lWG0R2 zkMHktZPF`jqPrhgW0PS;Pgd|)-eWm3wMj#$O@_H4)FvZyL+H4XX~?+IFq4Li8;z`@ zPWC^mrAV--yr7s@oK_FQ{}YWtu&BJCm{-gJSq^#ah1--v!zg1p6dB8*FqT8Z=#S-4 zWGsimSPl)F-rMtxYAsmw3lUJ82wRekx^@5)Y`D=Y5k;XEm-sm78LV} zIUu#>wHI!qwPBP|YmrfFVbt0%`lHq&qt?QxwPEPv$}bs$TQud4rxXC#cz$T0fj zGZGn}kuW|Z!zybj88Myk3l>uVH4f`xEh-bD|)hm$MPP_ zk*Q4@LTxh44WTv}nHxfFVj5zTVI~c+$;h~B_{Wx%Bz&VXt!MU^;v3IQudt8qeq4=x zh7~9^f(6CAVh%{H-L);ajn;#kDCQM&K;{{*y>Od6GmJ9knaG%D!kA}<(I4|nWXv;R%rnC(^K3}9 z6D;}!3yOKg>DjkUV-PI*1Ph9J#hm>n?X%z4YcJfceUOk*ruL~!?NfhhpUQ;MpW3G~ zwNL%2eJT?+y>~jHS_>9^f(6CAVh+fs!fP+w=BXG)8J~*C_*8`PsTf9od@3U2QxV3e zVwgLAvF~;B>p|w%v|2?SefV_rp;%DNE9QW-h1XuVjV*>zMq5NiTZGXT!|0E;h>W%f zqb-J2lrVgCj(1H_zDP$-E6UgBX!Wc1ow5Fm6=y6uqvZ^1;l730g;y_Jv#{+;kALa@ zFYW)*4PP2taB{)>3!Y!_=z;?amMoaRAawdCryo82nbQxRe(&kGoW3`7H1tg9VCde^ zEvFBkzTxzXPG5ZboY3CTaA-s5qR`^g1M^SJKQjN&{D(txLV@6k;E~{=`FGF1dH(MC zgY(x19}eCfyg9f#I5>aB{6+Iy=3A%bg6o4Tf{TJJLF=@;PP_TEy{Cqbv)9aCF?;c>XJ$P*>;74H&ANHk;#u=&g=c;?Gv^$2o_8LfdH>A2X5Kt= zuk)aDw{weg-OQ1hn`f?>xnkyGXUw_US?^rrESWifX1L|EmYlQDX~do&Ct8lQJk#=M z%l$2P*+=c??Z@p0?YmoUZrR&1(z4mU#lFrSv#)Mh)3Tyvam)Ocu)W^C$X;SEv>Ru9 zHX}FV$c$%fD{vxkH1Pb4M`zqWt>A1*gRv+j1_^gz}12E zfs1A=o-uz$xcRf@TwqCHVW2T!`A_)Y_aF8@(|m99e*feChnus_!_AwU*Ee@Iw>2+r zUfA5y9BTTk=|t1}O^2JFX?mjRVABIl_cqv}tkE znN4$=>YDiet*h8Sih%!tbSYl=K9|H zp85;xBlYLjFRY(cAFlV+ovbU=ygH`QHNx3g}fZlG>c z-MYHYx(n)-)SXi|zplA16#hK?X}ExWUEcQhgr5yR6@D!Ii2ovgTlo9oJN!$+H-@hb z?+jy0vhbGh#_+muclg3^G<+U@OL?|`fq#x4BO`fV6pM-l#k^w9eo@|L-)4M!hbw-Y z_kmu2W-Qz{7U-;qFev-@K^(bn9htze;ZEQ*u)uspre}DY>an z$xVGqZt7EVQy;i1^eMTiPsz>vD!HkTv^M4Xl-$&(e_kPeHf0u+ZR!SA`orJBFF^x(Y)2Ng&jY=8QK)E?3jY=8QsFX2{N*U9rlrasI zg;Ua~lrfD;8PlkgF^x(Y)4=mRC5=iM)2Ng&jY=8QsFdZZes9j>=rQb{bHkjmIh*J7 z%!$ldhh=a54opsBsy|adA zZJ2ctdJ=PH1!kU@d1U6HnGesr8@-6#GY4m`N8e%5%$Au}ORnW`%abh+w%paSuO-_e zJ%YBDvsliY-ru~hc{f`2 zP0c-M*B3RUPg7gdBDCV6#*>Z58xN!XKG=Am zaew2!#@&s>jhh;K8r#rj&uI)boNPFb*7{Jx!G;43`y2K(>~0ut*woO27J5;`oQ6>S zNwm#}>kri*tUpk{zkXl+?)u^SO=yqX>KE0|sSlwgK3;dY?oi#qx&w9l>-N>{t{X<{ z+f&z8x2SFo+TD}kMtT|A#zh+;}?waA6O*K6=Z8eK( z=G26$Pgduuk5<22eW?1;>IbXut=?aKbM=!AFAkV}FSK!S4lc2<{1v1-At^W0#1Y;Dy0R@Z8|S;H+R6dqtdd3eNk^ z8|X(q2xk|mN@4)^RatG$o?EV%Ka3*##ilU zu!qD!`vLo2`%d&3Z?yMfCy8Nui@m|V82!bly%_sR%(3h3K;W0?Eq)j{f?XvJ1s)4L z9JmiX#XABwV{eJwfmC2Ha0U8_-GLR@VPa8WL7*j2gIy+miG3!1ik&9jz+MwiW4DPP zV!w&|u;av?*mL40^w0KS--+$mdEyFxFZP~j_g~Dmif73~#&@=Wz^fcA=v_KH8+3+CDj z7NEUguD#-q_JXSMJhYVYFB7(q6P@uDxKc zy{Lx;K(O&UKd%;|L#UJejbL|y> zv=_{^S7fvo%(Yh-?G;9Qh0$Ix*IqE!UNF~Qxl4P6(O$Vrd(qCj_JXB+E{%9|lYp?jDyEQFHwQ?1A9bU?-I&@V(y&)@Qgc-1rb)@>4AHBfno{EcpJg%uk`rkNmRH z_>tdw3YWCw%SHUs(aHyk9x?HTp}&Lqx3OHGlAHRJ+|;M!rao|2=u>i6j(v?jrTcmNId5#s za{p|F`%3#6&+V0eYAf?wEdOP0E&pY1)xXTG`j@#iKRmaaA7$>!_@KYMKV|nTThdIFt{ls0apSa8Q6L)!h z;x5+@z3eIRRq7}AE90xwPwtn;huO-C_{3eVpSa886L-0O;;xLZQa_9bro>mNpWLsE zuTsAp;xFHSN!;c7iMw1sahJy@?sENdNUt)!O8w-1Wqg(T$$go7D4!eZx1ZMcN81{0 zZ~kY6`%3Po#P&zpAcmKncC<#2xh0vKGVXq+G?w6-8<-a_5IEOytvEl(f6S&J}KXo;VaXZ`<3A<^Iytud3bS` zr!VgE@Zv7FN6UMeKH{znUzxt#=UkZS&&b@QyfahhFcHre$T+uF8TO0fNLG>uXnr1j3!J*TuTl4m}}pQbTIrfE!(otlPQt}6Vwq1AG_?MjqO-^}ugbz|z4itErrM$P+bRA|wS)bJ%DfWUR6E#zIMv@&JG360 zlCIW;Um%;BhSrf^;P2ElPPIep%TvOhYKQonnpf;=RNAKX>6G}iPW=MeR6E4q)HJld zJtgd^cCa5ZRhLukV1MLPe^c{H>*XowYTf(=vZ;1x9sLFVPEF%fJGA~jCG4qoc=dQ$ z85dd3YCxakPU|M?S}TKH!>+)NVcpmTstqRsEw;|F7W(vScEzG%K{2mrR<*ad^RNAO zX@z-9*$BOS^xa>!+PtM~^xf~S$jOLAM)h0VQHpV!UX{3|XVs50g+9X`Xh*DPtVgZ; zt-Gz;vHRIxYs?z7Hd*Vf9?LuP0Hb(WnHMZ778LV}Id=tqi#zw*U$!#7#V*Y(^q0*V z^xLIX@-230)}X&^#e7TI3_`!n)kR~=7Mmk3`UDG#dBsYf7phOeqEE1(m{+Xy z`J3ufu;>#kDCQL_eXdZSf<>QTK{2mb>GL<#r(n@1SWwI>R{CsHpMpi7U_mjjSm|@Q z`V=hs1Ph9JMScaYzm@Utw5o8r$U~N_aQwN&U*BvKm;W>$PZ@bcedwNIfqzr}ck25Q zD}Z|8OoXcmu2V@*u*VA8zpy`cg7#;QA18G+x^BPyb0^@`I)6mB{cl*s`UOt5VtVT} zbT)XYT(O(s^nQV$t2(F|^opF&qXe64R-(UTQCmiJhWOuyFG5c;*gVQvWhTHnar z5YqE?W08I{Q$ua*F_VVWtkbheSHNJCUSSj6{kR&N3@duFg2(b6%aN%~8bWO{%nhM7 z8JQbGZDJZ?lVK(e84nrRw7x5?dR)q(Vo|Z6m{-gJrQG$o*Irz?vLq5R%B1g3nJ~(v zuT7aS%A{{hnJ~&E?!{#msaEGjQ3<`r{5YRzje+(v7|D5KUQqt?QxwPEx} ztwlzyg;8t6rl<8|s7d3SSgaB(DCQM&K-$M^FWkmH!ziPDBBOo6XrE#9NBcxZ z`-IUx!~T!$%3Af0YMEeBc|kF+m<#fo-v{8Lg}nAcP7CFZvDGl%6$^QnR?A(rTEmLf zyi5D#t}uobt9h3>A$K(=G_2$V?=ny1t}qSj?pFc*-2E!H$~uxK70!JoL~i!0ATP^em1h{+N57qz$U%I zCc69OD+Jdj!-}4);IX{Na%5_ghESUfb3>?2M&^c4o0x{!WSB`qY%;Rx+N58Cz$U%I zCc67^H8vSm^kfB(SkaReJeK!Zj!bh=Luf7<=7!K*G%`1Y<|5OOTr|w2A-QN|)3r&z@qtZxg-vw# z%U3Y2O@F$>=l3ZI2D|)hm$MPP_k*Td3LTxq74WYIgnHxfFWg23u zVI~c+)yOy|(ck#{|3Pi#Xh6Pvi4>*5UeYa5eB{teQlyoAn}$SmxvHX$)eFYrPj-1w0bOsLOiINdaF8b^~7u zei`^e5F=)!Gc_c}yw>p`#+_;|7o6|4s8(+-Bfo|0BzQLP&7ci@!}$#Ode9GiHE01}asCqca?l5S$@yQv=d`5#KVWa744#sMGFN8J zb3VrXmvhxY>CFfs(FF1MNbJlF@ zVe0|w0M7Ef%euq51@m+NucgZQ8A2U*-T;2&ya)Wyk@w*P=S|@I&bz?(oVS3-oc|m6 zu5%Q4)OiQ^j`K_4+ss1uRCu8Uv&-xUkRQCeAzh;e98F$ z_@eV6@CE0mz~`)5o;pxo-YuMX?7W1#A35>{zwf*Xe9w6Wc+7bL_^$IJ@M!Q$z}KCZ zfv*M61is)r4}9Kv7Wf~>{6BE_xbrRGN6s_A51bzZk2)uTZwJo+9&v5}zUll=;A_q} z@Kxt0z*n3@z?V=rYW-l)Cp1|E>&JTg_I{z2&sPh=` z9p@I{Th2cLk2sG5-*o;3_=bb=C35Xi;ET>K;0u<+c~)zl)OpT-gX}%$5#TZBCg4%$ zAAv`lD}Zl02Z66!GceQnJ>?WU2L>e}M0goQHuQI1d8f zbN&u^EI1$du5&-|sIwpVj`LrEZ##bvJmMSxzUlle@D1m0fUi0C0bg|<0>0w>1@L9( zuYoT)4**{bejWI{^H;#r>%_<`0z?>ocb$DA#|cb!q-QD+bE9VZEV%Si)|I77fUoo&E3 zoCNT&lL5ZwTm^j983VrJTmyXB*$RBgxf=MQ69+!;YzI!O6?FRH^SHAa_@T22_<@%4 z_na%ik2&js?>ZZSN1YA8cbs0}Th8UcH=T9BH=I7;YtCiBSDdxLmxC7qUvji~5$7w@KC?Ne^AIs8~?UD^~R7 zQCEvk!J=Y8F|SzZ6Xh5_1&fLW#k^vrPn2@_6f7zh6!VJH?E~v~>*yEi75zfG`{lcC zw_j*j(UTQCmiJhWO#6izLi>e=xgoS)Xk=~(?H4i)=@%Mi(vW_kkxgr6$ikb5ToEiP z78LV}IUxGMn0?^27gu+-#AB4{9Er+wjzpQxjChRxbUs97Iv=7;@?KJKXF;U&1h15I zeSfN4=eVmrfUoJyGw3f4@Pzb=Cq#EYuI33DR`g^AkL5j9>%$}PvT_S2XQv-T{xX~AI_)E z;)L3(aYpSLoKo9{b864VNwtkQtM)UTR(l-h)xL}qYahp%wfE!H+Wk1U_6D3>JBG7s zH{9 zvz>YPRlH+=W`ArSx8Js3wx6~iw;!?Z$N9MX?eEz)*n8|Tdz-x(r{wn77upf~T>KV( z7Rrz>a57K`ydQWY@Oe9XU3CzrIUyc9#9iP6V^umQT=kFGi4}7Ea_ecmKFz&1{XgL;2!RQn;efosCIHYQ zz_pC3f98o_b~ShK4`jG^hA+Wg*aIn^hiy0U403x0S8S>t_kBy^@qG(>Damy&cRKX{ zhao_`R?`UW-LL3_4b?b$rJ z-EQG7L%v=1T$Rt|IrR2Sdycy2_%D~M|8l!V-8I<7M)VuO>DLlZ1D*$J9eWmLYz-@V ztl+V{$K)&|ga~|s-#{29CnixQrzVlf$w_2#4w0~*BZOgcS`lS(ViB2~T0|zhe1Q43 z;`;={iXM~wKzLX71R=|z+z8u-5QfSAEtJU~E@ZNg3z_UyBWxHU43iygD3e`n$Yf_5 zvYhOO4Lju5ABM@U+LRSMCcA4>Cc7y~*qunjFxhj7GTC>DO!i(Plhr9Olr z;W0UhfigLbflN+hAj{!B1grW-Xl0nJ=ulShn5^tjCc89)`9IcuoXKP_XENE(nN0R{ zCX=08g*}ZBhROb}l*t~iWU|jIne4zT>?a6enC#O_ne5d|Cj0f0$*Cz|feBb{n4GOb znVhdeCTFaW$>}h{@XS3XXUI?{=g5%BSu$j@7q~F=#XKfEhEpcHhLg$8;bgM%3Rd;c z$X&x^eU>s=qa~AdTC$v+SBPhhU*~&F&OM~8;4wM>kTN;L1T2t&R))z*CzQ!)CuDNs z37PCO1m;Viv>PV75m6>P5|PQSL}YTd1y~@3Gz^myFesB#Fv#R246+>RUog7~b{JOl zSixg?kL6HPONbc=VOY^)1&`%DCaduXQS~@-*DzVLr%cxE$z<)GOm@8k^L-1J8zy_> zQ6~H2k;xu;WU{-Tu)PRjnCt;and}2dCVK&r$=!-^g&cr5QRIhRJlUV}6YlhbP`lM`&nE1rnkKAq*>etl+V{$7G*Egz)V` zNietl+V{$7DZWgz#UE zCuo@L`b(MY{7WXg|B}gRv|x4((lAWUtffrOttFGQYsqAXKQP}2EH_N{0i;a!0wk0D z0LgObHG$a;NW-wA#|j?HdrVhz_*GcdhZVCYt8}C;ShNHSig`s1<;=2tnDMT{O3qA= zwRmiX$C^FXEYrUF2KoYxi~dI(=RE z<$KOZc|=hAZ4H{6FzO z>wnJwuK(kJKM)Amfrh~BKv$qA@Qpxkpf9i?a9Lnu;Bt(+t_mar+XFi=3LC{96KU*5 zc1<7?$jTT5JC*%3@UuWJkjLolMBrZoKgWpZ-vXZoeu3XdhwN&*24lNA>|D`cH)70z zR?Kce-+mVQ|8wlQ7)`a?lNb|z%l>`rdvU9MoBap&?e-tqci5Pl!ivJO3K^m35l+CCf_8IIDHpa{SL& z=GXt3X9btdJj;L9jI;bRaKr!DiYJep_xwj+zwzro`TBRi{?yyQ_G;mx8@~SZg&TkT zYd`+&s-9~<{C3sa&;MTjzy0C0pC7F1!T(bqT2+1=)$AMz{2hvtwbJkZ%8V~BxBbif zU!Dz{{`#(c|Kp9%A3me%szq;|Ta}#u`GZGru5iF}&}H}k*3Eyt z=Ful7wk+yjx3>S>_}^8vRki%ED)_rMfBx_P?epB{hi-lA?c0AeFz}<>-#KDc1r}LP zU{AUjO1za=)^t|Y?B&tua>tozZ@B-K&kt_eyWp#H{DCI|yFUMXEHUTH^Ohuj19trZ z0{x-ggT)dnaYpMIt;;X;wMIlICpcTRfig}I{`|gQz5e`_`!0U;p1%Jwa^9BqYu9~a zYg=aH=ZBy84i2M%gA?G$key$iBMZ8~W zjmiblm&Jb8SuxqhC4ut}{+YMkis` zKih4n0cJ{Wv@UBs3pq0Lj4xLqPnOmDW;WTAfBmO_`ZvG&*w^^^A5@+Dzgc?^z^0C* z0a*KlHgPy}5Z()sycX+t4y!FW}nttn<(H_A1jp@#&P% zr15J}dPL!fi15nzsV#G-um0p%&+&rTX>Uvx2-fhpli&Dp_Wal8Btaur0LivPBe{fN zC`Rk9WouqRZ}&IZ3ay$QS$wL6>ZchyB#T8A%x@0EgaEk#2|jz)1U z`7x#G8i8RyQ`pUwbf`Xhvh%(UY zft2fk=X?k$TcQX%hf#nG;9`zq`rg@9at3>Iln;=S%Vp0vcxp;$;`lYChu%N3zIC?0 z3nzVdxBn0yP34o#jqTM8p<9kkKKaw^`LE7N`sDe8#|y2~PPV%U*6?{$?9}EtGa`!W zBEqWTSTsVoM__`usGJqa$|Q91X8{^AmcKa)CSZ33#bVPsBe?`ulqw$SQ3tgMitaGr zqWmqg7!VHrdL0|YgF>cca};0Uh4`B-Tag;gy>bT4LcWi0#oypXFTU0{w*#S)f=xnHekA9772|EnV6V3hVOPH%P+qVz^ zSHHrG@Hbo0+FeL@@@1sm7ZP~PU>Nsa*P8cRjhYj_#-A77KhMs?SQZc@m}HSO_h6_2fzX>Wzhn&A#-?i%YiY?5EK;*pu2mvAU&- z#ipLeJ-o@#eKd5So@Ih&(OMem7#8jq&|K|(=LpJhe$t_7y1x0T<5J11H8o`{bs%+Y z3LK@4O-&u!mqPBNYR=RCS_Z%b_X*h+i(z(x!_b~cD+ z-GOlt1`Tq9CWR4hF~&$iDiB_fg7`ORfe)m>2wE7fQiYO-mOLRY&@9KhZ`+Xm5x6MJSOZ zK8XDj5-Y;OZchkH11;k#)}bq-xMRh%}V4-$f!6 z&P9<(_yWzPxcH4H@mo9&zwash2AzQ4+{n)F+e;7cJw`QI+8VTd)94l9Jr(wS^r6Qe z?<*f57HEb5tV{rG?U(K#o}dQ@k%PSoiSX|o*^Q0aSxrrS=QEp|GP$3Vmg(v5<}_w8 zHyZDZ8rWVIb$3v@u{<9nF@n}0$45^_b5j=gGXk%75|x84VXgf|tOfdI0{t3+#y~%+ z6xr}=pu)ZmpEjKOxA1{{TEu(|fZw;F|9PBB;0>+=NzkSK`Uk;RJ_LU&vKr)8M1VVp zk%i6A*;}vKC%Io`z%m579hlLCE<8tVxaw}7bnS0}B9$DhRCEZ)?4w(oB+8E&!f_oRtNd*3Cb5 zvXtl)h|pmmapa7Bpl2nrQXxAfhm{Yxa?OxuGX=8x=0G0ZV%83@0{63?W1V2JGIjpU z9z2w=u@7WSgV>t!B_4^g(n~5QSpQ?#vrXkdjR4 zyE=$NY3tWJh{oGr#$Yn2RL*BPMD>fOb@4>oQ@ZOJ9e`(W)+^V=#6+7Nij*Fibm00@&75Q5As@xj7N?j z<4UjK`k_0X&Xceud57`KBhd%x*jTBpr1qNQ%y`!2h|97Sf4n?q%*%hQ==$#~W5&Gl z->%TKw9wGhRD2RjQ13!n9O93({;NmYyVC770B+~uJP9os^7IaXZt9PkjiF{>k#I(&BX)NA^9tapSZ5j%3h$o6Y{o$dPnFbX;`b#VTzT`gCb=r(HMp zXisc+^bL2cBW3tzejk%Ybp_gX@5m8BKvbBa1OhD4t0v zlOkXn6L1CeqshS-JUCQvd7xdI7@eLd@I>7dQ-)-USZ9oq59+hZhf;CC2ILtjsaYXY zxr5F}CiI7b6I1s?RsT|)_ZfmKpP(D6T6 z8PuXzx~!u-TAKW)9|n3^r| z)5iwT$Q6wSIH(ON|HQ`tHh$$MCqiZN5c_!U`lLF-YK^G=WS6Ip*u$jy=zf4KEo52p z1Rb17%v2k~iiZ`@rL21J{>)-6Wp%??f133&>s|2je8u{ig^>_>AOlSPsi+7IM`O_p zv;=jdJ?I(qCg=tCP0aV}DROfZ3`)>nb?)v87@L-RXC~&BQxd-miu>bGn9C$k$4kz~@D52r^&YZWL1(kzKs+g8AIv=!z z9{AiKA`OB_2y+j9e{FX$fl&tlnV|?~AJHPwlCd*pjOF=|&s$e`J{f6g8Mm&$XIYtt z*rm+lk5ZvTEG+f>=a(KH@Y+URZfHWOhexTW8-Ak9!=uatML{7=sfQQ^IInMaT<6lA zYO$zqhFTI^s#ce(B`AWqA;#;Va0m>obY);Wz9H9e`XUsON!aB`$yU@Za9)hpR?C{Z)VFe8|4gi8QIR z|K{iFDz%%iO6Z23?1$|{$N8Ah?QR>$6_FTPg-3ow_~xUJGSkvB2PpDxpjSLh@dHi9 z1X?gCPoSbP%F~?{Y(?*N7j}UC`h9B4lmC8-UOGrUdl*DSwDx|8MCr@AeTSMw3;J%_ zJNf~F#tv#Pm5Zj~<>-C%K73C5TfkBP3xEfxzJ153S@w>;n*erzA>{x|uO~pU z9It8j$#X(lDR@j7N;qIUNPGx9>|?KAw{Q3hB9F&A==pdD8vg*PA6ARmL2LNb52W|) zXRm`>AJDXKAiOb<=B20!oRiQlC+WIT(*UoF8$|q+kYoNpdjvFb|C09rLfw9ka0|WY zt+!CgTW<{}6m%}|3mB~P`{vX0SsJtw)aGrB+N^Ra&L&nccp=OzD=UvRf;E{nkF^LU z(iN=Lu+hj)m~0O~2<2%|pI>F2BnUmIKx;vPwZfYyvZjZq$qrTdLARInA+Su3P^mcp z-=S6;z@)Px4zVq)#BHOJ52%*t@I+HLfoYGxDQu2nyqFvlg5;!E@Qb%rblpNZFTad( zZgq9t!Y|p2hc*mdn-!gfzX_-gcx5ztsTh6OIJB{kTOCkMt&Yx$#&a)+Ul#SCz%S>` z`x2k->A`0%!x0KNv>D%guf6>}B-p$e3CIz?xq0c0qb)7Rt}kW2kKR}wl9CbvZ}cL7 z>$?EpkOVkg+xH6oz8DnIvA&gs1!YB@{^yF(iP89dKx91NVSl~uW0XpD+AsKb7L^qg zR^shYx)}F#-9b680P?rHx^Cl_UU>x{zugtSA@nPFW;{H5y|~zZar9_>a#QFAb^z4Y zcLC}}?{pS-_U)W^1qB|0c3hq}|1v()a|oZlJih|acOmG%%b>q$Gydbf_TrYKH#(PI zhlU)zzO)k>MCp@*LsF7MLy|55Olmd2#BtF_&6Eti6oIq-Q__mpnv7Xlm^FH|{g2{e z^gQ5$zX61(>~Ft)sjd#347#i=qiJn%T3!S^!*WNPfECw1z=|oL&5Z&!oX(m(fE9@a zcl_b(M_6JY>k(FD*yJJJ$^R?MIoJ*0gAm~mo&wn9&F~k|LZbT>ebChyn@`0hs=d|0 zmc)C`<0xLnul#q}vj3utmrtNfIQj#>f`{bC=Hn~D4Iyt&LQhnD5}O}u7dHeqqWL|@ zaDMKb3;0~mL45AQ+_@K!;lM_G=k2z(w-I;aCd7TGt?eCrXVcQ}o@r`&=DVdG-!k7F zK?w;#@W%fHP}IK0kOupE73hgcTS6Lx?WC?%!^7iCWg=^AT&z%5ivG-~%_tG%2L*1;R?vRR#U-IJe7Y8>4qvkbh9`h70QwX>s zAx|hPIq);3lT>oDsG>v`5oj2wF#3AQO*|94 z5yY9u+e(h%Ehqg9CCSTCk^{=9i8l6o_IWf{i5|*=BnEWPUNjMR193|-J^}ECa!sJr z5?`sqRca-y=d6_DM1qEM5V<@Ay2y)_!#VNd?TCY_-+K>LBhGelJg2s*H+{jmVi8X& z^B3m6IYsUUehiOc`NK|jhjdf6%1Zn6Lx;|WbcfJ;^M~axko$AFZt|&bG=M+=H}`$#EYC^X30pMEwpnBMs|%Dg^*{&oEF+kK6}p~!9W`$)89U?YBie{x;( zk?%T|et)F7`N;Q6JH9*8{BFuP8`^Cfmjd6o9=^*fQ_$|zii%WRpHjI5UBNy(pEzm1#pPZlyPncFKFFW()+o^)hTf;mHUf7EB|93xw`kqID zO$~Ha{EyxRQTFRd`kF3CqidX!?5+=2ullIOBh+vL|8cSaANn7i439m`qwp}d#sBVQ zxEJXomVoL(O^i{(?o-5i{eSoY-TdK)`&6(}r}8z>sVsj8MB-l`pw`_vM^EYNx(`+* zJy`LF%!mhc-hOwl)8*>)Co{%M-}q+fu}?h(c@G?NhI{e5&r;DbZS~%LPtv8{BgRJ9 z-=cr+J3|ND5wyO6xCkT$Df~uj>l>u-p+opReCLf;7N7nJZQ{n!m%$%Idg`7!%SvN{ zO!uNrR=}DD3r=;PmB4deCw0lyPpSQr}>)j|pEH%A#FBMm6t7!hH7 zAu8$zatTd}io&azqfG_zC^5dEARfOJU*Jc%;M%Aq5&kIA5FT#8Z}~^a;nI~Te1&q^ z90j55dniAo1Mhc2v8MwX@%<<{P{8j1I%rU>=7IGM=s#jiJisIZY9OoimeTybTlcXV zV>$dC9AaSt&-O<_?5CYz?uD6h!NMU{<+p$C<)^}KeI!B%0W#+t=ZpuE6q$kXLTVx> zmr(Q0acFvyT&Fj?P-eddm-X}o{7o4c(QMEK{XrLu1gG#6Sa?l%-$Zk` zpq0x(zq42kv=MYRj@;p*mm4ff9?elIVNX0z0l6jv%{9rb93?1oR)fW2GMMBR9tSi# zBah}8j9itR$Kfhe92F>dRs*PwO8I>ufcuSDc8xZWSB%GpCyO;#@P+_cU>JIQgo`1| zh+2LW2dex+ctg>1Nm2Um(YQcqU^uR?;Ro1!@s8hh`rpT+3NDYTib2o1AOT+I_mx13 zXN?<*xYRdu@j(t3)kWh10Uynm-{7-FXlH2&#d~J)*H1S#KK=FL{_jceY#cUh<2#d_ z-?%4Ok6x$|2IU2!vTN%6G=466GAu!;{u#BaG-3X@rdU)SgP*vr&Px##;8K69#QjIS zET$DrQ-8yz1gHlrJOTGcD=KoOvs2M74p4oo=4+bf;hNeZNXY%Q5^odo>AEs3>1O zY{K5^5sx>GuZ}!4a^=Wnt5-zWk~DR@>#H_43C29xOwsfIF|Oh1uNLYubdoWft6QFE zu4%3wSxccI^9qJ7EeaeJJMqo+r8SR_4}EWX>59_QRTUO~-js}-X<4Be1zCF_OR_(^ zLJPS#xvTb@?vS|HO#0pUvDSwik#HM(R_XK8lt62$CyFQwtOk4^ASYQg%%~{)rW$(;G)L!u0 z&HdsF$js61MO5C->|xuoZ5P(Ay>O*qR+cR;DplkC?W*=+&DGYBP>a&tJnn@$tlobo<@8w92>*q>G=A6mQ zI0VRtm_jB;&p>q8kv`{6BG1la=%oS2WOnRNu^V_D=}cC_&?>HBKnak+_lgsrL_d7S zCjkx#G@vl;=MT57WY&X_G>>LN*8}bktZpEBM9}x6#8E8z`kBW0?PE%_yK1MD6?W}f ze|yuW+v|6A6_rjN-j!WCrhR_nGuP~GH{CTdxm$+PP2yg&PvPUEaQF7!s?=(gDnGv# zrLV8j-Pd;xIam7mQJ2y)wUHJ}q&5@(Aouc;!}}jxwY#4?ygVsxNR7M1O_|{)mucMX z|8f>+#kcXbd1dqShb*t6jYk)w=bg3WIcsSK$fUN-P?I~xp#B zKiWt1Bqw}6XVyov;5Fy-gyfzP?f~-b;-rgRMuH8IfTUD^eknKdB;YM2-pHk)CDP0b~RtEgZfGg_7Yzt5wD0 zLZ*s}I8-59MMX2;4xbyX9)2t*D<>J z)6=S|($cD{XSyrJ*Assbql841nrL62L_L;>-%O&OO!BiKw>10DDG<;PPffGobD25W z$LdBL%cW1-`hun&C|YBk43N|9YjZR2q)kY70-umpUXzwqL*8v_ncVey$`4|{RFo9! znL^D;vM)@d_Ql!vq$9Ts>WhpNo4p|2mJXXhf&W49Bj^lz@PcQ81G0%ViM0fl5WK|t zCoCBFiuDWfMWHAK4RwT!VZ?y;08T!5Ye95s!2_fsZ%_t^U?n3=s)9T>CO|2*GC6KQ zVXKA2F?l>t90r|{kf#Z(cDTtUcOg_dpe#)iLr9GPjj6$10j{XQPcZp(;9CGKg#a>{ z^pFmw2L}UyGz(j`Lf+WmKaDjiuDZQ`slMc1{I^={wbPm3tI>sB=_rX=Qdo*W@1 zb6xGhcB3RH@I_Y{Vk4Q$b1qWy{nIivO>QspU`r|4Mjx7<&QVcz56(22_OTy5Ad-R! zDiuQD6uu?coxOfeEnBcus5kqU6$yo_@nfrnF2!a3QU1cEe9mzCqYYvSC8jl7MRH0+ z<5O#(Iu7O4p`ic_ieD#|Qf_R|)c{sV)5~0Cl$7nch&k)M_WVDdNBQWVNQUI-9hCq4 zYcE8``y=nf=+4#q@xO4*pD>Hy8vL*QYnDbQdFvCXt=_`|1BZEQs!YaePN+~ese7$i zuHj1ro?`Qw_0#@%&12ezHBoM!d^f(A+`P7XqAYb-lPJ(kEvU?v2_#nQVSEi~4qL4f zfh@byKF=H|Y8r;e)EA-MVmu)rC@28USKx6)^_1PS+*R%|Osx2)X9XOTiEi}mnuBrpk66= zty8CWE&Kx1hO3nm_V8HUgy+B4ROlW_V zuu2~f%@N<`7RHBUi4W5%MXYZ^kx$={VEfU`{&dC6+fm$q>LMa^w__o5)o2c)ev!*# z$|8d?oBrNYQxqTR-&-7mKOPtd9F)Wg%R2@udgb6d90fs;bxa)Y8Q3`g|3{UN(E>o2 zGZKpgNe5r}KPZDlJP<%28fX%SBj+F(nG24Txc2%9xnI$m;$Biv1`RGxeT|N#XO1ih1$%yDBETI5IdovAEdJ z>KPnqFQ#VLJ2?T7!7&MN$)XO9?ECb8S3Xg`16E>ma3tk(=8Sz>WU!~zueg}GFe5Tp zZGn@7nBYkGZSe|-q5T^sE-fUHmqM_k9inE-SbHJJ!OHYw0Y_V`Do1i65x*d>jUc+& zN_Pp11JPHeqnw&5$#-NdC?ea*%+E$##*-XPq&W$P$fGPWIhU>1`I}@iB{M6K8IVYO zQXWC(8!0Mxt^|r$8Jz>i=|=@f00P#DhrIapT>U1jqkSYzaHDz z)6=#4z0ZEM7p>ZzIbrsMOqKVdUAECvM%&y*Ao1S+ovy~Y{6?A((5v!LL;^EK+U|7In^-+y*b1)HPl7nl9V553bDl) z)5SEG9i0;!pC2Eb4;yZvKwy(UflU%2J$4n*VHjma!fD=0h!WSw;^Z*mXI*j^a0;XW>O0L5aC7r9{5$%Rqs>84wQ39YCVHaR6 z-sszJg~W#{)k$gDB;HwLsyhe-s0I#q%6L>aeML!H?(FILyN7)o`Pu4ub6TPrBaCx%YbK@*nU*!R{)@50XN34? zXI-oPpeZ|dSU_ZcMo7hrLvP3Cn$&?{VQ*W$b5da=7~-vo?U5t5RV7=!eJVEBm#j{A z-Mc7zs?jtwsAfeWuFOYqXXE0g8G>8$3ZBJ(rlIGjHCK)B7@OPJ8fjfNq^s`b$>TeX z!M5D4$xZ)h-fh{nVBWME>u~?X*@Yivri6y+;wxg?#;`b44kVqPgU%qii#7;PE(Ng; zV^t+#Y5iCZ$}u`QWRCJcNn!?zBV$-Wv4PrF2Q3NZ5YQdWKQet0y^kTNgRD;CI_VBR zt9uWrct#T!RQUcFBOEY2%+cUo`1yL|g(ASBPdmE%*ykfgO=?{_GJZ&CUR%@ljXB-t zx)+`t+k@Y>M_SWF9&}nnVhUS8CsW5OT$+jkld|noa;ihveD2IfzhsqUR8ja4wP$^1 zTRm4;A!Ns9q^5G+Yh~P|xRiLFg01$Fhj@Bbv#aWoVqy|%Cs$QN@(@~u4u#?l3k+qj8A!N>Mi~sWu*;;*iK)_&8#f_FfvM1C6Wh3dStQ7Es04Md&D>B zr}9aYhQa*X3wA&#bWJ2|(bxhhr6e0>E$dCz&&V4EqH@MBrPDbaCrrnXantXU;*sG2 zsx5r#p%8qSxF98&a!z9bOedm|lOe$<&<+#Ac@=DRNC1y=2ZsQBx|03VMPDk5$G78z(Hh? zGEE@drGm($)10s}r;eJ)@Fqn`B80>4akP6NrjUdKoM|P3zzLLTx$`P%0z66{BbV8S z%A?sFI(Mu-sw7!x8vSbD`t^OUjy4ICN~82+b7>Acx;#E2!rox3amlG^spcn`<*VXX z_!Q*urW6*?!4N&@PRCL}FWq+?>F#ZmG#} zsj;ON3lUEuogcTz+sg&p~5&KK$-Bs~x$X&j6z}*$`s~ljeb6sk% zPg-?pVrot4m+^}Rv_Z=!ZCDgH-_eFtXl!n^qp`EoM-A}|(^*Fq8+6m=uDkW($dNDJ zS~qu^&QLtcstfZRGAdoKKVO{BEC$%GIhC+uM3h|g9F$@bD#x(Ms zpujoD8gS2E)p;^l99IzubEv8nDr5Fe^Hmwsa!i#eB^2Zb*16D>5oGGb%Ex z?_C0_5;6gyiuLQARUCvW=obWGDUe@ z$dGxE#Ql?+iNNQ9NJ0Ra5lm1uBYi-6IhIQjyoeYf(3Ozi_c^RGy|iy1%wKapKMlJ! zX!q^Im!O}P*G%E2b83d1=PY?#DHXW5^IiBFZ;cPnh41bnkf`=9=1f?bB!+Avxm(go z`w5w*G$n5L)cAzxST`T9iY+ZFc?p-zm8j%#T|-t*$)`DQp-RMuUc7}5LN6Y~x1bmK zaIMK>NG;dKn}SF9*S1Zl)fZG((;F=LQ&tXH5ieJ{aX6e3xvFJrxtEVyoH-$W`mWfN zQjMd>X9LRjdYrJ=mwTxrhFuMG!DGHSTw!{Bap3qM51~>Z77LU@kD&2^i(fY>WJ8MO z@K-zpeaCBFZVroet=f`bu%^f*u_>Zq-vlYGlJoWXVy(WUqeJw zqD#@5g8VI2uCZa}<;|>n=>l$$PD&h%gUo4&qN=P0vf7gQ*So_~H1aPs@i@*vG?SOx zSKRe}CjN!;vww*^@V8y~TjXK?lJff?6FfA76N`%xJ#p%0v}gG7LE5tq7*!8=HQ3i?ohe28u~&M2{Zm&L)uH_*XAbRR zmX)2t-|gCkzb6aKkdk^1do8;9RDIr^lzZ+Cji9L*?Z*2nPEG5$e!NX!-(lBMwYa{x zX*79e*Dj*k7mY+TO%}PHX@7{t?~FmCChKsy9tYD&3G7otb5h z%+AI=BW&EO1myjhSW*$W0XN>|B z&CB{mU_6_c&4uio8N88Rs~WfJ9C zo03{nlbTZ7+sA--cQEMvxNjYs-CqW_F1e@FcryYs0aTkRaEgruBYPgW#nuuL^PnDx zh&}^q43De2dt|+PbT7yXN=?5$@)uf**T{;Cr>L(&ps%fsxocOQKiI3#7jAos|y^4LVkf9hYn>jj<^R+<#{hJp=r2IN*# zT%J2@5hVp1naF>lK{9$Md&A9}+kfvGef-zu%YQvSy6d+cH*e0H{Bm2{EA8#Cz$Z8% zg!sDeYe>0g`L8dI8S~<=%lF{#U-P|=@qg*B+h3d9{_3PjueMKq4Yt{beH?lOUZ6-j zkQlI{1=4y!*&$1h$W#RD%pt9N5E}ILP58f%Lj56f*)-`tRp>H4M*WGgHa(~Pef-Df zC1)2bIJ;!g`9+J);~vPf7H)!^`u8WNC8O(hJB5m|`|xv9H{;*mZ?`Wzzhuc53l@E` zXz}?)fKvb7Eh-Z60ET~fhNjt>|72$50?+9m;_}Q6rvOLsh)m7z=ZtY5RbJW-+mltV zAKvwhMz7aA(^b2n8ZJyODIevIdmfdui9VFMog=@%&b#nI1< zZGC!l!q}X;k+1fZ*N#DL8^jWkG%R zf6qF%X6!Sgp{Bx)Mh|I0>4=dHsE0XiQjyb9^|Q{dg%YpzgC`FUVjB}lkNc}p4La5! z5-{FkLO9~EzbAfpFfi`PL*OGqX|Tu#3@K7Xp?ow6KS*jxOl(d{hR+u2K;~m1H8I08 z^2&13CXIWcZS;|eTtxZUw2hC~*FWCaxToG`|bR*-8S)Bpt8H6&#>i|0yLDoA_mF|9nn}gZk4isa^v|vnJCd&0l zI-&6y!|PPfyu4`Qh(y`ywzcW$s~4~9Sd)`O-dx_iJz04R;Gg$~)n^Bh zL*p=xA3iydnG600GlV-_y2nDm94hT2o89*l`~6-EI-E1Cc3WNDw%TDi=rH~@Icve` zMGMa?$V$e)KDwopsAJ{MpglE}Ys<^mR@UqZ+S!q`Z}{AQ&6@SExx@D*u?9|bS&!&i zkdkH-5296M7&u}cOcy)4mk5!8{rku!p{Pln?7BUB>gc%Ggt+zdv&ZRm<1-hn?a0o} z8bW$=;iH>`Zmyqq@nUXv)o}F3mSahYiAm4yum@0QM%A}8lJ9>uHDh-7?meIJ^E^S-J32CrlA{cCamGHSb8_Z2#Zw^KPC zxZvuDtGIg*8x?}({+H5-2~Ier3mH#b-hd7OQO?la(E(&&kq#o$HfY?;><0$?BOCNl z>n3e>Nz;~!yoIIJON#^z-Se_1`pYf8#WOqdGcxigj#8Ayd#B5*w6Irrb|NRBATgtS z;@`A5a^?hC$(rGnD~d-PTUfpy)vkInDbClTYOUO3-$d;wA3nSs?_2&!LQa9FtU(`y zY9!M)XV({$jvPdmYB0$Ek}QZMcagbErDXEF;8-QMf;<5dk$4Cp0|?^>&%lxAd`|xV z9mFF^i_1$x8(qbG5x+64q$I3~FXBl=D`#x=N(~N5@o3@;d0e5O)+;46I8`$o&Uh|@ zCRJ)sNV50V8C_yGo`~NRR`UNH#NUjjFGrs77Rt_y9C=12^v0i9QD#C+gyoD}D3pJc z7!#BDkxV3%pNWZ#Nx&~#Q3O+#8u$O=p#cL@4jF=^XCH_rAdAeZRmwmi0rv=zlvYTU z=4p)-qlv-@1@`CoT!4)pFM&brji!Bi5j}>qj6uD^?lW(r5WOSXFt4y>h7cL>IpK_! z!g(7+I9|AsxrWan16(7HVjWs={uJy`qb9Fn1^ zXngJ9{M;ZNzcPtVk4*JvXH~{VW|VJkZr)s;5gA*N&C#bu+34g7zAh+t{=wItQ2KZ& zhaX5+=y-gwEceC3+rQ6oRerTZaF_}t6P&Km-1jKQT)QPvIPlp zKMqeSPg+wK+ny?O<#M&M$mW>QjWR8lBa)@I7y66&{u&d9*1CtMi@D&ImIowP#0BPS zJp9wU11u$i(x+SG<%!YRl8QMk+p4OzwalrIWJf2K%Uhl<6_i*4y3_qVH2HyX70Che zg~(kdRU(eRmw@jk@#SkxpIXCRv|k)S{_7C zfVK`(iD-RR*niT8hRv!#=n?@0v1PJz6?3kqkuET{#TGp(hs&YTrcF(o|Bu$jqchE` zw{=BDb!}U1o_Vyf^&j)orcSj{9B$62==A2;06i=+(FNqBd8-o36O`UDN$S?u=1jVA zdvWaQ?s)+L^SW2ZF1~$Z(wx^?)k!hl%7pSnm3LZBfG!yD?N3)p9fYp~F{h5I8myf3 zN5vh|^DgGpouEi-b&O@~Fj>^WmQCL;o_}GvCe$;)wD9uk)t48V0@R`E73b$K{%&*g zL9=YwSW8T`H8KeI#017aUh8`D%6Ij1)fiv9l`{ zpPH4Fm{k?8QbuON1F$3dVQ>b_20E(%Zx$mVU{xg8p=3HEsk0P|qrlU!+w~2I+Bfy{ zr(!Hmem-?SLa;rE8+aW;A-&_{i-%zO{IJ~w(qXJKE(Y+hf^$|8Y6-BvVN|P)RC0hN6wat*lc%T2{ziZW_k>$%pO{#kE;fet zi46;j?YrVQ>$_qNhyB$r0sgsAi64Ybhd>GhGlemdz_F--$q^%_0<(~T%Vz5V0b-=Z zL>n9>KvHmE(UjwwBS#1rMRh&elZ{0?tPRjl2#?9Rh zJG?HvV7JO-=4j;FB9ld%@o%VIB1?$x+B#Mui%;m5a====;Fglg53ohSaV4dRW4EITui+z+Bl%VA9o0E4T*!rB;> zfHDvV4dkPOo&cK?!VVXVP5{ryRS2GiW#oD-ggHoR4|f;dfX3z{QO&YK_vi3cT!hb} zqZj>*e)tdH#4=l1?~kR^LO+&DJiLMrnJD9{##IZo`kG8M+J4i8Dz{f?P5WPp+lk|Z z=So#FSJ8{?x%(_}2GzBY*yVZnum%4Ih1fH3${U7`7IelkB-IqYC%D`GY4EZwNplk# zLbfBr)m-%7Io7vpy+fh`a0@48OxVe1Il$A0P|yCb>NKN2vh2ob28#1Lo@Y%8Y>L3M zLZjqw&aSCJJ%(scZDv$nefk*tFSg>Vi4!7n8c}uy79u)%StjxyunR#(k9qy4vZSLzkb$-?d>1UY}(V%u%~I}hm+esoYnYvL&M|rzsT(aHOx|oJG(OP zW)PzTwu$K(ZMNC7XU?9nX33H@O$VA=_BXBR=vdRVzoq#=(+s#V+t!wmKG9~U2L%M! zcYQ5xu!^AqRxmK4eqc`XU1tEWB`7D3)-a>eWQDbi&|Fw!VB~Q~){e;l`X?x(z?wuy zg|&`6mBpzE02~;}#6E^_+JMbUd#@C4NSa|5HW?F=K-f46(Fqs$@5k;s-5hr9{}!8N@TNpwUfo^+MsNFX8cnx%9G{j6Jd>mWYL(hWI#sHnr{E3osEw_T%#RKn zV_7D1ch#E&;c<~7nd@}Z^aZgrG8DZ0O8)Q_c@YsJe%j(@+tH($HN7dFb3*s{S4H*2 z?#hJK@IC$w;VB7#bz1LgS5J+!L84?IO6aYMrWd0{iFj^bYBV(^&Avz}X^?6>U8#1P zz0;JC65im?)>zhC^75l8Q8ZwkpBH2Q-BM1_HU$9U8vE~>fFMAe@?g9Bi1n%jsfW8* z=qa5f71-ZK;}dZAa}{M7GlEykWPZGmShGmsA(t-mu?7k1PYNrSm9_l$*9K!^xy04> z?sx44b4y)a_PYXIPK1{mj_B4;E{*}g5ew7s&%iz-SpQ&s0KX%`%#bjaKtMqEGLt=Y z3=ttdFz3U7g3g5-Db!u@!gM}xgo6oS!4MHMpl=i3HE3l{?tpWcUQK>1($n{TxB-}k zbU#^B1FMrAW7kAGW>#WglbM8uLgX99EVIbQ0i8@2%!pO0;DVAxqOtu8_#7POxXn>K zi{HR~m5MNx#wXFLip+>qc$KHQ8dM?EXNCz}P{f9qgv6Lbt_3Z{%ZCkHUffdPddQLx zZ`lxmTm)e=r-vwwu4(07im3D`Wo&|vMj5WCgjnDk&ms!#nCos7^Cd1)311y%soIwcnwoR7>%> zJI_w6My%g?0?5#4(MQ?bqr*Hr(*neDaacofWGVHri6i9mg=_-~6-_HnYK)I>Oe&rx z!lw*ua-CzcLxj4xAq*Y}Nb~dvi*~m~>09c(DFN^IKUrL_Qlfcv;s!g3BF4!k(%jK_#15NdK2=WaQWV#LEvWEFWayyLJC zm~|eeC=hrcp-8?mSy2pynU?`1CC9?#fr2mu?j>yQm_EoE;l%-GI%5jOg`S5~Zakr}*`N#+as)0yo;qA*@$%9OuYHMciq;#|u`XCRp?E6y6d7n&Onc(_wS~bpWqVMB{s33gs*fYe)vd-IN7w z?0qtcJ*;u6=yCi*)9v3&%Mt@)Xm&0K30y=$T3;_!FhTB=A3sROlkoYja$SO#FhVAf zbA=+)D}G+y2`Y&z5?sC}yz1>{k?}PyF0P>;Xu=n^jM|W>_t!(3c>2hpLno9#EBvCe zMMAN$WL#lkQ@Tdz;^G#&cFgFx!J?1R*krunlEx&0{h|c&aG^;S=IY`ia^p*4-S!D| za#uc2%9920ev1w&mBFc+d_IxV{0lZ96!|P<|3jk=tdKAe_S-R5sMPhZySST zH#cFa{d+Vz3~#2Q=z!3^(~#9RJ_WDs3F9mcg+Dx_IxQv5ZylSL z2dnG<8I~jt)QqUCZ}sq!xXWE)T+O4Z$Boe%^=R7@t+yiG?kj=107zDBv z76=nX(#q%p0K;M>(hS~2V+XvLdk$AI+#xp{UFcZa1rQvp0?$KZ?k?qXh{iz+xS<(< zKfIx>fFTjIDv+(@B3y$@Pzki{FA(P4Y(3N{dI@*^u?72XEirvXE!xx>7t@^`p8I{n;uv0Ar^a-$JyWRY#66W(TB7oOT07u-8_R8 z;*fdlO-?j=ciQ5##^{7mZow__veHbqs3!Do)zr)=n>Yki8SFES#87Zi|n%mH+j9d`y)To1Clj z)cad=T6}VK4Y6U#0TOADkE=@N;v!SI`UJ`(0m)&p4Z7TC`OFUIvp^RI@7V)_<|K1-7 zR_tfBCEkHtsRy@8sNpI!C&mnUJgUl!(16c4`z{jj&3j=LUM0XvaK&9sF(=?2jg}z_1Nr zMZqsNOn_f$AWQA{vz~%q;3Gz>5iBr=5R3vQWqeM~d7jGyyNk<6JWzaKb4H^{1$j2W zzz`a7@G}HbV0eH9<~SuLn+3EX7$J=Q0cpQvD}N#e;X&A;kuZP%NMMG7RSViX4N};| zXz&&*3`Nj5h{z-(ijfygdb^n`C*#fpI|Vr`W};y;o6M+SjKPX|@*@*4&=^q+V-_?R zF#AwzU@~koZgJm#*c#;HX+DKy-RqI`l-biK*m7jI0$JQVlY;aKV%&|raJM+2dt}0x zuvGMMcqZ*psYG&D@C_>~J?IR(JN%5!)a)%)Ra>&rRGw1q$;HR^zT_(s#hu4jw`|5= zosScVd|%p&k8wSzPwSo^svLE^wsdc$U+Iam5vy~fDQhX5FtAtW+{@+s#TO zb+zMlcVPF9?(SRgiB<-y3~r549ukT|Z>wQGRbzJZ`EO?~`{jkvd|ovy!21`HY+rci z>lTXb=O>ak#^41i4(ucvo@=C|b-p7rg3T`OA-=vL?k?uwtWg?m--pKBaDyM6*Y~`i zf%a)$=r%OT?wS^kR(s;rBDu^JO;X{>;b}fHdMZyK;PtJL`AFy%kAh%tj(dbw8{y9J z4leNM+a~crzlR4m$Cv|y^Ft$#g$C8v2Zf?CqrN&2o{;#+0;~0J$$h0#AGzE|D)p7y zZXFDlE6W(+I-VO5Y4VA7y%kxTIQoTOmg%!}BA-<4b|m@Nl$81?EXgs4gyq+| z*2ql-24}`{0B~&}vpqx`BowX&ZUrBoiGzR-4N`-}N)ufdez-%aG9VgyUdn+VlS2mJ zAld-=R#pht!uC@!gt=h%PT*QS_*Ecq3kArpC#rZVP)?oMws)Cr;GCgyq-p^FGB#fS zjCHpxyH@9uqJ=dHeW(3o_$f3@?t2E3F9p^t9h#`ijDr;loG*M8Xc&GX@>P|UtINw*R|bZM1A)17 z1M?o8Gw0EH!;j6G^VsmFkJqpNcoY7Hv^}VnqY}K1hmf6aL^F*!sVE#VUe`%cfV@?z zdmT8#Us7_7zklurVTpd)^#CWL4hJs0wGA$JyB?pvYZB(?6Cm~Jf zd$g};zrl$AE<_{nKY#~dqXony$HG4wY}WV?%s#DnSEY_IP(V2~MHDLV!35z+4poCo z)KyA7E~B^|j7Knzg4!^(?8)C0Ift8qwsBnuHwMj9e|RXN#zH+)$O$@uzsW!Y)DGM= z-oFu#j4HrYW?Nu^K~rBzuGtF+W+E;PyPBB@;@vP(sFnW@lhE47Gikjv#h>iOXvpgE=-9Y-D+ zq2O`E!8lpMoJ@mXSF+xtSEQqPB8wQtCNPO0$YEBvn8Q;kXaTeAH5e)#D9mspQl+Y#uD!ruOiOdQ<`23j@RQ*w7Iyb7+wY4FbiM5N9^dXc1)< zON;yOoY`_RS7FgNotQQ2M3c^{$h)y+)*b!DODkgRGD&e}c8j!9wWWE=BA#5ph+ukZ z;;T0`EW4D}m|tngU*1r^BHvJ%-pEA%NFS)xaB$htLEzT{*=@#y>9NR{+x1dgkI#gmp7nF zm(!4-bjGacDPL&jaU%MI-?;sLH@y*mkKIIX6iTJSv76u<*>jgS&AGF;IA2vTQZw}a z#opeF?+?|C6sYoxd+(gnv^+P=RAer$E6oq zx&N-Zy1VXg39Q@Pc3|Pib=6y2a$92vfII!h)-^pI;%*R<`99 z&a98G&^ruSe$+Khuch9KRbsi`!o!5elSIfe`YGBcMPy27pij7-q-N(kKX>5YuDPeJDl~ z%xcJdkD60ZssfEj#lxaVO3Ixc$4)}`m3OP?g=s@WY4k!>SH;+I3+Bxe6UUaZ9<;gy zV-Fa7KEv1pf*AU0nSsb;7J8Ekn3;ruJk?v0=wJi~M}q`&?0Yr~#yO#> zPXYlYE!&H2@F{@>kT*c$fbqRSYLfeaunFxZ$b?Pey&-)yEOs!@mrmI8!cwNzIOE=T z-yOQ6*J+=5-I@cpK1i^hy6uKF$7ZChFDcoOijF)*upT5k>`nm5ci(NTSzlefzNUIZ zb@c}F)P)CMmv4M#xOh|Q%>C>4-u?{KyyNKl!!xLGN7p|Xyz&g$p1P@c-m@EIuRnN! z9$CGiX8it*)sxJ(#56026X31?jgb#9CrKjkAjGep1pyKPIR3^LgeiR;99lxY!AoBM z&mX?QV_6aS$@dSBt+#$FT+xqAbb_%`f zTl{*+=a`Xzw6eQV%#$j*Qs!hyZzq2_DpriSC_iFw>jdZDP;=w{#Sk2K!V(+15>Dj% zmg01=aXu*m_uf)~3;CJ$|;5RjgVNDt&4Y;{m5m4suM#v&moz~m;}1OhBL z9p{E2nh@v*{&Wu4C)I{~aevSu-lC~CF*QnUv$hanON|1w36i--EAt2PO!GFYmF&t$ zyLCag&fnor-`L*1G2K7KukT)HcJM316j7V!newORmtQ|;&*wGVk}s~=`FRPq`inh> ze>`C~*baWQckf3BYzF%cKOVmRr(<@bZQn-+4t%uNYO)>s@!0ameX;ISLqn(BvA%OF z-ukkcu=4`DF1nm)HN&idPUI@(M2U()A0oCPCMZr2=yCvR;16$se}f%x1%MJc z^$U$+S3?Xh2&=IvAb`%m90o+#7<}Y(ti^^Z6nTX~5t3X2!3@ zT;0%cpD&^PUgEV$*k&@KB@9f3N#0Z<=jj*x;Jeb zl1K8`EX~|?^9?9k-q20Ze7kq23DXbkPc?-rq+Bq=Np`U!SmANOo0=M$?)^p7Im42< zqox32+WZq5N6G28_t|?oin#K`Se|Rq(jLV*bW z00&*I#14hL%_1nA#HX|5EVw>#N{Igkwm}G!MaR25pI~8u_&=O5tuBJXg$#xq%jChI z9N)xd!|?wRp6?FhMWTB9 zVx3c8mM;=Zlo7m&v14MDFijDzPzp3`HPOT+F76RZEvmtMh=H#Z*9Je8s7wI@sU=c1 zY*3524@2SPl;P1By}P}DOAb{Ua>k#B$L)c5MI7Qnc1e-n$C|1Z>3qFBN@^+6L9~2GV0 z!8RPCi7A{o&Vhz#UD#o%jd7eG#h8(ezX1DMaBXZG|@cIS+u1x2MRDiXNsI_la`Al#B?LdoZ3 zdFiY)v>-YuLisVOkSLuxa-@-06}Oq#$qXY38;~EyKz?d|3al~6`{(#jIQ{fq@+%l$ zV*?oNP8c&Mf-QCh$akk_Tox<*hX(T3 zS!@Y%CZI54>%_&&qs+&aj2zg+6Rf$kVc@Kn z4lmvp(Q&W^5p!?rY&!hX!i-eO;o+5gdu#@ShV*H>e0FVBc|wf;U9|M-;e0eDjQb$@ zq2w1f^N&(O*wxZEGc2|vZvCZ^svYf)dj^Xa6_u~7NaS@lSJzMCu;rlptEFhvfA;PM zuV*ZA285U7gWWXb;tjz@Y;Xu(^^~A5L^e>TY&j6B5OMqec3HipX;(d8FBn)`vBfXY z@#}XsuXtg}>K%c^DXw*Vz0fv-eN7;-J$A{9{||4m59)U{L9}7Q9Ti2O zQD}VKk{6dFg==`gkuE`xl4^pGD>QHojgal3Qu4XwFD?NIl?wRGNZ2jpAmPaYdqP_F z-`SUf%oLk)v0(|a2#CKW^2zZQfFTRQkYOSTzX+R^vV}q-kuM1Xa!XkZHoQ6NDi&jc zp9h-}kwf1pRAW2P$T4ju{R1o5f%@{DV`aCZ`L7XR^A~^jb1(4BRlnbQo);-g)*W^*LgVVCTS{8)N7m-{@(| zYE!{y$kIkXx2IsM%|sS=_s1DF=Dx#c$Qbe?^f>A`@n)n~W8!in&?^z)(h{3BmKnj9 z)YPfDqd8~+!F_D_+QP1+$9EnSLUGLawK!#ll;wg&lT3Wc)rA zf+d`fk@94L%%8yFz#D*9z+m82i?>TGFoObF5*tYl`^2Ok*fk*R2Y)*tpn0l~5qS7G9vc6dXfATpK2PqGuTEyNL?(&2cZ-4&? znRw*=?ZsgUG2#2b>aF%)CFe5@Rm778)rQRTsL5TopeWy!95d_35AKRfN{YMdgCA$b zB)js97Sy?eRqb957Nl~#?e5`Mk^Yt!$fxhP1Esuh3;Euw!}OURd$>g?W``T>Or(@b zl^c}16v_ok#V+O51M+iQZgq4PS8Os2efRb)F&a(GEpLA}WH5=jS<%(GHhML(*2e9) zvn4XJ<<1>(wX~?K5>Gyu^O%6Qoe0D~7qkr6IsltI{u@$md`TMx5sVo0|4v}i^HCk@ zMf1>lfB?)(U`3iQH1P-n1F)k~&>&148LnQ3=$hj-G3FkRfI6NXWg;*tgvs) zX8;)a)4BYweNHrFnrP#%cl`An1Lwp|V6X-1h>1JLd-q_r92*==em1N>nS73^5r8sW z^Z#fs)CyE%*{J*R5q0Op>-is^@UK0C@W%^AP9aSSK48&LD?4V*>QK%f86o>jW}8g% z+uC``DYMZYi2Q6e&4x?!){=XDIk`!`oE)E0t5rfqjz*|HA8O5>qA;7_F1c7Dy9e$S z%i$gqaV$T{mtUY&C^RYa*R7kcnldyrMd{FL9X7d8C?A8?a(toIbP9z|-#Bk=-s~xi zxi+~#Ah$U*8oLUQNi}cXx+}k%O?mKce@V*6ZRYzFTHLH=>Ma8StDE>yl}zl z7G_3OC11EONYz_&;aou~K~KxiPYVW93iFLhf{wFc1%pZ>sy3Znb7q9PlWKP*+;}Fr zTAe9~x8H7!6J%xz;;gsZ;{}=OYPe7}_5xafTOv22g(|&XMQ+$)dSv-+s~$6EM;#bA zGjJekiLp9)Z*sLUQxa#s-r|-JZ|A2G^wffa)L;bB*Nu-KX^AN6RX*XO69F=`A9_|~fsNezTh>FL_g3s`gZy3i}}RRtSN zkHY zwJZFW02_g|A6`2qCg=`f$uK3af)m=iCr$uLS@i0w5P{Kf;sgYZTtBvkS&Q?dK}t0E{PSoKDIsdrr{u2Zp9dSAPmj=x34`n|xe*!Vcgc)Ecn-nNejn`Y1;9qk zftZ@lLJARDzL26ilRTb8DrYb#f?&_U+Y(4gWehOvgw2PdIbpK~5=V-QB~q${Wy0A! z3_=jRQWB9+O=_Ehs)oNUwLnw=SdKtF;YX!(s6w_7D_9M}Oa`<7mV~%hZ2ctHGUO1O z5!e->jj9sTs(L&Y98t*@8VYk_;4nBM_fbe}BX0ofDnsooxv{P)(WK`ZotMB$$d2p; zami)i>P?ANbw>HjI)g`s8gTtb$bX}R+osbNn`1AMGV(3>FS{6PF45?=KlZ zii`1GpCH%sHAlgCP=?TJ&m&oavEWGH52ROu?6A$o;Azu*4S`CWnEpR zAUxJ;U%sY?A1+{@W6+@zt~+*~o<4SdF_WE=sZZ80>2#(hS)ZB02A1QmB`@Kc^mH5_ zrv~0bIEx%3h#GVQVsLoUNZzynHz_qWi5r;4iOYT^QtEvjXuVkvmYWH>n_C05WHY&G?=5K#N7~L-wOFjalupED1RtwsF0CJHt@8V; zPA8?O!`}#>&qs}W@0zG7ib5&D7c+>su}2dMi{cX?(&A6(?vo;Uc(_~?Hf2ivlquw^ zj2{98LAT504i*GPBbkgVW7i!yqDBEndb)$W)r+*^D76HFlshv=-z1uYV+133qZ1vX z^7(ep{UCALw8S-Li^Uv&;DCP8T@rPam<~4uUqcy%3D7lsh{#d3Mx#!BsJ5-G_92L) z+d#g>`8VqjOp2dY3hTX}wiuFi+(==bP<{nag@j}W5KWt!9BiqGsmyU(LZDAGfpWIl zz#)SY7eo?ZzBnN|uvoG{aL#68lmMh9T%r7U*bv5>E(ZH$Hbe^t2UD9^Ob^N5LB1Y> z0SHCFwi4s*z^%YP;Qb$<12EqG5b6EGmut<{*`m^pOsOC)uQl~DF%ac6%9B!`)a9lq zQ{=Mr*tK7h7sw-5zE!sjv}w}WQA{S6$;+sYN%O0jJ^6Zhx;8S(pokm0msovd^~IsZ zE#wbgw$6Qa;MgjrJH{QMH%3a#5r(mz>AlO!PZ#zry^mwQHvM(cfzi*Z8|PK1rPf6I z{MP#qCN8E4wqW!+RVD;da0EgY0{H#X*>nhE=9q#GHK(~ScSXL z-9+@3=Q;|=ha~NNt~ya^B`~7R2#KVySw9#SgeH!f5Oxv`Y(p6|ka8ny2uyJ3K+HG5%EWe~To5+_KWi~ijIIkT zOBtY=6w4vUh7THJfP4v0CH6BUfW(4^*wi_MWDnb0c5Ba)6^0XU4mDhtS#)NDt0OK0 z4F48=_$k_tQtlkP@gn)b@w~wvchO>`{%+Ls0Ge~=1_;T>MUlH(9$NhCiZFBIuA+mG z3GZj}vm@7$j~t^*JA)m;&ttEDbxC9W1LPy$rc3Oi8TT@84+nY6LlrgR+M4R!!5ceM zJJ7tQ-rA|Vt9;2@rn6bEqokAjpq1lK?F{xKz9}OnE4M02rqT-#`4y4wO}2WhB60A} zX0#>=Cc1`rUpDq+eE`I+YLDZ7{{^V0A@u$L#rRFjT@TA{3*_ZH0R~AwBJe{*ROsK(tA!C2rNj|`LA*m3|6D1jhiKQ%_m^em1 z?75Q=sKCgI7RF3PQay zC3lk#{C@4rA2L})l$9SXk5bp|?aG^~P)yD1+FMs)=h@|ew=O+@?eF9R!Nax!y@?sd zlnbH~4eO&TZH(GX1`8<%yX;P;YkIcGoMO*uQL9>WTxo_#|8y7AY41XFL}3~&Ulvms zAB>NwuZ~v7y3xxlMrJL;R{8BNWc+&D%XdQ>C#^tcrxz@)NUKfq)}>V}E>J4{eubFM zWYM2^VcXZpxXb2>up9KA+FFm^V2^M;BU4&64oD^k`CHN(U7moDAfosJki-ZB9#>;J zBAgetY`!2|_t?3$(P?UV5|?1*m`ph=f}12)r-A=q^TB5Z2No%(Os(`PeP*M}sL^N? zvYSxEfoiwA`T+U!P44I-x51Dscee~Ts224NK69`cz2H>IwNiGtoW~UyR6-{RH~Q#A zQD20ng4=0NYS~L-TMFgpILAbm9@4lT&|WArjn|Z>@bT`>D(ub66|}n zd&MfgKq3+FSFPxNcAp?h$dk*zCS=ypIvm3eDn4fQ0{{dled%EWRQG?e57J% zrY^5_%9f8g*%cMp{)&nrl|&-vr%KP9Pg=0gahSY#BEb`BEi1F`M(&#{@7$HNd=D6p zcpGO9&v0lx8MXe6TiS2_a9z($OLCj1+&F#q?~_izWeEZq<3y&j{Tr#(ZvKzoVyD(wy0+hB_P5$!WD zNB$1>5XeI8Gx=;@Fdt`2ZCzYog$z&liVrp_g_;h2eD5X!O`#o~*=Wq;F+>8gF6#Ca66s64rF|i_o(2+Qa0lqQ$jo zVm|S4Nif$#ZfaI4?96O+y|Tn%`OfeEv}Ei_P7;Th=JyBB!vUJ(_oHa|FiS{H=rH&z z{LX{xomTpB`1#83Cr?<3d!W<~rys%ZCiuOtqy&}1@t&NV;OWru7C22I&>2?t8Nn~L zUzPE$V_!qmN&D)FbFLs+LW(i|KMx>=cTAb$?$oD-3sYS_QME47D_QKwH6 z?zL-!PjC?EJ_)UqjLEJR>}M@vlZB^G(>rDovxBd(=CaYla713XOh)f0vu3!lbCVUV+>DQq@}JizQ?qX)x#xa3sM z3=R>&E8>w|;q6>sB;Wb=HT{;Ce_Gbaj2msOO!Qa9Q>j%?Py};_w zdXrROdO?7uMkdFEkk|m>DJ%ftumFHcHd!G0j1RJR%b6k0m!hh`Z31@25LY|-7)0xM ze+1kl^0C4Rgm?J_NOR%CZp-KaYww=dk@H{q>5-Ak<{c&6#N~?l!Wg zP1EO*FOHSVQjAX!_LvAVMWj@U;PWgbY!wIk{ZgFVh#g%IcR zy3NfT#&esl1i->=!iGo)S>xiV98{$c92*;pVLJ*rc9@n?zhZEsvLQ?ujK8`GEDjn7 zDli7fEglpd>BoQw+K^4QCDzo zMQ^HOEa&xS`7-{$bpKJ`mTYH!V7XGJ(mBet(x{e{$|dQ}m_n_X$9#Xv<*$9{WrF^Q zGDf2v^U&`I6Y<9S>GO9P=t|}QQ~2AVu9MwU4)?H9=OnNE@Q5P#BcY)$oVHh=U6+H% zcC}Hay#8X|_D$&-b#)nzDX~4NJsM+?rTb(TdNDy4BWjCjV)J=Cc1KJvH^`UMo07-Q z@hwpjL#($XH9E}_MsM0Vwpq(qatb}oRm7`Jd~zmwlo`gAGs%))Do#bxxt~S|{?&WD zv*l1XC(PMe`qMnb>7Hgw=32C~Mph>LBuLW89fDreo7C;E&q%LV$>O=)d3-_F4UqQX zeb_<@VIjmrl#*eJ$KMCSq~~dG(k_8b&BwIwX+KjMO}u-C2sj)i1QUjseg$C0`Rg%& zV~!J1)G5nEH@dL7&BWd-hjoNQGx^{*q`bEIU{1jRAw&_v_U@B$VP}?M5^^%%4=e8K zo<6x8R%D2(1<^9rVPnw%6J{T#8!uW=(aE(GcjJSRfj0}VER%1CJxUI61Ro1nJp9px z4bEArx%V`e?yqOZbX7EVMKgiYmq=vM`mK_*VpJ{f%x!Ip@G)}g(bGjUGpldgy#0Q1 z0~nir6yI!Id>P29|%>-}J(}UwyZL zy${8Lhl3d@ZNflO!rrVey-Mv164I&NSt#Q3W5lXt4JyDIAjJ>+OO zU&sm*b38E&Zp1(VBd^62BTdhxXO<{zMp>#*6n9Gnn?pzEnJfXH7n5F4X0P{5smT=a zL12O^90rr!ZZbH|gbs{$v}EEan54~3s;t+bs*Gu6L}5va)7-)_#giR9BQ4gnVy~t) zppB1>U@`_WVvSzHSomNeV%m+Nrws1RdNuQgs?F6S&1KEoCQ8+Ys$WYIldr~saPCa8sL$Z=i9p~C6$ z4q2kBvESlRL96%wQ!?)n`QKiZ`F#n2H8V=jHknW7EP7Y{++=AMV)ERKK;h zc58k1Oc#+idt;$HKfbs)o;)4j=5*9+5;832xfSWTX06(|47N>l;I{!& zfwMcEGUbyBB{mVwCkD-`l?CXH%_i7dh?oY=vW??r8Fc7~vJ#L(2blT56HehAYQBMw zz$gSqO@;m#fy4%7=H1Ucw$Da4UDqi}?lsHubDd9KZ(Z=per-ZVl%%k_Oo=MUpCfmX zpDW7(MG~P(7%7i9TzCH+MZ&nKjQw3P(RGVQKa3$n^rU1$Oc0;N5n^Q5XwAdB5p%(@ zwm08CUjVT}GNvYoesibZ{o<3vbAp*~&0zMwNN!5Xs9d^fk;xh^5VECyyV$&DQ%CiD zpCMndSZt1nG+Xr&I)hQWj*%m?N1)VHf=|q0vzgB9vI^sldK7=FzWbBGoGvxE5Q)Qm zd2uHmy2%r)iEfk=8HuOP-Wc!Hij?HNXCSEW9V2uQIu{5$iEf0}^L(A9#I&_$^$xHlCu8d&b2KGBZV6ec( z21pK^!xDU7z{*Mrf-;b%!Tn4u_y%=JXj8$Eh%4ev4e$lPQ3yfcGQ15!IhK#WHR@gr zdSEBO2G3jrohbw)0vb)qxD+T9kkQ&g4amg+WPpb-nFM#sATeA* zt6+LMFCoDdz38PiXn4&_i=tf#38RUOn}WAA?WnEY(G>db-?*u-Z_}o}*vv>(M~9l9 z8609f4uODLj!h+(4jgZBI?*xoK=2;oQm~h33Z7*AP}X6xhs8P~`L!~hD>2NZb6L$X z)z!-S>oUvI_XL!k&0V8XxaEE`%NWZ98Y_32b{v3JA<8)T5nTwV`GiS~- z%df0gS38}amm3-$2yAO?+!_dMYiQUWD27MbxDg(wJfp#~X_KWPgG^D#d`jk?&Li#Z zM>?-eQ~G2I#zQ?lJBjY#p&azdlfs&OGtuLwy_)P z)a_4ANoYOSq8>P$Q`XDu>*+az=4Ym*Ws;lF5wdd&5oM8*4H8R4)GG!HJIXAwMZ3Jd zY!go-ByT`P61zAqkk#Gm2InY^*G|4`D-LiiwRzZ6^p$&^u{WLkSqcD8S?>N!2F zz3?_MzuuCA+Tf1WFE8o8cmAU1mytv;R#}l@YVy%FEkR9UuG}FZ?k7C6v-|EFj=h=K z*s)Uh zM*b8VF*)B!zgHK?(5FkrzCXn;iA}3zUydyMvrjQ{`WScEi)1iMmCHX z0p{UW_y&v#6c&Ib9tq4jz8^z4wj_Zf4AVq%SK_LjrO!f!sQ{Aq1{w~NFGCE|FZPiy2*!nx0A@beF`9eUp}(fktB*V!p-9w@^vGxOMFF zGmITIqaPFy=dS_xtL_8&N6^%A^0^{Zb@}>@pynWc7<>qEcf?xDzaw8cwTArV$}IZl zq1y+?TPZnebo9F0IOvm(yAs+sQ!IHqLRTKKD8;_I7)_?a5LfC->B~~A>8g3|Vn33i zJ5lW6`almDblpmhJX^MF&DYO&k#`g!Z#lX5$d&i#if!rF1k(!`+M3bX_toBa?&$zZ)c;u!687h!9fCi9+FBC?_-@)?yK083_SfLdys*A`4|M;TsQ+Pc18~ zNTWmtc>ktIK1}mbzyuf*Kx*FoBI3} zOADAXBFd?Vo;i2GL`J12FX+?v^&3iu`qP59BfUVy>nVz>^CIFKE{~8hrve={?Iq?mAVgzCW#TdQeX;f*P5uFZ}07B46y zSGsERr1pG|n(kyKr&cu5iPR1AhWd2`kqnvFgr*gAcb1WNg*%e~VZH*> z9)M|&rOkrr1}hVaqz}0=Ty(QYqzAy^6ZlQ`z*yf$5o*!PCU;1O5bMbuxKGg1U># zwT;6q)xlTLivxqFwt;R8Ge2UOI4;cyVfHIPxdT%NKElBDvawGZ=4!^BXfe?T^8gSJ zdnU$Vc$bvPC`vLBP9$&zs)q!45P}mZKpAG)Xi#={fZC?JA=-lb?O$P?Ni;`VkMpw2zKB{f(VLLsp zxOs3!OG2gFGf1A2pcK}d3r2tVarernpN_aUr$5Ezs7tl#REbi)*dfkuDTvRFwy>+h z<6ZHtI1MM9!DaKp^7`IsD@RW!4=T?F9ubrn$rNy2IAm`vOLeO)@zL#N_L<%%jM`?g z@^M>TxHVeu1b?;E{yI(MO{*HV)S!LUt^gO%Pge z4dlnhlphYy2qJNy^uQAVh#HE|lgj})QH3y(At@A+;S#8o1QX)3;t9g?Sonh-3nRMm zD}O$t`$89ig=DeDFZp~jd>_?m=sq}PhrP;C8G`RPQ^aGhLqdD!tSabCImPpvs*Q9%Lt{lacBDIT_U|M|V5b2hjMUZgnL$WZIRIFluhUOIhs5>JGV+pPM0^<)vYYqU%0NatX?y^ zh$G_*y$PsKBr!%pto(!ujZVQ(*!dt+G2hGpZ|N8_@jKrr5@~tC3&`W518oje&O~a^ zM6lE9qOA+fCU!lB>4a}s6>x<8d?;fr9OwvSO>&q{tdxe6al4Pu5&{kkW_lgWnxK1XKa+o96Xvpy}!6V6^Szp@dPv0Exnd{CE_-*Ezii(GyxN}8tOFpRd zPO04;BrLSm2T3KiC&RMCa(6^9ZgV(Bz&@C>;bWoYZm6*aqi)Yidusq z-jnZ*9ga_2pAnclt=OL^5G3c9wGgwig4aUwj9+2d#lx~wg%%oq$Dz$j9I~6k(|}lX zQ|S@~c{UIz;<%pgA|hJ)LnWG*ombqBW+ zbI3!%t-&p{KX||hoPwhhtS71Do;dRsFgKI=K?dYG?IREDBoCmzv3Co)d-7OR{&4z= z9cV7Ob;oG*|3?afO>ewGzVtHs;*HV!(K@sP{;wk!le5X$?GR}?fqa2{;f*(l$6tP# z{MQ>-9{SUhuxOnyg-^p2nt&&5pv?vE*VFI}bdU+#yjXTG_K3mMST1EpGT3wjUU;}1 zEEYX@o#AqV4L;y>pA?pkCz8(g!Xgy^kM&R{6YgWeeN4EIDQ9Il6p0m!?pb~O`09HW zRU|4L!!|`?<)XWB!QG206BV}643orORB-HAL6KczT4<2ki}Q~i%P+P|4H-gL;c#o~ zaG^_xMA3!wT3hE8MvHote0z08AW%_l=PT!^gw~ph8u+scRjGV)N^4P3Yl@jqM4FS^ zii+Bj&5`t5rLmb!tL|C6_?}fwnXytNi^*(WdH0efcdu;DjFCZnJn^xM8*7qOhS>(S zH?ZO2F(f9x#zkH=6seMGHokeB{Q7wJ>=dzUC`Ozzv*-Bno|!4)m?4)qWp?-Rt%Exn zJt8FXG;W_cbNl$=jzLDss+vZZP&7jm=@#kw{+oP(Vm z#G8;|VxJ8@l}T9G4~lq9q{zk49{5%Qvu4HQ4XEY8&JDIh1OyRN(lH}UPmUIz&dn3o zAU8QYxNhAb+Cu)jMx2*>8kA7_uo)e=4r1auq5%1Cv<258hmkuV!ga_|T*sTlOhjj6 znyogzC-^IIb6#5#ypocEr)gau3UN`L{MaF}C5erz$IE(65>fhB3Nh{a4MM6jWP*g#x+vBd($?N9=S4?eFA z#6FNs@Qblabki4K&`o2PM%SZ@RpdM9ODFj-X{BqOq!bxZ?-9ZkeD%nY;H!j-5j*yQ z6MaR#Q&okGq{K4F(HxEsnn9%u+ZGbTNtJum#i zGLbWFCh(rMK{51?*#tneFl77$xCF{&a-oS05)jOafOHq%jlD#{f>jPr0_-4rTr~&G z3z%!*&f#t-H<_Rz{0@M=fpJRVl~9dXAS4v5O(=$E!g>}6#ApMw&SpZEhcq)YTx>T) z*c<~rmn8|#Xsb)cVu{32*2esBPDGTEuh+Pg-b%Y`UdnghWzKatDif71jh=6eir|Fj zH(H~_A{I;LvPL@-B$s;z9JUC9T^!CZrKd|I>FHGK#&Em+FRj}e3OJ$GwN7PXrNc2d z^Skd-hh28C>vU>Et#b+*Y=3FpZVxv?>r8W6hJ>Rr@*;U$p~#+6&WIQo%8;WbCc|!% zDHUojUl0+W$O~7pRk}hY!{*Kvn-#WUFL@>^3RQUL+T~_RuG_{?7V1U zy=sM0X0tPx`C2`Cnt3mo|qWH5(pS7U6BI! zC$Y%v!-=RODvCVg9k$6WV%(pi2=^yoMIBv$&k?`#-AzB zhD*4`?y`A_zpiVXRiKocIDVHzDm4g%W%ZeKrpT;|(4|`3_HEmuW2~v#2%Sa9q-WNb zLDD&JqKe7lnB>ZWS&i#{^$wT0i@D+my)fPHa{1GR`Uo*@dDwfk<*XQJ8S>UqEekEW z2yLo0CVJa8yW5fq-Izt8mIVfA+2z05a^gJPvLsw9$n?k5ha0Q{xg;x^rE|#A+HGio z;X#c@UR)Q>DogTF%U@Wy)*`zQ58ZXE9^I!huKSPk@+M)(J6s0mTO5X3-P zAlmPRcwW1~&G{_tMcRk7U&kZU0;&TpWCBrv+MGJYSz$1;0%95Hr%9rBS*VP_vAD(; zZ7kp^j4&_-i_s&#kwR)vMoVQI!B6o>9wHi$rR!*2pXRHbTvJOrOyx_v-a#MS@aMT3@4)aCs=oTT72SS51@(L$#Y^P&=49!$!3jYMpMJHuU{I?w$0o_k8v;>~A%iQDX&p0WG|81Jg1)RDy2G`n+qEV^ z`=6c#IvSfh`Bg04-_~9C=l8)l5FW0nX(*Q`#hP_ml~Ud`18k#ZA})_SL_IG&b8z3} z^6>Dez(jre%@eb+l$smzzM_ez8-JnbB=zu)KVC-0AIx#2}904~+*wfNc#yK$6dDQ#IN`Voz{dp;nVxTUkb2LtIl z!D+;vLX9@Prm`$JD>$o+d@D7o*j|%Ij1VJWTwfHGS{xi9mKLW*6@l@5aA|Pqcqy?o zI8sdeg9GG;Qo#P1>%&?=aEDBwLcvq^kTw8t7$5!)$prBCpOk`EylD>b@e6Y%r$#%X zgQEn^5p7RPa|DCI-|(*^nqUQghqAwD38fB#9sE5y+L4w4zLo^rk(L&1cLXmJgdIHW zGVDPzc-fJj=CIQU;$aXd&j12S2R8e(Y*bFydVX1BEZb6Q)&t_w4l_=i>{kv{}?yt7e!O84OAWB2*yw&d5^QNfbi zcU4vnO-Wd_cJ1Pueq9HFu*N!XI6079H@!93oih_Rl{1)|J2R)gHQV3X>d$T^4i)z` z`#P`PT=VW%?Wg7}T6f=x+=Z)Zvt}=%F&G9Ama*X_(19w~QLf5haPrqV`17-hO^n$l zw9WK)W9J{$zKsIRrB_CR^?yH@(~K8s1j7d1;^>yRTVMnJyGzC*BU)@cm<=;KBRdBs zZaQja&bzWXSm~dh6`I8?Jd5aApv^(r=NbDGSWSK; z7y{mAsJWx|B3L0fL+X3vrh8^RwQ}`qSy`{GUis9ld&te?yBU4y8NC^qz3J(_nJHD( z$;s7KDc}<@+;nK5^~ijkcEOR>{=-dZ_<{Gq+B$G_e$smenv0O zDwd9$$f&P|EEbT>qMC>YOV5k1Og+|GyQ{r@S8eODsjrY$NE3JxBpIvV>Hg5QV;>Ie z(+6fvG|*Ru#>>V(cz+bp5NM+&K1_&(3J*8IgoL6CVSGi<*ggoII{slw&}Q`0H+2VJ zTD0ihTivm@y}M}9O9$(|K|hgm+R=RKPto4)CJ&OHcb2}fVazf>C02U zVJ*G<2$G;n=+yb`AFrEneq`kQjCCJxKTkH0reO(d@0Ci>SC95f7%6~?JIS}go(5D5 za&}n zcIwl8srvM#M$cX{!0B;T^?Ql>b1#kFNgQ$1VOgTvXW4L2Rw zx9NtPoUJF`U2`XjnjRh@(n^us;Pe1{>NJp_N_Ap(*dTf7w!6r$4ox zC!c^hSo`~HoZ~Q3AGmB)(`W%Nc$wm%;cp*!4u*!tG8w^v2xH<9)rSc|V!RMP7{uck zS0=&enG+|#G_Ku_oC`*f7Xm1FM;0L0wvHQ%mu}zi*^V8bZ}6|~>3O`Q{ z0YG7J1Vh<|Z}uJdX8q{iWlQ&vk4*F&0>tkja<^~)Hyby6bKvC3<$L!n3qJd&ZvO_# z5hbxkxSJjf=FrXPLHfzDCK9$H0P@%KyWpv!DIm`o!_WQyY!QUu@B-1zc*%rh++%X; zPW;B8(L87ry1|Y9f2@56d{oua_?~<3_TGEnWK%cErfhoe2`MCm04em|krFxxh#l!7 zf)r5@yYehpu%M`j6;Kfs6~XdU^t}fpd-%_}yGs%Tzwdp&f6DFm+;is4%$b=pX9m_n zK1AU3Kb8r=fyf1YU8j0Buq4NVpl^xU=qplvm~p)f%-RPmMGk`+aXuxoPAZ^#B)&DL z$O&XeoCZjCG>BCb=o70NfgztPPwZ>LC)cixY0X~S#ru|Rk)?F>=nJ*A_tYuFtzc>G<-Pp3@VZ(K)u+jJ&R-ZBo1&mk zbJ4D{(J%|~9b0t|?^9C0OL4I6-$z4J9J~+M4<|X2;TsH(*$!b8Op&5 z3n&Zo+93fPOt~T9o20!Z5->6A0+Rz{Z!{5rxvcOD23zVMS%s3hI6tw#PmMsdr>e>W zapy;*<|pF(xst*xrz?0ic-CbS$*DXlPa%}anWg9}WmK>W|142MTEm}%T~SK()lvp> zr4Pxa+R)B;zpsE-O(g>SKd$B#`26v>Be*+vh#Dp0kJZD4s0hCzG-|1v(MxiKUV4j!S}zw8lQ@NCKlnD_J2%b#-|@_#@GNB4I`bdTx<`0wF3=;%>+Z0VA(9`5XX_^TyL;c*x=#b}ezN`Dhp zE<(CDk${0a5w)AJ3DC}o^)EEKge-yVF|pwBc)Z`*HVw1q+O<*1(cai6) zB^ta5VnQQ`KkkJFfRM*0?j)?R2WDrOCMQh+r!NlwlfC$dqnVn_5yeB6nBwqx{55*I zU}#;!@Hu8%UD?8#)|qmeM*LCxzP}A@_rk>|cXdJ-cGaZx!P#$AsmcoM+2!eY&BLgy zRy`myF)w{}+;d2P_uh||qJ5`~B`M=3JpD7o#9xzDXdFLoN^5<|*iKcv`Z2r(@4-hF z<8w&27=l2wp^>{2Z1YkJPa<_?u_i4U?|T=i@JqFYp1k{i$Jux)NWBOkKs-V95Ne%x zwiArGZVW?UA7D%+mRA^2y?j{ur*vzbpw9qc;0jE1sDKN>FbYs0LoN)Y5LAwhr3GV7|_G80__XC%y)n zb70>-QuJ#RC%#6C-nS1Q!IxhH&5l~*tSL2&Q`HZ)*6tac$VG1a<*d;!Z%9;>ldSx) zJWH|%y>+ah)WI_r>S?jb{B*3Lb5o8ZBZ@amkWd(19$#vnow9Gqg35=7>jRR~`I%LR z2BkbRXh7y1@ag;8j;N%bNg8EqlV%oWD|2QeT54Ce8+=hRZHAVw5}%tr_`m}JU5UBs z)ExX~-b2q1(lkA`H5-o$te7dVC`XKswj@6=`NGPw`_^W=3bsF3sUGwBEb~`*Dy;tv z=GWbxE6dO%3{Q=pSi@8e$y}1yU~g*S2&pts)&B%^SAtg)Ns2K8x@|RtT>J+?e1IRB z=VO;k0QQEwhk^Xz4}v7Zf(pQU5)e0o_*SxGFU;uK$ch{#OigDxs}lC(EXsEh4?72Q9fPM zK02C-VTLbYL<@#9F|>D7$3dONtZmGtkx88}Ke+ZN@AzSQO@5As@=~hotR7Kjj*5an zJGqoeqo-s?ky$L`k73j*qhIy|vRk9UVZxXvf5M!mR0K?NqafF$0#C5dWXKTwR&Anq zQ*P2(*$+@gD*1p*`Bu*vQ*(1E621B=5|s{WGEM8wuNS6|8#Mj+^yw$24H}m&94fRI z=1lu!`m|4{++uGE^a^KcAJ$tSER;{%xa{IV4jX0$H3J%{E&o=!UF_9e`?(JqP$ zkp?K&=y4n+)36`t=01+F72&~M=$D&O?Q42CV zgMp85z(58eO)_0fCW+lVuxNvfPR19~r>qqr+_OaRAPLs>EE2(l7rSRsBrHw?@&T4X zsBOqi078hD;1f)$!Iwhz>yS@RIGbJ=MOd9oN7faEL?eo=4wF*qP{}=ZPfAB2Gge7OMNvw2 zTVFja9#N)Am6a1s5H)33@OS3%JhQ92G1vUMzpyK_!|c#hr6m@lpn{5yrW8uD4X!2G zs|*yA4!&Zf(gr2el@|q-Muiin#AZ2YCW{~E9xwovF@+t;UaMQCb(Ewq&l`#pQ>zU& zM_Zt)5a+o4em6uDKwBJ1Ne(!`duuCsSIP&}R9!;l1764ya$Rb962n!=WGXI`Bv-q* z!YpJIr+4_RHlwki(2zVMUmK^3^ZQ|=&7YBMC@e4I+`YY%aVUd z;j}VeS(YRx1QHXI@T9&kQJ-*q3bm6b$jTD%oN9%S%P8e?Rq*>akgd_O_{p)5c9EM^ zFzc|d^3p@T(z#UzpDeF4{hQRJq~z?xlqD!W#qCZ`cEdW`_7n%HrZX9ACy^19WTtWb zm6lK{I0mI6H?0PO0rF7yRn0C1&u^p>H~$no{o}}c1V)ocY%vM$?ymtrXy0vkBzJ$$ zGiaS*U`K3h$3O#~(nste!CB)W{v6@{{m2;N$%SUX-CV-)iCNDJV=!1|olZ5m2Ndh> zTb=HEF3rCy_twX-i4txUli)>*EjIyJYV*73)T)vd5K8U43xG3oB;a zSt}Rm_bqyRSMWi!tz*)J$$dbh1m~$lSpEW)04p6}q}#y(zc%nQaZyTzD%G!2Dkws7 zef2%A_SQES=j1GY^Hz-UrJO}?-FoLeYu4Ox_nIDI*;UQfkCR-ZX{hrdXaE0whv+KzHT30vfMWc%^b58Z@jN~xWph58>O98-h*8o!*0Sa zqaoW4+%%}E^`+%Y8s^1AMCdVBjrt!|OpaOmL~J6fH(E~{hVsk^_z z{}C^t1DEyvx)`Q-!a9MGwS<$d@MUO}%Wn#(1w)RPCNr_y!Veb63>*p<4yRNHiec7b8 z&IuDb+a{I$b zA{I1aSM2j;IiPwXXiL{2U64||sl-YJa*E!K++d*Ug;{E32uM{!j$zinha?*gAN1uf zm$c0c4Ja{V5Q8ZE;dE*SYPops+(o>PiXAF8@{hUlZK{V+hU+FFx{tuqCiyVkOpy;%KA0(!5v(1ZYw>% z3qrW!m(DS-54tlCzq(ePY8%rzYjSFPbWX~m;Fr-!^0V8ohdr&iwiFM~?REF*6{3#&vq^M%10E1jkqe!!~peka-_->gAtK zy!FL_cpqJmO`QQvbg`!TMP)94?x`w3={MXy>T)1%L$iE(1zkK@-2SK*f*vgjFw8@!^ZttwGiTC+@lT*{jQ(sKG zr?T>%X%FnHUN>p=>XPDODsJJr=0O8|F>&s?M1Sg(%tg1gH`K-@`jRH6W{kfED0%lU z95OE@F(cj`pRvbkyL0yBX(_&}n5a~b>lLeh+J|e`ADjB~cWXbKz6%EOq>cA(S-%V3 znCoZXFj+#cOixbCj=a)mbS2V8G^DX-(_g}PluoFTMMjn^qavd_89}e|wmx`319|?1 zumAeuKi(bC(m3$F7pTYIt693CaK~PJ`n|f+g62{x+gDudODZXG?Q(p3>DON8^50%r zOZkF7k8T@0p3(+Cy6=D#`I~R8TfPpDyO5JvnuGQJteoWJoGd@ep(-wC_v6~Vf~5?i zX#&3+?|oKy1T7+R60c;2tMwpuCm*!s_ax#PhL@1 zbM>f7hc!7nKC{fK?=snMnO!%r(iC4)m|yKR+-5KaKkwHriW<-1@L%B`gpeh$6nX?q zcROLeg5;|s_5dgEiMxVd-GTq0ED#*Y8r;Em*aae!S-1jig#fT~xd$(o(w`Y8%y1@- z?{wf>IW)~cc^>WoC@mz-kpPE4wOUr$0fu62(VV)*+nbmC zv@`fK`h45Gd+s~@$L^(BD`s&IJo4(0Rm~8Ly5`PVD-Vw19tiH4JaTj!p7|EeT0XvL z6wJX=XRiFrFXz4s$Ohv;NKYlkQ}$iyRAWm^kvy^~0ZN8T{Ow@9`(= zcA@NVr+wBoq;e1Q$Fkoae(2YwG1kxB_7~8=Z%?D9SA4!>PCvMbybKMS01XqdegPVa zfwnmPjEbv(VOg2#Q1K@`kN5qGo6x6cP#NSK{rB0!I}y4<{dyTc{V?~yF8s#th0= z(DTgnAYB9x+k$7vqt%}RARYlgECN6{0T2)xmvO`D$Ue;{$~DMNIszP}lRK1h&&GJ` zX?*yhr_i83mVDRVTKB@Z2fmm-=HopB7WnYTv?FMaj(rl<|8^ENJf9r%k;iw-?>l$? zwo)ZVQ{i*(15}2D+d<-K10-OZ${%tiIP1z4>Q49zLJtNXry8LZ-$ScQBCSpjC`m#P zzEaOC3GRISajN5qC)TDgN&dBK{oNm?z~kqy{LIUT$6>*B88Fmzw%TM;l6bx_>jKSo zM^#*QYck?YdQ~G6zb};dCJkel9_2$HjfA?LhPqY2>oNjkM68>s#7+wM&98viZ{@dL zxsoy|4OU0mgWpkiObdPs^{mZbl!p!m7s1y@LS+xb>s)x9v`R~l#MD^sfo|7HDBQr| z2o!Kv4|frXYYWALtj12x5rdl>F!Z;+0os5@Ux1LT0^G_Rh`agT0X<(r zQMWK%m#gW-^7YH(yKAA;y-?-FP%5}aK$Uxo1;zqET@1NUO9iw5ip-{7fM7q|bIh{j zWp|ea8B$jCvUPb751pdM01mv)JqpGq8(;xJ)vHJV_!{bc5GTRz1C;stCVcGdkN6l! zWd5JNN6DMI9~<(*J?oxpdE<+9FASl+JcA!S2#Hg^J%buwd;vf9-9x`EU;f)e-N?G^ zHx5OE`x!3?6_#+wgeoC+Vx=Q1K4Dn|}~0t|gKrR2Q4C17AOR0uL%0k3B!jTOfHDO1vB_Z%!ObO zR<*;#7nmF>WaA#VT+KbuvpHk-G@ozU>;OHEgU~>ru;WlfEL#NaqrEa3h9ofI*l2w| zM0O7yPyw|7*d#vxi%6%HQ;8b#E1Jkb4P5>~^>GEp95CEeM5m3ny_iyj^l|Z{U%%^CY zl0XQ@>G6qjNLkT}cNPV8g>QWJ+4i19U5sje##5v91xi<`8fC?@<^(;-n5JkWVgBDOkdOENuBKX3~ z#MS9qi0!B!4nFS|LA^8s+0{*ljx}J=;z?pdFbawK|5^mDm1#jC01xG z*D|X3IQ(c${Fo2ls2`EF{n=rQV#fBg_JT?$kjb-B(F=LA(-Guq4&Wnm@N@a|v+-ml z1ly&IB^&R%@A1lFYVVbG>(GLP8RK{+MbkiwK4zjOIm_N|N=wpw4P=|Xt84e3!!L$5SPry!^9C`IWYSUTstzw4DMe5x2p&S zwuTU<0rUW(*WSGrbo-kg%blCLqeYjG#tmB-6Jw!9U4ELHB+;m6S4d0{LBc(yD|1v< z*Tn8_I@m+E&#{+eD@)~hHKn=}C+1-MW%`C%b)u|bK`OO-USN5iBt>2OK;|#__j&lA z=Q4LTs1ju5w+Fhn_JUTEc3)F;#fn5(N;Fq0P4y$ilqvX6xfmD6VE=fhucZalX&xCZ^$ z{ULfYxVi4dcZVoGE1UR5W0BBMqGGhJSK@-kxN?r)Whmn9PEWc^DLA! zb0#dTJRNuYJGbJGhZWRL=NV;<@d_(Sd<5AbPt&VMr|p>HR26miH&pg|Bk*C|lYO0?eNETXNeii0Ztf|DZ7`O)5R~D6F8j}WMOB|& zo~uYOEDV0rv@Gx4;A*Y!-QHR|3JRzhxBxZaC#WUUA1VLGJHto4`(%MRS0C8_=}n`K zzgnir>0Z(g{=Gaw2>OB%Sm{s*55pM~rs$9_1H{rL;D=hOiJAh*dVV1s3ZN z8h}a92xS0bhjRW91P5*cBmlpJjr^sf-i&E(bdQW4Iwb0k^5orB<+Z!U*TvsoUR}9m z%}f+Gr>O}wH8dV-_IduyEhK}MHs1k|0r}V-? zT($3sfwiqK?8&88PWChyM_2}<*(2lH?L*w7x?8DR@Ox+Qi1spc%Ndjw3>tuIP=;JR zS0aHfnYm=fo@ra*XWE__OMct4=kmM#VAkubLjw;@2ls7G5osDxb~I!h?E?$wV(9NM z_W&4xyGV%sSw4DApECw(X^>e+E%j&@S4#}cs8umuOHgf0(9%^s=M^^T5}8YbtI@LR zk8e}^r4@?<@NBoLx6$a^ty}R(0}&6Yi# zayxI)jwD}nPo87eLUle$67s2+iH~hy+unvgaOB9o>@4(67n+RMcYVHZ z-_u8qpp3YYDGBMz{q}@KDcFn7fJu|4v;5urGRIM0aC^hsPp72pcSL%!HiWq7Y`UCF#9MsH5 zfBX*~V*}{Mo>zTmSZN%NDkQlgTpt$T@lOlqriR<1=zG0%@#( zK3@LrnB;*^&Em)b6?;@gS4VKuP$41R6^I$QW!Vb9CFcim}e?n`Nq2D-B8>x&nT-Ki~? zBxKvNHa)n#*j)S0=VQDrhS;5-{&wL@q#e2r+(Deb)%!hl!@BQ@zVm#WBqMpiH~0^H ziaK%V&|uX}2o#ef87Lim2;E$W%b$6M;uQwh+U@&nR=oFW&C@H!(Rr`G-reCynA9n6 zkq>S+TlP&|yOyCO!9P(I{zq^l_ySANlLzcAa`}O$sI#A-6V&v)VABkm>cPQ75a2#s zZFd^oSUF(DLkFH3U>-EYnRoNTvGy|0nwKZWOpa=L=Be!q%O6Qj*z(T#uDZ@5`OV*t zEgtjT;;8Xe^L{wG^K^GGk`&KsJ zk~++vJ*hlR;ZVmES<2hjHk2;Rd-d2$I*nK<=8HA0yy0etwC8+~Cue|PGHh=#oqvc=rVxd%cL+{?Ki z!V-K79-hB({^VTb^dJs+mk0ni6@V$%S$0L-a<2Uass^DPXgRzGh5PC;xz3(nbB%qT zTqE-mT2?3{F7}|tfH_F1CU?Sbf<(g}Uwxy`d8lM~4cH3ADj{qJR3=cGh((DML^M~T zJVC+a7or?l{#!DrwJj~d%nUlYrDYp?#JuD4;j!!)^@7iLd2t50(zCFadD_MgZ$tRD`u8d`OPb5c*-62F5q<)ymu$ds?XHtE+o{Z)t9!9KX?yrzt%H``n=~i>Y3HS^9wyOF`l5Tn0|eA&$!K-H&b0?j~7%| z-@*Q&!zHuIt7lqEN=DzJ(G}D~vfhXgJPJ*OEG^o|BaeL7@*TL7-}>tWP=5mHpb zJjJ!+?X_#RVD%L6I(F~{?#8aI0n;bpf@)atPBKoy@JX|CTp;8iUH}pHnF;~2AkZh- zf@=Xx2*6MZGYPN-;Q}_PWJB!8$g6~`v&2gu!h}Tf!jb_QN+j7O;SIu&+3yfp2?}Bp zOOk1h{7^s+_FW2wY4XPf3rYA92yTxaEbnM9=Y3t#)>d&Tig&`3nCQ6_;|84Ai$9Oc zG+PrJCdDPKn4nG>F(xyit~u3iPOVG+dEJC#FO>UplX6ou>G{62_^fTuj}GpDD10l0 zO~KsKgjlMArx=fiJq}D=G4qjq9-(qGUoOac@K&CLPZbBn3K_EQ#c#{NA30Ed@#_bo z3bL~uIxD!3a^P4Nz7(3-=cGa-CctBww3d~VcY1aXlwDgc%QKi z^|}*(MML~P`@-3)AD-XXRpJ|2r>MxnKioOy;c+n#Rj65;lkIK4e*{{O&YlSll(y4L z6`nv(0#{N(@9ddG^WF5qo?8(ZJ3x7x+r3Yu5>j<9U*Yh%^oAa-L_&XzDpJ!fQ3|xx zG;m<1TstVcc+=fesg-#XZmC{6FsEi#@tokKyc$b~sd_@Zthl{JD=Dn6(sD->W!cmL zm#DJEB67zkYV-4?>J)BaUX;x+!k(C6icj46e0_F{T3*%>jn{KDebCv+T3RbOwSd$^ zIm5xpe;R~ET>!(ut!#3SLlB$h%NwCJnP5Xv=@8=z6r}JnOq7-u9@l{nY9PQfoD!5L zGx#KJ0E^Qw?Qso8gVO1Cx%f0-G6Z7TMo+dlS8_OY(FO(_N{ABHqlKr1|N4P(n&*}dR~?^fbkOq?tY0YU{-&zeEAov z837lLr#(Ay;_;aLvA5V#Hqe=&lvj$@nosVs-{>5#U;c*8l?VCqwnYwp)k7dGLF7yT zfw1(KB4?t=0eC1yM3;zKlLcXVL*W@nPV^zL1Z4!oOq#$ZU%rvh@*rm~B&2zk^E@n3 zd6Uhm_95qUNKSKxa~2ZR{F8Hm^KZ^&AV40H!O|5QioUvd1%!gX7a71d0O>cc6?0(5 z0mlD`EI@zk7Y&35hcxj6}WzG2#NSI41Hg9%*n3(bh z%VFEpHgx{bHq<(AblJsWR9x`*wg1HtDd#m*mvM$Z*wTWkLC7(L84b0uXm` zNL-noK%If7Lf4ULOK^PxJ&(NwvJSb7a}(&ZAR*0D$Hb`NpZNoXmD36MJ8FJL@B-5T zXYV9n$S&$Q%0~4{KaW&Z1=oOxR#k=1)2^P= z#K?pBEqFySx~qkHqN=Jp4#b#$62WLsRn_I&;DpXxwF*R@i*OAe%*a6Bty2L6{?w&#T754lrT$&z|bb7W>i{YJfTeh$V zaEMqrCocoFr{Nt(An27gTo}^EsM8Z;8m^cVUU8T^-HS%2e z*}nJ4wX2!{q5SZ3SCM@wD%@hSw13XJ-%KV?A1WmVLDApr^GDG+doVgc%fpWTJTAyy$FV}r|`(JPuk9u8IlWBn|_ z@B-eJP%Q|TpanZBB$3EadDvqP9CAX3P_gGa!5ipJhz8)ozhOCU!>@JVwKGd~x?M=E2qh6WSqMJe4ylH)mwl(2+r>ntS?atn(^KxJP5yoziw(pa@2tyIQIpfiw^{;WQ5QYDF2D} z2OzH0!tZ;AFC0E(smu_kUvg|g?doAv)q>hZBSwyI&CD*YlA5GBBeJuGXAj%xp0Hx% z!xQ6bqInGv0Rc77egWBccZ_=K_YD3EDE*rS9f$BEs>D}O-nk_mU8nG;97i8vITD5> z_8Pu76#8KzETCS)A^hzGaI*89Um%U^We$dPE-FaNmx&6mBSfbMQn|$9N&cf!_3Yv- zU=tdhHysqh3^te#*#ie5kHF)^XiCGQQLrc6P3ImlsqG7+6pFq)2Y0I zyzlS{{OIQlC5Tc8<3V}WCx~fUq}Frgab|v#)oP{IYZFwOc#S$iqe?*f3@oz@z?blI zk8MQyv-g{I3V~89iq+|3L|Ualp)=oq7U?%WhM&Wi23W`M!T0L*y5J9>N!TvAZE4&< z;pmLuex+BnUL8%nS@`FE2xfNTyS#$@F92C`w&EhQ+5D){Xt;xmL^i3^ClzwJLfA=d zBE;qLqoVkz(quA0;?N4-PXr{Fbd@bJHIM&?(gc5|%+$Q#>fpDR9=9gi(0shomT>n& zFN9SK&k@-!d!C-WX{3am}(gr*9 zdIt@mX@n-f2;$gq2boPKbDxkmJ`hVdWTFuGAIyMI=?a)N0)Kd-A;OG0(G$T);thG5 z1EPWr1>$*RWDo)f3Dlv*-Th9W;w*&_J@;xV7-Df@IAjKjZ@d%#1TdV?ainPSv_}Bp zKqK6X%=_wcXB9ULD!XTXL-BxVZ$q4ztcQ4`A9(w6ys@*h`j)P=0Zk9gPaWlps(fid zNz2F@YqrUh)b5*faAV4tdvaaAj^|dZGn)q_#`-(9zB>90o`*kwumtZd8B&sy{vzsn z3v9N}p_=DwSGDGpaffgBSC49F&34QiGUdBdht|fp>dO*P+Q$ebMae~Zxx;SKs7o@F zbCWX4MUnwZW%=-!rlH=%+_iW3%N22Ur!B4~+qoaVhsXbN5B?fr*-nDc058EXqz0$w zR4^Am!#NE3tAFAI!5|e6>y7IG&X6ApBEkU0r}`no97G`JF@*BTs05IPAqKXD7lkhn zgA-Yc4;>I((7}&ToQW*%#Vts+IWvttj-zKsPU!+5~9-5y)ik3kj%=VuePf4 z{5F#>MQQQKba6#?m#2Gua?QNr%9+I~r8~7cqiCp-tEDPyr^}=%r3pzTiE`O=w^>lL zHLE?|V4cx0cH2?^(EmPsWOBd1s ze^8PIDN7r(s6YKZM;0!nZ?5+a%8eF!HS%axbTazI>#R(ZiCxheS7J}~gsjPlE`Opk z#*&uoH#*H_xsJ{OHbYs4%u#8LO;`DnELKfgRD6L`Cshv|-fB#0&PYj#kMm~4%#Aly zm1^8st@iX-hk53b~j~Y;{HsX&*m#b{>qbeVbX1P&&iq)7> zI`7zuBs?-bPM$2&#L41{I^tuK=!LrI6laW6t1<IBY)42rd2# z9rwKsZWLit!(X0(;T+a$xO9>=BxKPhYspE>Y?7Shnli3d9Qng_Wf?%EtZ-c+_%D2` z-}n1AI`kz9*irz*>d3dad?ieXyWzVx0-XAqCWF9swY?!AL2dsB5Z4h>}Zi$Ptz(3wCPy}j)LY2rFr&e)A%~3KHUm&Cf1N90;A(vv_QyWbX zE7}~4h5#bbg*LIrB9T!-Zi!na<4KDYwoC~(IHv9Ju@8^FKEz!Mx>$7q@ zJ7(6q+duv8*I#c!TaD4tMzhyT4++;Bos)1SnKng{lqZ$DOSnQxCb4+LY5_MtnvwKm zD@`V)%4B*n+`67sLl3=k^xZdx*=MXCUzoafNUE)FRZ?zC)6`~r;}b6&di}M|Q6GKr z^;c6)Pdxeg$%)i*fP@(Sshwf4oW2$Uf?nw00lmk6ffTh@>u_pxE*G8?t`qvi;Bpz@ zAMYJo&O6F_HKdh~Lp5qisCS;#$fO#zOs1il^m4gQCztC5O0h_(fExYBV=%bg27?Fx zs5NBqDXCcNYmf^hkS0MS5y%^STCtSkXBo6qL#!2;hQ%6-s^wV*TEf*H9=^>T<&#ZOaNMCm*sGbv&Ko}!h@v>Lfw8{F7f@6g5#?{LgM{)j&&pm3$BbE1;E z?%F=s(L6X>Yb&dyejZY9Gvrq}jpmB_IOr(_feltgpoF)w@DR#+;n52%83199#`t%@ zJMGeGoDQwdMe!rmYiGL*x~)%UCpE{yNe1TmBkG2D-#Q8cl=O8*VmK-`^C^*W0vRyG ztBK=&NPHnuybS+@LSKokQS-A%aU~A6aU>}CI zz+XsgB1fSUQUWVU>tXL=iwvEUXzFZL*}8;U!BzrV7U@b?kxDHTT2$%;3cuubsP#&r+nSI-QGv=#fj}NeR`Dbvub5#3u)a_LnfSD1os*i+ z6AFOSav3gH%?M}+{-p*!CemtUUKw8|66zV1!YC6eVGV~;YT*jGGLuZ@w#pO=h13#d z(a2pfI<8YKQA=e)iiv;V*qNzPkxmzo$zvQ*10B*>yOb}G(_Bg|k@JNL$}ZyT1Ol5F zNSjviOnjk6EE7r9B492?f!ZwPOK84Izz79$m`zsj)H+J8VWcLZ!y=Z64Hjg#K?+|H zUoDX6_(EP11AJVhqxlA!QZOR9P^pvY9N_pW;#);hgH)_avWXR9iAHKpvRL3fu8b># zq%I7&2r{y`HlI$+m1tdhkwff}OLJrzlUy35(8Y7PW<6ge5@|dRp(jxzQt>4!tv*p9 zk-(Nt&ESgV9;;L*6&M7@6nsG-73mXYDxO#`Q%P)g^pjGl#2m3hZ7p-94)dm}9&{zs zl`e}!Ds}21j|`obCdGRnKvuNiixUvNJk*t|PJDq^;%^_Ic531%q*ht*K3|T?6HrQ{ zHCn6KoU72?EtM%Pd}~a!JjScwWt5nFRh5HtS`kmkmw9x23NVRlf$ow+ z=Yl9B;E7=@y%OA()-$&A*=CD#-z ztRMICz3p7Fo-alMg)Ak>A(iX&ki^6TT`6Y(oP0NrZ{>5vBED1&Ux8q)GC3a%4hj<^ zMB)UkNI)qBe8|uetrRQaicl@)NkxWu z2}IH3!#YQ$R7mp-3TX_O50O$KOR_-57?oAZtq5x{#h=Q$PcG^M$m?on#hC`>aKT4C<)%`aB#c{wnv=6Yj+_ zq%g4q$rJt(?FL>G;)1XvyoYcaxCBR`fJ-0(vo{F84Kw}FlY|wKr-*9Vj}eiAL9K-? z+<-e7>98bHt6>=)`%&^zsEp8?TEbw6ARP^rfj`!)%dT;WTxZJ)>8d(C%l?5e!GT^! zl5bqS0!BEN`-NCm=ni`fd2GQ}0uj$iZNlGXYru{+>{lYC-jK8_lkW!-%@)aUkdID{6aGg@A9x3=LnbIDR(GVAhZx9HI zq5%(Wu{M>Nr;i04)twf-y!*r^3$0WrR5F2BBoQ(ek0(|xgY?KsnNTg1+7(K5l-4WP z7=&6?np7hLl#|(Y=`OBCnyKR}1==XP4!9Oy1BAlO&6E4RPF-4Yte7w3^ZtfIjFMY5 z0-1ozXH<3#UvJ8fc3H|y4xd!4vszsacZMxCMz0ikV#T^xvCO07DH$bS#1~8XD!xp^ zFLE>9-+S`|h`ie2mx zTGc`^k0&(fd>U7bJjyCoRt6MKMprTbvja7I4m1-Q$wPz|LOggjBS6S8v;{j6JIwRp zNq7JV0}3F;z-^WeLR&Hs0X5rEh3mXT9VQil8ic7FWEJqDAp{;)$U{U9g~AoM z8frBw@$}Y<D%fhL`a>nctK?(wz7C!YJsg4v`)yJ@JVJI?`2qV%h-DGr z0es+5s7X2xri?DijWyX^a976Qr&-_VoBfzunyc%oQ_5|&fb(~@Yy!FZv9 z*Sfn1X56^c+>IRksQvFCHpj9C#L$#qGwk)!Rk|NA$Ckgm{vX2B-EHm3Y3e2sl zw#wupF_;=He4w>dqb|(>5&Qorn?%y-G1ptc(&`MOu@CFO-QyYV=D| zveQs*rD7EzM@z&oZbKrmWLbP{l$*;}OCNAWSGF;lnZy9#_EUSrrBuenz3-E944&6c@BSvA|># zh+s74a}8pZz=S^$$dj~Eg@Bt#3y@fD((?s+iPCB^8zqovim#9v?5^B6i^OEox@{sJ z`0TrjO%fBOl8d>FNF@`I1ZqOP21GW6MnN+?rAX(J$~DOWHD3vBgm@qxMkKWu zvPZ&4|gm;}DsAozkS zokeJr^7s-M4qO6Std|=3%-=EFhinq1QKmr`>>8U$AQMaYFpf}i9#;xpDJe8p%9R_pLbF^QTk*Ajm`BJ{dqXO?esGUq7=hT^^AXA(ih7F}&<*+lr zUS)i~FiNRw4e*5w3{Nr(OqK8@R&-7-0-04H6bXeQO2~+%GI5;875rB3c8a+gu~Y-H zxqz=!YJoYc1PW@HTq2c=gpAN(Q$+$hbAC_tj!qqD2uU z;%mirr_-(A3e;k&#~_yIxQq;(+8vH4ze^)An*cM63L#f5GIALqPYMPbqey1~TP5En z7V?DxyI3D>5t*b)qd+WGCQEHrm6op+ia;ihjf*!%xs*}`7zoTB%4~v#geHM(&HG<< z@C_1`T_Hk}m{HM?QZXw&PNX%iy zUQQiD0#CpmrbC^u0Y7lqLISD)SoX-e2d5g6t3VKAxB(ZO9oYDOnm5r@2iPT#3ZHx~E5BD5? zbNcDs_}8Q8*$pQd@yGsbF1#4rOl6~_SZqg6SDjc#t^bpo?f)byzUy!&{$*gDSHZfh8ph#VZOIeFJub2ZoythWW|`%MiCng3=Dn`N&iG~Jdt@j4s*lrH{)OM zDE#xScYq7weMnKU?T*&gJGLEp12rMenl%s`<$cNH-Afv`Fp zR;vz2lKYsHZ9n3JCr;plKW@|Buz6HJe7t^l{WmQ+{$F>;up8Fxe@83VsU55qAhZJ9 zO&76o-jG&qRN-&K-7xM|z%ORQ1_*?_|HhPZ!$w%37f>nK&q{yXmcrbJ|HQDo7(amj zyssavcyCB6*K1xh2`L@$GYsJk;L>m-K6LyBD6|jgM)Wcoi441ULr|w}|A%(j#-l%A z$>>7#$G8Ok|ns-?ZxnNERsBa$9TbZCgrC zf+v>Xsi8xk!WZ$*|3m9!$=lDP{A0&Z{`u|6($0fH{N<)i_{-qIPH@(UEIKr>p~na> z12iKp1O(^2y0B5*8*U}wAZuiIJK!mX`2nK6;h$f0&ql2;e2zw6xh*^YV`RDKQ3&Hb zx86WLMsaJ;marRpnelDz=diVQN!PTyJtTBNfL;&QBF`RkV?-iO|D9MAY z2m#Q30^q(K(dj}iCD00(ANcDa1U?Al1y&6tT5ZTAO`c{~G_YzB6dh8CZiuO8#jzFE zr0T)D=4Xyrv0_B#d|aRI;R}pO`dr-Rn^VJ`qDly5+O@WVoZX|QAkTuwN2bVdeflK?TI2S(IDR`G=sqD-^O zG7teFZb$<~;2Y`@I*eniLkR0S64n$6wE5v*qU1smJUxhtticW-ujdmj79L`Hz*RAN zqh43wDcd~g_IHUUq8FM)5=BNvM()jbrFY~eB{kfE1ZVbkt^;1R?%@%G^BmdEy2jYi z8{R@S7gn^~d*p{M313(=GVqTbMtx?$A0^W~}tac-g9t`f??drctpmim)2W!9J0H$4AXLCWaq@8Apg)yGcZ zHTd@pRP3NUn=PR>1N&F~3pF0uiaeJOPE?4>pL?_Qseih;YPB;V(d8}>Kt>ReRi2$C zGe{T-|D*Httc-Yneruz|;ZmCY&hHDj@DKRvSq-SS6h~5oH zdiFQeNstwUBI!hlqR#831@Hu7@g5MKc6b6A(NGL)U+@C-y=;Gy-V7hXeUh+~6%80} z!U?bP-!IwSyr~(DuR?Of&#ZI zF~O-;bKU=Zs`bt1%0-Ha2QTAOTaVz!|F!D>2Qwl}B!tS)P2djo-!P*vOHvY%X`UtZ##({+gWz( z*h!qdCkYvlkOT-L5LO|Cy*HFm$|?m~ptQ7<77E1o_r2#z4uSrE|L6I>&yRfPx#ymH z&b!Wg-hrLijO~p8$C5>`y_+GD&a-f}Z!u(2kikD$^KVuL4o$K zB)cnM#|KAPnLdpcm*P?_zEfzXnZUOCqeK?dNZKNnQB#>F6El?xw!r6LDI=Z~pTJ6p zC$GRR@{J1*{D%X7|5wHX>ub_TW^A3sl^CGqV?P!a;}CB4)A+5^S8k%4>`xP-c`|2+%VWw=(W{+%0iW zAinU+U?fp}Z&amDP4NrOK+&z3knl@@QK6ar; z$oO|*>pjrNO^{BE4M{BVOAzD%vUvsZkHpE?+QU4&MxxhCqJk*Q%6Cy&7HuhsUui#A3e!B+_e*il*%OQziJvzZQ!?aTm{sPf&`)VxbC@z$}K?B>w5L zQwML?>73ZhN^9<0+ow--X39LNWm9{1`qfT>Hz}OcpkA|MQY$8(PSWX;(EpXSDyfm1 z5D)N^qEgB9U?IR{shz4gIynTH%fA2|NBPF>psdS>KqJw3uxM$)kAj~9ZG^CmK<7Yu zjxv6@M4S`u5U{L(1OeoL48Q_fIFKSbjPBKHoY~|Rds6f=2KN&GjDAwn#j+e zC?dAUZjB7x*54Lc(%!Z-($;_5#`n-4etzAnYlbi9lYhJA?Aa|>T=|!W*Sxy!nSvG3 zhl+|;6kw&KEemV$lHRkuZMUS8|EF`siq0!o`Ymm6fpV_4_Rqu*vNZ4eA9nl!+EQ?^ z?g7s?A|yCa8(5bW0(3*tRYG2+3JD2bDnzL?K~ro7`BDgW5dia2NU`cSONA1NU+AYw z(yUf5&@r0TOhzOL^%3fz7~4jlE=5^y;cCnn8a%L3ztF_!9~NHp1O~y30s4%%5sgBC zESF=8Hb(L>gPod%?{tQ^%8&88tbD5zTie016q~Tnt8A-W@1zw~m0}DsX#ZZK(y*3H zd^3ZNRmk6ir3q|cH~<>nHyf}@5LyDwX)H^j6@TVcZX*6eM*f~}4m916o95pbo_b-@ zV)*^~qt&wotd`vkZTst6=KHHwg)&xF_OwwR92}pWNQhs4|I(_XYcvg}T@MfTU))kb zrVLNryz5(s0o&ZkvX@)2tf!>qdGu^-ohzHI{3})~Q6(GkEXc>_g}{t zx~Y5YVt-57=7yThl|%c=mW@$gpV@Z(#sqf7wtEMbKDtZSY`Nvr*)?ySX=lysfAYp3 z|5V=IeQt2}acwE5c15UiLq#|Tf8U(Smh5;<$1#{c4a6I=G*8V+oeDF>@}0rS5Fg82 z0VMa+R5OW2A+4yrj}nii8U9EmQJ)ZPfYEtPv3KX%mDe-7kGFQ-JX|vqj_jz`Q{460 zk>;V+-f?PrTVnsktrhi$d*rL{>1)2>jmeCl_{8{zW27%Vr+a#C?mMwspFfZREh%4T zJQ1%CYM+`E2K_YCU(6{9lD)4%(AKZg8G66w&GZ{!wa#bxm`-_=vk6e}%SJ60Lute`o+ireXd|w>Gr9t0BN=sdl&VPg(pom3 z%jr4Ox8fmdo$K@c(=Sibo5zl>xk69Qb>n2!&Ov-+oLZaL+ohDPM4=R7Rx-WNWF{5-<;pz$L?SZarBQ2%e6)b8lDjFoaN)7#I zyEl!prj+cU8vG<6wORkoh&pO5lJP1%(i`xifB4RF+vpYS4%N5@D|yX<}v@ z8|nY;SbuH#Yv@6YKm)J)nP?DHoFv|N^LWY-4&>ygwtB3fetB2QIy?Twr z?`a(vWw^TBTR+@Xy|2T5|47MHxMF>!kKNl+-S~^%c7tPi1f0ny!Mli%9RJtew)!D> zlhrTvOX(2lNeaQj{_6_$zpngu8S{Ua`Tsi>{_It&vi+e@Y>#LB>H_K5uP$IMzrG;) z)rB9m{~w3TIG8tN9D-lopm7M(!hXm&JRIGv_{ABX^^4Pg{^AU~<^Mi}WYFKf4?*Kj z!s2Tt1e8HT=Z}VD@e2t+k8;A4Un7m4js!h$UWZ6WdcU5mCt?hOV0V?e67tEfFoCk5 zH`6_z7##6S7XEhK>AR0J`c8N86g=D652jbYeq#%J-GSen#5u10Mwb-7NrpiN`F}Oy z->=4UuDnaVG&Or-V*+=>ds_w`*k)QX-%>Uosa#)n$BC8r`#$486Ln&+8r!;d^7;fo z0Md#(WAHD$5#YbaYS3x$bj==Y+k^OTvF$yrL*ryecM1S@)!q)<<%yb^A_B0x+v*~5 zEbvE-D#?mLMb-<8&}$(k!iBh};$DjTIPR}RFF~ppFELAjCCEj~>#LI;$P7TEf&L2w ziACWTDI$@eM?|hf(lG@D1yGtvq_9wpBmuOIZr}tQw+S&B?n7BA$QXV<4czZw>J)tl zDM1PKGG+i%@R(#tk4lYFP)0=WLgrjF<03YGg3m#1D9{vAOk;#yG&+gCg^peYFGk|I zUjlYZ)OwZAm{_v)n}?Ph!~cET^ar|qN`Rao!G06Cw4=E{SCALVw*p|LBuWSi(;l6>w1_rg7 z%_=^=EpufPe~7)~v-QvA?b@d7cn2Gq4 zDo+1!hi59EcKl!QYnI5loTOl}Sh)AcznhkRHACL=7CDXl;!Bi@Fuj3{HI|SUu(w@% zF|3e8=95VI6fA3KOIgG2T4#B8T4is0*i&GZ@x*A+mH8>d{Rt10kr7L{JElqHFr&KyPkg^dbX?_^r)@C(?U zP_t}$idhqVc&>QXT<$-t^tM<4_Dw^LuojP+5gU6tOb>rI* zUEoJxb}nFcD9%|jWOo<>IQ{QwJB0OwIdU{O03G6`A~Lxc{|SYJBKQ^&bc{{_mz026 z0u%u_3GtSQEgGA)P@-ZL@mTZ$fL#Q@*qOq9PoO~g7SLK%L1L}5hQUhUA`(D(7z`647l6Bfgn*WS z?tq;H8G%~}FOlxVVzpjFT%bavX!oP1ex^UsSvHb?VTjNckRAvDq5+7A0KyaAd+3}7 z5xYn~9%>tEFsxbNtxkYUixdU0b%W`YxjEUz4EQJd4x=NF^!t>kEdS|7k!KUYxD?((O zug;MO`NbKO!*RIUY)X8)kLRFcDId%GW~^2MmgjI z6p8Zunc+ZZW@b-DZi+6M$^7v#LrqOXn`!CNKCG>~)|yeOSLm#1j?}!hEC^{ZH(6tL zGMEbwG#+ZNo3EJbZJcck1acVh*(|k8ZLRg^g;U!yhPGF2tCxrk*9|xCtlqYyd7>ng z7BPSti4|fniqf+xXIi?}mCe_59%@)}@96w(p21ssA$aX^kVAHZ9AXBoQY*x0yoU&0 z3&0NS%|%%ZKdT|bN}dLVjmBW9ISy9I(?FIdOEpxuM2ngIqik0QO^DeUn4iQ^D8OT3 zat%{#8ek8?plkkPPz!T$Kw4?+=l7=(7r;vt)rNvR!gLYM8(^ss3W^z}p<2$;%Gwv+ zc)Tn;w{~_{oz*kiT)Tbap1URvW3umGK2&{p!SXsjgdfGfx?$&7<%<5%UERGOy!X`6 zrd2O*8oH@H^U&tjmtO0eK9ZSLoo6j*fi;OF2*Ue&lipsmFYwB+T?T9Wi$~p zza&ZL=F3z9sWVrXl;xv~c$d%B*h3YEN3(~uxm@et>ziu7_;I9q>-2PfiYY56(!71$ zo{pYxzG_@KsNx3(ov!-kp-}Ml2Tm_#_LaFNBIB1n{GfTo&g%4>f#xN9@b7njkL6;^ z9y?mpu8 z_06^9pW4@^DoAPGcUx^_vdAO_Xt zxThidR9r6PxCa9XB8WJ_eTbM46gr_TMoW)EM53b92oC*d6oIzEZQyr6tD@o$LFIsE z0uT{f5V8;fhM|Wozyjo3Nr8Y80zov|4%q*KmIn+B0d|0ZO05Lxh9Xg|Hlm?G{m4Wu zPz7j^pjHH2G!mIcf|#FvPy@xDg{Pv#8a*N*C2oCbZ1O$Kgf%~W;rq5=!Oa-!*aUv% zgM#_2vVEnyfB45ny|ZG8Ei=iI)5~=61bT}!xm>LwISpc)kjK&D{PBt^p2?#RR28u7 zzrB#=cS!m&4W&NP2lxSeUDm{&{_UT?H(CC|_S^9%@o!&P-g1WgE=S8_K(3|zc7su& z#k&jvBdEwF_6&u1G;-|zslo%bIXjD9`l@fkANH(x;mKDfd#@u6C=Kx`YD^q^bm10v zhD<883z&TT3v3@ozvm?Hmb4@roB_G@4 zwLfAFYbdm&)#2%ka6je1l)c=UzYhhbfYbK__RC5*RyOYQCR`)$s+s6l)?`z_*(+ ze>%#|9&7atr&vl1y|>;yy7i68W&gxi;D7iV{w}#Eftnr9xfpvKyE~YukaF2VrP2Z} z5JKShV&L}@BEM{HTpMIKnuJBITL28-ff$AVj!p#tBBC+rK?p+ppF^@@FxUViv7Z-{ zAogpuz-U7}9fFAiBt(A*mah4sn3^$$O9aK&BEwX4ZJw|Uhtof zHZ_V+w3pI)>_6RITYneke{tDECi1%yWy1~ce711$W_w8OWJ>KuT`I4n=?X{bPWBny zW@=lY+Q7CclCpFRt;m_Hu92qem5z8>qCuC+)nyy5q>?FIm0C~wSZz>F)$lLu3( zx>Y>`D(NIXyCB1Ev+xZ9b&@Lq%=i6wBZ}eH#bGu< zSf|DTHS;6J7f0CGfjL(!02xSj1b~8ljUOR_--;4BNT^Y9H7fN|qqbmll&}FL(G+;p z3Xlor)!*ZN_*-W&`hRwR|3G5m{r}nhAB=t$e+%#b&%K!AVC|E=p85)_wIY(z`$XMA z%z@Kunr=Coe(OUilzU88t-9WC(ql`C%Qvsf8DCwPx6plRzV?_u?O5GBtOeS+x#n*Zl%IMtR;Q$_&VcOjaW_JLZHN9s@x}Tf zwschOMNobCJV+=S2Pg`8Dq!*iJBgG>ii50YNOVDXA4PEj0gI zZ(H+^$;g*ryIpsoTCYn?vwJ?}G1%U%hl&JxhQKlOn^Fks7xrs9Hs8Cl^kAt-bOh7C z+|{yf)x|4YDRlf@JRSesF#6i_eQ!KKrIj~Q$abMTsV1Fc;TnD#+j#rZ_x`q(vG+SH z?-B{yhyUfp>ksGUoc(e}uIqoXckQM5I*~+9l`&1Cie1a~jCj6T;=gIk5to2BL@2C&rv;BwRppEck@Rv`na-i%kF^0yzUh zh!bKdRF7(h_|7pA2dRHhPr%wG@pMnQ?$UNuvt_b9H&n8wQ0CG?I_|V^ zYqPX4GqXt2+*X{LOj5gLqer~?O$y!z3np5AS=}yU=F&RtD{To^~W;#mp3oN#*tg5Wwy2xa6Vx5uKfKyZwuU4<{ zkLIvs3AynKl8&Q@&rOiA+Sg!R<(|4kZ9{+?nXs!}La9|wrhrSc$8I+3?GBB}YdW9xUukx!EdY=dk0T+XU zIYD#O0TOnUegVuv2p&Y%qjN3*a74X;;2`Qvqr=<_Q6n_hLNqHi6=^8|Y*F|^IvIeE zE``v`2=h<``$aSW6rrHl8B+6AyjX;5C@Do?Pk^_CnlwJlWa$e{+rGG--`su65bq9* zab)|q_u2QKoP2lRw{%+5L>NN;y`~PxhatJEcFgsfFiG`$7Bh=B{eGP<{KT?tA8l?s ziT`KeX!Ul-@34S-G`;y?b9lN+f9#!^kw^ActCiWtL|WB!QO7C#d~UU_s#x@HeEiJs zwoV>gc4iTbNjbnhl*LlV+plZo5(J2J=-55xhw}YBFu0Kl1qN1SRj7SX#aMCE(NRg7G z!Wxx`6$)B-bF{A!sRML}c$Bc`fI%AZ9HK!m4pG~gD8=KEtWp6C6B$O4cp|n3dp9(y zi1S#@Xa{>?OsNcGL|mXk%}9!c7s1eBKwF@3QY2a;CMN}WfjylP=$RnX@OQMv_2c** z+#na`hdbSC*N=a^@{eRsvo_H>HcfIhXcH|Xcs*85dXswR8Ezsch_zI& zOX}UwTwp3)U%}?3rmoMZ-`|;l9i>$7ZDwO#UX#j&UBbUK7#;e}VF6ptm9uLkOo>p= zV^nGHTqAO*@OQI!7j6Hbh$@qepYJd#4fniD!tX9DA8h@O^!7bX^>1G}n7}F&(&?pi z+UF%)b{>aE#nS?{Su6Jq4L`BGYWiv1fT>wCtan*ps%fOuXI>>HuAH->XJ?^u( ze_}pJ_1J(d#nxf_u^X{Fu_v&1u+O5HZb4p0XsiI45f1*GXbV9KNFGu4L-_ZC&<7;J z3J`;W@%a&bfE_X5=yBpAfB^ykSXV&zuAYHaWb8P)189W_%>U^kninD9LCf(d5DSU# z1K5P70pkX<;$PJItFi#kQG|&CCD1B9fjVeKh48FK^KCvvb_FYQ)7YH_^&tv4myQmM%s}&5 z64v}78Z9MM+jIyMJghHoWkH}5p14rLqth5nJoD~(w=7gPlJ zBYE4)ta&T_<6D*50*&fUY(R$EF4H-at{er|38@%Y7aKU-A5SvPvod z&+d2`M}aRW4bW!z!Tj(yZzepC)&BnR*NXIS_T&)!Q)RtUh;m!H5P?l zSi&B9Yo`CJ-H+oE{3)93nx_0C`ppWyG};9V;XI9yqf{~CKX98&fx98={b+`5N z25)cp=%>pDl~ON6%aJ1T`}}md$?Z1D(?1}QI09{Ev=*rvANy6U|GN4uVBqy4Ow>An zNCx7y z*xUeRnay(w%kY;&*<6M@?msPd2 z)D=e~X@O5MVF=O)gPd_tq3ydm5YSZ`l!lOkIum(|dQ;-~zG$ERY+VO&)zLyXDoi9@ z0$m!)UWjzBKC2hO2aF%0w?P;*m>iSPasZkt!`z7iG#q(!A^sEL4*$HYu#$i{UIxw#5zI2z& zBU7X*s*acAyF(e4U3c7hu%#sH0RGQ6*EWql^7RH|-R2Y5tyFNNw7(YSHU^#fc4s&) z{;Jj|A1obO!O~$hNDq(4y&U&08Xv14x(iqsO2G;8J<)|yg3|)RfIbLydbC%i#0Y@G z0$s970V&W#R7gw`2wXxbucM+R3`CE5(~@s38>`P`EF;hVd#i|e!g zIN#Sv!kSMFjg1Z8*o=`n`!;=?wf-X3dCPEpIPbiyv19zX+}!8d!5&-+|4+uELCU<( zO=lG<(|1%<>_~^GwA0V}>g*9a{@(P{8JW*aB|1(26VA(Ca_RLFgiEK-sF+#^)k4KpEp0&mUm~{ z!AaTtqsxI6C2m@?!@*H=+Hadx-g~cd_O^C7aqL*LDG_cie{^0pd9dxyytc>81I^6? zsnhtV!d z_5q&Y8CWYMDk0vUhU{+8s|cqRw2mIF1nhHz6evaj74rRora}Xxl zPp>PV(F)uaed?&a?dI8VYIkmOK(91wE$OsK#+E~6V6dV}o6Rs(I}Gj;qi02a$ANxt z{poSz*rEQKrW|1~2hssqYy13M>$0Jg)l*L0vb?f(3binS{pN3qx@)_4E-{Wjm?C$H z4F&d$uv^0RM0_WQDpSJM*yjcPhU!f_+g1c;iya*vt94D5r&{}`{@)L}TKwdL%8XDE zmt9xs%{D4@s9)C#~lyVa|z(f+`xN)z5 z)X)l0dn2U1c|Pt7h{P;{3>O(#309A-!RE1>unQPkibT?Q42%)ciyp_e2viB`gvcAv zs3<7Kh#mqfZ}d0@al}b#RD&F&kWnoO4WJ28JGclWQ;NWt*dVnG0(Ai8=m8Dj7qudK zl}6JODgZwqLG(cC=R+f)1Zo+LhIGlGc%h@n=F!OPu!rEH2*&_Z2vh;}rzMpGl1>yA z5z!~Gg?Po)bximc@Bt;50CCrErAGNfv^9u?TS5Dc<}R?D4!58g*FH?BG-K@|IuG&c zD7MBB_1eT>dZ&FP$} z4qJzv&DgOtxb8}CO$M9INzy8HZCS@2oe$4?XS&?XHyuRC!Tbe^+Cg>m+rH{k5W@d|JwUG=KC%;rlrE?Yrbx!d8aX4tVf3Oyl z$#nh0)@lJppLJIytHpF7J(!Juo|1QcwL5d9V}UKU3wXZ9g35-;20hD*kHUlCH00FU z3dGLbyjF!+u4&7)qm$e=g;=3($6p|dI2@Fvf>3F0V%M?8@|_co(Hf$59m_{3m7#udZ&5VnLT6(XH-`@YV13X`vRT}Y-(1T6E;YdW!04O5nt8@ z)AA9vV}mCrB6EbD0v?xBQOy^U+esW=xJtq1x*~r2>T-LNjD#C%~WohNh-`QwN1k5`sfLgq>qJ=yfIuDQeFlXfk&lZ+h2cqLaY@)eFXD=W%Imua|}O%83ukQSr_U@*{tIDe#d#dBz2 z50hzK`lGr^U0$Y?h%qd9@tCt>jm9l6t|R@4!|OP>rKGv;=-EEC75k1D3K+{;v)0+3 z3tB{R(45-_CvAC#06NKU#pnEllhM5ZF6``k_U@L2%cf0+IdCao<6t z8wqG90fm9LB0TjICdbMf`){lxQt<%9?U#0?r7-A1Wz zl#*W45IQ`Mh#}(g@U(^mv=V&+Y7c55Qgss&0lXR&lKlEURh*UUHV4;K3x#Bb+8OcF zjmDJfWJiO)!tOgzM&^sECxhD7#)cMcaI#ti`5+JY>=o(t4p+6;Xr%iiPPKw86jrYZ znmi%=>$Ue;CRR+}XPa1=k!_tUOV2j1`M$xE(vkMg?s@-(zCClPclNDosHn&sbyOX8 zWP8=2u55@Z8}H6jIeZB&XMVZU-H>X}kvW(7*-8$L&SW}EOJVgm-Q&ryNu6aSNf6eI z##XWYOOs?d_SAZhvpnCK#P&H5LVj<$!q=DsQQ;Iml{V~TBqwK-q<*vZ)#;g+*RFke zX8P5&^}VJX_mhAh zHn5?p!w4+{zz~{?B5@P!#|Taoow}mn6L5s4QwV<1oHok6=_yEljZIhqCE%HuR+fN2 zLcvNvWK^>sy+?=(vD%RoOmH>=PNR$(sw07lF)EoXa=u^O2N?fZmw^BuiNDd8d0`4o zR7eD|B|ZlDKeQqC0Ku_|7F>Pc=N1t2LkOWupm(fZqS|OP(U(L&5@8zB`l2glB#IE- zg8B~x5!4HaG7!Si)sI{JHn4yBI=eV`WYg9)wz~X@y~l2=Jh!7E-Rs(XWN&JQeRjvR zSx~)hXV!@Z62@XsC?HX{KP}N3hUnTlgB5!=fx`sdW1Tykz}IN?Iw8|xp~M^T zpim@INdxNHgjXnw2LYt^XJKt2!(CE6kqKQ)q+DTNb=E{@khI8d|G>_~S& za6+k#!{KrD4u#U`OyUU=%?Wg!6F;Bk)(_824+J|3j_sc;YEUoVvf1m%N^4q@R&4KX z4)C?Z6J64EG;x~PF_I|OTauQh>r(!d-M41a&GR=7^;be%XmTl-w%EAwG)e+bssVY^ z=oAZ*t6b)mJp4`$i=WHW$|2;RNG?&y6-lC`OkaTy(miRj++4QTFIK3Ope*XMrSL=+ zQGtl1m8z`}+fr>3@F29JEuAFr=J|{!fhNn%VmUGla%LPkg=PjqBvnH9NS21lmQi3D7Ksh?~&NQDB3$eAP8CS?RV%Bl-- zrq8S@N)Zc;PELw|Cw^Zduj4aV@k|j%DCUZVJQr7COV?_IVxh>L$VsS8RDq%|Jx(6? zHcSEP0LfQ?T|G*%ybqEr-vHCti(vTuLfjiL6==qWAxhCYY&%%L9l>tE&cPbXeb~d% zX+ccRM!bc<6JSgL%Zu9>SjS{-;5-P(V_O0rfKd{siuv+I&lTx7!*$?jd1ciydE0&s>SgVN6 z6=K(|Na-n+LI7#R8WE?A&Qh*1o`{mMYqp3-BOH!SSrFRIcej?U($b_0TD4QXysrUu^h#KU5@@VyRL@ZOGtr zE0w^E-)e?ESmO)PjzUSU5GE$(*U?!tNmFviq}ZFiysmC}wpTpak=!H!S+FiYF;Q5N zTyQXuaiG9m4y6lfA-uDs+4alPu4V~bt}TGl-(OiTv8~0nEMZp5ftpmPNOb9ksPPB9ZNNb=$F5;O*(q3Vi%mP5b5! zt_E69&c|mY*hcuCD<3mSTKGaN3qJO3_-F}yyg-6&LVdCDHgtK8j=Zs7?D4Pc>s#sf5TyeG8ndn3ZWqN8*m2r*+8`0ngG}w0#5CZgb68*--gHwwKH}3o;I35#tu9AjpNPH!7->ARvIdNH2lr4@g9h z5+)#fu?EEm5ZpjXGKuxzMcNxBDvP8=YVk$sGSE_jP!Vm0*CEB7gfMpi%>|-w#0OXr zae`yi81yMfMZMTwDVUBCtIJaCYjZ<|Cs3u+3JW*3%pc2hI@5Bf;pMrNqXvbClUdCb zt*VsU`O22$@?MR(IUiE((AVo!w9-nM*zUF3!=iw_D1s7x^mS+it?kT-zW7KJXc+kd ztn&qI{iBhw_B2OU3E%gq-$9d%ZpX?D~tap!D=vyg86zq0zd_NmzPk1_gZ28EhIhSOH;VbQLbP zvn<1)%FMPj9#~elGD~huu1(RWc(LE4`njDW2|7i2C7a5mtn9@wZzx5hWHuB)4h-6| zJ!A|&@2+StyIodGRa@HFSD*DAd}7*ex7jl~(n~86+qI6FirQ{QydiP0EYIaCt6Gop z&I^+TCUcoZZemCBjM=i(6jzGZtXu{v`tAV+heoL_w|E9xTsmrFjl;!ps}(*emUQPg znF@6Ri&@lJp43@azLb^ju=TZ$t=XO_^3i1@7NuM#b^F+?>f>#e z?XT>{4<)Ti&GV?t(w6lJ;AodM6cUQFdNRNghDi;tW}8YhRdsxSUyz$nn&s%(aB*$N zYj5^?`&x4RGCt4iGm>21iFAvT)Yxh_(Mn1jo{CP6oK0rQ#HlVB$J`f5RBr5LDp+x% zxH-V5^MFq&;3vHv(rllPyEpD(uw#4;0_&qBwBN-2fKef4sRV2q%@~oM$VG*0h0(bK zV3!nT4Fqr_9EdGD64E$gjEj=81~F+kLHGpVOo0j@pCRBAJPfQ-Ab@Zy#MB)S1L0T{ zWn&l>wdO(UbF&q!d5M=r_2qOp1r;Gh9J5J+BFG#G6$S1Kh=C9vI5bSwfyshB0zxU& zPE;OoXrc&|0NW3u1iEsyBtl*&3rTF#z*J0nRT}`xM@X(~HdxUdKzj9A%4fAlcdlFB zRi#Z#>ZtaFvUmLU#>}FWvV4np`SFHT_YYajuDtAWe_k%5ETob%mMRPEo)YXqKd7vZd3@*5a2{`mqY5G4HY3V6e727{t#H-Tl$mpFW&XRo5T% z8jQ}Vw|AT#f8&I)d_355`v~M8F7URs8}p6jZ7nvptiZTsdvbO%PmnuR)plyowQ}>` zgC!@{Ke3ENhM?^AJ>IIU_weuWfB$hi_5`zjd(PC?kEgho{9#Y;a<4nbn>_LH8cs); zt>UN;s?yK&&11B`JTS!P$b0rZ{`Y;ITmG~clmFDMpT7C&H-_;GS4-~p%=ywh>wH)N z3G3{~NF4*OmcpOIlw7|wS!2c zcpoV6UyOSn5bS%54wAVQQvCtR2D%PO1~H)DKQpc<768O9PRfa;ek^J#<(HrcvvlN0 zNitc1;tL?Aq$y_OO`}+Kev2L{r~F6)C-8y5QqXe~OHwc!hKne$519t_6Zio@4RR?| zC6R(@H`2OC@qlpFgv+4Kj%mCAYlt@ij#0?)g0ySjK!%$TKpJ5nM8E~(e6S)1J_J_e z;3pC@T7Wmen_yi$fmOd}dVD-Pyl#DYX6}mBC53bAciey#Yg{2?B2{1(>MG4NW0}^P ziyv-XEhmdO;9R$~UM7xLV%VGbOSec>5X1LYdsw*>$M09}#7Gp?_4s>p>oN7|)0k%K zHvFR#7zsjS<8xmRyxyQ=b9AY*gJ9IcD{aWe+sTahVg{4qTb=A!KIrAh$utPGNQN~l z$cIIzGnhMeO-*mxHaUIb{u{{l>EBf!yJ_l!nj3EV?bFN-jCXYKx8uY3_phkAbQ;Gu zk;@f`xM_VSylIxZvGkX9RiXRvOYc31$j(&1WFfZ-M?+)$y;~i5)SW3^a8gpn<0c1rcmypRKQhwz3>v;;z>SxO& zauyl?%=#vl^-SKuZtH9K(=Tt{8(g;JHca@ib#(YV{`IAW)}yEPA2@W~iNlTW{BC5) zJAY14>k_15A%_dO6R@tKO?|1%#PZfWrMgs|Oq!)|IJzQ(I7tDy0c3WeCR?e+kB(w- z+h@O7KJwlE&0o`QdG`0W-u%q(7oMM9Il69QwDDN_p>qxWx801zaUo{|T`3hp$|VtI zqd7jp>K>ye{2jmX@rD~P#lxf<@IOBc#{Ue4Dk0G2h^Hke#r8VCDvo?rshbZmbI!-2 z<$$Rk0g8(gtrTyR!^9Ykln}WPZH@_YKQHkhD|S+J(NhY5itONHQ$x_n#$+SNpp**i z2=OCeM|6~BCCZq@V&m0AFjHEb5K16&0^(c53^2t{9FVsT?Z%oW=0}!n3QvXO>11Z{ zaCUI2SEcG*o1Hye%p@}yC6nR#rK20io3Y(P?KiIyi&vc^Q8%ye8ys60>^;@d)N#5e zKLXKh=+xTfUAHd%@WY{7y1Pq7HmR%DADpgfs+kV@Yh4nnq@<_&*1-=yTynl^tOjP! z6mn$Co*^2Q#NXN0dC-`A|48|CIM@>?n5w9lDhTuh!_(y>_a_?=wKpHV2kSAHtQKAZn^_wG;UTZ*_wEjCb=JCxN_v!%9jkOG;)$o}4(-ZNca ze9?6V4*cLLNT&=|)^4e3${NZo8-UOs+@cm3yE;(FzYW4e1H`EM9v0AnR3Hh!3d3hb z3wAI=mim!l1wlllh`GZ*aS;UaC|QA(FEp%ZX&e|a9TH|6jlg$-+Zv;0o1kw?g`q%e zeO_-$ij?5>h^%0Xk=;NHCUkIg3~Z0l5lWFoNBT^lRzOv~AZ5gK@^EH`CJ^E=jc$b( z65_MP3La-xptQsl7-85W0*J1lf2aUJ4eUC=tpTY{$fqD{M8~D$UDVgg2D7(WgU0-W zTivXVd^SVKcAM#bV~V2AX0MZ{82xm!8xopw@;g|bEr&pUv~9~CEPIX8ef&~~oJ4AV zC7cj`1yg3z8Fc-c;N6*-cbN*bc*vlZaa>~T3!y+D#J&)_I5L$H4`~ZbcV%YYojs|C z;`k}YSiejn?;B5~lC?f%V188{6aT(yYhYEN%udfex0B^;%*+m0Fw%ffkt@qkDg*Ld zg>V3HB#@oi=w$6Um&dS`LGi6s`1j1Z)f)rKR1KM`QYNz9WsSB@??ACRbm~ljF-_TJ zPWSX@1gA7|Pu09p?;n)O2K{>De3eJ8nF?m~d(zEa$~0ranNuNi@qo9})>!6dCo0o| z!8H6CCr2Ha=>3wxFd0Z#L}BBKR6Kk?Su@+&IeX<3Y&j2-2HGH94as0)Fuv@a2&g$u z>;z^nu)`1IB@3x!nawGjR`v#rxd(QnCFEBRYO4w?eUA?COuR_LKBup)SFP@?^Evl5 zMBviEqkWcwD(zr(enQ%g1G&aPuX0-Gw8?FMu1x{1PEFMUIy2LebMV6 z?tUKkEi5KUF%vQd0iaz}A}^|ZVIGG-jnE;3tc!ppI@tqAjlm887qZPow8t+&z=HPZ z0LTsKn{?#p1P?nz2=`qCivXTT3y(Z-1jxD<3Bz>si^G8CMW?zylPIYamYG2= z1!Myt1ssF65h808^rJyl5a<$ZlLBFsiUd-j3$#ocvJ{xG)w=i?@kv%6;ZsgPzEmPX zayL|o0x*DS{p*MCDd`L=ls2Eul^m3an-}g_@xb%1@T`HTasMtLkV%Cu9{<^-@nq|A@hm~IZH9EypZ4qV2<5g85Q+;Ep zlqJ;&IhnI`(WrnO0oq`+6#M<-kZgiIj>Lnvpp))sR z;%`a=9(O@T>SUH$-+G{W_Kl-;`0tY(HVI$iP>aeUg>0T%p>Jv_6>#J{QenYMU8z<4 z2sf|Fpc|Q6>sS#y&tsqA zr{^i`r2fugP8O%Qdua;(8c)dJtIo~TY$$KJ{;6SYpj4%*JG>%qBGNJ?hIE?eE&0W) z_z;;AN{*wDx?#cTIlvdE}68ob>!^Zo#9`*%H=G(tE+YUCTxD{?Xw*ynq*S?gH1bsH?`!_73+?_>{;^U z(WbfCdre`BO7{Kb+HMuoR-Lz(#jJXD)nZ2b;#0mpvh2S0e_o3V4{D9PUJ(7iE{8ITmp*yEf8!1LeZPx z`%w;-XdVghsy3JqCxu=FOona*(m)6$NR&ZS>QsXE0P2E0?^UA{R76P7pT&MA1fxZn z2l^H1(SN2YFfS(N>M$tqB;1SLLL)$pgBT0V&mICQ+4lU)u+AVl`6gb3-|_>FLsS$- zJf#ByowIqow_bShO~?it&!TpK12da1#PKV8#!TYj|-qz~M+9`Jv2*Q9uA-3#}mm^>wJvp0+tEG^2N ztQaZEn=Az%+eM$`RPa%|G44(T_0eoO1l%KPimON!0@BRPQvyHN=ad4;TK*1L}dX0z=Q!|R&))LKqVxo zpdZLS2v$(_1fWnwU*f~~OBbf!#@Gil*Q5(PEk&FD@$k}9pxIgV_S=vfNp))J!++l# z>~#y$Co>LW?6;>c;4k6BS565{0(}ZUL89WybSdt5F}a-~X4UiulVNqfC@E>ONu3pT zr`S>&QrYoZzFk)7a_6O4v+_GjWSJ^sQIaI1p~lOQFlD~5+SQ~{#_nr2$uuhQ^Lu~7!VjLrR3FX>)pb(g_%lE4JdeNo$=uv0nC<+|pPm^PN$S+XxexKr zPCke~_|slev0j~arYfyX;}Z)+!?`8<3)y_W6w+vuIO+M>ws>iZm6IS<3wUiCi`fz` z^K!+D>2H%=)q8EKoN#U4rz#q zqUgwCCDFOp=FS`NZ+~djIt&JXzR{L$GxJ3`lEku!o`IY+)1G!qz7!_i8ER2RnxGFz*mD>i z3+3Q&MZXpIJ3_KzKuCEL7Jz=_6Mcdp6R;&pXQWiRRZNbu4?+bPvsxuIA<$vS z;~DkowfA5k&>e`wh~iiLZ+D}2(94L@*VL-}uu_L`7tY`Y8ve!W zAcXzjUj-$jj~K!ID%$e@%LCCcd8l`ygoAj3v_oqNF3EEgs=Q`vW|2mYne;z&L+IMN zGFxiq%G&BR@$||BcKHUZp=Lwb>TYqUej-voE-nYBPy8p*QYML9y`ele%VSHPh}5oB zmD(#dT=}YUV@1Wr%Bl?&6&tE*SFWtBS+$B32bETA_~k|HLiNV7rnHvS)RwdqhdWeQ zwqar4Ea|(_8GBe&@2g#1oTF|WD&Mg1(vf}d{huoRK{+ z6&33j-+idVnm!)!_v$JV{~yY}0z9fKZ8&EnGntILyJjpi8OcN^$;90a2?PQJ2tk6o zdx7F@p_Ed*)Q}1l=u)U`jVfE{LfhST+pg40=I;NVI|-%x?e{&;50iW6+PQb`d0p?R ztzBB>p>9I@z`bR)3(I8E$^3>=S5I2cl$N&#KgJKZ&R(S%omn?~a;MY=eXg@~b;~LT zE0@=e->GQg_Z2qHn9=07*|SUF(a{@Qy?f$*xT<`2%V!V5l!A=@eOth^+KL@*A)O4t1u%B^+qD9EMOzOGNC1 zgFu1+voL~SSWl?Zpw~z+j6!U=NE9B<7fdFVk)b6VO$Z?H1q%m>7YJUr^;s7f|KT>o@&MoO%8@a^70H z=u_g|Q>TclpDtc@3pr0jicN<0hZl>5oSfD3_I|QbV&w5O3-;9pV}rlWPY&6W&RW|%m-X%JPOe;Va}vuf2h z#Kou26Q>6^wZN})9Y2h;@6DO>9&z*VapLN&W%MHsz0^#<1?<+w;aJQrxr!||Nxl`? z_4eCKKK%tc-MB6rEzmAq%i;0m#&oFLAGQ_8BsQ_wE)BHGSQa5?>=I(0xLhW0QK*YN z7LQYxR_M;1n(uJhjIJEJz9pI_(PeU6ku0yZN^Y#pF?6S8c4S)0G-+P5G{B!Hn`Se2 z*+V@RMRtfM1M^sZUPXr3q?A^b@R>5BK;zd-Qk8B^yWTZvyv;IUjM^Cv+TK~TxzjUg zg`}oIk)~G2ZDMY+P^e)SzJH7O_u!wFsysGLNU87X(b$VD&T(m$bhl1d6w^V#s(>wL zrD*vov%`^7kf9E`?FHF7ce^i? z2IaxPkYG*%5CwG}0pvmna|=KqXhInDK%mAJg5gcPCm}hI@Cn=y5GNto4eusV60XLo z6g9}eN&u)=&}S!%5+bLCOe7Qno1{qiNd|qANJdE_5j}x`fTY+uhi`5Do|r}4+|#mS zMDjP%z8{F`@fQS+pfSx$f5}y@0~b#*TawCO6Di}5<~emEIz$rUgiu>+Rpy?TsB>&t zWsNHqaMwcxa6#=0)M`V9TSH$Tf5>1-$vWeq;0<(Eb9(D22n{#uM^kqpV?p7 zGYL6BpXH!0&Q)B9|MPjhS7nH4DbuA|2HgOWAky#lf}F7M&yPYuEmrm5SIZWjCf@jb z@hqcP%ScgknUVrGM-Zl>F~yqJ0;|Lz4EI*isOxkhbAiTDk7!!4&Y={!^~4&N)=-db zFnZ!#=y>dJG$^Cv_Rr57m|tiJ%-!%XD)|@X-PRBPwd`NSL+1yMpvcEhq1ejE9O6$$ zi0j1js05|EK_okfZWTMc#U`nam=l_wo8FsUSa3Xvl@tfT&`D}-8c=?-ha5c9LGW1( z1Q@!53Vzev_(`<8Lz!SM!$M042pSl3laU^42o$qHPa}1P-_7(eVFtSNyZttjSXxOB zBqoN~-8l>^zj-z3V&Wp87EViHA;ajgaB`0a}X~7g5%YIdg6hmo7ptlDQxJq7;3&l5+!{Dye&C3IFP(&Q?{np|pHp5LFF z>-Xmo0=*2{ok?}slnpGlEVXBTyIYl4#hl2WANi$w47nO(qgS&LB9mNb4KPh%h4K zM3L|v;SeNvm_ZQL50{!kn0 zMSn&o_-Q4I3Tb{VB+_~}0!NL(~oO#v>YsH+hDSftpQp8|Nk(TG7c2z$(#vaJX z9G5SF@{?Z>RmAZT`^xn`dAdcDuCZ^2iPR2lyUDVRB?Y{{v~L=daHOFEsvcyVt&2G z95neP#NW9RW%{pwmMLho+^&GWce(@G&z`v~fB@5)7}D5<(Fo1?T`dcvVOSqcQ^u(%w#P(3Ju(pq?CY5&ElB@wOI=3ydofxq#91O zU^6EUX9TFyN0H19z4TjwPtT@_32Z!D}~N%#^ahcXhWRZ3OfMM zrRmLi+ZN7yc&v-dVe%!W^;<3+j4l}bF=BIMMeO#h>?X@|NcouhJn_~aH`T41_SdTo zELloEwa7H`^B)G%tf&xK4et@}?xzIBDzw@?RxaPQrDuS{F$j1v^oI2bRD)9P>#9|? zEFCfXK);KX_sYh5&iSk67M}pMbvf~Vc46POLxyabLe5AH%(j!=~C<*?nZRF>O4?*1Ed7JRyE*QX2S+}O%Z9OH6bP8Q4QL_e|9@WoCx z2S#Vv9J~JGgi&=5)+n zho`tqVQ(^86^)Y&O21TN$?MLng%U|Sk@)WC&kBV2m{6dDe?Qzk z#t(NNL2|7ozagEI!ez2zy(PSqRK2Qoda;GgV!E9*6QV+XYhz<8Ul^TG<8(7wY)kR< zR+Tmsh;d@X`M$pMBTho2@2M~Sva#}>X!M=~0;{&(kS1yLf=teKLn~Tr zTq{2N4$3+i&dCX%Brd&kmU#B|Jtf?c`rZx`|R zvj>Sk-C9noQ%jqq@UKa#4*lngVN$?M389F1%3MHZTA>lcw4?<|n}&%DX`Cm83h=OD zmIW*ZGY<$9!x}7LCv+VL)`r;_ly3%J1c;kZL5GZnF!%VZyClD1Jpk{&TaF}2#SmeT zPyy2ge<6-PGjV2~(`T0EJTPO_{HlQ0pzWJk|1@!oc<%UhF3oFVijHse=OM~ZvJvZWyZkF^wqPXz022R2WM}8dHElR>-!N;`s^mJvv0kaVV6jrTKntqfnzJ@ z6qM{;-)w2F@XcPBQ_;R-bL~T4FQZhEcZEA|8~%bK!{6Q;{z6IN3oXmmPe_#+Q<+3e zs0NGtM<9&X!lcMR0m}twO)41b_KqzeGN6C{A+jSW7BsNokyM$IXwYARYzz%{ zU6?Sc1+#mSgpyPiM-Vb>bn!oMb>0V{&2#E~XAT`Yb0125wf_O)1~Ky=AA#t`+B)v> zFIV9MtG;}E+*XKA?nSd|Dr?p*uUxaa;VWX*XPG^|&ihK%|1^F2PwPwW>-609II+fVY+qhjAD)mX;GD4+L-h4wrw!?BSE{ zGFOsyDM`Esw1;l6VF(2Q^AiJ1-!h0&8wwudQm9W??OT#v+?nObXh2J6y->JfQQP$S z1H`eP1PAt&tovm7^6P86A6rwk@=vS#o}4`8$*EJHnlkyREm@PT`Kl7TEMIFg)lf!s zJsQmkY_6Mlbo}_E6MG-`m*sr8Z27wj7ra|oILB0=u5yxjmll0{8x`G#RC>`kVZKe9R$!l(zp7|Cas4FyA;g%||6(m= zFCixO$9tB3w0h08WtFQR9k=qMLXvs1TdRuycW&1sgPTBLe~< zJP^ZlG7ukF!d$_`CI}3e)Bo%D|Lq(LNZvsx!Uz&Cd`#rkL%xk6*;h)sut*;m+ziMX zDY4^IVY=b&4E)t<1DWOSd;f3u11P-ne943Te_PqOWqr*bKNxxGNcpy%Rb>zD3O)FY zN<*j9S*MBfSE;9v?V~vYMoQq@+fV2Vl|uMK%Hc21TAWS`{1MUNJtNe43V}LLKKLHn zn_*__1d6C#rR7Rfisn=n#h4U|C0!t6K@=f?4ian)_E&{#>y^^Rmh7@=**pzLtfH~x ze$SK<(oiw2P~lbx6mB`OQW=p8RGBgqkeiiaxmocjXs-fIuADepZjfl*&Y5WZ+wJY= ziC4#@d2|v{y6Nn`+_g)+!G^Zn3n=sgw>5R~yTo4(*UzbHd11n(zfe>;YN0$wEl?~U z{;~+Vb*k_m`h0lTnj)Q0UIag3g{!#6n90+#cp@=Z7g3D-ZQCf6QH)BC>jf;G6Jz&fySexP(AnNDjZCq!o+LdKJv2yt5k#kD5=Fpu>${vA~ux) z|Dh8FdZD5~FHk}q^5M?)0-!KO0G)Fop!IEt8c)QGL#!XbDCxl->Mw+00C*hf)W>1~ zHs68|&5S`63kPr*%+we}F#W+jb`yK7W^*E63^K=nR?%eAFm4`0CRst~D;U&(l)xp> z=+Z(DhcSG@E>Phy@K8hN%jhEFQ= ze;K$=j3qw30M(7xrm)(%P-WkC3LyC7x!iVE%G&RUvlo|scR6}sk%GFPTBy8tka%h7 zABY!-caPZl>+%*SQ&L|?XTQ{{A4jWi3R3E#Ele{EPkj0e@mAN&F{e<;{iqfd9^9;$ zGNOxkgSgNz);zLs<}&5P*O-B51*j@iZhvAfn+2yJrl@w8n` zA-(C@*)9DoiGMt5O8Y9gvOjmk}wJN8lwYyYnH_4(Y!9&r|jW_+mylS@s8(+#wM197pMtD3$RfN=?b((tvg! z2HL$0XtxCf65Pdm08%wKL1qQcs`#9w-PpPTksW#fGX?+)Y4^agApSsAF>o>iK?ha~ zkZFa&{Rs2oAz;O@i_45LJX9OL5{9^&THZ}j|F`cJ993}VGc4=Ct$;g2uT8iW&ZUNS zVi-w+0Tx7zNtM_DlekeBOk#K6lCr*c-o~H6WIFpLG_lgJtTm}eIw}UnxPzfUhM}cK z>aYss8I%oeU;Hp5GU?hIP1Ev=RU#>2aG{^%iWHXC;4vGtsZzFO{mu-EVc!YTC%hlENC)B-57pFh-oE)Z#3MRhxWC@X8 z`^w{EyG7_^HjyofjxOE1FFavULo$R``UfrdUB^WbM3px5m`338cFf zYOQJNy6T*svExFyea}pv{8?}PimJXdy{$*8st%(y&Uz`2o6LTP!!GRh%k82c`rJOT zgrn8Svcgng8D*A;iNUJMavD9Wh&Yq4ih5E$XVZpPpp&@A6!FBjqpe5k+eN$ePMS78bXl#v80fD$;C{Qeijvz=*fqt~Sh*Do12smEwh zM}({thM*`rSd*&?ja%HY5gCzS`hAmE{7gJ2vZjb_B9lm9W~b5xV%sGF7kbvwX&RwG zM5D7A$%YBACqc+zQDKwV~&(Bm!zhvOA5*d3RfJO;wc_Ip=l=Z&-I(WSp6L*nQu{W6nrk?ajjgw z=JRBOSZEfBWi*;WB5_EdrTTh?Q7m&wMO>E5F0zUxB8uG+m1b`!o>c8A$Oo$ykF63I zi>=y1(Cuo7Ys~kdEmb~PAex~Bz*Y!gK7f-a3NX>eZ+Q3*Qq94=h(CZ}9xA^d=vO5L- zhh(8)nP|8H0PPL=n7&cc0jWv!Anv)&;ZpdtP=nIGEj@3uq-9*Q=pAKyhkCa@DBmT9 z#BizD+N5w!Q|0Jq8)jJJo9hJH#xXfTN)xe>*d*bheZagDOBQR#2do?&ZrkV|?-qxk=wP$5!&!>MQLl_4!8hbnn=mUh5XOCO<_X<4LsqMuAbWSL{|!bvAp6@|N1C zLav!=r?^BMM1Q29*9@XcUubX*^$=wQ%rS)<_Y=2$(}a5YlQ{+GY-#RPnU1$dt8HP+ z1zf3wk)Ns*-NV<4c2w3AWonmlrOPc^&4I$d8=%Q}N{pd7Qz%riVodd?uudsrYE(n} z!4LfwaV@0{ph5*E@JvX_n2^*5k)+EZ;S86Ez_K`27NHvornQ*BV`B%%$_Tt4SZ2jh zpE#o;L9tMvFp|=RAIPnIA1gR_>1|p8f z1G+ve7T>joBSTx@oxDNZH}JrTQ>R-mUpZY=bo$EW*3+j>JTQycdwa3H+$K(IMjwjg z9I;2FREo+*DbTb_NOqxQ>GDU8);@jiKsbEh+|#v34liF?`Vx}8IB?{idg0oCuL0LG zPguX>Wc&~Hv7k0;$xhKh6==51D-+wPf1%mStg5t@!FQzgVxz-SNBPK;la-%Efy!yLi~B3m$zlqDEB=A$x9hT#M9BR>f%-a)zr%W>d! z#*H2!3mxLDA#*TU!iUsBKv_~5gEPQ7gSj)FQ`izgAS);}V7VoY4q!b4icBt&86+#V z8nNgK!vHmr(y&SGKSqLqU>v$Q{!{#GV@XCzYbCp8N~UdTp-N%w2?WO*6{^Bz*32n2 z?5b8~px7AyI{wq8>*!(h@byc`icbBFN}C0-iw7S+MI0br9iUPFhEAaluF=8E6&D|o ztMn{(CRZ3reGGLX_as5CrM-%h*%6|rCaWif%{pycAke1OnZuLR$!vP4Jxr}?H|Gj_ zkqdQFCMSj|xnzQJp%BPA8J$2!TJN2z9JNpHZw>pi=ve8dXZgdee*L~t%BlCZ5^dlg zuZ|t^cn-y?QORCZiP(mK%2Q^ymw8kH1Mxj^dM|ZB0nMR>26-BLxccw8sZJF~%C+*r zMO#Vib(DIXg{-mr`JO5-banGVT`a9u#R>ZmqNZ1R`1{AQ3Z0%($MZ#Z#;E-!!ZUzf zA>A6Y$C7wS(*fnr0?HeQj6|J)^s}M0__ImSvj|eQttf~JFn}cDlQC8T@+QKPVS17* zHZpw_ha)Fq88LGvWh$sG0J^)44m^PD=7m8aA#B|V4kx?BC4eMxL=?t@B<9&YGzWLSg)7y{k?E=l3{z)Hd@fC+@Bz!Ewa`-zW% zEPR0qj~pOgC(7dE#B#p4{~@k6JrLn=)=&6Yvx~f|2>GFMb8EPzUORfqvS@cRTD2SLzJJOiH>b7{?-MKEe~(x}e9+D|$vsbfk950F5{HPF zmqk86JY-n43h5zbA+i*losY&R<&@fNd`>?b3a8arZ3W^h7I%7Hxb3TFk;tiEGIr#?F42S4Z5(zAbycn}yI4_EL|y-DnEpm( z{PI0@i{@|c5;c0~DSlbSq(9GnckK_T{H5|GW5VICW#umsXTM*&((jv*n>)kjzy8oY zIYmV|_dGE)WdXmMYj%zzxxldUC39w}63a3s;%8RI4r#FUbaeoC#qf-yM% z)AL0gxn6nyM^&?@Q0JB%>xD|20)Sr`z^?^7M`OY7ung>0KY*okP<0 zJ62rMft2WaN+XNwf*JzQgryJ=K|rp=pbKIl)+7=v1Md$*dJCyr;ABRuF(!l;U=kSY z62|cmS*{p=97y7K{K4`taA`Z*Uxp&p5OQ|F8s(fESIt4n~IzV=CMn zJ~&JRF2c`87k>(U3%=g93#nd_o+Q?97(^|vzm8f4H|zxOv*=Bf{>U!kYjFR)n5CGr z+;#pyb;wg37JC=^CN`$&(+>x(prnndegh*ls1qxp z)q8$JzTKnFgBl)rQKeO`K>G?a>TlT3(J- znBL#SiA`#<@NHqATM~utOEQtc!FGwWy;8{DGx_sG#9InSP*Z(t-{j}+X-HKjJGyJ= z6Ca6r3spj^TW`+}=A}6T(i~N1ey}>?6pNiI`{-cpfwE*yin+8t*U1nh3-YvW3r*AV zJ0Enbit^J;UNbsd94^`JjhN?VXtZXN*_5rlP4UD6M9Q`ePV}=12^X-{8+C1?>)#dot_*t8k#*fj5N?X7I;}6K6f? zl@*JwL9|H0!_avWF}GK@J6)ZBBYs`OGat^ahkC62=fC=8#@ulwwS4UeDxaRO z>&m2L796V@eP;i>*raEE+%)pxQld7{Vk+Bre>szJk0z^v(v*_hkx_AA=e*MPx~f(A z@l%eVwD=?#$suNoiDR~85dD%z_Iv9A=@s`>J^@S;J2B@RwL*z3 zej+94L_D*bmCLfJx7*WF52V_ZC?hSvE8u&~kIQvz;+sdmTJ4!TdoyKsp{2KcQSB^i z#I}6Iw+#dFOZj3xqCi+Ew}8jHpUFd+JOPrkxKSo+C!398`Qp*#U*$B)N@Z19GxO_H zQy*acl|vjgL`>8#IAx>C;KLbInj!}3n@^!B=b-cU^?T>+L4iGiW5lCJ2Omr>twy(* z42O+K3K$qj#^sAC*B?Z=2g@EIjz94L@@%(lC$4XgeS-Es7dc5Rd-nqBIb?X0Sn~?y zDYU7ZcsGc6e&YE!llu;ud@$=MvE+l)zoSP^Pdi2|LWiYuZp?Kwx#@<9-_Gs*a}TX# z;-UTKu9pY2?U%JQiQCmyYd|Ale`J^otD0phVI(w{`lhti%W7Nb(+juH<*NNF3u z(pvya8Bj%JEZMYfHdwin#*<<^4)-8A6@U#X!C=Y^0@VYmaxKt8QucZEZ#EF_gc2?9=+pWQR$ZX73I;{k#NWM zrkMv{~RS{8<67`BAvJQ1$TDj6Ebg8;p7+0R0`rgTj zzVQ!C?R~L~)^eqL^_g|K6^ncdZmKZVs}OlbqNc$a4--GFX}NM{E>ToAtI$7?mOU!U zwq%TK<<}QA^@aN@pD&u6Z7*aNwHO^NPg#0(e-3r@SW8xT0eX}Xvstu$`oVH(zG({5 zt2HhW52OXCs+MAdmoEUzQxGEI+rZ;B9}sy9nZ*pa3+xeIT;jE1vk{rq4Gb2C3E+4B zyY2rtANk>Gn2{kCi#=0#ljOfxnR2gVg5H4~?x}exPae0a!g4fBARkq9rD1G{%?dR8Tuo1qE`T^A@2T z{)UL(4HcI?TmEJ8N+PQtU7~(i(7QAmn^lHaMFV9c$L#NHdT3Scn0=is53i^h>>PVw zRMUgYYsMZJ-L!vs4aM{O(}|CaY=uB#;0R>7E{6}j?{m0vWde>tB2ci6=<4q_@wdFd;>uhyA#uSrEFm1ma}ZK&IyTq?d60SWI`Z z=oAhmh4D+4CEheCA3+%kMzSp#qewV}af1||5(sl=dZZShtHU3iSpfv6jbA5eV22 zf-IL>2yh;nDe=_g%V_zVJhv`6J53~I+r(1gE5xF=lk-ORJlnNz)Tn)3V;&ea>Vd%- zOmxLp5e8{`>6j(){cWS#XkQYhE_CDP0c&mwi1rn~y^MWPxDL&97JEW-Fx`OjA<=qzpug-tm$_ye8FL5lPjPIz!@s_H+N;E(_cfof^+rPhCl%^F7g25qA@@pItdpgsaK+^|b8GHr zz!nE@-+n0hZM5tau1xD-D){znhQTX(i&%7t&asb&TIVm2KWOC02gbmUqs*vEMi)c` z+Zms~v}*}^u&t~8*LHNhi!f6Ek?sxcd-b2|9AP?(pUTX$NL}JpU*DX=7mjBgLyc$H z+!Qt?g~y`FSA72b)^t`X#loxP{rV5@c@#V7Iz&Lb>vZ_KD`PwHT#^8#0#IszcBsIJ zl?Iw}7f_DvAObuLLIAErcp>RJc+CHq^lwriz`h3{z@!!dutBQ1*tY~)t|<&vSAcwn zLCD9pOKj`{CpHzp6Myh-_-G;Gge3bIG+|!?tdKMm4v}gJ3>qeVP;d_{B*6&S@|_@1 zpi(DD*3fui@~)uV3~hta2;UWl6OwmNJOyc3qL4~942iWM4EUg(gN@B5w1AQhfNKCu zV_+f)7sIdeCpKuziEY>B_k8}<%sGo)$_!mB=Ot8o^>efaSsohw%Toe}fab9wC(j0u z>)<_V6I%r;o{4g>{Mz96mm_v7Bbh}RK}liIWQy>MUw-piVb=kMh%mG`UM~jG<(E1v2IemCYvP+T$;lR($t_{m4xSk1CjC?wr``_H8GAAojfb z0&(pTGe^nu?Ax>qQNEivbz{e1Rq-q6>Et(v&nVX1Q-~$=$XL=e$!A1m!8GK2il^h# zcpBaT;z!EqWut00ccyEFs;c~Z{=8zrb>h8K$s5S!S|{QAy)Kqf8TSne4JEM_ShXY zbsZM;dKzl7)`^Z1lB_dSN)weD2(4O8X+&rM8la5^tiau=_9Q(3e!Y`W-1|95p=&{- zNNGQzL??r`8U*?FPLe=E(;niCK(I;DEhDKcKq!W6fYaZug*~u?+zpE%JM7Tuco10v zJMfaE{zFFD;qSP)9e#x25rK%?7?^5@r3wEJ3WI>1A%J~%c0n$OD+>v4xdfd@P)H~dw^kCpY%&mF*yL0 zo_?g*A@-}il|rpCQup%b=E?`B)MW7F-12%yp)@_eq(R25-%;#}q?L*M%feg*8zBWt zmroa@t9?y!l`5|%Csk|nSU64DB4Nt7N}o$pk(SY>G1+RSQXBdaC0fr6#>`5-B50@5 z=Cz>81tlqLu5f0xE+QA@-TuUVUmh(}pC?Px*>p-X-#hqpsJrC*NICU}%_xw9hcc5@ zd`+FnHwG2;^#Y!jKYm{8Bns8(R6*E9e?~<8jVRW@5@6dQp05{w6u`nSNrWx^ctT@91=^Y&q+{N0jZkR zl-oN5c`U!t?j}B0s(9@B0FAnODr@2>p#e%g`t?N;BXs+!7Ajr5qDc~_IHj^171Xj* zR5q=YD=f{XQo}Z$kt>X)>GDMBu98WRB+X{Zy%LFmZHj0Og)Rz*!*NOM`bb#e6mo4! zzBJq84nri0p3j!bs57j5qd=hJI8FK5EcAvelaW8M5HdYzfY4?@=+dMOxRrJR;E4^8 z$4dbW4B8TC7zQ-VrvScYkQ@T|3Sc2=t&$AkBGyKE6hJ!@Ksg9PIJyR30S(U+sDuM! z@R%l(4bX;+kHP0lBp53IZ)C8*BW7ekZBJ6p6M_{lISF=S+`x#4(Jg^kAt)!53=fHE zL#L^rEt|9DHx_J1EW+1Fjn&6kxnXL-l+ zg+l&VZ&q`uEI;?+I=cxU%ZdKyv1kq)Gt7DW!Oo3{c3SvP;`>$CSFibWRmX!9t5?=_ zmF1RpEa)yDh(Uby(knANAAA?IT5V%~w5iQYT>WIlhszdST{?bmTjj#?hQ8{2G=6#I(%P{PkL!PV(abA* zT9O!)^N_PP8DPQ-9Y}Mb&*gj|_X)cP8CM1G9W0ypgQF`FL=Hq35zG>NU}_-y8(Tae zWY$K7lSCmX)CggD2|rtcL=I2tkf=k$)>BOJ|Laj4(g$;$2ht7(0;qpU@&(eSiiiAB+@KR^iG2s$DjK^>qU zJq&)>ztpa2s_0RM^o9PM(c$pu98ZHaSG%C1X-zE}q0R3uDPF7%tJ*Tat&rYXkTphL zW?o%4Zbd$t=4sCMmxjE4z1(Kf3L)AlS~9S)c+~Qu4mdG5xjjUII=7jwKtmK7ePP|X8NZ=AG@CP6}0aGb01KQL@_W@kkr zff59hHx!RIG`#>bAngvtZ`_e~slzsJJjDQ9cZ}C!Da`TE)c=0}-RD3cz%U>r^m!Up z8UpHLvtrIW>{Z1h|L!|H9HuK|{%#nWr$VqcS?hSn{+@W2yRW$WS?D$-qk%VxIJ9HV zd&qd~I5NCHdk2JeelYv(O`Muu;^rfVi9h$&a5ug?YvT_OizkI+PLE3})GIt!Q1bfq zh;hZE&1%QK%f|}mn44ZmEk>Zt4e9Ls8m)nJPv*&ef+q0>eK7D z{di{l_%lClTmSS_FLknrA{9r(VpwJoom%`$;SWs)QCW`vh^Wb|RQk#)onf z&Wm{_1_U8`DBXs{s0N~NxWntY;ajtoqn>3+;0*!bHv#Z_pm@zl$fH{T1)~m;THiBC zFDBgvu;=1(z(e^0*Z@3ii~va#>ut%55JU%H-77(&fVz<+>wlqciPSmZm5?q&inbsC z!l?-CO#r`P5P`teigQ&Uwi<}+5J$zpjzKpeO=7r)mfJ?)t)SfDC$f=FE0@(bZySZ6XswTeD3oqCGf3m4 z{2~ylS$Y8lQtkv!hA{pQ4=bG~6jZTOv)w`sPwe2yv-F+osw~mc4#L8m{I24V3G*0$D$sYV=z*SgXAJ>jGO`$qAk0s~A+(C81v=Muf1#ftk&PUq(wPI{ zGbsGU(xqPzSI&e3W}T{Qlnmgd(2tU;6mCPI*@wDRo{Dr%M*ZzLx`M7yiBZHl=<$o(sZN0YVb3ir`*R2)+6eORpsTYMr4o7%p95R zpWDx`Op{_&+4jV+|hfu~~t@ zkTevwuy{y9037`-8Uzzuti2CWG$5G)3K=*8fRrGF43fcP(n=b(hVOwdOpKb)Ah1mi zi=dcx%A~_p{qQD!8q1Junz-?uD~6sIPDwm2`H**%l4ROPGe3AVGpkL#blb#{wf{t( zW6z;BWVkxJbaA6)&xP*T`M8QDVbN05Iy=Wu<_J(+tJiWk%;o}VK{QQDd=l$r&{H$A zCH9aDjd$l8Jp#T%8)(U$6IxPM;X2YaFBvG+FjW^s+c7Vv}$eEMT)4)rcqdL#s0xg!Ooc z7arJ|x@drsTkY{`bun)+z9i<4sgwnN^fX5&RBNIpDP6#~E{D)=@{mJ|UIV8D?ExGVuJ) ztcLyws+KW}JUt}^lX9&YG`7`WIL=pQ$Vwx=br%#$ZGoJEQfv5@-p!Y1m|`Z0$1q{b zA!(IxN#9F)UtVXR++=W2_PQM1Wsz#_2x2RbEf!0a@}M%sX2@zy%L;+(jsdDM_GJse z5v+kioB2t_5Z?-}J7k3{K+O73SOyiq>Da&oCZ@y^dL2SREjUiDr3|P@3u2|kX5%qL zTDj~_3ixOrSkjKd+S z)#zUeiafqh9-q*PX6ca1oS9d>+I@KH6#1XYD;C2tkazkgicy>{qU;ih;-3fyh;KF! zzqC`j9*s=T$Rm!EtJ_=Tl$J>RT^^58#p9sU;|Z=JAdAnCQ}$NX++Kb3{t|MT#7;T{Z)F9%6&}QpxdG>EA+5a|vbd)M-XBgnjyVA->|o3xQ3pFt7(+^$ zjbsLigb8eA#znv^SU&)&4XB&=B+_&7WkBHX5=;Pr;XENoGvK9$qlk3FkoN(Z1?WiP z1CmZ+92k@2Ngx|(DI&OlF4^++rcGaO+49Y%P2a>7=d@?Vg?$D5^v(*k)7(@h5i=R$ zRI@T?<$6?*g9_a(>G4O}&Yo%Y*YSDDJf)_(TCGWQ$o+j|^G58Z1*S#%;+y7NoH66# zoH-X}&b*+^oOWy?yM@z#CVssya~e(Hn+7ND>A*wy>IB?mo=Q_)rBOTWYPHkSSPr~} zAtLX$t~Bu+zns;adur1+Tkbq2b?NAwu7l8K$q}oY)|hV4NQDY{L8(#Vk;%$4ZI(*Zd2?h4zI>__s${r1E&;AbJ z5CL!yL7m4139%Tn|2yg+)RnUh3$mEhlfaQ++*q{e26651QGDz6=$s=HBu<$|-@T*po?rG) ze`Qb0!nc;rd~RCpy4L!YHPh>Bdjl3zKr2&e(~IV|j$Y8Qvwh-`?nQ4eUGvuLU5I&f z&CP@DQ(q=-@7zfYUh0p(LwR;nyc|k}tpN^u0644(%rSM~9Gy=p-DKsUP$JSTiDrPp zZdio3fn1N%C&>89FsKTEg$y#OiDY-6vygo+hZCI1&X%BHB+M^(S}?ceV!Z=K1JxPw z;z%qeW2zzE_*bHlc>R$Lw^pc^U!06m(M?nYAb1n8CSP2xUU_rFBM@)g7#}gNl4qkq z-&HN$o}5;uwV+j(iHjd}3pb9~$nCz2M9}+2bh(=go5Jo7h>Mpu{q)@A$$Z_s5Fk#u->_@*`{}J*0jV7vfG-2zBx!pdL5yFn^R z;1-i5w6G!l4ORfPcsdf$46XpMlnr|;KtF`{jpL#qd={WN473aHf!9rXmNOELW2~L! zQK3ytf?9&=WrMQWcs@ZqAyEg}5UIq$oj_8;Rt%UeI^|bl&upH8-(6F63I$#{v0-I; zo9pH`YK=P2?~cf1ZeMWug!y;Y)ERkOnf+2Vi(~awO+g0h-L^S1@v58s4 z6BE#GrjThU^61L7BC$(LiWV{*AP8okk%q{ zNh-gf_>(h&7cjr%EGL_wCsIO=q}yN!NTvf8XS0CR3feO$=n(u&x4AHm;mL&fWcZFF zqUnk0#Zg>jm;fUL2S}8r$=C^d6lsnML*NOHFSy$hMHbQ=#$T|B0`TEeerGvDJG~vw zzoK*KEtEQcl}0Z&S<5m+X>vwO4o}bHLtB&-zDOD#t!DBV1-&vMzjc00YS5n8Lgd9w z8y8d;E!M?%(a=4Vf1)uOV(Z|)(WdAu89KOzGD3>@62ABmNJd~1zlyd+rsftwiGNA;RrZB)+kee4974@c+IAARmK;J8&@9w@c-)_Q)Z0hB2erRza;mdjINcd7`gA5o8_ z3?5AljxI-~x!ODv<(4?hoKeP1DQck7+*y=nTG)$FMHY2_YezIb+1X?ry?EYqMC+Vf zUs2O4SU9DA#=Q4)!wuct=P2`((qz||Mn#jfvByhi=9a|woNkmi_C;$-r`L_E9ODc5 z(QNY<=)kih?dHQo6!OEBzg^9Mc2>|6fMO;@j)0rRb&uR zQP3cl-?Cmq z%iYU6Z|8q|Q+K~L27Yq55vdu#{Q$9tp2bAsKKxkv&|}|WAhO{KNU$gI@-QP{fH%bu zwwY`uhJ+!=kjcUV(rQTZA7DS^FDF?HFcY8)AO*-W;AYTwdgyHr-#Ia;jP#@-8)Nu6 z7}N~NUN^}Qtu?|N5o!JDJhSuXVmDavDR+*gaxX4&r9{RZIzr&NxuE9qufQ|C2|TM&(p z8X9nS>HL{9=NJ2pTWl`CLFe-MRC2(4qKQs^Ad<#2^6twyI& z$?WJQSzH9eQ0(-nvAhW{r4Y$VYgJ~T0-`&5%d4lFh&o4YroTKTn3AS8rn3towY3q0 zRw$91($h^M8&}BIHK5YAmcuy(HN5?jy3cNjm=j2ZDEBhK;d!svmpPPNsH1D zJq2o2L-it|M2Tc-fm|o#$SC8povci=D=+U4tc}&dJWuj>=pXdHU$+r_^h!(1Q#9}G zx6$irgR`{MX;2d{7X=*wuhEv_(w94&F{{y)!V$Bqy8lPncL2swU5o0@Hf`^{_r5Fb zYImhw_1=56da>M#WLa)<#l73uG}~YsQ%p6z1qcv&3xtF~Xdwv%UI-Av3)s@|&z)Tv z!OMUD$JWl=xoz&uoO|v$=bqy2ab%Rcf+Y@(E9|%XW@^w44C%!$(C6tAu0oS8)^HUH zuEt|gE4UKGmA1+bsVoJ#xdj$gx=CVmI*n3eIw|zB(^=^zvC5Wfbw?d)i7V8Yo7))4 z3TB%0Y8&B)c6IP0?;?~lpGDCf(@Zcut0W#U72>`MOm?a>hsh(F=~k(?y0RzI*Mq}s zb1-Cv_HJ%Ei)|K5_;i6?>WjCkJIpCqHM)A;LXh z!V$`(GKp9O&N~ERzCg+6O2jI?UL%t7Kx=|85%5(!p;RhV2t<5|T)<_CTk$B-4S2vM z!{D3rDE&tAOola_S(zWH92l*1mvy<~*$wc@b><9!91|T$w2_p>QN1}S@fdIza5q4rnB#z3H~|Y$SqePB95I

    @U#^mXs1Qkl@y&^fWCuJ~$YR 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

    ^u*X%ixPlawwap1tDJ| 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 z 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�o+4xa&L)lljk_ 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 -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace ktsu.ImGui.App.Resources -{ - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources - { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() - { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager - { - get - { - if (object.ReferenceEquals(resourceMan, null)) - { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ktsu.ImGui.App.Resources.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture - { - get - { - return resourceCulture; - } - set - { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] NerdFont - { - get - { - object obj = ResourceManager.GetObject("NerdFont", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] NotoEmoji - { - get - { - object obj = ResourceManager.GetObject("NotoEmoji", resourceCulture); - return ((byte[])(obj)); - } - } - } -} diff --git a/ImGui.App/Resources/Resources.resx b/ImGui.App/Resources/Resources.resx deleted file mode 100644 index efcfc8c..0000000 --- a/ImGui.App/Resources/Resources.resx +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - NerdFont.ttf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - - NotoEmoji.ttf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - diff --git a/ImGui.App/UIScaler.cs b/ImGui.App/UIScaler.cs deleted file mode 100644 index 313b634..0000000 --- a/ImGui.App/UIScaler.cs +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ScopedAction; - -/// -/// Class responsible for scaling UI elements in ImGui. -/// -public class UIScaler : ScopedAction -{ - /// - /// Initializes a new instance of the class. - /// Scales various ImGui style variables by the specified scale factor. - /// - /// The scale factor to apply to the UI elements. - public UIScaler(float scale) - { - ImGuiStylePtr style = ImGui.GetStyle(); - int numStyles = 0; - PushStyleAndCount(ImGuiStyleVar.CellPadding, style.CellPadding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.ChildBorderSize, style.ChildBorderSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.ChildRounding, style.ChildRounding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.DockingSeparatorSize, style.DockingSeparatorSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.FrameBorderSize, style.FrameBorderSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.FramePadding, style.FramePadding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.FrameRounding, style.FrameRounding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.GrabMinSize, style.GrabMinSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.GrabRounding, style.GrabRounding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.IndentSpacing, style.IndentSpacing * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.ItemInnerSpacing, style.ItemInnerSpacing * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.ItemSpacing, style.ItemSpacing * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.PopupBorderSize, style.PopupBorderSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.PopupRounding, style.PopupRounding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.ScrollbarRounding, style.ScrollbarRounding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.ScrollbarSize, style.ScrollbarSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.SeparatorTextBorderSize, style.SeparatorTextBorderSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.SeparatorTextPadding, style.SeparatorTextPadding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.TabRounding, style.TabRounding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.WindowBorderSize, style.WindowBorderSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.WindowMinSize, style.WindowMinSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.WindowPadding, style.WindowPadding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.WindowRounding, style.WindowRounding * scale, ref numStyles); - - OnClose = () => ImGuiApp.Invoker.Invoke(() => ImGui.PopStyleVar(numStyles)); - } - - /// - /// Pushes a style variable and increments the style count. - /// - /// The style variable to push. - /// The value to set for the style variable. - /// The reference to the style count. - internal static void PushStyleAndCount(ImGuiStyleVar style, float value, ref int numStyles) - { - ImGuiApp.Invoker.Invoke(() => ImGui.PushStyleVar(style, value)); - ++numStyles; - } - - /// - /// Pushes a style variable and increments the style count. - /// - /// The style variable to push. - /// The value to set for the style variable. - /// The reference to the style count. - internal static void PushStyleAndCount(ImGuiStyleVar style, Vector2 value, ref int numStyles) - { - ImGuiApp.Invoker.Invoke(() => ImGui.PushStyleVar(style, value)); - ++numStyles; - } -} diff --git a/ImGui.Popups/CompatibilitySuppressions.xml b/ImGui.Popups/CompatibilitySuppressions.xml deleted file mode 100644 index 9bd50a2..0000000 --- a/ImGui.Popups/CompatibilitySuppressions.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - CP0001 - T:System.Diagnostics.CodeAnalysis.FeatureGuardAttribute - lib/net8.0/ktsu.ImGui.Popups.dll - lib/net9.0/ktsu.ImGui.Popups.dll - - - CP0001 - T:System.Diagnostics.CodeAnalysis.FeatureSwitchDefinitionAttribute - lib/net8.0/ktsu.ImGui.Popups.dll - lib/net9.0/ktsu.ImGui.Popups.dll - - - CP0001 - T:System.Diagnostics.DebuggerDisableUserUnhandledExceptionsAttribute - lib/net8.0/ktsu.ImGui.Popups.dll - lib/net9.0/ktsu.ImGui.Popups.dll - - - CP0001 - T:System.Runtime.CompilerServices.OverloadResolutionPriorityAttribute - lib/net8.0/ktsu.ImGui.Popups.dll - lib/net9.0/ktsu.ImGui.Popups.dll - - - CP0001 - T:System.Runtime.CompilerServices.ParamCollectionAttribute - lib/net8.0/ktsu.ImGui.Popups.dll - lib/net9.0/ktsu.ImGui.Popups.dll - - - CP0001 - T:System.Threading.Lock - lib/net8.0/ktsu.ImGui.Popups.dll - lib/net9.0/ktsu.ImGui.Popups.dll - - - CP0014 - M:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.get_UrlFormat:[T:System.Runtime.CompilerServices.CompilerGeneratedAttribute] - lib/net8.0/ktsu.ImGui.Popups.dll - lib/net9.0/ktsu.ImGui.Popups.dll - - - CP0014 - M:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.set_UrlFormat(System.String):[T:System.Runtime.CompilerServices.CompilerGeneratedAttribute] - lib/net8.0/ktsu.ImGui.Popups.dll - lib/net9.0/ktsu.ImGui.Popups.dll - - \ No newline at end of file diff --git a/ImGui.Popups/DESCRIPTION.md b/ImGui.Popups/DESCRIPTION.md deleted file mode 100644 index 93ac7bd..0000000 --- a/ImGui.Popups/DESCRIPTION.md +++ /dev/null @@ -1 +0,0 @@ -A library for custom popups using ImGui.NET. diff --git a/ImGui.Popups/FilesystemBrowser.cs b/ImGui.Popups/FilesystemBrowser.cs deleted file mode 100644 index e3ce9e4..0000000 --- a/ImGui.Popups/FilesystemBrowser.cs +++ /dev/null @@ -1,393 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Popups; - -using System; -using System.Collections.ObjectModel; -using System.IO; -using System.Linq; -using System.Numerics; -using System.Text.Json.Serialization; - -using Hexa.NET.ImGui; - -using ktsu.Semantics.Paths; -using ktsu.Semantics.Strings; -using ktsu.Extensions; -using Microsoft.Extensions.FileSystemGlobbing; -using System.Text; - -/// -/// Partial class containing various ImGui popup implementations. -/// -public partial class ImGuiPopups -{ - /// - /// Defines the mode of operation for the filesystem browser. - /// - public enum FilesystemBrowserMode - { - /// - /// Browser operates in file/directory open mode, allowing selection of existing items. - /// - Open, - - /// - /// Browser operates in save mode, allowing selection of existing items or input of new filenames. - /// - Save - } - - /// - /// Defines the target type for the filesystem browser. - /// - public enum FilesystemBrowserTarget - { - /// - /// Target is a file. - /// - File, - - /// - /// Target is a directory. - /// - Directory - } - - /// - /// A class for displaying a filesystem browser popup window. - /// - public class FilesystemBrowser - { - /// - /// Gets or sets the mode of the browser (Open or Save). - /// - private FilesystemBrowserMode BrowserMode { get; set; } - - /// - /// Gets or sets the target type of the browser (File or Directory). - /// - private FilesystemBrowserTarget BrowserTarget { get; set; } - - /// - /// Action to invoke when a file is chosen. - /// - private Action OnChooseFile { get; set; } = (f) => { }; - - /// - /// Action to invoke when a directory is chosen. - /// - private Action OnChooseDirectory { get; set; } = (d) => { }; - - /// - /// Gets or sets the current directory being displayed. - /// - [JsonInclude] - private AbsoluteDirectoryPath CurrentDirectory { get; set; } = Environment.CurrentDirectory.As(); - - /// - /// Collection of current contents (files and directories) in the current directory. - /// - private Collection CurrentContents { get; set; } = []; - - /// - /// The currently selected item. - /// - private IAbsolutePath ChosenItem { get; set; } = AbsolutePath.Create(""); - - /// - /// Collection of logical drives available. - /// - private Collection Drives { get; set; } = []; - - /// - /// The glob pattern used for filtering files. - /// - private string Glob { get; set; } = "*"; - - /// - /// Matcher used for file globbing. - /// - private Matcher Matcher { get; set; } = new(); - - /// - /// The filename entered by the user. - /// - private FileName FileName { get; set; } = new(); - - /// - /// The modal instance for displaying the browser popup. - /// - private Modal Modal { get; } = new(); - - /// - /// The popup message for displaying alerts. - /// - private MessageOK PopupMessageOK { get; } = new(); - - /// - /// Opens the file open dialog with the specified title and callback. - /// - /// The title of the dialog. - /// Callback invoked when a file is chosen. - /// Glob pattern for filtering files. - public void FileOpen(string title, Action onChooseFile, string glob = "*") => FileOpen(title, onChooseFile, customSize: Vector2.Zero, glob); - - /// - /// Opens the file open dialog with the specified title, callback, and custom size. - /// - /// The title of the dialog. - /// Callback invoked when a file is chosen. - /// Custom size of the dialog. - /// Glob pattern for filtering files. - public void FileOpen(string title, Action onChooseFile, Vector2 customSize, string glob = "*") => File(title, FilesystemBrowserMode.Open, onChooseFile, customSize, glob); - - /// - /// Opens the file save dialog with the specified title and callback. - /// - /// The title of the dialog. - /// Callback invoked when a file is chosen. - /// Glob pattern for filtering files. - public void FileSave(string title, Action onChooseFile, string glob = "*") => FileSave(title, onChooseFile, customSize: Vector2.Zero, glob); - - /// - /// Opens the file save dialog with the specified title, callback, and custom size. - /// - /// The title of the dialog. - /// Callback invoked when a file is chosen. - /// Custom size of the dialog. - /// Glob pattern for filtering files. - public void FileSave(string title, Action onChooseFile, Vector2 customSize, string glob = "*") => File(title, FilesystemBrowserMode.Save, onChooseFile, customSize, glob); - - /// - /// Opens the filesystem browser popup with the specified parameters. - /// - /// The title of the popup. - /// The mode of the browser (Open or Save). - /// Callback for when a file is chosen. - /// Custom size of the popup. - /// Glob pattern for filtering files. - private void File(string title, FilesystemBrowserMode mode, Action onChooseFile, Vector2 customSize, string glob) => OpenPopup(title, mode, FilesystemBrowserTarget.File, onChooseFile, (d) => { }, customSize, glob); - - /// - /// Opens the directory chooser dialog with the specified title and callback. - /// - /// The title of the dialog. - /// Callback invoked when a directory is chosen. - public void ChooseDirectory(string title, Action onChooseDirectory) => ChooseDirectory(title, onChooseDirectory, customSize: Vector2.Zero); - - /// - /// Opens the directory chooser dialog with the specified title, callback, and custom size. - /// - /// The title of the dialog. - /// Callback invoked when a directory is chosen. - /// Custom size of the dialog. - public void ChooseDirectory(string title, Action onChooseDirectory, Vector2 customSize) => OpenPopup(title, FilesystemBrowserMode.Open, FilesystemBrowserTarget.Directory, (d) => { }, onChooseDirectory, customSize, "*"); - - /// - /// Opens the filesystem browser popup with the specified parameters. - /// - /// The title of the popup. - /// The mode of the browser (Open or Save). - /// The target type (File or Directory). - /// Callback for when a file is chosen. - /// Callback for when a directory is chosen. - /// Custom size of the popup. - /// Glob pattern for filtering files. - private void OpenPopup(string title, FilesystemBrowserMode mode, FilesystemBrowserTarget target, Action onChooseFile, Action onChooseDirectory, Vector2 customSize, string glob) - { - FileName = new(); - BrowserMode = mode; - BrowserTarget = target; - OnChooseFile = onChooseFile; - OnChooseDirectory = onChooseDirectory; - Glob = glob; - Matcher = new(); - Matcher.AddInclude(Glob); - Drives.Clear(); - Environment.GetLogicalDrives().ForEach(Drives.Add); - RefreshContents(); - Modal.Open(title, ShowContent, customSize); - } - - /// - /// Displays the content of the filesystem browser popup. - /// - private void ShowContent() - { - if (Drives.Count != 0) - { - if (ImGui.BeginCombo("##Drives", Drives[0])) - { - StringBuilder currentDriveStringBuilder = new(); - currentDriveStringBuilder.Append(CurrentDirectory.Split(Path.VolumeSeparatorChar).Current); - currentDriveStringBuilder.Append(Path.VolumeSeparatorChar); - currentDriveStringBuilder.Append(Path.DirectorySeparatorChar); - string currentDrive = currentDriveStringBuilder.ToString(); - - foreach (string drive in Drives) - { - if (ImGui.Selectable(drive, drive == currentDrive)) - { - CurrentDirectory = drive.As(); - RefreshContents(); - } - } - - ImGui.EndCombo(); - } - } - - ImGui.TextUnformatted($"{CurrentDirectory}{Path.DirectorySeparatorChar}{Glob}"); - if (ImGui.BeginChild("FilesystemBrowser", new(500, 400), ImGuiChildFlags.None)) - { - if (ImGui.BeginTable(nameof(FilesystemBrowser), 1, ImGuiTableFlags.Borders)) - { - ImGui.TableSetupColumn("Path", ImGuiTableColumnFlags.WidthStretch, 40); - //ImGui.TableSetupColumn("Size", ImGuiTableColumnFlags.None, 3); - //ImGui.TableSetupColumn("Modified", ImGuiTableColumnFlags.None, 3); - ImGui.TableHeadersRow(); - - ImGuiSelectableFlags flags = ImGuiSelectableFlags.SpanAllColumns | ImGuiSelectableFlags.AllowDoubleClick | ImGuiSelectableFlags.NoAutoClosePopups; - ImGui.TableNextRow(); - ImGui.TableNextColumn(); - if (ImGui.Selectable("..", false, flags)) - { - if (ImGui.IsMouseDoubleClicked(0)) - { - string? newPath = Path.GetDirectoryName(CurrentDirectory.WeakString.Trim(Path.DirectorySeparatorChar)); - if (newPath is not null) - { - CurrentDirectory = newPath.As(); - RefreshContents(); - } - } - } - - foreach (IAbsolutePath? path in CurrentContents.OrderBy(p => p is not AbsoluteDirectoryPath).ThenBy(p => p).ToCollection()) - { - ImGui.TableNextRow(); - ImGui.TableNextColumn(); - AbsoluteDirectoryPath? directory = path as AbsoluteDirectoryPath; - AbsoluteFilePath? file = path as AbsoluteFilePath; - string displayPath = directory?.WeakString ?? file?.WeakString ?? string.Empty; - displayPath = displayPath.RemovePrefix(CurrentDirectory.WeakString).Trim(Path.DirectorySeparatorChar); - - if (directory is not null) - { - displayPath += Path.DirectorySeparatorChar; - } - - if (ImGui.Selectable(displayPath, ChosenItem == path, flags)) - { - if (directory is not null) - { - ChosenItem = directory; - if (ImGui.IsMouseDoubleClicked(0)) - { - CurrentDirectory = directory; - RefreshContents(); - } - } - else if (file is not null) - { - ChosenItem = file; - FileName = file.FileName; - if (ImGui.IsMouseDoubleClicked(0)) - { - ChooseItem(); - } - } - } - } - - ImGui.EndTable(); - } - } - - ImGui.EndChild(); - - if (BrowserMode == FilesystemBrowserMode.Save) - { - string fileName = FileName; - ImGui.InputText("##SaveAs", ref fileName, 256); - FileName = fileName.As(); - } - - string confirmText = BrowserMode switch - { - FilesystemBrowserMode.Open => "Open", - FilesystemBrowserMode.Save => "Save", - _ => "Choose" - }; - if (ImGui.Button(confirmText)) - { - ChooseItem(); - } - - ImGui.SameLine(); - if (ImGui.Button("Cancel")) - { - ImGui.CloseCurrentPopup(); - } - - PopupMessageOK.ShowIfOpen(); - } - - /// - /// Handles the selection of an item (file or directory) based on the current target. - /// - private void ChooseItem() - { - if (BrowserTarget == FilesystemBrowserTarget.File) - { - AbsoluteFilePath chosenFile = CurrentDirectory / FileName; - if (!Matcher.Match(FileName).HasMatches) - { - PopupMessageOK.Open("Invalid File Name", "The file name does not match the glob pattern."); - return; - } - - OnChooseFile(Path.GetFullPath(chosenFile).As()); - } - else if (BrowserTarget == FilesystemBrowserTarget.Directory && ChosenItem is AbsoluteDirectoryPath directory) - { - OnChooseDirectory(Path.GetFullPath(directory).As()); - } - - ImGui.CloseCurrentPopup(); - } - - /// - /// Refreshes the contents of the current directory based on the target and glob pattern. - /// - private void RefreshContents() - { - ChosenItem = AbsolutePath.Create(""); - CurrentContents.Clear(); - CurrentDirectory.GetContents().ForEach(p => - { - if (BrowserTarget == FilesystemBrowserTarget.File || (BrowserTarget == FilesystemBrowserTarget.Directory && p is AbsoluteDirectoryPath)) - { - if (p is not AbsolutePath absolutePath) - { - throw new InvalidOperationException("Path is not an absolute path."); - } - - if (absolutePath.IsDirectory || Matcher.Match(Path.GetFileName(absolutePath.WeakString)).HasMatches) - { - CurrentContents.Add(absolutePath); - } - } - }); - } - - /// - /// Shows the modal popup if it is open. - /// - /// True if the modal is open; otherwise, false. - public bool ShowIfOpen() => Modal.ShowIfOpen(); - } -} diff --git a/ImGui.Popups/ImGui.Popups.csproj b/ImGui.Popups/ImGui.Popups.csproj deleted file mode 100644 index 7b521c9..0000000 --- a/ImGui.Popups/ImGui.Popups.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - net8.0;net9.0 - - - - - - - - - - - - diff --git a/ImGui.Popups/Input.cs b/ImGui.Popups/Input.cs deleted file mode 100644 index f75a769..0000000 --- a/ImGui.Popups/Input.cs +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Popups; - -using System.Numerics; - -using Hexa.NET.ImGui; -using ktsu.CaseConverter; - -public partial class ImGuiPopups -{ - /// - /// Base class for a popup input window. - /// - /// The type of the input value. - /// The type of the derived class for CRTP. - public abstract class Input where TDerived : Input, new() - { - private TInput? cachedValue; - private Action OnConfirm { get; set; } = null!; - private string Label { get; set; } = string.Empty; - /// - /// Gets the modal instance used to display the popup input window. - /// - protected Modal Modal { get; } = new(); - - /// - /// Open the popup and set the title, label, and default value. - /// - /// The title of the popup window. - /// The label of the input field. - /// The default value of the input field. - /// A callback to handle the new input value. - public void Open(string title, string label, TInput defaultValue, Action onConfirm) => Open(title, label, defaultValue, onConfirm, customSize: Vector2.Zero); - - /// - /// Open the popup and set the title, label, and default value. - /// - /// The title of the popup window. - /// The label of the input field. - /// The default value of the input field. - /// A callback to handle the new input value. - /// Custom size of the popup. - public void Open(string title, string label, TInput defaultValue, Action onConfirm, Vector2 customSize) - { - Label = label; - OnConfirm = onConfirm; - cachedValue = defaultValue; - Modal.Open(title, ShowContent, customSize); - } - - /// - /// Show the content of the popup. - /// - private void ShowContent() - { - if (cachedValue is not null) - { - ImGui.TextUnformatted(Label); - ImGui.NewLine(); - - if (!Modal.WasOpen && !ImGui.IsItemFocused()) - { - ImGui.SetKeyboardFocusHere(); - } - - if (ShowEdit(ref cachedValue)) - { - OnConfirm(cachedValue); - ImGui.CloseCurrentPopup(); - } - - ImGui.SameLine(); - if (ImGui.Button($"OK###{Modal.Title.ToSnakeCase()}_OK")) - { - OnConfirm(cachedValue); - ImGui.CloseCurrentPopup(); - } - } - } - - /// - /// Show the input field for the derived class. - /// - /// The input value. - /// True if the input field is changed. - protected abstract bool ShowEdit(ref TInput value); - - /// - /// Show the modal if it is open. - /// - /// True if the modal is open. - public bool ShowIfOpen() => Modal.ShowIfOpen(); - } - - /// - /// A popup input window for strings. - /// - public class InputString : Input - { - /// - /// Show the input field for strings. - /// - /// The input value. - /// True if Enter is pressed. - protected override bool ShowEdit(ref string value) => ImGui.InputText($"###{Modal.Title.ToSnakeCase()}_INPUT", ref value, 100, ImGuiInputTextFlags.EnterReturnsTrue); - } - - /// - /// A popup input window for integers. - /// - public class InputInt : Input - { - /// - /// Show the input field for integers. - /// - /// The input value. - /// False - protected override bool ShowEdit(ref int value) - { - ImGui.InputInt($"###{Modal.Title.ToSnakeCase()}_INPUT", ref value); - return false; - } - } - - /// - /// A popup input window for floats. - /// - public class InputFloat : Input - { - /// - /// Show the input field for floats. - /// - /// The input value. - /// False - protected override bool ShowEdit(ref float value) - { - ImGui.InputFloat($"###{Modal.Title.ToSnakeCase()}_INPUT", ref value); - return false; - } - } -} diff --git a/ImGui.Popups/MessageOK.cs b/ImGui.Popups/MessageOK.cs deleted file mode 100644 index 87949fa..0000000 --- a/ImGui.Popups/MessageOK.cs +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Popups; - -using System.Numerics; - -public partial class ImGuiPopups -{ - /// - /// A class for displaying a prompt popup window. - /// - public class MessageOK : Prompt - { - /// - /// Open the popup and set the title and message. - /// - /// The title of the popup window. - /// The message to show. - public void Open(string title, string message) => Open(title, message, customSize: Vector2.Zero); - /// - /// Open the popup and set the title and message. - /// - /// The title of the popup window. - /// The message to show. - /// Custom size of the popup. - public void Open(string title, string message, Vector2 customSize) => Open(title, message, PromptTextLayoutType.Unformatted, customSize); - /// - /// Open the popup and set the title and message. - /// - /// The title of the popup window. - /// The message to show. - /// Which text layout method should be used. - /// Custom size of the popup. - public void Open(string title, string message, PromptTextLayoutType textLayoutType, Vector2 size) => Open(title, message, new() { { "OK", null } }, textLayoutType, size); - } -} diff --git a/ImGui.Popups/Modal.cs b/ImGui.Popups/Modal.cs deleted file mode 100644 index 8b03a64..0000000 --- a/ImGui.Popups/Modal.cs +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Popups; - -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.CaseConverter; - -public static partial class ImGuiPopups -{ - /// - /// Base class for a modal window. - /// - public class Modal - { - /// - /// Gets or sets the title of the modal window. - /// - internal string Title { get; set; } = string.Empty; - - /// - /// Determines whether the modal should open. - /// - private bool ShouldOpen { get; set; } - - /// - /// The delegate to invoke to show the content of the modal. - /// - private Action OnShowContent { get; set; } = () => { }; - - /// - /// Gets or sets the custom size of the popup. - /// - private Vector2 CustomSize { get; set; } = Vector2.Zero; - - /// - /// Gets a value indicating whether the modal was open. - /// - public bool WasOpen { get; private set; } - - /// - /// Gets the id of the modal window. - /// - /// The id of the modal window. - private string Name => $"{Title}###Modal_{Title.ToSnakeCase()}"; - - /// - /// Opens the modal and sets the title. - /// - /// The title of the modal window. - /// The delegate to invoke to show the content of the modal. - public void Open(string title, Action onShowContent) => Open(title, onShowContent, customSize: Vector2.Zero); - - /// - /// Opens the modal and sets the title with a custom size. - /// - /// The title of the modal window. - /// The delegate to invoke to show the content of the modal. - /// Custom size of the popup. - public void Open(string title, Action onShowContent, Vector2 customSize) - { - Title = title; - OnShowContent = onShowContent; - ShouldOpen = true; - CustomSize = customSize; - } - - /// - /// Shows the modal if it is open. - /// - /// True if the modal is open. - public bool ShowIfOpen() - { - if (ShouldOpen) - { - ShouldOpen = false; - ImGui.OpenPopup(Name); - } - - bool result = ImGui.IsPopupOpen(Name); - if (CustomSize != Vector2.Zero) - { - ImGui.SetNextWindowSize(CustomSize); - } - - if (ImGui.BeginPopupModal(Name, ref result, ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoSavedSettings)) - { - OnShowContent(); - - if (ImGui.IsKeyPressed(ImGuiKey.Escape)) - { - ImGui.CloseCurrentPopup(); - } - - ImGui.EndPopup(); - } - - WasOpen = result; - return result; - } - } -} diff --git a/ImGui.Popups/Prompt.cs b/ImGui.Popups/Prompt.cs deleted file mode 100644 index 35c2aa9..0000000 --- a/ImGui.Popups/Prompt.cs +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Popups; - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Numerics; - -using Hexa.NET.ImGui; - -/// -/// Contains classes for displaying various popup windows using ImGui. -/// -public static partial class ImGuiPopups -{ - /// - /// Defines the layout type for prompt text. - /// - public enum PromptTextLayoutType - { - /// - /// The text is displayed without any formatting. - /// - Unformatted, - - /// - /// The text is wrapped based on the popup's size. - /// - Wrapped - } - - /// - /// A class for displaying a prompt popup window. - /// - public class Prompt - { - /// - /// Gets the underlying modal instance. - /// - private Modal Modal { get; } = new(); - - /// - /// Gets or sets the label of the prompt. - /// - private string Label { get; set; } = string.Empty; - - /// - /// Gets or sets the dictionary of button labels and their corresponding actions. - /// - private Dictionary Buttons { get; set; } = []; - - /// - /// Gets or sets the text layout type for the prompt. - /// - private PromptTextLayoutType TextLayoutType { get; set; } - - /// - /// Opens the prompt popup with the specified title, label, and buttons. - /// - /// The title of the popup window. - /// The label of the input field. - /// The names and actions of the buttons. - public virtual void Open(string title, string label, Dictionary buttons) - => Open(title, label, buttons, customSize: Vector2.Zero); - - /// - /// Opens the prompt popup with the specified title, label, buttons, and custom size. - /// - /// The title of the popup window. - /// The label of the input field. - /// The names and actions of the buttons. - /// Custom size of the popup. - public virtual void Open(string title, string label, Dictionary buttons, Vector2 customSize) - => Open(title, label, buttons, textLayoutType: PromptTextLayoutType.Unformatted, customSize); - - /// - /// Opens the prompt popup with the specified parameters. - /// - /// The title of the popup window. - /// The label of the input field. - /// The names and actions of the buttons. - /// The layout type for the prompt text. - /// Custom size of the popup. - public void Open(string title, string label, Dictionary buttons, PromptTextLayoutType textLayoutType, Vector2 size) - { - // Wrapping text without a custom size will result in an incorrectly sized - // popup as the text will wrap based on the popup and the popup will size - // based on the text. - Debug.Assert((textLayoutType == PromptTextLayoutType.Unformatted) || (size != Vector2.Zero)); - - Label = label; - Buttons = buttons; - TextLayoutType = textLayoutType; - Modal.Open(title, ShowContent, size); - } - - /// - /// Displays the content of the prompt popup based on the text layout type. - /// - private void ShowContent() - { - switch (TextLayoutType) - { - case PromptTextLayoutType.Unformatted: - ImGui.TextUnformatted(Label); - break; - - case PromptTextLayoutType.Wrapped: - ImGui.TextWrapped(Label); - break; - - default: - throw new NotImplementedException(); - } - - ImGui.NewLine(); - - foreach ((string text, Action? action) in Buttons) - { - if (ImGui.Button(text)) - { - action?.Invoke(); - ImGui.CloseCurrentPopup(); - } - - ImGui.SameLine(); - } - } - - /// - /// Displays the modal if it is open. - /// - /// True if the modal is open; otherwise, false. - public bool ShowIfOpen() => Modal.ShowIfOpen(); - } -} diff --git a/ImGui.Popups/README.md b/ImGui.Popups/README.md deleted file mode 100644 index 2cfb5cd..0000000 --- a/ImGui.Popups/README.md +++ /dev/null @@ -1,251 +0,0 @@ -# ImGuiPopups - -[![Version](https://img.shields.io/badge/version-1.3.5-blue.svg)](VERSION.md) -[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE.md) - -A comprehensive library for custom popup windows and modal dialogs using ImGui.NET, providing a rich set of UI components for interactive applications. - -## Features - -### 🪟 Modal Windows -- **Modal**: Base modal window with customizable content and size -- **MessageOK**: Simple message dialog with OK button -- **Prompt**: Customizable prompt with multiple button options - -### 📝 Input Components -- **InputString**: Text input popup with validation -- **InputInt**: Integer input popup with numeric validation -- **InputFloat**: Floating-point input popup with numeric validation - -### 🔍 Selection Components -- **SearchableList**: Searchable dropdown list with filtering capabilities -- **FilesystemBrowser**: Advanced file/directory browser with: - - Open and Save modes - - File and Directory targeting - - Pattern filtering support - - Navigation breadcrumbs - -### ✨ Key Features -- **Responsive Design**: All popups adapt to content and custom sizing -- **Keyboard Navigation**: Full keyboard support with proper focus management -- **Validation**: Built-in input validation and error handling -- **Customizable**: Flexible styling and layout options -- **Type-Safe**: Generic components with strong typing - -## Installation - -### Package Manager Console -```powershell -Install-Package ktsu.ImGuiPopups -``` - -### .NET CLI -```bash -dotnet add package ktsu.ImGuiPopups -``` - -### PackageReference -```xml - -``` - -## Quick Start - -```csharp -using ktsu.ImGuiPopups; - -// Create popup instances (typically as class members) -private static readonly ImGuiPopups.MessageOK messageOK = new(); -private static readonly ImGuiPopups.InputString inputString = new(); -private static readonly ImGuiPopups.SearchableList searchableList = new(); - -// In your ImGui render loop -private void OnRender() -{ - // Show a simple message - if (ImGui.Button("Show Message")) - { - messageOK.Open("Information", "Hello, World!"); - } - - // Get text input from user - if (ImGui.Button("Get Input")) - { - inputString.Open("Enter Name", "Name:", "Default Name", - result => Console.WriteLine($"User entered: {result}")); - } - - // Show searchable selection - if (ImGui.Button("Select Item")) - { - var items = new[] { "Apple", "Banana", "Cherry", "Date" }; - searchableList.Open("Select Fruit", "Choose:", items, null, - item => item, // Text converter - selected => Console.WriteLine($"Selected: {selected}"), - Vector2.Zero); - } - - // Render all popups (call this once per frame) - messageOK.ShowIfOpen(); - inputString.ShowIfOpen(); - searchableList.ShowIfOpen(); -} -``` - -## Component Documentation - -### MessageOK -Simple message dialog with an OK button. - -```csharp -var messageOK = new ImGuiPopups.MessageOK(); -messageOK.Open("Title", "Your message here"); -``` - -### Input Components -Get validated input from users: - -```csharp -// String input -var inputString = new ImGuiPopups.InputString(); -inputString.Open("Enter Text", "Label:", "default", result => HandleString(result)); - -// Integer input -var inputInt = new ImGuiPopups.InputInt(); -inputInt.Open("Enter Number", "Value:", 42, result => HandleInt(result)); - -// Float input -var inputFloat = new ImGuiPopups.InputFloat(); -inputFloat.Open("Enter Float", "Value:", 3.14f, result => HandleFloat(result)); -``` - -### SearchableList -Searchable selection from a list of items: - -```csharp -var searchableList = new ImGuiPopups.SearchableList(); -searchableList.Open( - title: "Select Item", - label: "Choose an item:", - items: myItemList, - defaultItem: null, - getText: item => item.DisplayName, // How to display items - onConfirm: selected => HandleSelection(selected), - customSize: new Vector2(400, 300) -); -``` - -### FilesystemBrowser -Advanced file and directory browser: - -```csharp -var browser = new ImGuiPopups.FilesystemBrowser(); - -// Open file -browser.Open( - title: "Open File", - mode: FilesystemBrowserMode.Open, - target: FilesystemBrowserTarget.File, - startPath: Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), - onConfirm: path => OpenFile(path), - patterns: new[] { "*.txt", "*.md" } // Optional file filters -); - -// Save file -browser.Open( - title: "Save File", - mode: FilesystemBrowserMode.Save, - target: FilesystemBrowserTarget.File, - startPath: currentDirectory, - onConfirm: path => SaveFile(path) -); -``` - -### Custom Modal -Create custom modal dialogs: - -```csharp -var customModal = new ImGuiPopups.Modal(); -customModal.Open("Custom Dialog", () => { - ImGui.Text("Custom content here"); - if (ImGui.Button("Close")) - { - ImGui.CloseCurrentPopup(); - } -}, new Vector2(300, 200)); -``` - -## Advanced Usage - -### Custom Sizing -All popups support custom sizing: - -```csharp -// Fixed size -popup.Open("Title", "Content", new Vector2(400, 300)); - -// Auto-size (Vector2.Zero) -popup.Open("Title", "Content", Vector2.Zero); -``` - -### Text Layout Options -Prompts support different text layout modes: - -```csharp -var prompt = new ImGuiPopups.Prompt(); -prompt.Open("Title", "Long message text here...", - buttons: new() { { "OK", null }, { "Cancel", null } }, - textLayoutType: PromptTextLayoutType.Wrapped, // or Unformatted - size: new Vector2(400, 200) -); -``` - -### Validation and Error Handling -Input components provide built-in validation: - -```csharp -inputInt.Open("Enter Age", "Age (1-120):", 25, result => { - if (result < 1 || result > 120) - { - messageOK.Open("Error", "Age must be between 1 and 120"); - return; - } - ProcessAge(result); -}); -``` - -## Demo Application - -The repository includes a comprehensive demo application showcasing all components: - -```bash -git clone https://github.com/ktsu-dev/ImGuiPopups.git -cd ImGuiPopups -dotnet run --project ImGuiPopupsDemo -``` - -## Dependencies - -- [Hexa.NET.ImGui](https://www.nuget.org/packages/Hexa.NET.ImGui/) - ImGui.NET bindings -- [ktsu.Extensions](https://www.nuget.org/packages/ktsu.Extensions/) - Utility extensions -- [ktsu.CaseConverter](https://www.nuget.org/packages/ktsu.CaseConverter/) - String case conversion -- [ktsu.ScopedAction](https://www.nuget.org/packages/ktsu.ScopedAction/) - RAII-style actions -- [ktsu.StrongPaths](https://www.nuget.org/packages/ktsu.StrongPaths/) - Type-safe path handling -- [ktsu.TextFilter](https://www.nuget.org/packages/ktsu.TextFilter/) - Text filtering utilities -- [Microsoft.Extensions.FileSystemGlobbing](https://www.nuget.org/packages/Microsoft.Extensions.FileSystemGlobbing/) - File pattern matching - -## Contributing - -Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change. - -## License - -This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details. - -## Changelog - -See [CHANGELOG.md](CHANGELOG.md) for a detailed history of changes. - ---- - -**ktsu.dev** - Building tools for developers diff --git a/ImGui.Popups/SearchableList.cs b/ImGui.Popups/SearchableList.cs deleted file mode 100644 index b539f02..0000000 --- a/ImGui.Popups/SearchableList.cs +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Popups; - -using System; -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.CaseConverter; -using ktsu.TextFilter; - -public partial class ImGuiPopups -{ - /// - /// A popup window to allow the user to search and select an item from a list - /// - /// The type of the list elements - public class SearchableList where TItem : class - { - private TItem? cachedValue; - private TItem? selectedItem; - private string searchTerm = string.Empty; - private Action OnConfirm { get; set; } = null!; - private Func? GetText { get; set; } - private string Label { get; set; } = string.Empty; - private IEnumerable Items { get; set; } = []; - private Modal Modal { get; } = new(); - - /// - /// Open the popup and set the title, label, and default value. - /// - /// The title of the popup window. - /// The label of the input field. - /// /// The items to select from. - /// The default value of the input field. - /// A delegate to get the text representation of an item. - /// A callback to handle the new input value. - /// Custom size of the popup. - public void Open(string title, string label, IEnumerable items, TItem? defaultItem, Func? getText, Action onConfirm, Vector2 customSize) - { - searchTerm = string.Empty; - Label = label; - OnConfirm = onConfirm; - GetText = getText; - cachedValue = defaultItem; - Items = items; - Modal.Open(title, ShowContent, customSize); - } - - /// - /// Open the popup and set the title, label, and default value. - /// - /// The title of the popup window. - /// The label of the input field. - /// The items to select from. - /// The default value of the input field. - /// A delegate to get the text representation of an item. - /// A callback to handle the new input value. - public void Open(string title, string label, IEnumerable items, TItem? defaultItem, Func? getText, Action onConfirm) => Open(title, label, items, defaultItem, getText, onConfirm, Vector2.Zero); - - /// - /// Open the popup and set the title, label, and default value. - /// - /// The title of the popup window. - /// The label of the input field. - /// The items to select from. - /// A callback to handle the new input value. - public void Open(string title, string label, IEnumerable items, Action onConfirm) => Open(title, label, items, null, null, onConfirm); - - /// - /// Open the popup and set the title, label, and default value. - /// - /// The title of the popup window. - /// The label of the input field. - /// The items to select from. - /// A delegate to get the text representation of an item. - /// A callback to handle the new input value. - public void Open(string title, string label, IEnumerable items, Func getText, Action onConfirm) => Open(title, label, items, null, getText, onConfirm); - - /// - /// Show the content of the popup. - /// - private void ShowContent() - { - ImGui.TextUnformatted(Label); - ImGui.NewLine(); - if (!Modal.WasOpen && !ImGui.IsItemFocused()) - { - ImGui.SetKeyboardFocusHere(); - } - - if (ImGui.InputText("##Search", ref searchTerm, 255, ImGuiInputTextFlags.EnterReturnsTrue)) - { - TItem? confirmedItem = cachedValue ?? selectedItem; - if (confirmedItem is not null) - { - OnConfirm(confirmedItem); - ImGui.CloseCurrentPopup(); - } - } - - Dictionary itemLookup = Items.Select(item => (item, itemString: item.ToString() ?? string.Empty)) - .Where(x => !string.IsNullOrEmpty(x.itemString)) - .DistinctBy(x => x.itemString) - .ToDictionary(x => x.itemString, x => x.item); - - IEnumerable sortedStrings = TextFilter.Rank(itemLookup.Keys, searchTerm); - - if (ImGui.BeginListBox("##List")) - { - selectedItem = null; - foreach (string itemString in sortedStrings) - { - if (!itemLookup.TryGetValue(itemString, out TItem? item)) - { - continue; - } - - //if nothing has been explicitly selected, select the first item which will be the best match - if (selectedItem is null && cachedValue is null) - { - selectedItem = item; - } - - string displayText = GetText?.Invoke(item) ?? item.ToString() ?? string.Empty; - - if (ImGui.Selectable(displayText, item == (cachedValue ?? selectedItem))) - { - cachedValue = item; - } - } - - ImGui.EndListBox(); - } - - if (ImGui.Button($"OK###{Modal.Title.ToSnakeCase()}_OK")) - { - TItem? confirmedItem = cachedValue ?? selectedItem; - if (confirmedItem is not null) - { - OnConfirm(confirmedItem); - ImGui.CloseCurrentPopup(); - } - } - - ImGui.SameLine(); - if (ImGui.Button($"Cancel###{Modal.Title.ToSnakeCase()}_Cancel")) - { - ImGui.CloseCurrentPopup(); - } - } - - /// - /// Show the modal if it is open. - /// - /// True if the modal is open. - public bool ShowIfOpen() => Modal.ShowIfOpen(); - } -} diff --git a/ImGui.Styler/Alignment.cs b/ImGui.Styler/Alignment.cs deleted file mode 100644 index 869518a..0000000 --- a/ImGui.Styler/Alignment.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ScopedAction; - -/// -/// Provides methods for aligning content within a container. -/// -public static class Alignment -{ - /// - /// Centers the content within the available content region. - /// - /// The size of the content to be centered. - public class Center(Vector2 contentSize) : CenterWithin(contentSize, new Vector2(ImGui.GetContentRegionAvail().X, contentSize.Y)) - { - } - - /// - /// Centers the content within a specified container size. - /// - public class CenterWithin : ScopedAction - { - /// - /// Initializes a new instance of the class. - /// - /// The size of the content to be centered. - /// The size of the container within which the content will be centered. - public CenterWithin(Vector2 contentSize, Vector2 containerSize) - { - // We need to manipulate the cursor a lot to support the layout of this widget and - // integrate with the layout methods of ImGui (eg. SameLine). Because contentDrawDelegate - // is called after the Dummy() it means that CursorPosPrevLine is set to an unexpected value - // so we "abuse" setting the cursor and calling NewLine to force CursorPosPrevLine to be what we need. - - // - Move the cursor to the top left of the content - // - Move the cursor to the top right of the container - // - Make a dummy with the height of the container so that the cursor will advance to - // a new line after the container size, while support ImGui.NewLine() to work as expected - Vector2 cursorContainerTopLeft = ImGui.GetCursorScreenPos(); - Vector2 clippedsize = new(Math.Min(contentSize.X, containerSize.X), Math.Min(contentSize.Y, containerSize.Y)); - Vector2 offset = (containerSize - clippedsize) / 2; - Vector2 cursorContentStart = cursorContainerTopLeft + offset; - ImGui.SetCursorScreenPos(cursorContentStart); - - OnClose = () => - { - ImGui.SetCursorScreenPos(cursorContainerTopLeft + new Vector2(containerSize.X, 0f)); - ImGui.Dummy(new Vector2(0, containerSize.Y)); - }; - } - } -} diff --git a/ImGui.Styler/Button.cs b/ImGui.Styler/Button.cs deleted file mode 100644 index eb14ce3..0000000 --- a/ImGui.Styler/Button.cs +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System.Numerics; - -using Hexa.NET.ImGui; - -/// -/// Provides functionality for creating and aligning buttons in ImGui. -/// -public static class Button -{ - /// - /// Contains methods for aligning buttons. - /// - public static class Alignment - { - /// - /// Aligns the button text to the left. - /// - /// A scoped button alignment with left alignment. - public static ScopedButtonAlignment Left() => new(new(0f, 0.5f)); - - /// - /// Aligns the button text to the center. - /// - /// A scoped button alignment with center alignment. - public static ScopedButtonAlignment Center() => new(new(0.5f, 0.5f)); - - /// - /// Represents a scoped button alignment. - /// - /// The alignment vector. - public class ScopedButtonAlignment(Vector2 vector) : ScopedStyleVar(ImGuiStyleVar.ButtonTextAlign, vector) - { - } - } -} diff --git a/ImGui.Styler/Color.cs b/ImGui.Styler/Color.cs deleted file mode 100644 index 6c95655..0000000 --- a/ImGui.Styler/Color.cs +++ /dev/null @@ -1,437 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System.Globalization; -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ThemeProvider; - -/// -/// Provides methods for creating and manipulating colors in ImGui. -/// -public static class Color -{ - /// - /// Represents the optimal text contrast ratio for accessibility. - /// - public const float OptimalTextContrastRatio = 4.5f; - - #region Color Creation Methods - - /// - /// Converts a hexadecimal color string to an object. - /// - /// The hexadecimal color string in the format #RRGGBB or #RRGGBBAA. - /// An object representing the color. - /// Thrown when the is null. - /// Thrown when the is not in the correct format. - public static ImColor FromHex(string hex) - { - ArgumentNullException.ThrowIfNull(hex, nameof(hex)); - - if (hex.StartsWith('#')) - { - hex = hex[1..]; - } - - if (hex.Length == 6) - { - hex += "FF"; - } - - if (hex.Length != 8) - { - throw new ArgumentException("Hex color must be in the format #RRGGBB or #RRGGBBAA", nameof(hex)); - } - - byte r = byte.Parse(hex.AsSpan(0, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture); - byte g = byte.Parse(hex.AsSpan(2, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture); - byte b = byte.Parse(hex.AsSpan(4, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture); - byte a = byte.Parse(hex.AsSpan(6, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture); - - return FromRGBA(r, g, b, a); - } - - /// - /// Creates an object from RGB byte values. - /// - /// The red component value (0-255). - /// The green component value (0-255). - /// The blue component value (0-255). - /// An object representing the color. - public static ImColor FromRGB(byte r, byte g, byte b) => new() - { - Value = new Vector4(r / 255f, g / 255f, b / 255f, 1f) - }; - - /// - /// Creates an object from RGBA byte values. - /// - /// The red component value (0-255). - /// The green component value (0-255). - /// The blue component value (0-255). - /// The alpha component value (0-255). - /// An object representing the color. - public static ImColor FromRGBA(byte r, byte g, byte b, byte a) => new() - { - Value = new Vector4(r / 255f, g / 255f, b / 255f, a / 255f) - }; - - /// - /// Creates an object from RGB float values. - /// - /// The red component value (0-1). - /// The green component value (0-1). - /// The blue component value (0-1). - /// An object representing the color. - public static ImColor FromRGB(float r, float g, float b) => new() - { - Value = new Vector4(r, g, b, 1f) - }; - - /// - /// Creates an object from RGBA float values. - /// - /// The red component value (0-1). - /// The green component value (0-1). - /// The blue component value (0-1). - /// The alpha component value (0-1). - /// An object representing the color. - public static ImColor FromRGBA(float r, float g, float b, float a) => new() - { - Value = new Vector4(r, g, b, a) - }; - - /// - /// Creates an object from a . - /// - /// The vector containing RGB values. - /// An object representing the color. - public static ImColor FromVector(Vector3 vector) => new() - { - Value = new Vector4(vector.X, vector.Y, vector.Z, 1f) - }; - - /// - /// Creates an object from a . - /// - /// The vector containing RGBA values. - /// An object representing the color. - public static ImColor FromVector(Vector4 vector) => new() - { - Value = vector - }; - - /// - /// Creates an object from HSL values. - /// - /// The vector containing HSL values. - /// An object representing the color. - public static ImColor FromHSL(Vector3 vector) => FromHSLA(vector.X, vector.Y, vector.Z, 1); - - /// - /// Creates an object from HSLA values. - /// - /// The vector containing HSLA values. - /// An object representing the color. - public static ImColor FromHSLA(Vector4 vector) => FromHSLA(vector.X, vector.Y, vector.Z, vector.W); - - /// - /// Creates an object from HSL values. - /// - /// The hue component value (0-1). - /// The saturation component value (0-1). - /// The lightness component value (0-1). - /// An object representing the color. - public static ImColor FromHSL(float h, float s, float l) => FromHSLA(h, s, l, 1); - - /// - /// Creates an object from HSLA values. - /// - /// The hue component value (0-1). - /// The saturation component value (0-1). - /// The lightness component value (0-1). - /// The alpha component value (0-1). - /// An object representing the color. - public static ImColor FromHSLA(float h, float s, float l, float a) - { - float r, g, b; - - if (s == 0) - { - r = g = b = l; - } - else - { - float q = l < 0.5f ? l * (1f + s) : l + s - (l * s); - float p = (2f * l) - q; - r = HueToRGB(p, q, h + (1f / 3f)); - g = HueToRGB(p, q, h); - b = HueToRGB(p, q, h - (1f / 3f)); - } - - return FromRGBA(r, g, b, a); - } - - /// - /// Converts a PerceptualColor from ThemeProvider to an ImColor. - /// - /// The PerceptualColor to convert. - /// An ImColor representing the same color. - public static ImColor FromPerceptualColor(PerceptualColor color) - { - RgbColor rgb = color.RgbValue; - return FromRGBA(rgb.R, rgb.G, rgb.B, 1f); - } - - #endregion - - #region Private Helper Methods - - /// - /// Converts a hue to an RGB component. - /// - /// The first parameter for the conversion. - /// The second parameter for the conversion. - /// The hue value. - /// The RGB component value. - [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0046:Convert to conditional expression", Justification = "Clarity over brevity")] - private static float HueToRGB(float p, float q, float t) - { - if (t < 0) - { - t += 1; - } - - if (t > 1) - { - t -= 1; - } - - if (t < 1f / 6f) - { - return p + ((q - p) * 6f * t); - } - - if (t < 1f / 2f) - { - return q; - } - - if (t < 2f / 3f) - { - return p + ((q - p) * ((2f / 3f) - t) * 6f); - } - - return p; - } - - /// - /// Gets a semantic color from the current theme, or a fallback color if no theme is applied. - /// This should only be used for semantic UI meanings. - /// - /// The semantic meaning of the color. - /// The priority level for the color. - /// The fallback color to use if no theme is applied. - /// An ImColor from the current theme or the fallback color. - private static ImColor GetSemanticColor(SemanticMeaning meaning, Priority priority, ImColor fallbackColor) - { - // Check if a theme is currently applied - if (Theme.CurrentTheme is not null) - { - try - { - // Create a semantic color request - SemanticColorRequest request = new(meaning, priority); - - // Use SemanticColorMapper to get the color from the current theme - IReadOnlyDictionary colorMapping = SemanticColorMapper.MapColors([request], Theme.CurrentTheme.CreateInstance()); - - if (colorMapping.TryGetValue(request, out PerceptualColor perceptualColor)) - { - return FromPerceptualColor(perceptualColor); - } - } - catch (ArgumentException) - { - // Invalid arguments for theme mapping - } - catch (InvalidOperationException) - { - // Theme operation failed - } - } - - // Fall back to hardcoded color if no theme is applied or mapping fails - return fallbackColor; - } - - /// - /// Gets a color from the current theme that is closest to the desired default color, - /// or returns the fallback color if no theme is applied. - /// This preserves the intended hue while adapting to the theme's color scheme. - /// - /// The default hardcoded color to find a close match for. - /// An ImColor that's close to the fallback color within the current theme, or the fallback color itself. - private static ImColor GetThemeColor(ImColor fallbackColor) - { - // Check if a theme is currently applied and get its complete palette - IReadOnlyDictionary? completePalette = Theme.GetCurrentThemeCompletePalette(); - if (completePalette is not null) - { - try - { - // Convert the fallback color to PerceptualColor for comparison - RgbColor fallbackRgb = new(fallbackColor.Value.X, fallbackColor.Value.Y, fallbackColor.Value.Z); - PerceptualColor targetColor = new(fallbackRgb); - - PerceptualColor? closestColor = null; - float closestDistance = float.MaxValue; - - // Search through the complete palette to find the closest match - // This is much more efficient than nested loops through semantic mappings - foreach (PerceptualColor color in completePalette.Values) - { - float distance = targetColor.SemanticDistanceTo(color); - if (distance < closestDistance) - { - closestDistance = distance; - closestColor = color; - } - } - - // If we found a reasonably close color, use it - if (closestColor.HasValue && closestDistance < 0.3f) // Reasonable similarity threshold - { - return FromPerceptualColor(closestColor.Value); - } - } - catch (ArgumentException) - { - // Invalid arguments for theme color matching - } - catch (InvalidOperationException) - { - // Theme operation failed - } - } - - // Fall back to hardcoded color if no theme is applied or no close match found - return fallbackColor; - } - - #endregion - - /// - /// Comprehensive color palette with organized categories. - /// Semantic colors are sourced from the current theme's semantic meanings. - /// Other colors try to find close matches in the theme while preserving intended hues. - /// - public static class Palette - { - /// - /// Basic primary and secondary colors. - /// These try to find close colors in the current theme while preserving the intended hue. - /// - public static class Basic - { -#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member - public static ImColor Red => GetThemeColor(FromHex("#ff4a49")); - public static ImColor Green => GetThemeColor(FromHex("#49ff4a")); - public static ImColor Blue => GetThemeColor(FromHex("#49a3ff")); - public static ImColor Yellow => GetThemeColor(FromHex("#ecff49")); - public static ImColor Cyan => GetThemeColor(FromHex("#49feff")); - public static ImColor Magenta => GetThemeColor(FromHex("#ff49fe")); - public static ImColor Orange => GetThemeColor(FromHex("#ffa549")); - public static ImColor Pink => GetThemeColor(FromHex("#ff49a3")); - public static ImColor Lime => GetThemeColor(FromHex("#a3ff49")); - public static ImColor Purple => GetThemeColor(FromHex("#c949ff")); -#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member - } - - /// - /// Neutral colors for backgrounds, borders, and subtle elements. - /// These try to find close colors in the current theme while preserving the intended lightness. - /// - public static class Neutral - { -#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member - public static ImColor White => GetThemeColor(FromHex("#ffffff")); - public static ImColor Black => GetThemeColor(FromHex("#000000")); - public static ImColor Gray => GetThemeColor(FromHex("#808080")); - public static ImColor LightGray => GetThemeColor(FromHex("#c0c0c0")); - public static ImColor DarkGray => GetThemeColor(FromHex("#404040")); - public static ImColor Transparent => FromHex("#00000000"); // Always transparent -#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member - } - - /// - /// Semantic colors for UI states and meanings. - /// These are mapped directly to their semantic meanings in the current theme. - /// - public static class Semantic - { -#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member - public static ImColor Error => GetSemanticColor(SemanticMeaning.Error, Priority.High, Basic.Red); - public static ImColor Warning => GetSemanticColor(SemanticMeaning.Warning, Priority.High, Basic.Orange); - public static ImColor Success => GetSemanticColor(SemanticMeaning.Success, Priority.High, Basic.Green); - public static ImColor Info => GetSemanticColor(SemanticMeaning.Information, Priority.High, Basic.Cyan); - public static ImColor Primary => GetSemanticColor(SemanticMeaning.Primary, Priority.High, Basic.Blue); - public static ImColor Secondary => GetSemanticColor(SemanticMeaning.Alternate, Priority.High, Basic.Purple); -#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member - } - - /// - /// Natural and earthy colors. - /// These try to find close colors in the current theme while preserving the intended natural hue. - /// - public static class Natural - { -#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member - public static ImColor Brown => GetThemeColor(FromRGB(165, 42, 42)); - public static ImColor Olive => GetThemeColor(FromRGB(128, 128, 0)); - public static ImColor Maroon => GetThemeColor(FromRGB(128, 0, 0)); - public static ImColor Navy => GetThemeColor(FromRGB(0, 0, 128)); - public static ImColor Teal => GetThemeColor(FromRGB(0, 128, 128)); - public static ImColor Indigo => GetThemeColor(FromRGB(75, 0, 130)); -#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member - } - - /// - /// Vibrant and colorful shades. - /// These try to find close colors in the current theme while preserving the intended vibrant character. - /// - public static class Vibrant - { -#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member - public static ImColor Coral => GetThemeColor(FromRGB(255, 127, 80)); - public static ImColor Salmon => GetThemeColor(FromRGB(250, 128, 114)); - public static ImColor Turquoise => GetThemeColor(FromRGB(64, 224, 208)); - public static ImColor Violet => GetThemeColor(FromRGB(238, 130, 238)); - public static ImColor Gold => GetThemeColor(FromRGB(255, 215, 0)); - public static ImColor Silver => GetThemeColor(FromRGB(192, 192, 192)); -#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member - } - - /// - /// Soft, pastel colors for gentle UIs. - /// These try to find close colors in the current theme while preserving the intended pastel softness. - /// - public static class Pastel - { -#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member - public static ImColor Beige => GetThemeColor(FromRGB(245, 245, 220)); - public static ImColor Peach => GetThemeColor(FromRGB(255, 218, 185)); - public static ImColor Mint => GetThemeColor(FromRGB(189, 252, 201)); - public static ImColor Lavender => GetThemeColor(FromRGB(230, 230, 250)); - public static ImColor Khaki => GetThemeColor(FromRGB(240, 230, 140)); - public static ImColor Plum => GetThemeColor(FromRGB(221, 160, 221)); -#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member - } - } -} diff --git a/ImGui.Styler/ColorExtensions.cs b/ImGui.Styler/ColorExtensions.cs deleted file mode 100644 index 35e3009..0000000 --- a/ImGui.Styler/ColorExtensions.cs +++ /dev/null @@ -1,329 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System.Numerics; -using Hexa.NET.ImGui; - -/// -/// Extension methods for color manipulation and analysis. -/// -public static class ColorExtensions -{ - /// - /// Desaturates the color by a specified amount. - /// - /// The original color. - /// The amount to desaturate (0-1). - /// A new object with the adjusted saturation. - public static ImColor DesaturateBy(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.Y = Math.Clamp(hsla.Y - amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Saturates the color by a specified amount. - /// - /// The original color. - /// The amount to saturate (0-1). - /// A new object with the adjusted saturation. - public static ImColor SaturateBy(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.Y = Math.Clamp(hsla.Y + amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Sets the saturation of the color to a specified amount. - /// - /// The original color. - /// The new saturation value (0-1). - /// A new object with the adjusted saturation. - public static ImColor WithSaturation(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.Y = Math.Clamp(amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Multiplies the saturation of the color by a specified amount. - /// - /// The original color. - /// The factor to multiply the saturation by. - /// A new object with the adjusted saturation. - public static ImColor MultiplySaturation(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.Y = Math.Clamp(hsla.Y * amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Offsets the hue of the color by a specified amount. - /// - /// The original color. - /// The amount to offset the hue by (0-1). - /// A new object with the adjusted hue. - public static ImColor OffsetHue(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.X = (1f + (hsla.X + amount)) % 1f; - return Color.FromHSLA(hsla); - } - - /// - /// Lightens the color by a specified amount. - /// - /// The original color. - /// The amount to lighten the color by (0-1). - /// A new object with the adjusted lightness. - public static ImColor LightenBy(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.Z = Math.Clamp(hsla.Z + amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Darkens the color by a specified amount. - /// - /// The original color. - /// The amount to darken the color by (0-1). - /// A new object with the adjusted lightness. - public static ImColor DarkenBy(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.Z = Math.Clamp(hsla.Z - amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Sets the luminance of the color to a specified amount. - /// - /// The original color. - /// The new luminance value (0-1). - /// A new object with the adjusted luminance. - public static ImColor WithLuminance(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.Z = Math.Clamp(amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Multiplies the luminance of the color by a specified amount. - /// - /// The original color. - /// The factor to multiply the luminance by. - /// A new object with the adjusted luminance. - public static ImColor MultiplyLuminance(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.Z = Math.Clamp(hsla.Z * amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Sets the alpha of the color to a specified amount. - /// - /// The original color. - /// The new alpha value (0-1). - /// A new object with the adjusted alpha. - public static ImColor WithAlpha(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.W = Math.Clamp(amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Converts the color to grayscale. - /// - /// The original color. - /// A new object in grayscale. - public static ImColor ToGrayscale(this ImColor color) => color.WithSaturation(0); - - /// - /// Converts the color to HSLA (Hue, Saturation, Lightness, Alpha) format. - /// - /// The original color. - /// A representing the color in HSLA format. - [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0045:Convert to conditional expression", Justification = "Clarity over brevity")] - public static Vector4 ToHSLA(this ImColor color) - { - float r = color.Value.X; - float g = color.Value.Y; - float b = color.Value.Z; - float a = color.Value.W; - - float max = Math.Max(r, Math.Max(g, b)); - float min = Math.Min(r, Math.Min(g, b)); - float h, s, l = (max + min) / 2f; - - if (max == min) - { - h = s = 0; - } - else - { - float d = max - min; - s = l > 0.5f ? d / (2f - max - min) : d / (max + min); - if (max == r) - { - h = (g - b) / d; - } - else if (max == g) - { - h = ((b - r) / d) + 2; - } - else - { - h = ((r - g) / d) + 4; - } - - h /= 6; - if (h < 0) - { - h += 1; - } - } - - return new Vector4(h, s, l, a); - } - - /// - /// Gets the relative luminance of the color. - /// - /// The original color. - /// The relative luminance of the color. - public static float GetRelativeLuminance(this ImColor color) => - (color.Value.X * 0.2126f) + (color.Value.Y * 0.7152f) + (color.Value.Z * 0.0722f); - - /// - /// Calculates the contrast ratio of the color over a background color. - /// - /// The original color. - /// The background color. - /// The contrast ratio of the color over the background color. - public static float GetContrastRatioOver(this ImColor color, ImColor background) - { - float relativeLuminance = color.GetRelativeLuminance(); - float backgroundRelativeLuminance = background.GetRelativeLuminance(); - - // Ensure lighter color is in numerator for proper contrast ratio calculation - float lighter = Math.Max(relativeLuminance, backgroundRelativeLuminance); - float darker = Math.Min(relativeLuminance, backgroundRelativeLuminance); - - return (lighter + 0.05f) / (darker + 0.05f); - } - - /// - /// Calculates the optimal contrasting color for the given color. - /// - /// The original color. - /// A new object representing the optimal contrasting color. - public static ImColor CalculateOptimalContrastingColor(this ImColor color) - { - // Try pure white and pure black first as they often provide the best contrast - ImColor white = Color.FromRGBA(1f, 1f, 1f, 1f); - ImColor black = Color.FromRGBA(0f, 0f, 0f, 1f); - - float whiteContrast = white.GetContrastRatioOver(color); - float blackContrast = black.GetContrastRatioOver(color); - - // If either pure white or black provides sufficient contrast, use the better one - if (whiteContrast >= Color.OptimalTextContrastRatio || blackContrast >= Color.OptimalTextContrastRatio) - { - return whiteContrast > blackContrast ? white : black; - } - - // Otherwise, search for optimal luminance - float bestLuminance = 0; - float bestContrast = 0; - int steps = 256; - - for (int i = 0; i < steps; i++) - { - float l = i / (steps - 1f); - ImColor candidateColor = color.WithLuminance(l); - float contrast = candidateColor.GetContrastRatioOver(color); - - if (contrast > bestContrast) - { - bestContrast = contrast; - bestLuminance = l; - } - } - - return color.WithLuminance(bestLuminance); - } - - /// - /// Adjusts the background color to provide sufficient contrast for the given text color. - /// - /// The background color to adjust. - /// The text color that needs to be readable. - /// The target contrast ratio. If not specified, uses the optimal text contrast ratio. - /// A new object representing the adjusted background color. - public static ImColor AdjustForSufficientContrast(this ImColor backgroundColor, ImColor textColor, float? targetContrastRatio = null) - { - float targetRatio = targetContrastRatio ?? Color.OptimalTextContrastRatio; - float currentContrast = textColor.GetContrastRatioOver(backgroundColor); - - // If contrast is already sufficient, return the original color - if (currentContrast >= targetRatio) - { - return backgroundColor; - } - - // Search for optimal luminance that provides the target contrast - float bestLuminance = backgroundColor.ToHSLA().Z; - float bestContrast = currentContrast; - int steps = 256; - - // Try different luminance values to find one that provides sufficient contrast - for (int i = 0; i < steps; i++) - { - float l = i / (steps - 1f); - ImColor candidateBackground = backgroundColor.WithLuminance(l); - float contrast = textColor.GetContrastRatioOver(candidateBackground); - - // If we found sufficient contrast, prefer the luminance closest to original - if (contrast >= targetRatio) - { - float luminanceDifference = Math.Abs(l - backgroundColor.ToHSLA().Z); - float currentBestDifference = Math.Abs(bestLuminance - backgroundColor.ToHSLA().Z); - - if (contrast > bestContrast || - (contrast >= targetRatio && luminanceDifference < currentBestDifference)) - { - bestContrast = contrast; - bestLuminance = l; - } - } - } - - return backgroundColor.WithLuminance(bestLuminance); - } - - /// - /// Calculates the color distance between two colors using Euclidean distance in RGB space. - /// - /// The first color. - /// The second color. - /// The color distance between the two colors (0.0 to ~1.73). - public static float GetColorDistance(this ImColor color1, ImColor color2) - { - float deltaR = color1.Value.X - color2.Value.X; - float deltaG = color1.Value.Y - color2.Value.Y; - float deltaB = color1.Value.Z - color2.Value.Z; - - return (float)Math.Sqrt((deltaR * deltaR) + (deltaG * deltaG) + (deltaB * deltaB)); - } -} diff --git a/ImGui.Styler/CompatibilitySuppressions.xml b/ImGui.Styler/CompatibilitySuppressions.xml deleted file mode 100644 index c54eb32..0000000 --- a/ImGui.Styler/CompatibilitySuppressions.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - CP0001 - T:System.Diagnostics.CodeAnalysis.FeatureGuardAttribute - lib/net8.0/ktsu.ImGui.Styler.dll - lib/net9.0/ktsu.ImGui.Styler.dll - - - CP0001 - T:System.Diagnostics.CodeAnalysis.FeatureSwitchDefinitionAttribute - lib/net8.0/ktsu.ImGui.Styler.dll - lib/net9.0/ktsu.ImGui.Styler.dll - - - CP0001 - T:System.Diagnostics.DebuggerDisableUserUnhandledExceptionsAttribute - lib/net8.0/ktsu.ImGui.Styler.dll - lib/net9.0/ktsu.ImGui.Styler.dll - - - CP0001 - T:System.Runtime.CompilerServices.OverloadResolutionPriorityAttribute - lib/net8.0/ktsu.ImGui.Styler.dll - lib/net9.0/ktsu.ImGui.Styler.dll - - - CP0001 - T:System.Runtime.CompilerServices.ParamCollectionAttribute - lib/net8.0/ktsu.ImGui.Styler.dll - lib/net9.0/ktsu.ImGui.Styler.dll - - - CP0001 - T:System.Threading.Lock - lib/net8.0/ktsu.ImGui.Styler.dll - lib/net9.0/ktsu.ImGui.Styler.dll - - - CP0014 - M:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.get_UrlFormat:[T:System.Runtime.CompilerServices.CompilerGeneratedAttribute] - lib/net8.0/ktsu.ImGui.Styler.dll - lib/net9.0/ktsu.ImGui.Styler.dll - - - CP0014 - M:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.set_UrlFormat(System.String):[T:System.Runtime.CompilerServices.CompilerGeneratedAttribute] - lib/net8.0/ktsu.ImGui.Styler.dll - lib/net9.0/ktsu.ImGui.Styler.dll - - \ No newline at end of file diff --git a/ImGui.Styler/DESCRIPTION.md b/ImGui.Styler/DESCRIPTION.md deleted file mode 100644 index fe9a195..0000000 --- a/ImGui.Styler/DESCRIPTION.md +++ /dev/null @@ -1 +0,0 @@ -A library for expressively styling ImGui.NET interfaces. diff --git a/ImGui.Styler/ImGui.Styler.csproj b/ImGui.Styler/ImGui.Styler.csproj deleted file mode 100644 index b0b090e..0000000 --- a/ImGui.Styler/ImGui.Styler.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - true - net8.0;net9.0; - - - - - - - - - - diff --git a/ImGui.Styler/Indent.cs b/ImGui.Styler/Indent.cs deleted file mode 100644 index 0909b39..0000000 --- a/ImGui.Styler/Indent.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using Hexa.NET.ImGui; - -using ktsu.ScopedAction; - -/// -/// Provides methods to create scoped indents for ImGui. -/// -public static class Indent -{ - /// - /// Creates a scoped indent with the default width. - /// - /// A new instance of . - public static ScopedIndent ByDefault() => new(); - - /// - /// Creates a scoped indent with a specified width. - /// - /// The width of the indent. - /// A new instance of . - public static ScopedIndentBy By(float width) => new(width); - - /// - /// Represents a scoped indent action. - /// - public class ScopedIndent : ScopedAction - { - /// - /// Initializes a new instance of the class. - /// - public ScopedIndent() : base(ImGui.Indent, ImGui.Unindent) { } - } - - /// - /// Represents a scoped indent action with a specified width. - /// - public class ScopedIndentBy : ScopedStyleVar - { - /// - /// Initializes a new instance of the class with a specified width. - /// - /// The width of the indent. - public ScopedIndentBy(float width) : base(ImGuiStyleVar.IndentSpacing, width) - { - ImGui.Indent(width); - Action? onClose = OnClose; - OnClose = () => - { - ImGui.Unindent(width); - onClose?.Invoke(); - }; - } - } -} diff --git a/ImGui.Styler/README.md b/ImGui.Styler/README.md deleted file mode 100644 index 1e729a9..0000000 --- a/ImGui.Styler/README.md +++ /dev/null @@ -1,350 +0,0 @@ -# ImGuiStyler 🎨 - -[![Version](https://img.shields.io/badge/version-1.3.10-blue.svg)](VERSION.md) -[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE.md) - -**A powerful, expressive styling library for ImGui.NET interfaces** that simplifies theme management, provides scoped styling utilities, and offers advanced color manipulation with accessibility features. - -## ✨ Features - -### 🎨 **Advanced Theme System** -- **50+ Built-in Themes**: Comprehensive collection including Catppuccin, Dracula, Gruvbox, Tokyo Night, Nord, and many more -- **Interactive Theme Browser**: Visual theme selection with live preview and categorization -- **Semantic Theme Support**: Leverages `ktsu.ThemeProvider` for consistent, semantic color theming -- **Scoped Theme Application**: Apply themes to specific UI sections without affecting the global style - -### 🎯 **Precise Alignment Tools** -- **Automatic Content Centering**: Center any content within containers or available regions -- **Flexible Container Alignment**: Align content within custom-sized containers -- **Layout Integration**: Seamlessly works with ImGui's existing layout system - -### 🌈 **Advanced Color Management** -- **Hex Color Support**: Direct conversion from hex strings to ImGui colors -- **Accessibility-First**: Automatic contrast calculation and optimal text color selection -- **Color Manipulation**: Lighten, darken, and adjust colors programmatically -- **Scoped Color Application**: Apply colors to specific UI elements without side effects - -### 🔧 **Scoped Styling System** -- **Style Variables**: Apply temporary style modifications with automatic cleanup -- **Text Colors**: Scoped text color changes with proper restoration -- **Theme Colors**: Apply theme-based colors to specific UI sections -- **Memory Safe**: Automatic resource management and style restoration - -## 📦 Installation - -Add ImGuiStyler to your project via NuGet: - -```xml - -``` - -Or via Package Manager Console: -```powershell -Install-Package ktsu.ImGuiStyler -``` - -## 🚀 Quick Start - -```csharp -using ktsu.ImGuiStyler; -using Hexa.NET.ImGui; - -// Apply a global theme -Theme.Apply("TokyoNight"); - -// Use scoped styling for specific elements -using (new ScopedColor(ImGuiCol.Text, Color.FromHex("#ff6b6b"))) -{ - ImGui.Text("This text is red!"); -} - -// Center content automatically -using (new Alignment.Center(ImGui.CalcTextSize("Centered!"))) -{ - ImGui.Text("Centered!"); -} -``` - -## 📚 Comprehensive Usage Guide - -### 🎨 Theme Management - -#### Applying Global Themes -```csharp -// Apply any of the 50+ built-in themes -Theme.Apply("Catppuccin.Mocha"); -Theme.Apply("Gruvbox.Dark"); -Theme.Apply("Tokyo Night"); - -// Get current theme information -string? currentTheme = Theme.CurrentThemeName; -bool isCurrentThemeDark = Theme.IsCurrentThemeDark; - -// Reset to default ImGui theme -Theme.Reset(); -``` - -#### Interactive Theme Browser -```csharp -// Show the theme browser modal -if (ImGui.Button("Choose Theme")) -{ - Theme.ShowThemeSelector("Select a Theme"); -} - -// Render the theme selector (call this in your main render loop) -if (Theme.RenderThemeSelector()) -{ - Console.WriteLine($"Theme changed to: {Theme.CurrentThemeName}"); -} -``` - -#### Scoped Theme Application -```csharp -using (new ScopedTheme("Dracula")) -{ - ImGui.Text("This text uses Dracula theme"); - ImGui.Button("Themed button"); - - using (new ScopedTheme("Nord")) - { - ImGui.Text("Nested Nord theme"); - } - // Automatically reverts to Dracula -} -// Automatically reverts to previous theme -``` - -### 🌈 Color Management - -#### Creating Colors -```csharp -// From hex strings -ImColor red = Color.FromHex("#ff0000"); -ImColor blueWithAlpha = Color.FromHex("#0066ffcc"); - -// From RGB values -ImColor green = Color.FromRGB(0, 255, 0); -ImColor customColor = Color.FromRGBA(255, 128, 64, 200); - -// From HSV -ImColor rainbow = Color.FromHSV(0.83f, 1.0f, 1.0f); // Purple -``` - -#### Color Manipulation -```csharp -ImColor baseColor = Color.FromHex("#3498db"); - -// Adjust brightness -ImColor lighter = Color.Lighten(baseColor, 0.3f); -ImColor darker = Color.Darken(baseColor, 0.2f); - -// Accessibility-focused text colors -ImColor optimalText = Color.GetOptimalTextColor(baseColor); -ImColor contrastText = Color.GetContrastingTextColor(baseColor); -``` - -#### Scoped Color Application -```csharp -// Scoped text color -using (new ScopedTextColor(Color.FromHex("#e74c3c"))) -{ - ImGui.Text("Red text"); -} - -// Scoped UI element color -using (new ScopedColor(ImGuiCol.Button, Color.FromHex("#2ecc71"))) -{ - ImGui.Button("Green button"); -} - -// Multiple scoped colors -using (new ScopedColor(ImGuiCol.Button, Color.FromHex("#9b59b6"))) -using (new ScopedColor(ImGuiCol.ButtonHovered, Color.FromHex("#8e44ad"))) -using (new ScopedColor(ImGuiCol.ButtonActive, Color.FromHex("#71368a"))) -{ - ImGui.Button("Fully styled button"); -} -``` - -### 🎯 Alignment and Layout - -#### Content Centering -```csharp -// Center text -string text = "Perfectly centered!"; -using (new Alignment.Center(ImGui.CalcTextSize(text))) -{ - ImGui.Text(text); -} - -// Center buttons -using (new Alignment.Center(new Vector2(120, 30))) -{ - ImGui.Button("Centered Button", new Vector2(120, 30)); -} -``` - -#### Custom Container Alignment -```csharp -Vector2 containerSize = new(400, 200); -Vector2 contentSize = new(100, 50); - -// Center content within a specific container -using (new Alignment.CenterWithin(contentSize, containerSize)) -{ - ImGui.Button("Centered in Container", contentSize); -} -``` - -### 🔧 Advanced Styling - -#### Scoped Style Variables -```csharp -// Rounded buttons -using (new ScopedStyleVar(ImGuiStyleVar.FrameRounding, 8.0f)) -{ - ImGui.Button("Rounded Button"); -} - -// Multiple style modifications -using (new ScopedStyleVar(ImGuiStyleVar.FrameRounding, 12.0f)) -using (new ScopedStyleVar(ImGuiStyleVar.FramePadding, new Vector2(20, 10))) -using (new ScopedStyleVar(ImGuiStyleVar.ItemSpacing, new Vector2(10, 8))) -{ - ImGui.Button("Highly Styled Button"); - ImGui.Button("Another Styled Button"); -} -``` - -#### Theme-Based Styling -```csharp -// Use semantic colors from current theme -using (new ScopedThemeColor(Color.Primary)) -{ - ImGui.Text("Primary theme color"); -} - -using (new ScopedThemeColor(Color.Secondary)) -{ - ImGui.Button("Secondary theme button"); -} -``` - -## 🎨 Available Themes - -ImGuiStyler includes **50+ carefully crafted themes** across multiple families: - -### 🌙 Dark Themes -- **Catppuccin**: Mocha, Macchiato, Frappe -- **Tokyo Night**: Classic, Storm -- **Gruvbox**: Dark, Dark Hard, Dark Soft -- **Dracula**: Classic vampire theme -- **Nord**: Arctic, frost-inspired theme -- **Nightfox**: Carbonfox, Nightfox, Terafox -- **OneDark**: Popular dark theme -- **Kanagawa**: Wave, Dragon variants -- **Everforest**: Dark, Dark Hard, Dark Soft - -### ☀️ Light Themes -- **Catppuccin**: Latte -- **Tokyo Night**: Day -- **Gruvbox**: Light, Light Hard, Light Soft -- **Nord**: Light variant -- **Nightfox**: Dawnfox, Dayfox -- **PaperColor**: Light -- **Everforest**: Light, Light Hard, Light Soft -- **VSCode**: Light theme - -### 🎨 Specialty Themes -- **Monokai**: Classic editor theme -- **Nightfly**: Smooth dark theme -- **VSCode**: Dark theme recreation - -## 🛠️ API Reference - -### Theme Class -- `Theme.Apply(string themeName)` - Apply a global theme -- `Theme.Apply(ISemanticTheme theme)` - Apply a semantic theme -- `Theme.Reset()` - Reset to default ImGui theme -- `Theme.ShowThemeSelector(string title)` - Show theme browser modal -- `Theme.RenderThemeSelector()` - Render theme browser (returns true if theme changed) -- `Theme.AllThemes` - Get all available themes -- `Theme.Families` - Get all theme families -- `Theme.CurrentThemeName` - Get current theme name -- `Theme.IsCurrentThemeDark` - Check if current theme is dark - -### Color Class -- `Color.FromHex(string hex)` - Create color from hex string -- `Color.FromRGB(int r, int g, int b)` - Create color from RGB -- `Color.FromRGBA(int r, int g, int b, int a)` - Create color from RGBA -- `Color.GetOptimalTextColor(ImColor background)` - Get accessible text color -- `Color.Lighten(ImColor color, float amount)` - Lighten color -- `Color.Darken(ImColor color, float amount)` - Darken color - -### Alignment Classes -- `new Alignment.Center(Vector2 contentSize)` - Center in available region -- `new Alignment.CenterWithin(Vector2 contentSize, Vector2 containerSize)` - Center in container - -### Scoped Classes -- `new ScopedColor(ImGuiCol col, ImColor color)` - Scoped color application -- `new ScopedTextColor(ImColor color)` - Scoped text color -- `new ScopedStyleVar(ImGuiStyleVar var, float value)` - Scoped style variable -- `new ScopedTheme(string themeName)` - Scoped theme application -- `new ScopedThemeColor(Color semanticColor)` - Scoped semantic color - -## 🎯 Demo Application - -The included demo application showcases all features: - -```bash -cd ImGuiStylerDemo -dotnet run -``` - -Features demonstrated: -- Interactive theme browser with live preview -- All 50+ themes with family categorization -- Scoped styling examples -- Color manipulation demos -- Alignment showcases -- Accessibility features - -## 🤝 Contributing - -We welcome contributions! Please see our contributing guidelines: - -1. **Fork** the repository -2. **Create** a feature branch (`git checkout -b feature/amazing-feature`) -3. **Commit** your changes (`git commit -m 'Add amazing feature'`) -4. **Push** to the branch (`git push origin feature/amazing-feature`) -5. **Open** a Pull Request - -### Development Setup -```bash -git clone https://github.com/ktsu-dev/ImGuiStyler.git -cd ImGuiStyler -dotnet restore -dotnet build -``` - -## 📄 License - -This project is licensed under the **MIT License** - see the [LICENSE.md](LICENSE.md) file for details. - -## 🙏 Acknowledgments - -- **[ImGui.NET](https://github.com/mellinoe/ImGui.NET)** - .NET bindings for Dear ImGui -- **[Hexa.NET.ImGui](https://github.com/HexaEngine/Hexa.NET.ImGui)** - Modern ImGui bindings -- **Theme Inspirations**: Catppuccin, Tokyo Night, Gruvbox, and other amazing color schemes -- **Community Contributors** - Thank you for your themes, bug reports, and improvements! - -## 🔗 Related Projects - -- **[ktsu.ThemeProvider](https://github.com/ktsu-dev/ThemeProvider)** - Semantic theming foundation -- **[ktsu.ImGuiPopups](https://github.com/ktsu-dev/ImGuiPopups)** - Modal and popup utilities -- **[ktsu.Extensions](https://github.com/ktsu-dev/Extensions)** - Utility extensions - ---- - -**Made with ❤️ by the ktsu.dev team** diff --git a/ImGui.Styler/ScopedColor.cs b/ImGui.Styler/ScopedColor.cs deleted file mode 100644 index f9d452c..0000000 --- a/ImGui.Styler/ScopedColor.cs +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using Hexa.NET.ImGui; - -using ktsu.ScopedAction; - -/// -/// Represents a scoped color change in ImGui. -/// -/// -/// This class ensures that the color change is reverted when the scope ends. -/// -public class ScopedColor : ScopedAction -{ - /// - /// Initializes a new instance of the class with a specified target and color. - /// - /// The ImGui color target to change. - /// The color to apply to the target. - public ScopedColor(ImGuiCol target, ImColor color) : base( - onOpen: () => ImGui.PushStyleColor(target, color.Value), - onClose: ImGui.PopStyleColor) - { - } - - /// - /// Initializes a new instance of the class with a specified color for the button. - /// - /// The color to apply to the button. - public ScopedColor(ImColor color) - { - ImGui.PushStyleColor(ImGuiCol.Button, color.Value); - OnClose = ImGui.PopStyleColor; - } -} diff --git a/ImGui.Styler/ScopedStyleVar.cs b/ImGui.Styler/ScopedStyleVar.cs deleted file mode 100644 index 0f63a93..0000000 --- a/ImGui.Styler/ScopedStyleVar.cs +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ScopedAction; - -/// -/// Represents a scoped style variable for ImGui. This class ensures that the style variable is popped when disposed. -/// -public class ScopedStyleVar : ScopedAction -{ - /// - /// Initializes a new instance of the class with a vector value. - /// - /// The style variable to be pushed. - /// The vector value to be applied to the style variable. - public ScopedStyleVar(ImGuiStyleVar target, Vector2 vector) - { - ImGui.PushStyleVar(target, vector); - OnClose = ImGui.PopStyleVar; - } - - /// - /// Initializes a new instance of the class with a scalar value. - /// - /// The style variable to be pushed. - /// The scalar value to be applied to the style variable. - public ScopedStyleVar(ImGuiStyleVar target, float scalar) - { - ImGui.PushStyleVar(target, scalar); - OnClose = ImGui.PopStyleVar; - } -} diff --git a/ImGui.Styler/ScopedTextColor.cs b/ImGui.Styler/ScopedTextColor.cs deleted file mode 100644 index 9682faf..0000000 --- a/ImGui.Styler/ScopedTextColor.cs +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; -using Hexa.NET.ImGui; - -/// -/// Represents a scoped text color change in ImGui. -/// -/// The color to apply to the text. -public class ScopedTextColor(ImColor color) : ScopedColor(ImGuiCol.Text, color) -{ -} diff --git a/ImGui.Styler/ScopedTheme.cs b/ImGui.Styler/ScopedTheme.cs deleted file mode 100644 index 9c3f6a5..0000000 --- a/ImGui.Styler/ScopedTheme.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System.Collections.Concurrent; -using System.Numerics; -using Hexa.NET.ImGui; -using ktsu.ScopedAction; -using ktsu.ThemeProvider; - -/// -/// Represents a scoped action that applies a complete semantic theme to ImGui elements. -/// This provides semantic theme-based styling that automatically reverts when disposed. -/// -public class ScopedTheme : ScopedAction -{ - /// - /// Cache for storing computed color mappings per theme to avoid repeated computation. - /// - private static readonly ConcurrentDictionary> colorMappingCache = new(); - - /// - /// Initializes a new instance of the class. - /// - /// The semantic theme to apply. - public ScopedTheme(ISemanticTheme theme) - { - ArgumentNullException.ThrowIfNull(theme); - - // Create a cache key based on the theme type name (assumes one theme per type) - string cacheKey = theme.GetType().FullName ?? theme.GetType().Name; - - // Get the color mapping from cache or compute it - IReadOnlyDictionary colorMapping = colorMappingCache.GetOrAdd(cacheKey, _ => Theme.GetColorMapping(theme)); - - int numStyles = 0; - - // Apply all mapped colors using PushStyleAndCount - foreach ((ImGuiCol imguiCol, Vector4 color) in colorMapping) - { - PushStyleAndCount(imguiCol, color, ref numStyles); - } - - OnClose = () => ImGui.PopStyleColor(numStyles); - } - - /// - /// Clears the color mapping cache. This can be useful if themes have been modified - /// or to free memory if many different themes have been used. - /// - public static void ClearCache() => colorMappingCache.Clear(); - - private static void PushStyleAndCount(ImGuiCol style, Vector4 color, ref int numStyles) - { - ImGui.PushStyleColor(style, color); - ++numStyles; - } -} diff --git a/ImGui.Styler/ScopedThemeColor.cs b/ImGui.Styler/ScopedThemeColor.cs deleted file mode 100644 index c93ff60..0000000 --- a/ImGui.Styler/ScopedThemeColor.cs +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using Hexa.NET.ImGui; -using ktsu.ScopedAction; - -/// -/// Represents a scoped action that applies a theme color to ImGui elements. -/// This provides a simple color-based theming that automatically reverts when disposed. -/// -public class ScopedThemeColor : ScopedAction -{ - /// - /// Initializes a new instance of the class. - /// - /// The base color to apply to the theme. - /// Whether the theme should be enabled or disabled. - public ScopedThemeColor(ImColor baseColor, bool enabled) - { - // Simple color adjustments for basic theming - ImColor primaryColor = enabled ? baseColor : baseColor.MultiplySaturation(0.3f); - ImColor hoveredColor = primaryColor.MultiplyLuminance(1.2f); - ImColor activeColor = primaryColor.MultiplyLuminance(0.8f); - ImColor textColor = primaryColor.CalculateOptimalContrastingColor(); - ImColor backgroundColor = primaryColor.MultiplyLuminance(0.1f).MultiplySaturation(0.1f); - - int numStyles = 0; - PushStyleAndCount(ImGuiCol.Text, textColor, ref numStyles); - PushStyleAndCount(ImGuiCol.TextSelectedBg, primaryColor, ref numStyles); - PushStyleAndCount(ImGuiCol.TextDisabled, textColor.MultiplySaturation(0.5f), ref numStyles); - PushStyleAndCount(ImGuiCol.Button, primaryColor, ref numStyles); - PushStyleAndCount(ImGuiCol.ButtonActive, activeColor, ref numStyles); - PushStyleAndCount(ImGuiCol.ButtonHovered, hoveredColor, ref numStyles); - PushStyleAndCount(ImGuiCol.CheckMark, textColor, ref numStyles); - PushStyleAndCount(ImGuiCol.Header, primaryColor, ref numStyles); - PushStyleAndCount(ImGuiCol.HeaderActive, activeColor, ref numStyles); - PushStyleAndCount(ImGuiCol.HeaderHovered, hoveredColor, ref numStyles); - PushStyleAndCount(ImGuiCol.SliderGrab, primaryColor, ref numStyles); - PushStyleAndCount(ImGuiCol.SliderGrabActive, activeColor, ref numStyles); - PushStyleAndCount(ImGuiCol.Tab, primaryColor, ref numStyles); - PushStyleAndCount(ImGuiCol.TabSelected, activeColor, ref numStyles); - PushStyleAndCount(ImGuiCol.TabHovered, hoveredColor, ref numStyles); - PushStyleAndCount(ImGuiCol.FrameBg, primaryColor, ref numStyles); - PushStyleAndCount(ImGuiCol.FrameBgActive, activeColor, ref numStyles); - PushStyleAndCount(ImGuiCol.FrameBgHovered, hoveredColor, ref numStyles); - PushStyleAndCount(ImGuiCol.WindowBg, backgroundColor, ref numStyles); - PushStyleAndCount(ImGuiCol.ChildBg, backgroundColor, ref numStyles); - PushStyleAndCount(ImGuiCol.PopupBg, backgroundColor, ref numStyles); - - OnClose = () => ImGui.PopStyleColor(numStyles); - } - - private static void PushStyleAndCount(ImGuiCol style, ImColor color, ref int numStyles) - { - ImGui.PushStyleColor(style, color.Value); - ++numStyles; - } -} diff --git a/ImGui.Styler/Text.cs b/ImGui.Styler/Text.cs deleted file mode 100644 index 7545696..0000000 --- a/ImGui.Styler/Text.cs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; -using Hexa.NET.ImGui; - -/// -/// Provides functionality for managing text in ImGui. -/// -public static partial class Text -{ - /// - /// Provides functionality for managing text colors in ImGui. - /// - public static partial class Color - { - /// - /// Contains predefined color definitions for text. - /// - public static class Definitions - { - /// - /// Gets or sets the normal text color. - /// - public static ImColor Normal { get; set; } = Styler.Color.Palette.Neutral.White; - - /// - /// Gets or sets the error text color. - /// - public static ImColor Error { get; set; } = Styler.Color.Palette.Basic.Red; - - /// - /// Gets or sets the warning text color. - /// - public static ImColor Warning { get; set; } = Styler.Color.Palette.Basic.Yellow; - - /// - /// Gets or sets the info text color. - /// - public static ImColor Info { get; set; } = Styler.Color.Palette.Basic.Cyan; - - /// - /// Gets or sets the success text color. - /// - public static ImColor Success { get; set; } = Styler.Color.Palette.Basic.Green; - } - - /// - /// Applies the normal text color within a scoped block. - /// - /// A instance that reverts the color when disposed. - public static ScopedTextColor Normal() => new(Definitions.Normal); - - /// - /// Applies the error text color within a scoped block. - /// - /// A instance that reverts the color when disposed. - public static ScopedTextColor Error() => new(Definitions.Error); - - /// - /// Applies the warning text color within a scoped block. - /// - /// A instance that reverts the color when disposed. - public static ScopedTextColor Warning() => new(Definitions.Warning); - - /// - /// Applies the info text color within a scoped block. - /// - /// A instance that reverts the color when disposed. - public static ScopedTextColor Info() => new(Definitions.Info); - - /// - /// Applies the success text color within a scoped block. - /// - /// A instance that reverts the color when disposed. - public static ScopedTextColor Success() => new(Definitions.Success); - } -} diff --git a/ImGui.Styler/Theme.cs b/ImGui.Styler/Theme.cs deleted file mode 100644 index c63ff93..0000000 --- a/ImGui.Styler/Theme.cs +++ /dev/null @@ -1,1304 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System.Collections.Immutable; -using System.Collections.ObjectModel; -using System.Numerics; -using Hexa.NET.ImGui; -using ktsu.ThemeProvider; -using ktsu.ThemeProvider.ImGui; - -/// -/// Provides methods and properties to manage and apply themes for ImGui elements using ThemeProvider. -/// -public static class Theme -{ - private static readonly ImGuiPaletteMapper paletteMapper = new(); - private static string? currentThemeName; - - // Cache for complete palettes to avoid recalculating them every frame - private static readonly Dictionary> paletteCache = []; - private static readonly Lock paletteCacheLock = new(); - - // ThemeBrowser modal instance - private static readonly ThemeBrowser themeBrowser = new(); - - #region Theme Application - - /// - /// Applies a semantic theme to ImGui using ThemeProvider's color mapping system. - /// - /// The semantic theme to apply. - public static void Apply(ISemanticTheme theme) - { - ArgumentNullException.ThrowIfNull(theme); - - // Map the theme to ImGui colors - IReadOnlyDictionary colorMapping = paletteMapper.MapTheme(theme); - - // Apply all colors to ImGui - unsafe - { - ImGuiStylePtr style = ImGui.GetStyle(); - foreach ((ImGuiCol imguiCol, Vector4 color) in colorMapping) - { - style.Colors[(int)imguiCol] = color; - } - } - } - - /// - /// Gets the color mapping for a semantic theme without applying it. - /// This is useful for temporary theme application via scoped actions. - /// - /// The semantic theme to get the color mapping for. - /// A dictionary mapping ImGui colors to their theme-based values. - public static IReadOnlyDictionary GetColorMapping(ISemanticTheme theme) - { - ArgumentNullException.ThrowIfNull(theme); - return paletteMapper.MapTheme(theme); - } - - /// - /// Applies a theme by name using ThemeRegistry. - /// - /// The name of the theme to apply. - /// True if the theme was found and applied, false otherwise. - public static bool Apply(string themeName) - { - ThemeRegistry.ThemeInfo? themeInfo = ThemeRegistry.FindTheme(themeName); - if (themeInfo is null) - { - return false; - } - - Apply(themeInfo.CreateInstance()); - currentThemeName = themeName; - - // Clear palette cache when theme changes - ClearPaletteCache(); - return true; - } - - /// - /// Resets ImGui to default styling with no theme applied. - /// - public static void ResetToDefault() - { - // Use ImGui's built-in classic color scheme to restore proper defaults - ImGui.StyleColorsDark(); - currentThemeName = null; - - // Clear palette cache when resetting theme - ClearPaletteCache(); - } - - #endregion - - #region Current Theme Tracking - - /// - /// Gets or sets the name of the currently selected theme. - /// Setting this will apply the theme if it exists, or reset to default if set to null. - /// - public static string? CurrentThemeName - { - get => currentThemeName; - set - { - if (value is null) - { - ResetToDefault(); - } - else if (Apply(value)) - { - currentThemeName = value; - } - } - } - - /// - /// Gets the ThemeInfo for the currently selected theme, if any. - /// - public static ThemeRegistry.ThemeInfo? CurrentTheme => - currentThemeName is not null ? FindTheme(currentThemeName) : null; - - #endregion - - #region Theme Menu Rendering - - /// - /// Renders a theme selection submenu for use in an application's main menu bar. - /// - /// The label for the theme submenu (default: "Theme") - /// True if a theme was selected and changed, false otherwise. - public static bool RenderMenu(string menuLabel = "Theme") - { - bool themeChanged = false; - - if (ImGui.BeginMenu(menuLabel)) - { - // Reset option at the top - bool isReset = currentThemeName is null; - if (ImGui.MenuItem("Reset to Default", "", isReset)) - { - if (!isReset) - { - ResetToDefault(); - themeChanged = true; - } - } - - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip("Reset to default ImGui styling with no theme applied"); - } - - ImGui.Separator(); - - // Group themes by family for better organization - IOrderedEnumerable>> themesByFamily = ThemesByFamily.OrderBy(kvp => kvp.Key); - - foreach ((string family, IReadOnlyList themes) in themesByFamily) - { - if (themes.Count == 1) - { - // Single theme - render directly with color swatches - ThemeRegistry.ThemeInfo theme = themes[0]; - bool isSelected = currentThemeName == theme.Name; - - if (RenderThemeMenuItemWithDialogSwatches(theme, theme.Name, isSelected)) - { - if (!isSelected && Apply(theme.Name)) - { - themeChanged = true; - } - } - } - else - { - themeChanged |= RenderFamilySubmenu(family, themes); - } - } - - ImGui.EndMenu(); - } - - return themeChanged; - } - - /// - /// Renders a submenu for a theme family. - /// - /// The theme family name. - /// The themes in the family. - /// True if a theme was selected and changed, false otherwise. - private static bool RenderFamilySubmenu(string family, IReadOnlyList themes) - { - bool themeChanged = false; - - // Use dialog window style for the family header using colors from the first theme - bool anyFamilyThemeSelected = themes.Any(t => t.Name == currentThemeName); - - if (RenderFamilyMenuHeader(family, themes.Count > 0 ? themes[0] : null, anyFamilyThemeSelected)) - { - try - { - // Group by dark/light for families with many variants - if (themes.Count > 4) - { - ThemeRegistry.ThemeInfo[] darkThemes = [.. themes.Where(t => t.IsDark)]; - ThemeRegistry.ThemeInfo[] lightThemes = [.. themes.Where(t => !t.IsDark)]; - - themeChanged |= RenderThemeGroup("Dark", darkThemes); - - if (darkThemes.Length > 0 && lightThemes.Length > 0) - { - ImGui.Separator(); - } - - themeChanged |= RenderThemeGroup("Light", lightThemes); - } - else - { - // Few themes - render directly with color swatches - foreach (ThemeRegistry.ThemeInfo theme in themes) - { - bool isSelected = currentThemeName == theme.Name; - string displayName = theme.Variant ?? theme.Name; - - if (RenderThemeMenuItemWithDialogSwatches(theme, displayName, isSelected)) - { - if (!isSelected && Apply(theme.Name)) - { - themeChanged = true; - } - } - } - } - - ImGui.EndMenu(); - } - finally - { - // Pop the ID that was pushed in RenderFamilyMenuHeader when menu was opened - ImGui.PopID(); - } - } - - return themeChanged; - } - - /// - /// Renders a group of themes (e.g., "Dark", "Light"). - /// - /// The group name. - /// The themes to render. - /// True if a theme was selected and changed, false otherwise. - private static bool RenderThemeGroup(string groupName, ThemeRegistry.ThemeInfo[] themes) - { - bool themeChanged = false; - - if (themes.Length > 0) - { - if (!string.IsNullOrEmpty(groupName)) - { - // Use dialog window style for the group header using colors from the first theme - bool anyGroupThemeSelected = themes.Any(t => t.Name == currentThemeName); - RenderGroupHeader(groupName, themes[0], anyGroupThemeSelected); - ImGui.Separator(); - } - - foreach (ThemeRegistry.ThemeInfo theme in themes) - { - bool isSelected = currentThemeName == theme.Name; - string displayName = theme.Variant ?? theme.Name; - - if (RenderThemeMenuItemWithDialogSwatches(theme, displayName, isSelected)) - { - if (!isSelected && Apply(theme.Name)) - { - themeChanged = true; - } - } - } - } - - return themeChanged; - } - - /// - /// Renders a simple theme selection menu without family grouping. - /// - /// The label for the theme submenu (default: "Theme") - /// True if a theme was selected and changed, false otherwise. - public static bool RenderSimpleMenu(string menuLabel = "Theme") - { - bool themeChanged = false; - - if (ImGui.BeginMenu(menuLabel)) - { - // Reset option at the top - bool isReset = currentThemeName is null; - if (ImGui.MenuItem("Reset to Default", "", isReset)) - { - if (!isReset) - { - ResetToDefault(); - themeChanged = true; - } - } - - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip("Reset to default ImGui styling with no theme applied"); - } - - ImGui.Separator(); - - // Group by dark/light - ThemeRegistry.ThemeInfo[] darkThemes = [.. DarkThemes.OrderBy(t => t.Name)]; - ThemeRegistry.ThemeInfo[] lightThemes = [.. LightThemes.OrderBy(t => t.Name)]; - - if (darkThemes.Length > 0) - { - ImGui.TextDisabled("Dark Themes"); - ImGui.Separator(); - - foreach (ThemeRegistry.ThemeInfo theme in darkThemes) - { - bool isSelected = currentThemeName == theme.Name; - - if (RenderThemeMenuItemWithDialogSwatches(theme, theme.Name, isSelected)) - { - if (!isSelected && Apply(theme.Name)) - { - themeChanged = true; - } - } - } - - if (lightThemes.Length > 0) - { - ImGui.Separator(); - } - } - - if (lightThemes.Length > 0) - { - if (darkThemes.Length > 0) - { - ImGui.TextDisabled("Light Themes"); - ImGui.Separator(); - } - - foreach (ThemeRegistry.ThemeInfo theme in lightThemes) - { - bool isSelected = currentThemeName == theme.Name; - - if (RenderThemeMenuItemWithDialogSwatches(theme, theme.Name, isSelected)) - { - if (!isSelected && Apply(theme.Name)) - { - themeChanged = true; - } - } - } - } - - ImGui.EndMenu(); - } - - return themeChanged; - } - - #endregion - - #region Theme Menu Helpers - - /// - /// Renders a theme menu item with color preview swatches - /// - /// The theme to render. - /// The display name for the theme. - /// Whether this theme is currently selected. - /// True if the theme was clicked, false otherwise. -#pragma warning disable IDE0051 // Remove unused private members - preserved for reference - private static bool RenderThemeMenuItemWithSwatches(ThemeRegistry.ThemeInfo theme, string displayName, bool isSelected) - { - bool clicked = false; - - // Create a unique ID for this menu item - ImGui.PushID(theme.Name); - - try - { - // Get the theme's complete palette for color preview - IReadOnlyDictionary completePalette = GetCompletePalette(theme.CreateInstance()); - - // Define the colors we want to show: primary, alternate, medium neutral, low neutral - SemanticColorRequest[] colorRequests = [ - new SemanticColorRequest(SemanticMeaning.Primary, Priority.High), - new SemanticColorRequest(SemanticMeaning.Alternate, Priority.High), - new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Medium), - new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Low) - ]; - - // Use Selectable instead of MenuItem so we can draw custom content - if (ImGui.Selectable($"##theme_{theme.Name}", isSelected, ImGuiSelectableFlags.None)) - { - clicked = true; - } - - // Draw color swatches and theme name on top of the selectable - Vector2 itemMin = ImGui.GetItemRectMin(); - Vector2 itemMax = ImGui.GetItemRectMax(); - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - - float swatchSize = 12.0f; - float swatchSpacing = 2.0f; - float textOffset = (colorRequests.Length * (swatchSize + swatchSpacing)) + 8.0f; - - // Draw color swatches - for (int i = 0; i < colorRequests.Length; i++) - { - if (completePalette.TryGetValue(colorRequests[i], out PerceptualColor color)) - { - ImColor imColor = Color.FromPerceptualColor(color); - Vector2 swatchPos = new( - itemMin.X + 4.0f + (i * (swatchSize + swatchSpacing)), - itemMin.Y + ((itemMax.Y - itemMin.Y - swatchSize) * 0.5f) - ); - - // Draw swatch background (slightly larger for border effect) - drawList.AddRectFilled( - swatchPos - Vector2.One, - swatchPos + new Vector2(swatchSize + 1, swatchSize + 1), - ImGui.ColorConvertFloat4ToU32(new Vector4(0.2f, 0.2f, 0.2f, 1.0f)) - ); - - // Draw color swatch - drawList.AddRectFilled( - swatchPos, - swatchPos + new Vector2(swatchSize, swatchSize), - ImGui.ColorConvertFloat4ToU32(imColor.Value) - ); - } - } - - // Draw theme name text - Vector2 textPos = new(itemMin.X + textOffset, itemMin.Y + ((itemMax.Y - itemMin.Y - ImGui.GetTextLineHeight()) * 0.5f)); - uint textColor = isSelected ? - ImGui.ColorConvertFloat4ToU32(ImGui.GetStyle().Colors[(int)ImGuiCol.Text]) : - ImGui.ColorConvertFloat4ToU32(ImGui.GetStyle().Colors[(int)ImGuiCol.Text]); - - drawList.AddText(textPos, textColor, displayName); - - // Add tooltip with theme description if hovered - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip($"{theme.Description}\n\nColors shown: Primary, Alternate, Neutral (Med), Neutral (Low)"); - } - } - catch (ArgumentException) - { - // Fallback to simple menu item if color extraction fails - clicked = ImGui.MenuItem(displayName, "", isSelected); - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip(theme.Description); - } - } - catch (InvalidOperationException) - { - // Fallback to simple menu item if color extraction fails - clicked = ImGui.MenuItem(displayName, "", isSelected); - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip(theme.Description); - } - } - catch (System.Reflection.TargetInvocationException) - { - // Fallback to simple menu item if reflection call fails - clicked = ImGui.MenuItem(displayName, "", isSelected); - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip(theme.Description); - } - } - finally - { - ImGui.PopID(); - } - - return clicked; - } -#pragma warning restore IDE0051 // Remove unused private members - - /// - /// Renders a theme menu item styled like a mini dialog window with title bar and content area. - /// - /// The theme to render. - /// The display name for the theme. - /// Whether this theme is currently selected. - /// True if the theme was clicked, false otherwise. - private static bool RenderThemeMenuItemWithDialogSwatches(ThemeRegistry.ThemeInfo theme, string displayName, bool isSelected) - { - bool clicked = false; - - // Create a unique ID for this menu item - ImGui.PushID(theme.Name); - - try - { - // Get the theme's complete palette for color preview - IReadOnlyDictionary completePalette = GetCompletePalette(theme.CreateInstance()); - - // Get primary color for title bar and surface color for background - ImColor primaryColor = Color.Palette.Basic.Blue; // Fallback - ImColor surfaceColor = Color.Palette.Neutral.Gray; // Fallback - - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Primary, Priority.High), out PerceptualColor primary)) - { - primaryColor = Color.FromPerceptualColor(primary); - } - - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Low), out PerceptualColor surface)) - { - surfaceColor = Color.FromPerceptualColor(surface); - } - else if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Medium), out PerceptualColor surfaceMed)) - { - surfaceColor = Color.FromPerceptualColor(surfaceMed); - } - - // Calculate required width for the dialog window - // This ensures the menu expands wide enough to show our custom dialog rendering - Vector2 textSize = ImGui.CalcTextSize(displayName); - float minDialogWidth = Math.Max(textSize.X + 16.0f, 140.0f); // Text width + padding, minimum 140px - float dialogHeight = 32.0f; // Height for the dialog window - Vector2 selectableSize = new(minDialogWidth, dialogHeight); - - // Use invisible selectable for interaction with proper sizing - if (ImGui.Selectable($"##theme_{theme.Name}", isSelected, ImGuiSelectableFlags.None, selectableSize)) - { - clicked = true; - } - - // Get item bounds for custom drawing - Vector2 itemMin = ImGui.GetItemRectMin(); - Vector2 itemMax = ImGui.GetItemRectMax(); - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - - float titleBarHeight = 8.0f; // Height of the dialog title bar - float margin = 2.0f; - - // Calculate dialog window bounds using the full selectable area - Vector2 dialogMin = new(itemMin.X + margin, itemMin.Y + margin); - Vector2 dialogMax = new(itemMax.X - margin, itemMax.Y - margin); - Vector2 titleBarMax = new(dialogMax.X, dialogMin.Y + titleBarHeight); - - // Draw dialog window shadow/border (slightly offset and darker) - Vector2 shadowOffset = new(1.0f, 1.0f); - drawList.AddRectFilled( - dialogMin + shadowOffset, - dialogMax + shadowOffset, - ImGui.ColorConvertFloat4ToU32(new Vector4(0.0f, 0.0f, 0.0f, 0.3f)), - 2.0f - ); - - // Draw main surface background - drawList.AddRectFilled( - dialogMin, - dialogMax, - ImGui.ColorConvertFloat4ToU32(surfaceColor.Value), - 2.0f - ); - - // Draw primary color title bar - drawList.AddRectFilled( - dialogMin, - titleBarMax, - ImGui.ColorConvertFloat4ToU32(primaryColor.Value), - 2.0f, - ImDrawFlags.RoundCornersTop - ); - - // Add subtle inner glow for selected themes - if (isSelected) - { - // Inner glow - subtle light glow inside the dialog - drawList.AddRect( - dialogMin + Vector2.One, - dialogMax - Vector2.One, - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 0.4f)), - 2.0f, - ImDrawFlags.None, - 1.0f - ); - } - - // Add hover effect - if (ImGui.IsItemHovered()) - { - drawList.AddRect( - dialogMin, - dialogMax, - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 0.4f)), - 2.0f, - ImDrawFlags.None, - 1.0f - ); - } - - // Calculate contrasting text color for the surface - Vector4 surfaceVec = surfaceColor.Value; - float luminance = (0.299f * surfaceVec.X) + (0.587f * surfaceVec.Y) + (0.114f * surfaceVec.Z); - uint textColor = luminance > 0.5f ? - ImGui.ColorConvertFloat4ToU32(new Vector4(0.0f, 0.0f, 0.0f, 1.0f)) : // Dark text on light surface - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 1.0f)); // Light text on dark surface - - // Draw theme name text over the surface area (below title bar) - Vector2 textPos = new( - dialogMin.X + 4.0f, - titleBarMax.Y + 2.0f - ); - - drawList.AddText(textPos, textColor, displayName); - - // Add tooltip with theme description if hovered - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip($"{theme.Description}\n\nDialog style: Primary title bar, surface background"); - } - } - catch (ArgumentException) - { - // Fallback to simple menu item if color extraction fails - clicked = ImGui.MenuItem(displayName, "", isSelected); - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip(theme.Description); - } - } - catch (InvalidOperationException) - { - // Fallback to simple menu item if color extraction fails - clicked = ImGui.MenuItem(displayName, "", isSelected); - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip(theme.Description); - } - } - finally - { - ImGui.PopID(); - } - - return clicked; - } - - /// - /// Renders a family menu header styled like a mini dialog window with title bar and content area. - /// - /// The theme family name. - /// The theme to use for color extraction (typically first theme in family). - /// Whether any theme in this family is currently selected. - /// True if the menu should be opened, false otherwise. - private static bool RenderFamilyMenuHeader(string familyName, ThemeRegistry.ThemeInfo? representativeTheme, bool anyFamilyThemeSelected) - { - // Create a unique ID for this family header - ImGui.PushID($"Family_{familyName}"); - - bool menuOpened = false; - - try - { - // Get colors from the representative theme if available - ImColor primaryColor = Color.Palette.Basic.Blue; // Fallback - ImColor surfaceColor = Color.Palette.Neutral.Gray; // Fallback - - if (representativeTheme != null) - { - try - { - // Use the complete palette for efficient color extraction - IReadOnlyDictionary completePalette = GetCompletePalette(representativeTheme.CreateInstance()); - - // Get primary color for title bar - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Primary, Priority.High), out PerceptualColor primary)) - { - primaryColor = Color.FromPerceptualColor(primary); - } - - // Get surface color for background - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Low), out PerceptualColor surface)) - { - surfaceColor = Color.FromPerceptualColor(surface); - } - else if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Medium), out PerceptualColor surfaceMed)) - { - surfaceColor = Color.FromPerceptualColor(surfaceMed); - } - } - catch (ArgumentException) - { - // Use fallback colors if extraction fails - } - catch (InvalidOperationException) - { - // Use fallback colors if extraction fails - } - } - - // Use BeginMenu with transparent styling and draw our custom dialog over it - string displayText = familyName; // Don't add arrow, BeginMenu will handle it - - // Calculate proper width to match other menu items and account for arrow space - Vector2 textSize = ImGui.CalcTextSize(displayText); - float arrowWidth = ImGui.CalcTextSize(" ►").X; // Space needed for the arrow - float desiredWidth = Math.Max(textSize.X + arrowWidth + 16.0f, 180.0f); // Text + arrow + padding, minimum 180px - - // Push style to control menu item size - ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new Vector2(ImGui.GetStyle().ItemSpacing.X, 4.0f)); // Ensure proper vertical spacing - - // Now use the standard BeginMenu with transparent styling to handle menu behavior - ImGui.PushStyleColor(ImGuiCol.Header, new Vector4(0, 0, 0, 0)); // Transparent - ImGui.PushStyleColor(ImGuiCol.HeaderHovered, new Vector4(1, 1, 1, 0.1f)); // Subtle hover - ImGui.PushStyleColor(ImGuiCol.HeaderActive, new Vector4(1, 1, 1, 0.2f)); // Subtle active - ImGui.PushStyleColor(ImGuiCol.Text, new Vector4(0, 0, 0, 0)); // Hide text (we drew our own) - - // Use a dummy selectable to reserve the exact space we want, then use BeginMenu - Vector2 desiredSize = new(desiredWidth, 34.0f); // 34px height to match our dialog design - ImGui.Selectable($"##dummy_{familyName}", false, ImGuiSelectableFlags.Disabled, desiredSize); - Vector2 itemMin = ImGui.GetItemRectMin(); - Vector2 itemMax = ImGui.GetItemRectMax(); - - // Move cursor back to draw BeginMenu over the same space - ImGui.SetCursorScreenPos(itemMin); - menuOpened = ImGui.BeginMenu($"##menu_{familyName}"); - - // Draw our custom dialog using the reserved space - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - - float titleBarHeight = 8.0f; // Height of the dialog title bar - float margin = 2.0f; - float arrowSpace = 20.0f; // Reserve space on right for arrow - - // Calculate dialog window bounds using reserved space, leaving room for arrow - Vector2 dialogMin = new(itemMin.X + margin, itemMin.Y + margin); - Vector2 dialogMax = new(itemMax.X - margin - arrowSpace, itemMax.Y - margin); - Vector2 titleBarMax = new(dialogMax.X, dialogMin.Y + titleBarHeight); - - // Draw dialog window shadow/border (slightly offset and darker) - Vector2 shadowOffset = new(1.0f, 1.0f); - drawList.AddRectFilled( - dialogMin + shadowOffset, - dialogMax + shadowOffset, - ImGui.ColorConvertFloat4ToU32(new Vector4(0.0f, 0.0f, 0.0f, 0.3f)), - 2.0f - ); - - // Draw main surface background - drawList.AddRectFilled( - dialogMin, - dialogMax, - ImGui.ColorConvertFloat4ToU32(surfaceColor.Value), - 2.0f - ); - - // Draw primary color title bar - drawList.AddRectFilled( - dialogMin, - titleBarMax, - ImGui.ColorConvertFloat4ToU32(primaryColor.Value), - 2.0f, - ImDrawFlags.RoundCornersTop - ); - - // Add subtle inner glow if any family theme is selected - if (anyFamilyThemeSelected) - { - // Inner glow - subtle light glow inside the dialog - drawList.AddRect( - dialogMin + Vector2.One, - dialogMax - Vector2.One, - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 0.3f)), - 2.0f, - ImDrawFlags.None, - 1.0f - ); - } - - // Calculate contrasting text color for the surface - Vector4 surfaceVec = surfaceColor.Value; - float luminance = (0.299f * surfaceVec.X) + (0.587f * surfaceVec.Y) + (0.114f * surfaceVec.Z); - uint textColor = luminance > 0.5f ? - ImGui.ColorConvertFloat4ToU32(new Vector4(0.0f, 0.0f, 0.0f, 1.0f)) : // Dark text on light surface - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 1.0f)); // Light text on dark surface - - // Draw family name text over the surface area (below title bar) - Vector2 textPos = new( - dialogMin.X + 4.0f, - titleBarMax.Y + 2.0f - ); - - drawList.AddText(textPos, textColor, displayText); - - ImGui.PopStyleColor(4); - ImGui.PopStyleVar(); // Pop the ItemSpacing style - } - catch - { - // If there's an exception and menu wasn't opened, clean up the ID - if (!menuOpened) - { - ImGui.PopID(); - } - throw; - } - - // Only pop ID if menu is not opened - if opened, RenderFamilySubmenu will handle it - if (!menuOpened) - { - ImGui.PopID(); - } - - return menuOpened; - } - - /// - /// Renders a group header styled like a mini dialog window with title bar and content area. - /// - /// The group name (e.g., "Dark", "Light"). - /// The theme to use for color extraction (typically first theme in group). - /// Whether any theme in this group is currently selected. - private static void RenderGroupHeader(string groupName, ThemeRegistry.ThemeInfo representativeTheme, bool anyGroupThemeSelected) - { - // Create a unique ID for this group header - ImGui.PushID($"Group_{groupName}"); - - try - { - // Get colors from the representative theme - ImColor primaryColor = Color.Palette.Basic.Blue; // Fallback - ImColor surfaceColor = Color.Palette.Neutral.Gray; // Fallback - - try - { - // Use the complete palette for efficient color extraction - IReadOnlyDictionary completePalette = GetCompletePalette(representativeTheme.CreateInstance()); - - // Get primary color for title bar - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Primary, Priority.High), out PerceptualColor primary)) - { - primaryColor = Color.FromPerceptualColor(primary); - } - - // Get surface color for background - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Low), out PerceptualColor surface)) - { - surfaceColor = Color.FromPerceptualColor(surface); - } - else if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Medium), out PerceptualColor surfaceMed)) - { - surfaceColor = Color.FromPerceptualColor(surfaceMed); - } - } - catch (ArgumentException) - { - // Use fallback colors if extraction fails - } - catch (InvalidOperationException) - { - // Use fallback colors if extraction fails - } - - // Calculate required width for the dialog window - Vector2 textSize = ImGui.CalcTextSize(groupName); - float minDialogWidth = Math.Max(textSize.X + 16.0f, 120.0f); // Text width + padding, minimum 120px for groups - float dialogHeight = 24.0f; // Smaller height for group headers - Vector2 selectableSize = new(minDialogWidth, dialogHeight); - - // Use invisible selectable for proper sizing (non-interactive) - ImGui.Selectable($"##group_{groupName}", false, ImGuiSelectableFlags.Disabled, selectableSize); - - // Get item bounds for custom drawing - Vector2 itemMin = ImGui.GetItemRectMin(); - Vector2 itemMax = ImGui.GetItemRectMax(); - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - - float titleBarHeight = 6.0f; // Smaller title bar for group headers - float margin = 1.5f; - - // Calculate dialog window bounds using the full selectable area - Vector2 dialogMin = new(itemMin.X + margin, itemMin.Y + margin); - Vector2 dialogMax = new(itemMax.X - margin, itemMax.Y - margin); - Vector2 titleBarMax = new(dialogMax.X, dialogMin.Y + titleBarHeight); - - // Draw dialog window shadow/border (slightly offset and darker) - Vector2 shadowOffset = new(0.5f, 0.5f); - drawList.AddRectFilled( - dialogMin + shadowOffset, - dialogMax + shadowOffset, - ImGui.ColorConvertFloat4ToU32(new Vector4(0.0f, 0.0f, 0.0f, 0.2f)), - 1.5f - ); - - // Draw main surface background - drawList.AddRectFilled( - dialogMin, - dialogMax, - ImGui.ColorConvertFloat4ToU32(surfaceColor.Value), - 1.5f - ); - - // Draw primary color title bar - drawList.AddRectFilled( - dialogMin, - titleBarMax, - ImGui.ColorConvertFloat4ToU32(primaryColor.Value), - 1.5f, - ImDrawFlags.RoundCornersTop - ); - - // Add subtle inner glow if any group theme is selected - if (anyGroupThemeSelected) - { - // Inner glow - subtle light glow inside the dialog - drawList.AddRect( - dialogMin + new Vector2(0.5f, 0.5f), - dialogMax - new Vector2(0.5f, 0.5f), - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 0.25f)), - 1.5f, - ImDrawFlags.None, - 0.8f - ); - } - - // Calculate contrasting text color for the surface - Vector4 surfaceVec = surfaceColor.Value; - float luminance = (0.299f * surfaceVec.X) + (0.587f * surfaceVec.Y) + (0.114f * surfaceVec.Z); - uint textColor = luminance > 0.5f ? - ImGui.ColorConvertFloat4ToU32(new Vector4(0.0f, 0.0f, 0.0f, 1.0f)) : // Dark text on light surface - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 1.0f)); // Light text on dark surface - - // Draw group name text centered over the surface area (below title bar) - Vector2 textPos = new( - dialogMin.X + ((dialogMax.X - dialogMin.X - textSize.X) * 0.5f), // Centered horizontally - titleBarMax.Y + 1.0f // Small padding below title bar - ); - - drawList.AddText(textPos, textColor, groupName); - } - finally - { - ImGui.PopID(); - } - } - - #endregion - - #region Theme Discovery - - /// - /// Gets all available themes with their metadata. - /// - public static IReadOnlyList AllThemes => ThemeRegistry.AllThemes; - - /// - /// Gets all dark themes. - /// - public static IReadOnlyList DarkThemes => ThemeRegistry.DarkThemes; - - /// - /// Gets all light themes. - /// - public static IReadOnlyList LightThemes => ThemeRegistry.LightThemes; - - /// - /// Gets themes grouped by family. - /// - public static IReadOnlyDictionary> ThemesByFamily => ThemeRegistry.ThemesByFamily; - - /// - /// Gets all theme families. - /// - public static IReadOnlyList Families => ThemeRegistry.Families; - - /// - /// Finds a theme by name (case-insensitive). - /// - /// The theme name to search for. - /// The theme info if found, null otherwise. - public static ThemeRegistry.ThemeInfo? FindTheme(string name) => ThemeRegistry.FindTheme(name); - - /// - /// Gets all themes in a specific family. - /// - /// The family name. - /// Array of themes in the family. - public static IReadOnlyList GetThemesInFamily(string family) => ThemeRegistry.GetThemesInFamily(family); - - /// - /// Creates instances of all themes. - /// - /// Array of all theme instances. - public static IReadOnlyList CreateAllThemeInstances() => ThemeRegistry.CreateAllThemeInstances(); - - /// - /// Creates theme instances for a specific family. - /// - /// The family name. - /// Array of theme instances in the family. - public static IReadOnlyList CreateThemeInstancesInFamily(string family) => ThemeRegistry.CreateThemeInstancesInFamily(family); - - #endregion - - #region Complete Palette Access - - /// - /// Gets the complete palette for the current theme containing all possible semantic color combinations. - /// This provides every color that can be requested from the theme, useful for theme exploration and previews. - /// - /// A dictionary mapping every possible semantic color request to its assigned color, or null if no theme is active. - public static IReadOnlyDictionary? GetCurrentThemeCompletePalette() - { - ThemeRegistry.ThemeInfo? currentTheme = CurrentTheme; - if (currentTheme is null) - { - return null; - } - - return GetCompletePalette(currentTheme.CreateInstance()); - } - - /// - /// Gets the complete palette for a specific theme containing all possible semantic color combinations. - /// This provides every color that can be requested from the theme, useful for theme exploration and previews. - /// Uses the MakeCompletePalette API with efficient caching to avoid expensive recalculation. - /// - /// The semantic theme to generate the complete palette from. - /// A dictionary mapping every possible semantic color request to its assigned color. - public static IReadOnlyDictionary GetCompletePalette(ISemanticTheme theme) - { - ArgumentNullException.ThrowIfNull(theme); - - // Generate a cache key based on the theme - string cacheKey = GenerateThemeCacheKey(theme); - - // Check cache first - using (paletteCacheLock.EnterScope()) - { - if (paletteCache.TryGetValue(cacheKey, out IReadOnlyDictionary? cachedPalette)) - { - return cachedPalette; - } - } - - // Generate the palette - IReadOnlyDictionary palette = GeneratePaletteUncached(theme); - - // Cache the result - using (paletteCacheLock.EnterScope()) - { - // Limit cache size to prevent memory issues - if (paletteCache.Count >= 50) // Reasonable limit for theme count - { - // Remove oldest entries (simple FIFO) - string firstKey = paletteCache.Keys.First(); - paletteCache.Remove(firstKey); - } - - paletteCache[cacheKey] = palette; - } - - return palette; - } - - /// - /// Generates the complete palette without caching using the MakeCompletePalette API. - /// - /// The theme to generate the palette from. - /// The complete palette dictionary. - private static IReadOnlyDictionary GeneratePaletteUncached(ISemanticTheme theme) => - SemanticColorMapper.MakeCompletePalette(theme); - - /// - /// Generates a cache key for a theme based on its semantic mapping. - /// - /// The theme to generate a cache key for. - /// A unique cache key string. - private static string GenerateThemeCacheKey(ISemanticTheme theme) - { - // Create a hash based on the theme's semantic mapping content - // This ensures we get a new cache entry if the theme definition changes - System.Text.StringBuilder keyBuilder = new(); - - keyBuilder.Append(theme.GetType().FullName); - keyBuilder.Append('_'); - - // Add a simple hash of the semantic mappings - foreach (KeyValuePair> mapping in theme.SemanticMapping.OrderBy(kvp => kvp.Key)) - { - keyBuilder.Append(mapping.Key); - keyBuilder.Append(':'); - keyBuilder.Append(mapping.Value.Count); - keyBuilder.Append(';'); - } - - return keyBuilder.ToString(); - } - - /// - /// Clears the palette cache. Called when themes change. - /// - private static void ClearPaletteCache() - { - using (paletteCacheLock.EnterScope()) - { - paletteCache.Clear(); - } - } - - /// - /// Gets the complete palette for a theme by name. - /// - /// The name of the theme to get the palette for. - /// A dictionary mapping every possible semantic color request to its assigned color, or null if theme not found. - public static IReadOnlyDictionary? GetCompletePalette(string themeName) - { - ThemeRegistry.ThemeInfo? themeInfo = FindTheme(themeName); - if (themeInfo is null) - { - return null; - } - - return GetCompletePalette(themeInfo.CreateInstance()); - } - - /// - /// Gets all available semantic color requests for the current theme. - /// This is useful for discovering what colors are available without needing the actual color values. - /// - /// An array of all available semantic color requests, or empty array if no theme is active. - public static ImmutableArray GetCurrentThemeAvailableColorRequests() - { - IReadOnlyDictionary? palette = GetCurrentThemeCompletePalette(); - return palette?.Keys.ToImmutableArray() ?? []; - } - - /// - /// Tries to get a specific color from the current theme's complete palette. - /// This is more efficient than manually navigating semantic mappings. - /// - /// The semantic color request specifying the color to retrieve. - /// The retrieved color if found. - /// True if the color was found, false otherwise. - public static bool TryGetColor(SemanticColorRequest request, out PerceptualColor color) - { - IReadOnlyDictionary? palette = GetCurrentThemeCompletePalette(); - if (palette is not null && palette.TryGetValue(request, out color)) - { - return true; - } - - color = default; - return false; - } - - /// - /// Gets a specific color from the current theme's complete palette. - /// This is more efficient than manually navigating semantic mappings. - /// - /// The semantic color request specifying the color to retrieve. - /// The color if found, null otherwise. - public static PerceptualColor? GetColor(SemanticColorRequest request) => - TryGetColor(request, out PerceptualColor color) ? color : null; - - #endregion - - #region Scoped Theme Colors - - /// - /// Creates a scoped theme color that automatically reverts when disposed. - /// - /// The color to apply to the theme. - /// A scoped theme color instance. - public static ScopedThemeColor FromColor(ImColor color) => new(color, enabled: true); - - /// - /// Creates a scoped disabled theme color that automatically reverts when disposed. - /// - /// The color to apply to the theme. - /// A scoped theme color instance with disabled state. - public static ScopedThemeColor DisabledFromColor(ImColor color) => new(color, enabled: false); - - #endregion - - #region Theme Selector Dialog - - /// - /// Shows the theme browser modal. Call this to programmatically open the theme selector. - /// - /// The title for the theme browser modal. - /// Custom size for the modal window. Default is 900x650 to accommodate wider theme cards. - public static void ShowThemeSelector(string title = "🎨 Theme Browser", Vector2? customSize = null) - { - themeBrowser.Open( - title, - onThemeSelected: themeName => { /* Theme was already applied in ThemeBrowser */ }, - onDefaultRequested: () => { /* Default was already applied in ThemeBrowser */ }, - customSize - ); - } - - /// - /// Hides the theme selector dialog. This is kept for API compatibility but the modal handles its own state. - /// - public static void HideThemeSelector() { /* Modal handles its own close state, so this is mainly for API compatibility */ } - - /// - /// Renders the theme browser modal if it's currently open. - /// This should be called in your main render loop to display the theme browser. - /// - /// True if a theme was changed during modal interaction, false otherwise. - public static bool RenderThemeSelector() => themeBrowser.ShowIfOpen(); - - /// - /// Renders the theme browser modal if it's currently open. - /// This overload is kept for backward compatibility. - /// - /// The title for the theme browser modal (ignored - kept for compatibility). - /// The size for the theme browser modal (ignored - kept for compatibility). - /// True if a theme was changed during modal interaction, false otherwise. - public static bool RenderThemeSelector(string windowTitle, Vector2? windowSize = null) - { - // Parameters are intentionally unused - kept for backward compatibility - _ = windowTitle; - _ = windowSize; - return themeBrowser.ShowIfOpen(); - } - - /// - /// Renders a theme menu that opens the theme browser modal instead of using dropdown menus. - /// This provides a better user experience than the traditional RenderMenu() method. - /// - /// The label for the theme submenu (default: "Theme") - /// True if a theme was selected and changed, false otherwise. - public static bool RenderThemeSelectorMenu(string menuLabel = "Theme") - { - bool themeChanged = false; - - if (ImGui.BeginMenu(menuLabel)) - { - if (ImGui.MenuItem("Browse Themes...")) - { - ShowThemeSelector(); - } - - ImGui.Separator(); - - // Quick reset option - if (ImGui.MenuItem("Reset to Default", "", currentThemeName is null)) - { - if (currentThemeName is not null) - { - ResetToDefault(); - themeChanged = true; - } - } - - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip("Reset to default ImGui styling with no theme applied"); - } - - // Show current theme info if any - if (currentThemeName is not null) - { - ImGui.Separator(); - ImGui.TextDisabled($"Current: {currentThemeName}"); - ThemeRegistry.ThemeInfo? currentTheme = FindTheme(currentThemeName); - if (currentTheme is not null) - { - ImGui.TextDisabled($"({(currentTheme.IsDark ? "Dark" : "Light")})"); - } - } - - ImGui.EndMenu(); - } - - // Check if any theme changes occurred through the modal browser - // The modal handles theme application internally, so we check for changes here - bool modalThemeChanged = RenderThemeSelector(); - - return themeChanged || modalThemeChanged; - } - - #endregion -} diff --git a/ImGui.Styler/ThemeBrowser.cs b/ImGui.Styler/ThemeBrowser.cs deleted file mode 100644 index 9a5b0e8..0000000 --- a/ImGui.Styler/ThemeBrowser.cs +++ /dev/null @@ -1,176 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using Hexa.NET.ImGui; -using ktsu.ThemeProvider; -using ktsu.ImGui.Popups; - -/// -/// A modal theme browser that allows users to select themes from a visual grid. -/// -public class ThemeBrowser -{ - /// - /// The underlying modal instance for managing popup behavior using ktsu.ImGuiPopups. - /// - private readonly ImGuiPopups.Modal modal = new(); - - /// - /// The selected theme family filter index. - /// - private int selectedFamilyFilter; - - /// - /// The action to invoke when a theme is selected. - /// - private Action? onThemeSelected; - - /// - /// The action to invoke when the default theme is requested. - /// - private Action? onDefaultRequested; - - /// - /// Tracks whether a theme change occurred during the current modal session. - /// - private bool themeChanged; - - /// - /// Opens the theme browser modal. - /// - /// The title of the modal window. - /// Action to invoke when a theme is selected. Parameter is the theme name. - /// Action to invoke when default theme is requested. - /// Custom size of the modal. If not specified, uses a default size. - public void Open(string title = "🎨 Theme Browser", Action? onThemeSelected = null, Action? onDefaultRequested = null, Vector2? customSize = null) - { - this.onThemeSelected = onThemeSelected; - this.onDefaultRequested = onDefaultRequested; - themeChanged = false; // Reset theme change tracking for this modal session - Vector2 size = customSize ?? new Vector2(900, 650); // Increased width to accommodate wider theme cards - modal.Open(title, ShowContent, size); - } - - /// - /// Shows the theme browser modal if it's open and returns whether a theme was changed. - /// - /// True if a theme was changed during modal interaction, false otherwise. - public bool ShowIfOpen() - { - bool wasOpen = modal.WasOpen; - bool isOpen = modal.ShowIfOpen(); - - // If the modal was just closed and a theme was changed, return true and reset the flag - if (wasOpen && !isOpen && themeChanged) - { - themeChanged = false; - return true; - } - - // If modal is still open but theme was changed this frame, return true (but don't reset flag yet) - return themeChanged; - } - - /// - /// Shows the content of the theme browser modal. - /// - private void ShowContent() - { - // Header with current theme info - ImGui.Text("Choose a theme from the gallery below:"); - if (Theme.CurrentThemeName is not null) - { - ImGui.SameLine(); - using (Text.Color.Success()) - { - ImGui.Text($"Current: {Theme.CurrentThemeName}"); - } - } - else - { - ImGui.SameLine(); - using (Text.Color.Info()) - { - ImGui.Text("Current: Default"); - } - } - - ImGui.Separator(); - - // Theme family filter - ImGui.Text("Filter by Family:"); - ImGui.SameLine(); - - // Create family list for filtering - List familyList = ["All Themes", .. Theme.Families.OrderBy(f => f)]; - - if (ImGui.Combo("##FamilyFilter", ref selectedFamilyFilter, [.. familyList], familyList.Count)) - { - // Family filter changed - could add logic here if needed - } - - ImGui.Separator(); - - // Get filtered themes - IEnumerable filteredThemes = selectedFamilyFilter == 0 - ? Theme.AllThemes - : Theme.AllThemes.Where(t => t.Family == familyList[selectedFamilyFilter]); - - List themesToShow = [.. filteredThemes.OrderBy(t => t.Family).ThenBy(t => t.Name)]; - - // Theme count info - ImGui.Text($"Themes ({themesToShow.Count}):"); - - // Theme grid in a scrollable area - Vector2 childSize = new(0, ImGui.GetContentRegionAvail().Y - 60); // Leave space for buttons - ImGui.BeginChild("ThemeGridScrollArea", childSize, ImGuiChildFlags.Borders); - - // Use ThemeCard.RenderGrid with appropriate sizing for the modal - Vector2 cardSize = new(200, 90); // Increased width to accommodate longer theme names - ThemeCard.RenderGrid(themesToShow, selectedTheme => - { - // Apply the selected theme - if (Theme.Apply(selectedTheme.Name)) - { - themeChanged = true; // Set flag when theme is successfully applied - onThemeSelected?.Invoke(selectedTheme.Name); - //ImGui.CloseCurrentPopup(); - } - }, cardSize); - - ImGui.EndChild(); - - ImGui.NewLine(); - - // Modal buttons - float buttonWidth = 100.0f; - float totalButtonsWidth = (buttonWidth * 2) + ImGui.GetStyle().ItemSpacing.X; - ImGui.SetCursorPosX((ImGui.GetContentRegionAvail().X - totalButtonsWidth) * 0.5f); - - // Reset button - using (Theme.FromColor(Color.Palette.Semantic.Warning)) - { - if (ImGui.Button("Reset", new Vector2(buttonWidth, 0))) - { - Theme.ResetToDefault(); - themeChanged = true; // Set flag when default is applied - onDefaultRequested?.Invoke(); - //ImGui.CloseCurrentPopup(); - } - } - - ImGui.SameLine(); - - // Close button - if (ImGui.Button("Close", new Vector2(buttonWidth, 0))) - { - ImGui.CloseCurrentPopup(); - } - } -} diff --git a/ImGui.Styler/ThemeCard.cs b/ImGui.Styler/ThemeCard.cs deleted file mode 100644 index 9e0758e..0000000 --- a/ImGui.Styler/ThemeCard.cs +++ /dev/null @@ -1,375 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System; -using System.Collections.Generic; -using System.Numerics; -using Hexa.NET.ImGui; -using ktsu.ThemeProvider; - -/// -/// Provides theme preview card widgets for displaying theme information in a dialog window style. -/// -public static class ThemeCard -{ - /// - /// Renders a theme preview card styled like a mini dialog window with title bar and content area. - /// - /// The theme to render. - /// The size of the card. If not specified, uses a default size. - /// Whether this theme is currently selected. - /// True if the theme card was clicked, false otherwise. - public static bool Render(ThemeRegistry.ThemeInfo theme, Vector2? size = null, bool? isSelected = null) => - Render(theme, theme?.Name ?? string.Empty, size, isSelected); - - /// - /// Renders a theme preview card styled like a mini dialog window with title bar and content area. - /// This version uses a callback delegate to report theme selection. - /// - /// The theme to render. - /// Callback invoked when the theme is selected. - /// The size of the card. If not specified, uses a default size. - /// Whether this theme is currently selected. - public static void Render(ThemeRegistry.ThemeInfo theme, Action onThemeSelected, Vector2? size = null, bool? isSelected = null) => - Render(theme, theme?.Name ?? string.Empty, onThemeSelected, size, isSelected); - - /// - /// Renders a theme preview card styled like a mini dialog window with title bar and content area. - /// This version uses a callback delegate to report theme selection. - /// - /// The theme to render. - /// The display name for the theme (shown in the card). - /// Callback invoked when the theme is selected. - /// The size of the card. If not specified, uses a default size. - /// Whether this theme is currently selected. If not specified, compares against current theme. - public static void Render(ThemeRegistry.ThemeInfo theme, string displayName, Action onThemeSelected, Vector2? size = null, bool? isSelected = null) - { - ArgumentNullException.ThrowIfNull(theme); - ArgumentNullException.ThrowIfNull(displayName); - ArgumentNullException.ThrowIfNull(onThemeSelected); - - // Use the existing Render method and handle the click result - if (Render(theme, displayName, size, isSelected)) - { - onThemeSelected(theme); - } - } - - /// - /// Renders a theme preview card styled like a mini dialog window with title bar and content area. - /// - /// The theme to render. - /// The display name for the theme (shown in the card). - /// The size of the card. If not specified, uses a default size. - /// Whether this theme is currently selected. If not specified, compares against current theme. - /// True if the theme card was clicked, false otherwise. - public static bool Render(ThemeRegistry.ThemeInfo theme, string displayName, Vector2? size = null, bool? isSelected = null) - { - ArgumentNullException.ThrowIfNull(theme); - ArgumentNullException.ThrowIfNull(displayName); - - bool clicked = false; - - // Create a unique ID for this card - ImGui.PushID($"ThemeCard_{theme.Name}"); - - try - { - // Determine if this theme is selected - bool isCurrentTheme = isSelected ?? (Theme.CurrentThemeName == theme.Name); - - // Use default size if not specified - Vector2 cardSize = size ?? new Vector2(180, 70); - - // Get colors for dialog window style from complete palette - ImColor primaryColor = Color.Palette.Basic.Blue; // Fallback - ImColor surfaceColor = Color.Palette.Neutral.Gray; // Fallback - ImColor textColor = Color.Palette.Neutral.White; // Fallback - IReadOnlyDictionary? completePalette = null; - - try - { - // Use the complete palette for efficient color extraction - completePalette = Theme.GetCompletePalette(theme.CreateInstance()); - - // Get primary color for title bar - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Primary, Priority.High), out PerceptualColor primary)) - { - primaryColor = Color.FromPerceptualColor(primary); - } - - // Get surface color for background - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Low), out PerceptualColor surface)) - { - surfaceColor = Color.FromPerceptualColor(surface); - } - else if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Medium), out PerceptualColor surfaceMed)) - { - surfaceColor = Color.FromPerceptualColor(surfaceMed); - } - - // Get highest priority neutral for text - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.VeryHigh), out PerceptualColor textVeryHigh)) - { - textColor = Color.FromPerceptualColor(textVeryHigh); - } - else if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.High), out PerceptualColor textHigh)) - { - textColor = Color.FromPerceptualColor(textHigh); - } - } - catch (ArgumentException) - { - // Use fallback colors if extraction fails - } - catch (InvalidOperationException) - { - // Use fallback colors if extraction fails - } - - // Use invisible button for interaction - clicked = ImGui.InvisibleButton($"##card_{theme.Name}", cardSize); - - // Get button bounds for custom drawing - Vector2 cardMin = ImGui.GetItemRectMin(); - Vector2 cardMax = ImGui.GetItemRectMax(); - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - - bool isHovered = ImGui.IsItemHovered(); - bool isActive = ImGui.IsItemActive(); - - float titleBarHeight = 16.0f; // Height of the dialog title bar - float margin = 3.0f; - - // Calculate dialog window bounds (with margins) - Vector2 dialogMin = new(cardMin.X + margin, cardMin.Y + margin); - Vector2 dialogMax = new(cardMax.X - margin, cardMax.Y - margin); - Vector2 titleBarMax = new(dialogMax.X, dialogMin.Y + titleBarHeight); - - // Draw enhanced shadow for selected themes - Vector2 shadowOffset = isCurrentTheme ? new(3.0f, 3.0f) : new(2.0f, 2.0f); - float shadowOpacity = isCurrentTheme ? 0.4f : 0.2f; - drawList.AddRectFilled( - dialogMin + shadowOffset, - dialogMax + shadowOffset, - ImGui.ColorConvertFloat4ToU32(new Vector4(0.0f, 0.0f, 0.0f, shadowOpacity)), - 3.0f - ); - - // Draw main surface background - drawList.AddRectFilled( - dialogMin, - dialogMax, - ImGui.ColorConvertFloat4ToU32(surfaceColor.Value), - 3.0f - ); - - // Draw primary color title bar - drawList.AddRectFilled( - dialogMin, - titleBarMax, - ImGui.ColorConvertFloat4ToU32(primaryColor.Value), - 3.0f, - ImDrawFlags.RoundCornersTop - ); - - // Add subtle inner glow for selected themes - if (isCurrentTheme) - { - // Inner glow - subtle white glow inside the card - drawList.AddRect( - dialogMin + Vector2.One, - dialogMax - Vector2.One, - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 0.3f)), - 2.5f, - ImDrawFlags.None, - 1.0f - ); - - // Secondary inner glow for more prominence - drawList.AddRect( - dialogMin + new Vector2(2.0f, 2.0f), - dialogMax - new Vector2(2.0f, 2.0f), - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 0.15f)), - 2.0f, - ImDrawFlags.None, - 0.5f - ); - } - - // Add hover effect - if (isHovered) - { - drawList.AddRect( - dialogMin, - dialogMax, - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 0.6f)), - 3.0f, - ImDrawFlags.None, - 1.5f - ); - } - - // Add active (pressed) effect - if (isActive) - { - drawList.AddRectFilled( - dialogMin, - dialogMax, - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 0.1f)), - 3.0f - ); - } - - // Draw theme name centered in content area (below title bar) - // Calculate display text (remove checkmark to avoid layout jumping) - string displayText = displayName; - Vector2 textSize = ImGui.CalcTextSize(displayText); - - // Calculate content area bounds (below title bar) - float contentHeight = dialogMax.Y - titleBarMax.Y; - - Vector2 textPos = new( - dialogMin.X + ((dialogMax.X - dialogMin.X - textSize.X) * 0.5f), // Centered horizontally - titleBarMax.Y + ((contentHeight - textSize.Y) * 0.5f) - 4.0f // Centered vertically but moved up 4px for balance - ); - - drawList.AddText(textPos, ImGui.ColorConvertFloat4ToU32(textColor.Value), displayText); - - // Add semantic color swatches in bottom right corner - DrawSemanticSwatches(drawList, completePalette, dialogMax, margin); - - // Add tooltip with theme description if hovered - if (isHovered) - { - ImGui.SetTooltip($"{theme.Description}\n\nFamily: {theme.Family}\nType: {(theme.IsDark ? "Dark" : "Light")}\n\nColor swatches show: Primary, Alternate, Success, Warning, Error\n\nClick to select this theme"); - } - } - finally - { - ImGui.PopID(); - } - - return clicked; - } - - /// - /// Renders a grid of theme preview cards. - /// - /// The themes to display in the grid. - /// Size of each card. If not specified, uses default size. - /// Number of cards per row. If not specified, calculates based on available width. - /// The theme that was clicked, or null if no theme was clicked. - public static ThemeRegistry.ThemeInfo? RenderGrid(IEnumerable themes, Vector2? cardSize = null, int? columnsPerRow = null) - { - ArgumentNullException.ThrowIfNull(themes); - - Vector2 size = cardSize ?? new Vector2(180, 70); - int columns = columnsPerRow ?? Math.Max(1, (int)(ImGui.GetContentRegionAvail().X / (size.X + 10))); // 10px spacing - - ImGui.Columns(columns, "ThemeCardGrid", false); - - foreach (ThemeRegistry.ThemeInfo theme in themes) - { - if (Render(theme, size)) - { - ImGui.Columns(1); // Reset columns - return theme; - } - - ImGui.NextColumn(); - } - - ImGui.Columns(1); // Reset columns - return null; - } - - /// - /// Renders a grid of theme preview cards using a callback delegate for theme selection. - /// - /// The themes to display in the grid. - /// Callback invoked when any theme is selected. - /// Size of each card. If not specified, uses default size. - /// Number of cards per row. If not specified, calculates based on available width. - public static void RenderGrid(IEnumerable themes, Action onThemeSelected, Vector2? cardSize = null, int? columnsPerRow = null) - { - ArgumentNullException.ThrowIfNull(themes); - ArgumentNullException.ThrowIfNull(onThemeSelected); - - Vector2 size = cardSize ?? new Vector2(180, 70); - int columns = columnsPerRow ?? Math.Max(1, (int)(ImGui.GetContentRegionAvail().X / (size.X + 10))); // 10px spacing - - ImGui.Columns(columns, "ThemeCardGrid", false); - - foreach (ThemeRegistry.ThemeInfo theme in themes) - { - Render(theme, onThemeSelected, size); - ImGui.NextColumn(); - } - - ImGui.Columns(1); // Reset columns - } - - /// - /// Draws small semantic color swatches in the bottom right corner of a theme card. - /// - /// The ImGui draw list to draw on. - /// The complete color palette for the theme. - /// The bottom-right corner of the dialog area. - /// The margin from the dialog edge. - private static void DrawSemanticSwatches(ImDrawListPtr drawList, IReadOnlyDictionary? completePalette, Vector2 dialogMax, float margin) - { - // Skip drawing swatches if palette is not available - if (completePalette is null) - { - return; - } - - // Define the semantic meanings to show as swatches (in order) - SemanticMeaning[] swatchMeanings = [ - SemanticMeaning.Primary, - SemanticMeaning.Alternate, - SemanticMeaning.Success, - SemanticMeaning.Warning, - SemanticMeaning.Error - ]; - - const float swatchSize = 8.0f; // Small square size (increased from 6.0f) - const float swatchSpacing = 2.0f; // Spacing between squares (changed to whole number) - const float swatchPadding = 3.0f; // Padding from dialog edge (already whole number) - - // Calculate starting position (bottom-right, working left) - float totalWidth = (swatchMeanings.Length * swatchSize) + ((swatchMeanings.Length - 1) * swatchSpacing); - Vector2 startPos = new( - dialogMax.X - margin - swatchPadding - totalWidth, - dialogMax.Y - margin - swatchPadding - swatchSize - ); - - // Draw each semantic color swatch - for (int i = 0; i < swatchMeanings.Length; i++) - { - SemanticColorRequest colorRequest = new(swatchMeanings[i], Priority.High); - - // Try to get the color from the complete palette - if (completePalette.TryGetValue(colorRequest, out PerceptualColor semanticColor)) - { - ImColor swatchColor = Color.FromPerceptualColor(semanticColor); - - Vector2 swatchMin = new( - startPos.X + (i * (swatchSize + swatchSpacing)), - startPos.Y - ); - Vector2 swatchMax = new( - swatchMin.X + swatchSize, - swatchMin.Y + swatchSize - ); - - // Draw the color swatch as a flat square - drawList.AddRectFilled(swatchMin, swatchMax, ImGui.ColorConvertFloat4ToU32(swatchColor.Value)); - } - } - } -} diff --git a/ImGui.Widgets/ColorIndicator.cs b/ImGui.Widgets/ColorIndicator.cs deleted file mode 100644 index 7ec575f..0000000 --- a/ImGui.Widgets/ColorIndicator.cs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System.Numerics; - -using Hexa.NET.ImGui; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// Displays a colored square. - /// - /// The color to be displayed when enabled. - /// A boolean indicating whether the ColorIndicator is enabled. - public static void ColorIndicator(ImColor color, bool enabled) => ColorIndicatorImpl.Show(color, enabled); - - internal static class ColorIndicatorImpl - { - public static void Show(ImColor color, bool enabled) - { - float frameHeight = ImGui.GetFrameHeight(); - ImGui.Dummy(new Vector2(frameHeight, frameHeight)); - Vector2 dummyRectMin = ImGui.GetItemRectMin(); - Vector2 dummyRectMax = ImGui.GetItemRectMax(); - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - uint colorToShow = enabled ? ImGui.GetColorU32(color.Value) : ImGui.GetColorU32(ImGuiCol.FrameBg); - drawList.AddRectFilled(dummyRectMin, dummyRectMax, colorToShow); - } - } -} diff --git a/ImGui.Widgets/Combo.cs b/ImGui.Widgets/Combo.cs deleted file mode 100644 index 9be62d3..0000000 --- a/ImGui.Widgets/Combo.cs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System.Collections.ObjectModel; -using System.Globalization; -using Hexa.NET.ImGui; - -using ktsu.Semantics.Strings; - -public static partial class ImGuiWidgets -{ - /// - /// An ImGui.Combo implementation that works with Enums. - /// - /// Type of the Enum. - /// Label for display and id. - /// The currently selected value. - /// If a combo value was selected. - public static bool Combo(string label, ref TEnum selectedValue) where TEnum : Enum - { - Array possibleValues = Enum.GetValues(typeof(TEnum)); - int currentIndex = Array.IndexOf(possibleValues, selectedValue); - string[] possibleValuesNames = Enum.GetNames(typeof(TEnum)); - if (ImGui.Combo(label, ref currentIndex, possibleValuesNames, possibleValuesNames.Length)) - { - selectedValue = (TEnum)possibleValues.GetValue(currentIndex)!; - return true; - } - - return false; - } - - /// - /// An ImGui.Combo implementation that works with IStrings. - /// - /// Type of the StrongString - /// Label for display and id. - /// The currently selected value. - /// The collection of possible values. - /// If a combo value was selected. - public static bool Combo(string label, ref TString selectedValue, Collection possibleValues) where TString : ISemanticString - { - ArgumentNullException.ThrowIfNull(possibleValues); - - int currentIndex = possibleValues.IndexOf(selectedValue); - string[] possibleValuesNames = [.. possibleValues.Select(e => e.ToString(CultureInfo.InvariantCulture))]; - if (ImGui.Combo(label, ref currentIndex, possibleValuesNames, possibleValuesNames.Length)) - { - selectedValue = possibleValues[currentIndex]; - return true; - } - - return false; - } - - /// - /// An ImGui.Combo implementation that works with strings. - /// - /// Label for display and id. - /// The currently selected value. - /// The collection of possible values. - /// If a combo value was selected. - public static bool Combo(string label, ref string selectedValue, Collection possibleValues) - { - ArgumentNullException.ThrowIfNull(possibleValues); - - int currentIndex = possibleValues.IndexOf(selectedValue); - string[] possibleValuesNames = [.. possibleValues]; - if (ImGui.Combo(label, ref currentIndex, possibleValuesNames, possibleValuesNames.Length)) - { - selectedValue = possibleValues[currentIndex]; - return true; - } - - return false; - } -} diff --git a/ImGui.Widgets/CompatibilitySuppressions.xml b/ImGui.Widgets/CompatibilitySuppressions.xml deleted file mode 100644 index df05015..0000000 --- a/ImGui.Widgets/CompatibilitySuppressions.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - CP0001 - T:System.Diagnostics.CodeAnalysis.FeatureGuardAttribute - lib/net8.0/ktsu.ImGui.Widgets.dll - lib/net9.0/ktsu.ImGui.Widgets.dll - - - CP0001 - T:System.Diagnostics.CodeAnalysis.FeatureSwitchDefinitionAttribute - lib/net8.0/ktsu.ImGui.Widgets.dll - lib/net9.0/ktsu.ImGui.Widgets.dll - - - CP0001 - T:System.Diagnostics.DebuggerDisableUserUnhandledExceptionsAttribute - lib/net8.0/ktsu.ImGui.Widgets.dll - lib/net9.0/ktsu.ImGui.Widgets.dll - - - CP0001 - T:System.Runtime.CompilerServices.OverloadResolutionPriorityAttribute - lib/net8.0/ktsu.ImGui.Widgets.dll - lib/net9.0/ktsu.ImGui.Widgets.dll - - - CP0001 - T:System.Runtime.CompilerServices.ParamCollectionAttribute - lib/net8.0/ktsu.ImGui.Widgets.dll - lib/net9.0/ktsu.ImGui.Widgets.dll - - - CP0001 - T:System.Threading.Lock - lib/net8.0/ktsu.ImGui.Widgets.dll - lib/net9.0/ktsu.ImGui.Widgets.dll - - - CP0014 - M:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.get_UrlFormat:[T:System.Runtime.CompilerServices.CompilerGeneratedAttribute] - lib/net8.0/ktsu.ImGui.Widgets.dll - lib/net9.0/ktsu.ImGui.Widgets.dll - - - CP0014 - M:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.set_UrlFormat(System.String):[T:System.Runtime.CompilerServices.CompilerGeneratedAttribute] - lib/net8.0/ktsu.ImGui.Widgets.dll - lib/net9.0/ktsu.ImGui.Widgets.dll - - \ No newline at end of file diff --git a/ImGui.Widgets/DESCRIPTION.md b/ImGui.Widgets/DESCRIPTION.md deleted file mode 100644 index 2b61e9f..0000000 --- a/ImGui.Widgets/DESCRIPTION.md +++ /dev/null @@ -1 +0,0 @@ -A library of custom widgets using ImGui.NET and utilities to enhance ImGui-based applications. diff --git a/ImGui.Widgets/DividerContainer.cs b/ImGui.Widgets/DividerContainer.cs deleted file mode 100644 index 90a9a3e..0000000 --- a/ImGui.Widgets/DividerContainer.cs +++ /dev/null @@ -1,390 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System.Collections.ObjectModel; -using System.Drawing; -using System.Numerics; - -using Extensions; - -using Hexa.NET.ImGui; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// An enum to specify the layout direction of the divider container. - /// - public enum DividerLayout - { - /// - /// The container will be laid out in columns. - /// - Columns, - /// - /// The container will be laid out in rows. - /// - Rows, - } - - /// - /// A container that can be divided into dragable zones. - /// Useful for creating resizable layouts. - /// Containers can be nested to create complex layouts. - /// - /// - /// Create a new divider container with a callback for when the container is resized and a specified layout direction. - /// - /// The ID of the container. - /// A callback for when the container is resized. - /// The layout direction of the container. - /// The zones to add to the container. - public class DividerContainer(string id, Action? onResized, DividerLayout layout, IEnumerable zones) - { - /// - /// An ID for the container. - /// - public string Id { get; init; } = id; - private int DragIndex { get; set; } = -1; - private List Zones { get; init; } = [.. zones]; - - /// - /// Create a new divider container with a callback for when the container is resized and a specified layout direction. - /// - /// The ID of the container. - /// A callback for when the container is resized. - /// The layout direction of the container. - public DividerContainer(string id, Action? onResized, DividerLayout layout) - : this(id, onResized, layout, []) - { - } - - /// - /// Create a new divider container with the default layout direction of columns. - /// - /// The ID of the container. - public DividerContainer(string id) - : this(id, null, DividerLayout.Columns) - { - } - - /// - /// Create a new divider container with a specified layout direction. - /// - /// The ID of the container. - /// The layout direction of the container. - public DividerContainer(string id, DividerLayout layout) - : this(id, null, layout) - { - } - - /// - /// Create a new divider container with a callback for when the container is resized and the default layout direction of columns. - /// - /// The ID of the container. - /// A callback for when the container is resized. - public DividerContainer(string id, Action? onResized) - : this(id, onResized, DividerLayout.Columns) - { - } - - /// - /// Tick the container to update and draw its contents. - /// - /// The delta time since the last tick. - /// Thrown if the layout direction is not supported. - public void Tick(float dt) - { - ImGuiStylePtr style = ImGui.GetStyle(); - Vector2 windowPadding = style.WindowPadding; - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - Vector2 containerSize = ImGui.GetWindowSize() - (windowPadding * 2.0f); - - Vector2 layoutMask = layout switch - { - DividerLayout.Columns => new Vector2(1, 0), - DividerLayout.Rows => new Vector2(0, 1), - _ => throw new NotImplementedException(), - }; - - Vector2 layoutMaskInverse = layout switch - { - DividerLayout.Columns => new Vector2(0, 1), - DividerLayout.Rows => new Vector2(1, 0), - _ => throw new NotImplementedException(), - }; - - Vector2 windowPos = ImGui.GetWindowPos(); - Vector2 advance = windowPos + windowPadding; - - ImGui.SetNextWindowPos(advance); - ImGui.BeginChild(Id, containerSize, ImGuiChildFlags.None, ImGuiWindowFlags.NoSavedSettings); - - foreach (DividerZone z in Zones) - { - Vector2 zoneSize = CalculateZoneSize(z, windowPadding, containerSize, layoutMask, layoutMaskInverse); - ImGui.SetNextWindowPos(advance); - ImGui.BeginChild(z.Id, zoneSize, ImGuiChildFlags.Borders, ImGuiWindowFlags.NoSavedSettings); - z.Tick(dt); - ImGui.EndChild(); - - advance += CalculateAdvance(z, windowPadding, containerSize, layoutMask); - } - - ImGui.EndChild(); - - //render the handles last otherwise they'll be covered by the other zones windows and wont receive hover events - - //reset the advance to the top left of the container - advance = windowPos + windowPadding; - float resize = 0; - Vector2 mousePos = ImGui.GetMousePos(); - bool resetSize = false; - foreach ((DividerZone z, int i) in Zones.WithIndex()) - { - //draw the grab handle if we're not the last zone - if (z != Zones.Last()) - { - Vector2 zoneSize = CalculateZoneSize(z, windowPadding, containerSize, layoutMask, layoutMaskInverse); - Vector2 lineA = advance + (zoneSize * layoutMask) + (windowPadding * 0.5f * layoutMask); - Vector2 lineB = lineA + (zoneSize * layoutMaskInverse); - float lineWidth = style.WindowPadding.X * 0.5f; - float grabWidth = style.WindowPadding.X * 2; - Vector2 grabBox = new Vector2(grabWidth, grabWidth) * 0.5f; - Vector2 grabMin = lineA - (grabBox * layoutMask); - Vector2 grabMax = lineB + (grabBox * layoutMask); - Vector2 grabSize = grabMax - grabMin; - RectangleF handleRect = new(grabMin.X, grabMin.Y, grabSize.X, grabSize.Y); - bool handleHovered = handleRect.Contains(mousePos.X, mousePos.Y); - bool mouseClickedThisFrame = ImGui.IsMouseClicked(ImGuiMouseButton.Left); - bool handleClicked = handleHovered && mouseClickedThisFrame; - bool handleDoubleClicked = handleHovered && ImGui.IsMouseDoubleClicked(ImGuiMouseButton.Left); - - if (handleClicked) - { - DragIndex = i; - } - - if (handleDoubleClicked) - { - resetSize = true; - } - else if (DragIndex == i) - { - if (ImGui.IsMouseDown(ImGuiMouseButton.Left)) - { - Vector2 mousePosLocal = mousePos - advance; - - DividerZone first = Zones.First(); - DividerZone last = Zones.Last(); - if (first != last && z != first) - { - mousePosLocal += windowPadding * 0.5f * layoutMask; - } - - float requestedSize = layout switch - { - DividerLayout.Columns => mousePosLocal.X / containerSize.X, - DividerLayout.Rows => mousePosLocal.Y / containerSize.Y, - _ => throw new NotImplementedException(), - }; - resize = Math.Clamp(requestedSize, 0.1f, 0.9f); - } - else - { - DragIndex = -1; - } - } - - Vector4 lineColor = DragIndex == i ? new Vector4(1, 1, 1, 0.7f) : handleHovered ? new Vector4(1, 1, 1, 0.5f) : new Vector4(1, 1, 1, 0.3f); - //drawList.AddRectFilled(grabMin, grabMax, ImGui.ColorConvertFloat4ToU32(new Vector4(1, 1, 1, 0.3f))); - drawList.AddLine(lineA, lineB, ImGui.ColorConvertFloat4ToU32(lineColor), lineWidth); - - if (handleHovered || DragIndex == i) - { - ImGui.SetMouseCursor(layout switch - { - DividerLayout.Columns => ImGuiMouseCursor.ResizeEw, - DividerLayout.Rows => ImGuiMouseCursor.ResizeNs, - _ => throw new NotImplementedException(), - }); - } - } - - advance += CalculateAdvance(z, windowPadding, containerSize, layoutMask); - } - - //do the actual resize at the end of the tick so that we don't mess with the dimensions of the layout mid rendering - if (DragIndex > -1) - { - if (resetSize) - { - resize = Zones[DragIndex].InitialSize; - } - - DividerZone resizedZone = Zones[DragIndex]; - DividerZone neighbourZone = Zones[DragIndex + 1]; - float combinedSize = resizedZone.Size + neighbourZone.Size; - float maxSize = combinedSize - 0.1f; - resize = Math.Clamp(resize, 0.1f, maxSize); - bool sizeDidChange = resizedZone.Size != resize; - resizedZone.Size = resize; - neighbourZone.Size = combinedSize - resize; - if (sizeDidChange) - { - onResized?.Invoke(this); - } - - if (resetSize) - { - DragIndex = -1; - } - } - } - - private Vector2 CalculateZoneSize(DividerZone z, Vector2 windowPadding, Vector2 containerSize, Vector2 layoutMask, Vector2 layoutMaskInverse) - { - Vector2 zoneSize = (containerSize * z.Size * layoutMask) + (containerSize * layoutMaskInverse); - - DividerZone first = Zones.First(); - DividerZone last = Zones.Last(); - if (first != last) - { - if (z == first || z == last) - { - zoneSize -= windowPadding * 0.5f * layoutMask; - } - else - { - zoneSize -= windowPadding * layoutMask; - } - } - - return new Vector2((float)Math.Floor(zoneSize.X), (float)Math.Floor(zoneSize.Y)); - } - - private Vector2 CalculateAdvance(DividerZone z, Vector2 windowPadding, Vector2 containerSize, Vector2 layoutMask) - { - Vector2 advance = containerSize * z.Size * layoutMask; - - DividerZone first = Zones.First(); - DividerZone last = Zones.Last(); - if (first != last && z == first) - { - advance += windowPadding * 0.5f * layoutMask; - } - - return new Vector2((float)Math.Round(advance.X), (float)Math.Round(advance.Y)); - } - - /// - /// Add a zone to the container. - /// - /// The ID of the zone. - /// The size of the zone. - /// Whether the zone is resizable. - /// The delegate to call when the zone is ticked. - public void Add(string id, float size, bool resizable, Action tickDelegate) => Zones.Add(new(id, size, resizable, tickDelegate)); - - /// - /// Add a zone to the container. - /// - /// The ID of the zone. - /// The size of the zone. - /// The delegate to call when the zone is ticked. - public void Add(string id, float size, Action tickDelegate) => Zones.Add(new(id, size, tickDelegate)); - - /// - /// Add a zone to the container. - /// - /// The ID of the zone. - /// The delegate to call when the zone is ticked. - public void Add(string id, Action tickDelegate) - { - float size = 1.0f / (Zones.Count + 1); - Zones.Add(new(id, size, tickDelegate)); - } - - /// - /// Add a zone to the container. - /// - /// The zone to add - public void Add(DividerZone zone) => Zones.Add(zone); - - /// - /// Remove a zone from the container. - /// - /// The ID of the zone to remove. - public void Remove(string id) - { - DividerZone? zone = Zones.FirstOrDefault(z => z.Id == id); - if (zone != null) - { - Zones.Remove(zone); - } - } - - /// - /// Remome all zones from the container. - /// - public void Clear() => Zones.Clear(); - - /// - /// Set the size of a zone by its ID. - /// - /// The ID of the zone to set the size of. - /// The size to set. - public void SetSize(string id, float size) - { - DividerZone? zone = Zones.FirstOrDefault(z => z.Id == id); - if (zone != null) - { - zone.Size = size; - } - } - - /// - /// Set the size of a zone by its index. - /// - /// The index of the zone to set the size of. - /// The size to set. - public void SetSize(int index, float size) - { - if (index >= 0 && index < Zones.Count) - { - Zones[index].Size = size; - } - } - - /// - /// Set the sizes of all zones in this container from a collection of sizes. - /// - /// The collection of sizes to set. - /// - public void SetSizesFromList(ICollection sizes) - { - ArgumentNullException.ThrowIfNull(sizes, nameof(sizes)); - - if (sizes.Count != Zones.Count) - { - throw new ArgumentException("List of sizes must be the same length as the zones list"); - } - - foreach ((float s, int i) in sizes.WithIndex()) - { - Zones[i].Size = s; - } - } - - /// - /// Get a collection of the sizes of all zones in this container. - /// - /// A collection of the sizes of all zones in this container. - public Collection GetSizes() => Zones.Select(z => z.Size).ToCollection(); - } -} diff --git a/ImGui.Widgets/DividerZone.cs b/ImGui.Widgets/DividerZone.cs deleted file mode 100644 index 983ac14..0000000 --- a/ImGui.Widgets/DividerZone.cs +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// A zone that can be resized by dragging a divider. - /// For use inside DividerContainer. - /// - public class DividerZone - { - /// - /// The unique identifier for this zone. - /// - public string Id { get; private set; } - /// - /// The size of this zone. - /// - public float Size { get; set; } - /// - /// Whether this zone can be resized. - /// - public bool Resizable { get; } = true; - private Action? TickDelegate { get; } - internal float InitialSize { get; init; } - - /// - /// Create a new divider zone. - /// - /// The unique identifier for this zone. - /// The size of this zone. - public DividerZone(string id, float size) - { - Id = id; - Size = size; - InitialSize = size; - Resizable = true; - } - - /// - /// Create a new resizable divider zone with a tick delegate. - /// - /// The unique identifier for this zone. - /// The size of this zone. - /// The delegate to call every frame. - public DividerZone(string id, float size, Action tickDelegate) - { - Id = id; - Size = size; - InitialSize = size; - TickDelegate = tickDelegate; - } - - /// - /// Create a new divider zone that is optionally resizable with a tick delegate. - /// - /// The unique identifier for this zone. - /// The size of this zone. - /// Whether this zone can be resized. - /// The delegate to call every frame. - public DividerZone(string id, float size, bool resizable, Action tickDelegate) - { - Id = id; - Size = size; - InitialSize = size; - Resizable = resizable; - TickDelegate = tickDelegate; - } - - /// - /// Create a new divider zone that is optionally resizable. - /// - /// The unique identifier for this zone. - /// The size of this zone. - /// Whether this zone can be resized. - public DividerZone(string id, float size, bool resizable) - { - Id = id; - Size = size; - InitialSize = size; - Resizable = resizable; - } - - /// - /// Calls the tick delegate if it is set. - /// - /// The delta time since the last tick. - internal void Tick(float dt) => TickDelegate?.Invoke(dt); - } -} diff --git a/ImGui.Widgets/Grid.cs b/ImGui.Widgets/Grid.cs deleted file mode 100644 index 9221a0c..0000000 --- a/ImGui.Widgets/Grid.cs +++ /dev/null @@ -1,471 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System.Drawing; -using System.Numerics; - -using Hexa.NET.ImGui; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// Gets or sets a value indicating whether to enable grid debug drawing. - /// - public static bool EnableGridDebugDraw { get; set; } - - /// - /// Specifies the order in which grid items are displayed. - /// - /// - /// displays items left to right before moving to the next row. - /// displays items top to bottom before moving to the next column. - /// - public enum GridOrder - { - /// - /// Items are displayed in order left to right before dropping to the next row. - /// Recommended for when displaying grids of icons. - /// Example: - /// [ [1] [2] [3] ] - /// [ [4] [5] [6] ] - /// OR - /// [ [1] [2] [3] [4] [5] ] - /// [ [6] ] - /// - RowMajor, - /// - /// Items are displayed top to bottom before moving to the next column. - /// Recommended when displaying tables of data. - /// Example: - /// [ [1] [4] ] - /// [ [2] [5] ] - /// [ [3] [6] ] - /// OR - /// [ [1] [5] ] - /// [ [2] [6] ] - /// [ [3] ] - /// [ [4] ] - /// - ColumnMajor, - } - - /// - /// Options for changing how the grid is laid out. - /// - public class GridOptions - { - /// - /// Size of the grid. Setting any axis to 0 will use the available space. - /// - public Vector2 GridSize { get; set; } = new(0, 0); - - /// - /// Size the content region to cover all the items. - /// - public bool FitToContents { get; init; } - } - - /// - /// Delegate to measure the size of a grid cell. - /// - /// The type of the item. - /// The item to measure. - /// The size of the item. - public delegate Vector2 MeasureGridCell(T item); - - /// - /// Delegate to draw a grid cell. - /// - /// The type of the item. - /// The item to draw. - /// The calculated size of the grid cell. - /// The calculated size of the item. - public delegate void DrawGridCell(T item, Vector2 cellSize, Vector2 itemSize); - - /// - /// Renders a grid with the specified items and delegates. - /// - /// The type of the items. - /// Id for the grid. - /// The items to be displayed in the grid. - /// The delegate to measure the size of each item. - /// The delegate to draw each item. - public static void RowMajorGrid(string id, IEnumerable items, MeasureGridCell measureDelegate, DrawGridCell drawDelegate) - { - ArgumentNullException.ThrowIfNull(items); - ArgumentNullException.ThrowIfNull(measureDelegate); - ArgumentNullException.ThrowIfNull(drawDelegate); - - GridImpl.ShowRowMajor(id, items, measureDelegate, drawDelegate, new()); - } - - /// - /// Renders a grid with the specified items and delegates. - /// - /// The type of the items. - /// Id for the grid. - /// The items to be displayed in the grid. - /// The delegate to measure the size of each item. - /// The delegate to draw each item. - /// Additional options to modify the grid behaviour - public static void RowMajorGrid(string id, IEnumerable items, MeasureGridCell measureDelegate, DrawGridCell drawDelegate, GridOptions gridOptions) - { - ArgumentNullException.ThrowIfNull(items); - ArgumentNullException.ThrowIfNull(measureDelegate); - ArgumentNullException.ThrowIfNull(drawDelegate); - ArgumentNullException.ThrowIfNull(gridOptions); - - GridImpl.ShowRowMajor(id, items, measureDelegate, drawDelegate, gridOptions); - } - - /// - /// Renders a grid with the specified items and delegates. - /// - /// The type of the items. - /// Id for the grid. - /// The items to be displayed in the grid. - /// The delegate to measure the size of each item. - /// The delegate to draw each item. - public static void ColumnMajorGrid(string id, IEnumerable items, MeasureGridCell measureDelegate, DrawGridCell drawDelegate) - { - ArgumentNullException.ThrowIfNull(items); - ArgumentNullException.ThrowIfNull(measureDelegate); - ArgumentNullException.ThrowIfNull(drawDelegate); - - GridImpl.ShowColumnMajor(id, items, measureDelegate, drawDelegate, new()); - } - - /// - /// Renders a grid with the specified items and delegates. - /// - /// The type of the items. - /// Id for the grid. - /// The items to be displayed in the grid. - /// The delegate to measure the size of each item. - /// The delegate to draw each item. - /// Additional options to modify the grid behaviour - public static void ColumnMajorGrid(string id, IEnumerable items, MeasureGridCell measureDelegate, DrawGridCell drawDelegate, GridOptions gridOptions) - { - ArgumentNullException.ThrowIfNull(items); - ArgumentNullException.ThrowIfNull(measureDelegate); - ArgumentNullException.ThrowIfNull(drawDelegate); - ArgumentNullException.ThrowIfNull(gridOptions); - - GridImpl.ShowColumnMajor(id, items, measureDelegate, drawDelegate, gridOptions); - } - - /// - /// Contains the implementation details for rendering grids. - /// - internal static class GridImpl - { - internal sealed class GridLayout() - { - internal Point Dimensions { private get; init; } - internal float[] ColumnWidths { get; init; } = []; - internal float[] RowHeights { get; init; } = []; - internal int ColumnCount => Dimensions.X; - internal int RowCount => Dimensions.Y; - } - - #region RowMajor - private static Point CalculateRowMajorCellLocation(int itemIndex, int columnCount) - { - int columnIndex = itemIndex % columnCount; - int rowIndex = itemIndex / columnCount; - return new(columnIndex, rowIndex); - } - - private static GridLayout CalculateRowMajorGridLayout(Vector2[] itemSizes, float containerWidth) - { - float widestElementHeight = itemSizes.Max(itemSize => itemSize.X); - GridLayout currentGridLayout = new() - { - Dimensions = new(1, itemSizes.Length), - ColumnWidths = [widestElementHeight], - RowHeights = [.. itemSizes.Select(itemSize => itemSize.Y)] - }; - - GridLayout previousGridLayout = currentGridLayout; - while (currentGridLayout.ColumnCount < itemSizes.Length) - { - int newColumnCount = currentGridLayout.ColumnCount + 1; - int newRowCount = (int)MathF.Ceiling(itemSizes.Length / (float)newColumnCount); - currentGridLayout = new() - { - Dimensions = new(newColumnCount, newRowCount), - ColumnWidths = new float[newColumnCount], - RowHeights = new float[newRowCount], - }; - - for (int i = 0; i < itemSizes.Length; i++) - { - Vector2 itemSize = itemSizes[i]; - Point cellLocation = CalculateRowMajorCellLocation(i, newColumnCount); - - float maxColumnWidth = currentGridLayout.ColumnWidths[cellLocation.X]; - maxColumnWidth = Math.Max(maxColumnWidth, itemSize.X); - currentGridLayout.ColumnWidths[cellLocation.X] = maxColumnWidth; - - float maxRowHeight = currentGridLayout.RowHeights[cellLocation.Y]; - maxRowHeight = Math.Max(maxRowHeight, itemSize.Y); - currentGridLayout.RowHeights[cellLocation.Y] = maxRowHeight; - } - - if (currentGridLayout.ColumnWidths.Sum() > containerWidth) - { - currentGridLayout = previousGridLayout; - break; - } - - previousGridLayout = currentGridLayout; - } - - return currentGridLayout; - } - - internal static void ShowRowMajor(string id, IEnumerable items, MeasureGridCell measureDelegate, DrawGridCell drawDelegate, GridOptions gridOptions) - { - if (gridOptions.GridSize.X <= 0) - { - gridOptions.GridSize = new(ImGui.GetContentRegionAvail().X, gridOptions.GridSize.Y); - } - - if (gridOptions.GridSize.Y <= 0) - { - gridOptions.GridSize = new(gridOptions.GridSize.X, ImGui.GetContentRegionAvail().Y); - } - - Vector2 itemSpacing = ImGui.GetStyle().ItemSpacing; - T[] itemList = [.. items]; - int itemListCount = itemList.Length; - Vector2[] itemDimensions = [.. itemList.Select(i => measureDelegate(i))]; - Vector2[] itemDimensionsWithSpacing = [.. itemDimensions.Select(d => d + itemSpacing)]; - - if (itemList.Length == 0) - { - // No items to display - if (!gridOptions.FitToContents) - { - ImGui.Dummy(gridOptions.GridSize); - } - - return; - } - - GridLayout gridLayout = CalculateRowMajorGridLayout(itemDimensionsWithSpacing, gridOptions.GridSize.X); - - if (gridOptions.FitToContents) - { - float width = gridLayout.ColumnWidths.Sum(); - float height = gridLayout.RowHeights.Sum(); - gridOptions.GridSize = new(width, height); - } - - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - uint borderColor = ImGui.GetColorU32(ImGui.GetStyle().Colors[(int)ImGuiCol.Border]); - if (ImGui.BeginChild($"rowMajorGrid_{id}", gridOptions.GridSize, ImGuiChildFlags.None)) - { - Vector2 gridTopLeft = ImGui.GetCursorScreenPos(); - if (EnableGridDebugDraw) - { - drawList.AddRect(gridTopLeft, gridTopLeft + gridOptions.GridSize, borderColor); - } - - Vector2 rowTopleft = gridTopLeft; - for (int rowIndex = 0; rowIndex < gridLayout.RowCount; rowIndex++) - { - bool isFirstRow = rowIndex == 0; - float previousRowHeight = isFirstRow ? 0f : gridLayout.RowHeights[rowIndex - 1]; - - float columnCursorX = rowTopleft.X; - float columnCursorY = rowTopleft.Y + previousRowHeight; - rowTopleft = new(columnCursorX, columnCursorY); - ImGui.SetCursorScreenPos(rowTopleft); - - Vector2 cellTopLeft = ImGui.GetCursorScreenPos(); - int itemBeginIndex = rowIndex * gridLayout.ColumnCount; - int itemEndIndex = Math.Min(itemBeginIndex + gridLayout.ColumnCount, itemListCount); - for (int itemIndex = itemBeginIndex; itemIndex < itemEndIndex; itemIndex++) - { - int columnIndex = itemIndex - itemBeginIndex; - bool isFirstColumn = itemIndex == itemBeginIndex; - float previousCellWidth = isFirstColumn ? 0f : gridLayout.ColumnWidths[columnIndex - 1]; - - float cellCursorX = cellTopLeft.X + previousCellWidth; - float cellCursorY = cellTopLeft.Y; - cellTopLeft = new(cellCursorX, cellCursorY); - ImGui.SetCursorScreenPos(cellTopLeft); - - float cellWidth = gridLayout.ColumnWidths[columnIndex]; - float cellHeight = gridLayout.RowHeights[rowIndex]; - Vector2 cellSize = new(cellWidth, cellHeight); - - if (EnableGridDebugDraw) - { - drawList.AddRect(cellTopLeft, cellTopLeft + cellSize, borderColor); - } - - drawDelegate(itemList[itemIndex], cellSize, itemDimensions[itemIndex]); - } - } - } - - ImGui.EndChild(); - } - #endregion - - #region ColumnMajor - private static Point CalculateColumnMajorCellLocation(int itemIndex, int rowCount) - { - int columnIndex = itemIndex / rowCount; - int rowIndex = itemIndex % rowCount; - return new(columnIndex, rowIndex); - } - - private static GridLayout CalculateColumnMajorGridLayout(Vector2[] itemSizes, float containerHeight) - { - float tallestElementHeight = itemSizes.Max(itemSize => itemSize.Y); - GridLayout currentGridLayout = new() - { - Dimensions = new(itemSizes.Length, 1), - ColumnWidths = [.. itemSizes.Select(itemSize => itemSize.X)], - RowHeights = [tallestElementHeight], - }; - - GridLayout previousGridLayout = currentGridLayout; - while (currentGridLayout.RowCount < itemSizes.Length) - { - int newRowCount = currentGridLayout.RowCount + 1; - int newColumnCount = (int)MathF.Ceiling(itemSizes.Length / (float)newRowCount); - currentGridLayout = new() - { - Dimensions = new(newColumnCount, newRowCount), - ColumnWidths = new float[newColumnCount], - RowHeights = new float[newRowCount], - }; - - for (int i = 0; i < itemSizes.Length; i++) - { - Vector2 itemSize = itemSizes[i]; - Point cellLocation = CalculateColumnMajorCellLocation(i, newRowCount); - - float maxColumnWidth = currentGridLayout.ColumnWidths[cellLocation.X]; - maxColumnWidth = Math.Max(maxColumnWidth, itemSize.X); - currentGridLayout.ColumnWidths[cellLocation.X] = maxColumnWidth; - - float maxRowHeight = currentGridLayout.RowHeights[cellLocation.Y]; - maxRowHeight = Math.Max(maxRowHeight, itemSize.Y); - currentGridLayout.RowHeights[cellLocation.Y] = maxRowHeight; - } - - if (currentGridLayout.RowHeights.Sum() > containerHeight) - { - currentGridLayout = previousGridLayout; - break; - } - - previousGridLayout = currentGridLayout; - } - - return currentGridLayout; - } - - internal static void ShowColumnMajor(string id, IEnumerable items, MeasureGridCell measureDelegate, DrawGridCell drawDelegate, GridOptions gridOptions) - { - if (gridOptions.GridSize.X <= 0) - { - gridOptions.GridSize = new(ImGui.GetContentRegionAvail().X, gridOptions.GridSize.Y); - } - - if (gridOptions.GridSize.Y <= 0) - { - gridOptions.GridSize = new(gridOptions.GridSize.X, ImGui.GetContentRegionAvail().Y); - } - - Vector2 itemSpacing = ImGui.GetStyle().ItemSpacing; - T[] itemList = [.. items]; - int itemListCount = itemList.Length; - Vector2[] itemDimensions = [.. itemList.Select(i => measureDelegate(i))]; - Vector2[] itemDimensionsWithSpacing = [.. itemDimensions.Select(d => d + itemSpacing)]; - - if (itemList.Length == 0) - { - // No items to display - if (!gridOptions.FitToContents) - { - ImGui.Dummy(gridOptions.GridSize); - } - - return; - } - - GridLayout gridLayout = CalculateColumnMajorGridLayout(itemDimensionsWithSpacing, gridOptions.GridSize.Y); - - if (gridOptions.FitToContents) - { - float width = gridLayout.ColumnWidths.Sum(); - float height = gridLayout.RowHeights.Sum(); - gridOptions.GridSize = new(width, height); - } - - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - uint borderColor = ImGui.GetColorU32(ImGui.GetStyle().Colors[(int)ImGuiCol.Border]); - if (ImGui.BeginChild($"columnMajorGrid_{id}", gridOptions.GridSize, ImGuiChildFlags.None, ImGuiWindowFlags.HorizontalScrollbar)) - { - Vector2 gridTopLeft = ImGui.GetCursorScreenPos(); - if (EnableGridDebugDraw) - { - drawList.AddRect(gridTopLeft, gridTopLeft + gridOptions.GridSize, borderColor); - } - - Vector2 columnTopLeft = gridTopLeft; - for (int columnIndex = 0; columnIndex < gridLayout.ColumnCount; columnIndex++) - { - bool isFirstColumn = columnIndex == 0; - float previousColumnWidth = isFirstColumn ? 0f : gridLayout.ColumnWidths[columnIndex - 1]; - - float columnCursorX = columnTopLeft.X + previousColumnWidth; - float columnCursorY = columnTopLeft.Y; - columnTopLeft = new(columnCursorX, columnCursorY); - ImGui.SetCursorScreenPos(columnTopLeft); - - Vector2 cellTopLeft = ImGui.GetCursorScreenPos(); - int itemBeginIndex = columnIndex * gridLayout.RowCount; - int itemEndIndex = Math.Min(itemBeginIndex + gridLayout.RowCount, itemListCount); - for (int itemIndex = itemBeginIndex; itemIndex < itemEndIndex; itemIndex++) - { - int rowIndex = itemIndex - itemBeginIndex; - bool isFirstRow = itemIndex == itemBeginIndex; - float previousCellHeight = isFirstRow ? 0f : itemDimensionsWithSpacing[rowIndex - 1].Y; - - float cellCursorX = cellTopLeft.X; - float cellCursorY = cellTopLeft.Y + previousCellHeight; - cellTopLeft = new(cellCursorX, cellCursorY); - ImGui.SetCursorScreenPos(cellTopLeft); - - float cellWidth = gridLayout.ColumnWidths[columnIndex]; - float cellHeight = gridLayout.RowHeights[rowIndex]; - Vector2 cellSize = new(cellWidth, cellHeight); - - if (EnableGridDebugDraw) - { - drawList.AddRect(cellTopLeft, cellTopLeft + cellSize, borderColor); - } - - drawDelegate(itemList[itemIndex], cellSize, itemDimensions[itemIndex]); - } - } - } - - ImGui.EndChild(); - } - #endregion - } -} diff --git a/ImGui.Widgets/Icon.cs b/ImGui.Widgets/Icon.cs deleted file mode 100644 index 6921dc0..0000000 --- a/ImGui.Widgets/Icon.cs +++ /dev/null @@ -1,302 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ImGui.Styler; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// Gets or sets a value indicating whether to enable debug drawing for icons. - /// - public static bool EnableIconDebugDraw { get; set; } - - /// - /// Specifies the alignment of the icon. - /// - public enum IconAlignment - { - /// - /// Aligns the icon horizontally. - /// - Horizontal, - - /// - /// Aligns the icon vertically. - /// - Vertical, - } - - /// - /// Additional options to modify Icon behavior. - /// - public class IconOptions - { - /// - /// The color of the icon. - /// - public Vector4 Color { get; init; } = Styler.Color.Palette.Neutral.White.Value; - - /// - /// The tooltip to display. - /// - public string Tooltip { get; init; } = string.Empty; - - /// - /// Gets or sets the action to be performed on click. - /// - public Action? OnClick { get; init; } - - /// - /// Gets or sets the action to be performed on double click. - /// - public Action? OnDoubleClick { get; init; } - - /// - /// Gets or sets the action to be performed on right click. - /// - public Action? OnRightClick { get; init; } - - /// - /// Gets or sets the action to be performed on context menu. - /// - public Action? OnContextMenu { get; init; } - } - - /// - /// Renders an icon with the specified parameters. - /// - /// The label of the icon. - /// The texture ID of the icon. - /// The size of the image. - /// The alignment of the icon. - /// Was the icon bounds clicked - public static bool Icon(string label, uint textureId, float imageSize, IconAlignment iconAlignment) => - IconImpl.Show(label, textureId, new(imageSize, imageSize), iconAlignment, new()); - - /// - /// Renders an icon with the specified parameters. - /// - /// The label of the icon. - /// The texture ID of the icon. - /// The size of the image. - /// The alignment of the icon. - /// Was the icon bounds clicked - public static bool Icon(string label, uint textureId, Vector2 imageSize, IconAlignment iconAlignment) => - IconImpl.Show(label, textureId, imageSize, iconAlignment, new()); - - /// - /// Renders an icon with the specified parameters. - /// - /// The label of the icon. - /// The texture ID of the icon. - /// The size of the image. - /// The alignment of the icon. - /// Additional options - /// Was the icon bounds clicked - public static bool Icon(string label, uint textureId, float imageSize, IconAlignment iconAlignment, IconOptions options) => - IconImpl.Show(label, textureId, new(imageSize, imageSize), iconAlignment, options); - - /// - /// Renders an icon with the specified parameters. - /// - /// The label of the icon. - /// The texture ID of the icon. - /// The size of the image. - /// The alignment of the icon. - /// Additional options - /// Was the icon bounds clicked - public static bool Icon(string label, uint textureId, Vector2 imageSize, IconAlignment iconAlignment, IconOptions options) => - IconImpl.Show(label, textureId, imageSize, iconAlignment, options); - - /// - /// Calculates the size of the icon with the specified parameters. - /// - /// The label of the icon. - /// The size of the image. - /// The alignment of the icon. - /// The calculated size of the icon. - public static Vector2 CalcIconSize(string label, float imageSize, IconAlignment iconAlignment) => CalcIconSize(label, new Vector2(imageSize), iconAlignment); - - /// - /// Calculates the size of the icon with the specified parameters. - /// - /// The label of the icon. - /// The size of the image. - /// The calculated size of the icon. - public static Vector2 CalcIconSize(string label, Vector2 imageSize) => CalcIconSize(label, imageSize, IconAlignment.Horizontal); - - /// - /// Calculates the size of the icon with the specified parameters. - /// - /// The label of the icon. - /// The size of the image. - /// The alignment of the image and label with respect to each other. - /// The calculated size of the widget. - public static Vector2 CalcIconSize(string label, Vector2 imageSize, IconAlignment iconAlignment) - { - ImGuiStylePtr style = ImGui.GetStyle(); - Vector2 framePadding = style.FramePadding; - Vector2 itemSpacing = style.ItemSpacing; - Vector2 labelSize = ImGui.CalcTextSize(label); - if (iconAlignment == IconAlignment.Horizontal) - { - Vector2 boundingBoxSize = imageSize + new Vector2(labelSize.X + itemSpacing.X, 0); - boundingBoxSize.Y = Math.Max(boundingBoxSize.Y, labelSize.Y); - return boundingBoxSize + (framePadding * 2); - } - else if (iconAlignment == IconAlignment.Vertical) - { - Vector2 boundingBoxSize = imageSize + new Vector2(0, labelSize.Y + itemSpacing.Y); - boundingBoxSize.X = Math.Max(boundingBoxSize.X, labelSize.X); - return boundingBoxSize + (framePadding * 2); - } - - return imageSize; - } - - /// - /// Contains the implementation details for rendering icons. - /// - internal static class IconImpl - { - internal static bool Show(string label, uint textureId, Vector2 imageSize, IconAlignment iconAlignment, IconOptions options) - { - ArgumentNullException.ThrowIfNull(label); - ArgumentNullException.ThrowIfNull(options); - - bool wasClicked = false; - - ImGuiStylePtr style = ImGui.GetStyle(); - Vector2 framePadding = style.FramePadding; - Vector2 itemSpacing = style.ItemSpacing; - - ImGui.PushID(label); - - Vector2 cursorStartPos = ImGui.GetCursorScreenPos(); - Vector2 labelSize = ImGui.CalcTextSize(label);// TODO, maybe pass this to an internal overload of CalcIconSize to save recalculating - Vector2 boundingBoxSize = CalcIconSize(label, imageSize, iconAlignment); - - ImGui.SetCursorScreenPos(cursorStartPos + framePadding); - - switch (iconAlignment) - { - case IconAlignment.Horizontal: - HorizontalLayout(label, textureId, imageSize, labelSize, boundingBoxSize, itemSpacing, options.Color, cursorStartPos); - break; - case IconAlignment.Vertical: - VerticalLayout(label, textureId, imageSize, labelSize, boundingBoxSize, itemSpacing, options.Color, cursorStartPos); - break; - default: - throw new NotImplementedException(); - } - - ImGui.SetCursorScreenPos(cursorStartPos); - ImGui.Dummy(boundingBoxSize); - bool isHovered = ImGui.IsItemHovered(); - bool isMouseClicked = ImGui.IsMouseClicked(ImGuiMouseButton.Left); - bool isMouseDoubleClicked = ImGui.IsMouseDoubleClicked(ImGuiMouseButton.Left); - bool isRightMouseClicked = ImGui.IsMouseClicked(ImGuiMouseButton.Right); - bool isRightMouseReleased = ImGui.IsMouseReleased(ImGuiMouseButton.Right); - - if (!string.IsNullOrEmpty(options.Tooltip)) - { - ImGui.SetItemTooltip(options.Tooltip); - } - - if (isHovered || EnableIconDebugDraw) - { - uint borderColor = ImGui.GetColorU32(ImGui.GetStyle().Colors[(int)ImGuiCol.Border]); - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - drawList.AddRect(cursorStartPos, cursorStartPos + boundingBoxSize, ImGui.GetColorU32(borderColor)); - } - - if (isHovered) - { - if (isMouseClicked) - { - options.OnClick?.Invoke(); - wasClicked = true; - } - - if (isMouseDoubleClicked) - { - options.OnDoubleClick?.Invoke(); - } - - if (isRightMouseClicked) - { - options.OnRightClick?.Invoke(); - } - - if (isRightMouseReleased && options.OnContextMenu is not null) - { - ImGui.OpenPopup($"{label}_Context"); - } - } - - if (ImGui.BeginPopup($"{label}_Context")) - { - options.OnContextMenu?.Invoke(); - ImGui.EndPopup(); - } - - ImGui.PopID(); - - return wasClicked; - } - - private static void VerticalLayout(string label, uint textureId, Vector2 imageSize, Vector2 labelSize, Vector2 boundingBoxSize, Vector2 itemSpacing, Vector4 color = default, Vector2 cursorStartPos = default) - { - Vector2 imageTopLeft = cursorStartPos + new Vector2((boundingBoxSize.X - imageSize.X) / 2, 0); - ImGui.SetCursorScreenPos(imageTopLeft); - unsafe - { - if (color != default) - { - // Use transparent background with color as tint to preserve alpha - ImGui.ImageWithBg(new ImTextureRef(texId: textureId), imageSize, Vector4.Zero, color); - } - else - { - ImGui.Image(new ImTextureRef(texId: textureId), imageSize); - } - } - - Vector2 labelTopLeft = cursorStartPos + new Vector2((boundingBoxSize.X - labelSize.X) / 2, imageSize.Y + itemSpacing.Y); - ImGui.SetCursorScreenPos(labelTopLeft); - ImGui.TextUnformatted(label); - } - - private static void HorizontalLayout(string label, uint textureId, Vector2 imageSize, Vector2 labelSize, Vector2 boundingBoxSize, Vector2 itemSpacing, Vector4 color = default, Vector2 cursorStartPos = default) - { - unsafe - { - if (color != default) - { - // Use transparent background with color as tint to preserve alpha - ImGui.ImageWithBg(new ImTextureRef(texId: textureId), imageSize, Vector4.Zero, color); - } - else - { - ImGui.Image(new ImTextureRef(texId: textureId), imageSize); - } - } - Vector2 leftAlign = new(labelSize.X, boundingBoxSize.Y); - ImGui.SetCursorScreenPos(cursorStartPos + new Vector2(imageSize.X + itemSpacing.X, 0)); - using (new Alignment.CenterWithin(labelSize, leftAlign)) - { - ImGui.TextUnformatted(label); - } - } - } -} diff --git a/ImGui.Widgets/ImGui.Widgets.csproj b/ImGui.Widgets/ImGui.Widgets.csproj deleted file mode 100644 index d017b0a..0000000 --- a/ImGui.Widgets/ImGui.Widgets.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - True - net8.0;net9.0 - - - - - - - diff --git a/ImGui.Widgets/Image.cs b/ImGui.Widgets/Image.cs deleted file mode 100644 index 18a811d..0000000 --- a/ImGui.Widgets/Image.cs +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ImGui.Styler; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// Displays an image with the specified texture ID and size. - /// - /// The ID of the texture to display. - /// The size of the image. - /// True if the image is clicked; otherwise, false. - public static bool Image(uint textureId, Vector2 size) => ImageImpl.Show(textureId, size, Vector4.One); - - /// - /// Displays an image with the specified texture ID, size, and color. - /// - /// The ID of the texture to display. - /// The size of the image. - /// The color to apply to the image. - /// True if the image is clicked; otherwise, false. - public static bool Image(uint textureId, Vector2 size, Vector4 color) => ImageImpl.Show(textureId, size, color); - - /// - /// Displays a centered image with the specified texture ID and size. - /// - /// The ID of the texture to display. - /// The size of the image. - /// True if the image is clicked; otherwise, false. - public static bool ImageCentered(uint textureId, Vector2 size) => ImageImpl.Centered(textureId, size, Vector4.One); - - /// - /// Displays a centered image with the specified texture ID, size, and color. - /// - /// The ID of the texture to display. - /// The size of the image. - /// The color to apply to the image. - /// True if the image is clicked; otherwise, false. - public static bool ImageCentered(uint textureId, Vector2 size, Vector4 color) => ImageImpl.Centered(textureId, size, color); - - /// - /// Displays a centered image within a container with the specified texture ID, size, and container size. - /// - /// The ID of the texture to display. - /// The size of the image. - /// The size of the container. - /// True if the image is clicked; otherwise, false. - public static bool ImageCenteredWithin(uint textureId, Vector2 size, Vector2 containerSize) => ImageImpl.CenteredWithin(textureId, size, containerSize, Vector4.One); - - /// - /// Displays a centered image within a container with the specified texture ID, size, container size, and color. - /// - /// The ID of the texture to display. - /// The size of the image. - /// The size of the container. - /// The color to apply to the image. - /// True if the image is clicked; otherwise, false. - public static bool ImageCenteredWithin(uint textureId, Vector2 size, Vector2 containerSize, Vector4 color) => ImageImpl.CenteredWithin(textureId, size, containerSize, color); - - internal static class ImageImpl - { - /// - /// Displays an image with the specified texture ID and size. - /// - /// The ID of the texture to display. - /// The size of the image. - /// True if the image is clicked; otherwise, false. - internal static bool Show(uint textureId, Vector2 size) => Show(textureId, size, Vector4.One); - - /// - /// Displays an image with the specified texture ID, size, and color. - /// - /// The ID of the texture to display. - /// The size of the image. - /// The color to apply to the image. - /// True if the image is clicked; otherwise, false. - internal static bool Show(uint textureId, Vector2 size, Vector4 color = default) - { - unsafe - { - if (color != default) - { - // Use transparent background with color as tint to preserve alpha - ImGui.ImageWithBg(new ImTextureRef(texId: textureId), size, Vector4.Zero, color); - } - else - { - ImGui.Image(new ImTextureRef(texId: textureId), size); - } - } - return ImGui.IsItemClicked(); - } - - /// - /// Displays a centered image with the specified texture ID and size. - /// - /// The ID of the texture to display. - /// The size of the image. - /// True if the image is clicked; otherwise, false. - internal static bool Centered(uint textureId, Vector2 size) => Centered(textureId, size, Vector4.One); - - /// - /// Displays a centered image with the specified texture ID, size, and color. - /// - /// The ID of the texture to display. - /// The size of the image. - /// The color to apply to the image. - /// True if the image is clicked; otherwise, false. - internal static bool Centered(uint textureId, Vector2 size, Vector4 color) - { - bool clicked = false; - using (new Alignment.Center(size)) - { - clicked = Show(textureId, size, color); - } - - return clicked; - } - - /// - /// Displays a centered image within a container with the specified texture ID, size, and container size. - /// - /// The ID of the texture to display. - /// The size of the image. - /// The size of the container. - /// True if the image is clicked; otherwise, false. - internal static bool CenteredWithin(uint textureId, Vector2 size, Vector2 containerSize) => CenteredWithin(textureId, size, containerSize, Vector4.One); - - /// - /// Displays a centered image within a container with the specified texture ID, size, container size, and color. - /// - /// The ID of the texture to display. - /// The size of the image. - /// The size of the container. - /// The color to apply to the image. - /// True if the image is clicked; otherwise, false. - internal static bool CenteredWithin(uint textureId, Vector2 imageSize, Vector2 containerSize, Vector4 color) - { - bool clicked = false; - using (new Alignment.CenterWithin(imageSize, containerSize)) - { - clicked = Show(textureId, imageSize, color); - } - - return clicked; - } - } -} diff --git a/ImGui.Widgets/Knob.cs b/ImGui.Widgets/Knob.cs deleted file mode 100644 index 3fb5199..0000000 --- a/ImGui.Widgets/Knob.cs +++ /dev/null @@ -1,726 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; -using System; -using System.Globalization; -using System.Numerics; - -using Hexa.NET.ImGui; - -/// -/// Options for customizing the appearance and behavior of the knob widget. -/// -[Flags] -public enum ImGuiKnobOptions -{ - /// - /// No options selected. - /// - None = 0, - /// - /// Hides the title of the knob. - /// - NoTitle = 1 << 0, - /// - /// Disables the input field for the knob. - /// - NoInput = 1 << 1, - /// - /// Shows a tooltip with the current value when hovering over the knob. - /// - ValueTooltip = 1 << 2, - /// - /// Allows horizontal dragging to change the knob value. - /// - DragHorizontal = 1 << 3, - /// - /// Displays the title below the knob. - /// - TitleBelow = 1 << 4, -}; - -/// -/// Variants for customizing the visual appearance of the knob widget. -/// -[Flags] -public enum ImGuiKnobVariant -{ - /// - /// Represents a knob variant with tick marks. - /// - Tick = 1 << 0, - /// - /// Represents a knob variant with a dot indicator. - /// - Dot = 1 << 1, - /// - /// Represents a knob variant with a wiper indicator. - /// - Wiper = 1 << 2, - /// - /// Represents a knob variant with only a wiper indicator. - /// - WiperOnly = 1 << 3, - /// - /// Represents a knob variant with a wiper and dot indicator. - /// - WiperDot = 1 << 4, - /// - /// Represents a knob variant with stepped values. - /// - Stepped = 1 << 5, - /// - /// Represents a knob variant with a space theme. - /// - Space = 1 << 6, -}; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// Draws a knob widget with a floating-point value. - /// - /// The label for the knob. - /// The current value of the knob. - /// The minimum value of the knob. - /// The maximum value of the knob. - /// The speed at which the knob value changes. - /// The format string for displaying the value. - /// The visual variant of the knob. - /// The size of the knob. - /// The options for the knob. - /// The number of steps for the knob. - /// True if the value was changed, otherwise false. - public static bool Knob(string label, ref float value, float vMin, float vMax, float speed = 0, string? format = null, ImGuiKnobVariant variant = ImGuiKnobVariant.Tick, float size = 0, ImGuiKnobOptions flags = ImGuiKnobOptions.None, int steps = 10) => - KnobImpl.Draw(label, ref value, vMin, vMax, speed, format, variant, size, flags, steps); - - /// - /// Draws a knob widget with an integer value. - /// - /// The label for the knob. - /// The current value of the knob. - /// The minimum value of the knob. - /// The maximum value of the knob. - /// The speed at which the knob value changes. - /// The format string for displaying the value. - /// The visual variant of the knob. - /// The size of the knob. - /// The options for the knob. - /// The number of steps for the knob. - /// True if the value was changed, otherwise false. - public static bool Knob(string label, ref int value, int vMin, int vMax, float speed = 0, string? format = null, ImGuiKnobVariant variant = ImGuiKnobVariant.Tick, float size = 0, ImGuiKnobOptions flags = ImGuiKnobOptions.None, int steps = 10) => - KnobImpl.Draw(label, ref value, vMin, vMax, speed, format, variant, size, flags, steps); - /// - /// Knob widget for ImGui.NET - /// - internal static class KnobImpl - { - public sealed class KnobColors - { - public ImColor Base { get; set; } - public ImColor Hovered { get; set; } - public ImColor Active { get; set; } - - public KnobColors() { } - - public KnobColors(ImColor color) - { - Base = color; - Hovered = color; - Active = color; - } - } - - public static bool Draw(string label, ref float value, float vMin, float vMax, float speed = 0, string? format = null, ImGuiKnobVariant variant = ImGuiKnobVariant.Tick, float? size = null, ImGuiKnobOptions flags = ImGuiKnobOptions.None, int steps = 10) - { - format ??= "%.3f"; - return KnobInternal.BaseKnob(label, ImGuiDataType.Float, ref value, vMin, vMax, speed, format, variant, size, flags, steps); - } - - public static bool Draw(string label, ref int value, int vMin, int vMax, float speed = 0, string? format = null, ImGuiKnobVariant variant = ImGuiKnobVariant.Tick, float? size = null, ImGuiKnobOptions flags = ImGuiKnobOptions.None, int steps = 10) - { - format ??= "%if"; - return KnobInternal.BaseKnob(label, ImGuiDataType.S32, ref value, vMin, vMax, speed, format, variant, size, flags, steps); - } - - private static void DrawArc1(Vector2 center, float radius, float startAngle, float endAngle, float thickness, ImColor color, int numSegments) - { - Vector2 start = new( - center[0] + (MathF.Cos(startAngle) * radius), - center[1] + (MathF.Sin(startAngle) * radius)); - - Vector2 end = new( - center[0] + (MathF.Cos(endAngle) * radius), - center[1] + (MathF.Sin(endAngle) * radius)); - - // Calculate bezier arc points - float ax = start[0] - center[0]; - float ay = start[1] - center[1]; - float bx = end[0] - center[0]; - float by = end[1] - center[1]; - float q1 = (ax * ax) + (ay * ay); - float q2 = q1 + (ax * bx) + (ay * by); - float k2 = 4.0f / 3.0f * (MathF.Sqrt(2.0f * q1 * q2) - q2) / ((ax * by) - (ay * bx)); - Vector2 arc1 = new(center[0] + ax - (k2 * ay), center[1] + ay + (k2 * ax)); - Vector2 arc2 = new(center[0] + bx + (k2 * by), center[1] + by - (k2 * bx)); - - ImDrawListPtr drawlist = ImGui.GetWindowDrawList(); - - drawlist.AddBezierCubic(start, arc1, arc2, end, ImGui.GetColorU32(color.Value), thickness, numSegments); - } - - internal static void DrawArc(Vector2 center, float radius, float startAngle, float endAngle, float thickness, ImColor color, int numSegments, int bezierCount) - { - // Overlap and angle of ends of bezier curves needs work, only looks good when not transperant - float overlap = thickness * radius * 0.00001f * MathF.PI; - float delta = endAngle - startAngle; - float bez_step = 1.0f / bezierCount; - float mid_angle = startAngle + overlap; - - for (int i = 0; i < bezierCount - 1; i++) - { - float mid_angle2 = (delta * bez_step) + mid_angle; - DrawArc1(center, radius, mid_angle - overlap, mid_angle2 + overlap, thickness, color, numSegments); - mid_angle = mid_angle2; - } - - DrawArc1(center, radius, mid_angle - overlap, endAngle, thickness, color, numSegments); - } - - private sealed class KnobInternal where TDataType : unmanaged, INumber - { - public float Radius { get; set; } - public bool ValueChanged { get; set; } - public Vector2 Center { get; set; } - public bool IsActive { get; set; } - public bool IsHovered { get; set; } - public float AngleMin { get; set; } - public float AngleMax { get; set; } - public float T { get; set; } - public float Angle { get; set; } - public float AngleCos { get; set; } - public float AngleSin { get; set; } - - private static float AccumulatedDiff { get; set; } - private static bool AccumulatorDirty { get; set; } - - private static float InverseLerp(TDataType min, TDataType max, TDataType value) => float.CreateSaturating(value - min) / float.CreateSaturating(max - min); - - public KnobInternal(string label_, ImGuiDataType dataType, ref TDataType value, TDataType vMin, TDataType vMax, float speed, float radius_, string format, ImGuiKnobOptions flags) - { - Radius = radius_; - T = InverseLerp(vMin, vMax, value); - Vector2 screenPos = ImGui.GetCursorScreenPos(); - - // Handle dragging - ImGui.InvisibleButton(label_, new(Radius * 2.0f, Radius * 2.0f)); - - ValueChanged = DragBehavior(dataType, ref value, vMin, vMax, speed, format, flags); - - AngleMin = MathF.PI * 0.75f; - AngleMax = MathF.PI * 2.25f; - Center = new(screenPos[0] + Radius, screenPos[1] + Radius); - Angle = AngleMin + ((AngleMax - AngleMin) * T); - AngleCos = MathF.Cos(Angle); - AngleSin = MathF.Sin(Angle); - } - - private bool DragBehavior(ImGuiDataType dataType, ref TDataType v, TDataType vMin, TDataType vMax, float speed, string format, ImGuiKnobOptions flags) - { - float floatValue = float.CreateSaturating(v); - float floatMin = float.CreateSaturating(vMin); - float floatMax = float.CreateSaturating(vMax); - bool isClamped = vMin < vMax; - float range = floatMax - floatMin; - if (speed == 0.0f && isClamped && (range < float.MaxValue)) - { - speed = range * 0.01f; - } - - bool justActivated = ImGui.IsItemActivated(); - IsActive = ImGui.IsItemActive(); - IsHovered = ImGui.IsItemHovered(); - - bool isFloatingPoint = dataType is ImGuiDataType.Float or ImGuiDataType.Double; - int decimalPrecision = isFloatingPoint ? ParseFormatPrecision(format, 3) : 0; - speed = MathF.Max(speed, GetMinimumStepAtDecimalPrecision(decimalPrecision)); - - Vector2 mouseDelta = ImGui.GetIO().MouseDelta; - float diff = (flags.HasFlag(ImGuiKnobOptions.DragHorizontal) ? mouseDelta.X : -mouseDelta.Y) * speed; - - diff = IsActive ? diff : 0.0f; - - if (justActivated) - { - AccumulatedDiff = 0.0f; - AccumulatorDirty = false; - } - else if (diff != 0.0f) - { - AccumulatedDiff += diff; - AccumulatorDirty = true; - } - - if (!AccumulatorDirty) - { - return false; - } - - float newValue = floatValue + diff; - - // Round to user desired precision based on format string - if (isFloatingPoint) - { - newValue = MathF.Round(newValue, decimalPrecision); - } - - float appliedDiff = newValue - floatValue; - AccumulatedDiff -= appliedDiff; - AccumulatorDirty = false; - - if (newValue == -0.0f) - { - newValue = 0.0f; - } - - // Clamp values (+ handle overflow/wrap-around for integer types) - if (newValue != floatValue && isClamped) - { - if (newValue < floatMin || (newValue > floatValue && diff < 0.0f && !isFloatingPoint)) - { - newValue = floatMin; - } - - if (newValue > floatMax || (newValue < floatValue && diff > 0.0f && !isFloatingPoint)) - { - newValue = floatMax; - } - } - - if (newValue != floatValue) - { - v = TDataType.CreateSaturating(newValue); - return true; - } - - return false; - } - - private static int ParseFormatPrecision(string fmt, int defaultPrecision) - { - - ReadOnlySpan fmtSpan = ParseFormatFindStart(fmt); - if (fmtSpan[0] != '%') - { - return defaultPrecision; - } - - fmtSpan = fmtSpan[1..]; - while (fmtSpan[0] is >= '0' and <= '9') - { - fmtSpan = fmtSpan[1..]; - } - - int precision = int.MaxValue; - if (fmtSpan[0] == '.') - { - fmtSpan = fmtSpan[1..]; - int precisionLength = 0; - while (fmtSpan[precisionLength] is >= '0' and <= '9') - { - precisionLength++; - } - - precision = int.Parse(fmtSpan[..precisionLength], CultureInfo.CurrentCulture); - fmtSpan = fmtSpan[precisionLength..]; - - if (precision is < 0 or > 99) - { - precision = defaultPrecision; - } - } - - if (fmtSpan[0] is 'e' or 'E') // Maximum precision with scientific notation - { - precision = -1; - } - - if ((fmtSpan[0] == 'g' || fmtSpan[0] == 'G') && precision == int.MaxValue) - { - precision = -1; - } - - return (precision == int.MaxValue) ? defaultPrecision : precision; - } - - private static ReadOnlySpan ParseFormatFindStart(string fmt) - { - ReadOnlySpan fmtSpan = fmt.AsSpan(); - while (fmtSpan.Length > 2) - { - char c = fmtSpan[0]; - if (c == '%' && fmtSpan[1] != '%') - { - return fmtSpan; - } - else if (c == '%') - { - fmtSpan = fmtSpan[1..]; - } - - fmtSpan = fmtSpan[1..]; - } - - return fmtSpan; - } - - private static readonly List MinSteps = [1.0f, 0.1f, 0.01f, 0.001f, 0.0001f, 0.00001f, 0.000001f, 0.0000001f, 0.00000001f, 0.000000001f]; - private static float GetMinimumStepAtDecimalPrecision(int decimal_precision) - { - return decimal_precision < 0 - ? float.MinValue - : (decimal_precision < MinSteps.Count) ? MinSteps[decimal_precision] : MathF.Pow(10.0f, -decimal_precision); - } - - private void DrawDot(float size, float radius, float angle, KnobColors color, int segments) - { - float dotSize = size * Radius; - float dotRadius = radius * Radius; - - ImGui.GetWindowDrawList().AddCircleFilled( - new(Center[0] + (MathF.Cos(angle) * dotRadius), Center[1] + (MathF.Sin(angle) * dotRadius)), - dotSize, - ImGui.GetColorU32((IsActive ? color.Active : (IsHovered ? color.Hovered : color.Base)).Value), - segments); - } - - private void DrawTick(float start, float end, float width, float angle, KnobColors color) - { - float tickStart = start * Radius; - float tickEnd = end * Radius; - float angleCos = MathF.Cos(angle); - float angleSin = MathF.Sin(angle); - - ImGui.GetWindowDrawList().AddLine( - - new(Center[0] + (angleCos * tickEnd), Center[1] + (angleSin * tickEnd)), - new(Center[0] + (angleCos * tickStart), Center[1] + (angleSin * tickStart)), - ImGui.GetColorU32((IsActive ? color.Active : (IsHovered ? color.Hovered : color.Base)).Value), - width * Radius); - } - - private void DrawCircle(float size, KnobColors color, int segments) - { - float circleRadius = size * Radius; - - ImGui.GetWindowDrawList().AddCircleFilled( - Center, - circleRadius, - ImGui.GetColorU32((IsActive ? color.Active : (IsHovered ? color.Hovered : color.Base)).Value), - segments); - } - - private void DrawArc(float radius, float size, float startAngle, float endAngle, KnobColors color, int segments, int bezierCount) - { - float trackRadius = radius * Radius; - float trackSize = (size * Radius * 0.5f) + 0.0001f; - - KnobImpl.DrawArc( - Center, - trackRadius, - startAngle, - endAngle, - trackSize, - IsActive ? color.Active : (IsHovered ? color.Hovered : color.Base), - segments, - bezierCount); - } - - private static List WrapStringToWidth(string text, float width) - { - List lines = []; - string line; - ReadOnlySpan textSpan = text.AsSpan(); - float textWidth = ImGui.CalcTextSize(text).X; - - if (textWidth <= width) - { - lines.Add(text); - return lines; - } - - while (textSpan.Length > 0) - { - while (textSpan.StartsWith(" ")) - { - textSpan = textSpan[1..]; - } - - while (textSpan.EndsWith(" ")) - { - textSpan = textSpan[..(textSpan.Length - 1)]; - } - - ReadOnlySpan lineSpan = textSpan; - - float lineSize = ImGui.CalcTextSize(lineSpan.ToString()).X; - - while (lineSize > width) - { - int lastSpace = lineSpan.LastIndexOf(' '); - if (lastSpace == -1) - { - break; - } - - lineSpan = lineSpan[..lastSpace]; - while (lineSpan.StartsWith(" ")) - { - lineSpan = lineSpan[1..]; - } - - while (lineSpan.EndsWith(" ")) - { - lineSpan = lineSpan[..(lineSpan.Length - 1)]; - } - - lineSize = ImGui.CalcTextSize(lineSpan.ToString()).X; - } - - line = lineSpan.ToString(); - lines.Add(line); - textSpan = textSpan[line.Length..]; - } - - return lines; - } - - public static KnobInternal KnobWithDrag(string label, ImGuiDataType dataType, ref TDataType value, TDataType vMin, TDataType vMax, float speed, string format, float? size, ImGuiKnobOptions flags) - { - speed = speed == 0 ? float.CreateSaturating(vMax - vMin) / 250.0f : speed; - ImGui.PushID(label); - float lineBasedHeight = ImGui.GetTextLineHeight() * 4.0f; - float width = size ?? lineBasedHeight; - if (width == 0) - { - width = lineBasedHeight; - } - - List titleLines = WrapStringToWidth(label, width); - - float maxTitleLineWidth = 0.0f; - - if (!flags.HasFlag(ImGuiKnobOptions.NoTitle)) - { - maxTitleLineWidth = titleLines.Max(line => ImGui.CalcTextSize(line).X); - } - - maxTitleLineWidth = Math.Max(maxTitleLineWidth, width); - float knobPadding = (maxTitleLineWidth - width) * 0.5f; - - ImGui.PushItemWidth(width); - - ImGui.BeginGroup(); - - // There's an issue with `SameLine` and Groups, see https://github.com/ocornut/imgui/issues/4190. - // This is probably not the best solution, but seems to work for now - //ImGui.GetCurrentWindow().DC.CurrLineTextBaseOffset = 0; - - if (!flags.HasFlag(ImGuiKnobOptions.TitleBelow)) - { - DrawTitle(flags, maxTitleLineWidth, titleLines); - } - - // Draw knob - ImGui.SetCursorPosX(ImGui.GetCursorPosX() + knobPadding); - KnobInternal k = new(label, dataType, ref value, vMin, vMax, speed, width * 0.5f, format, flags); - - // Draw tooltip - if (flags.HasFlag(ImGuiKnobOptions.ValueTooltip) && (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled) || ImGui.IsItemActive())) - { - ImGui.BeginTooltip(); - ImGui.Text(string.Format(CultureInfo.CurrentCulture, format, value)); - ImGui.EndTooltip(); - } - - // Draw input - if (!flags.HasFlag(ImGuiKnobOptions.NoInput)) - { - ImGui.SetCursorPosX(ImGui.GetCursorPosX() + knobPadding); - unsafe - { - fixed (TDataType* pValue = &value) - { - TDataType* pMin = &vMin; - TDataType* pMax = &vMax; - k.ValueChanged = ImGui.DragScalar("###knob_drag", dataType, pValue, speed, pMin, pMax, format); - } - } - } - - if (flags.HasFlag(ImGuiKnobOptions.TitleBelow)) - { - DrawTitle(flags, maxTitleLineWidth, titleLines); - } - - ImGui.EndGroup(); - ImGui.PopItemWidth(); - ImGui.PopID(); - - return k; - - static void DrawTitle(ImGuiKnobOptions flags, float width, List titleLines) - { - if (!flags.HasFlag(ImGuiKnobOptions.NoTitle)) - { - foreach (string line in titleLines) - { - Vector2 lineWidth = ImGui.CalcTextSize(line, false, width); - ImGui.SetCursorPosX(ImGui.GetCursorPosX() + ((width - lineWidth[0]) * 0.5f)); - ImGui.TextUnformatted(line); - } - } - } - } - - public static bool BaseKnob(string label, ImGuiDataType dataType, ref TDataType value, TDataType vMin, TDataType vMax, float speed, string format, ImGuiKnobVariant variant, float? size, ImGuiKnobOptions flags, int steps = 10) - { - - KnobInternal knob = KnobWithDrag(label, dataType, ref value, vMin, vMax, speed, format, size, flags); - - switch (variant) - { - case ImGuiKnobVariant.Tick: - { - knob.DrawCircle(0.85f, GetSecondaryColorSet(), 32); - knob.DrawTick(0.5f, 0.85f, 0.08f, knob.Angle, GetPrimaryColorSet()); - break; - } - case ImGuiKnobVariant.Dot: - { - knob.DrawCircle(0.85f, GetSecondaryColorSet(), 32); - knob.DrawDot(0.12f, 0.6f, knob.Angle, GetPrimaryColorSet(), 12); - break; - } - - case ImGuiKnobVariant.Wiper: - { - knob.DrawCircle(0.7f, GetSecondaryColorSet(), 32); - knob.DrawArc(0.8f, 0.41f, knob.AngleMin, knob.AngleMax, GetTrackColorSet(), 16, 2); - - if (knob.T > 0.01f) - { - knob.DrawArc(0.8f, 0.43f, knob.AngleMin, knob.Angle, GetPrimaryColorSet(), 16, 2); - } - - break; - } - case ImGuiKnobVariant.WiperOnly: - { - knob.DrawArc(0.8f, 0.41f, knob.AngleMin, knob.AngleMax, GetTrackColorSet(), 32, 2); - - if (knob.T > 0.01) - { - knob.DrawArc(0.8f, 0.43f, knob.AngleMin, knob.Angle, GetPrimaryColorSet(), 16, 2); - } - - break; - } - case ImGuiKnobVariant.WiperDot: - { - knob.DrawCircle(0.6f, GetSecondaryColorSet(), 32); - knob.DrawArc(0.85f, 0.41f, knob.AngleMin, knob.AngleMax, GetTrackColorSet(), 16, 2); - knob.DrawDot(0.1f, 0.85f, knob.Angle, GetPrimaryColorSet(), 12); - break; - } - case ImGuiKnobVariant.Stepped: - { - for (float n = 0.0f; n < steps; n++) - { - float a = n / (steps - 1); - float angle = knob.AngleMin + ((knob.AngleMax - knob.AngleMin) * a); - knob.DrawTick(0.7f, 0.9f, 0.04f, angle, GetPrimaryColorSet()); - } - - knob.DrawCircle(0.6f, GetSecondaryColorSet(), 32); - knob.DrawDot(0.12f, 0.4f, knob.Angle, GetPrimaryColorSet(), 12); - break; - } - case ImGuiKnobVariant.Space: - { - knob.DrawCircle(0.3f - (knob.T * 0.1f), GetSecondaryColorSet(), 16); - - if (knob.T > 0.01f) - { - knob.DrawArc(0.4f, 0.15f, knob.AngleMin - 1.0f, knob.Angle - 1.0f, GetPrimaryColorSet(), 16, 2); - knob.DrawArc(0.6f, 0.15f, knob.AngleMin + 1.0f, knob.Angle + 1.0f, GetPrimaryColorSet(), 16, 2); - knob.DrawArc(0.8f, 0.15f, knob.AngleMin + 3.0f, knob.Angle + 3.0f, GetPrimaryColorSet(), 16, 2); - } - - break; - } - - default: - break; - } - - return knob.ValueChanged; - } - } - - private static KnobColors GetPrimaryColorSet() - { - Span colors = ImGui.GetStyle().Colors; - - return new() - { - Active = new ImColor() { Value = colors[(int)ImGuiCol.ButtonActive] }, - Hovered = new ImColor() { Value = colors[(int)ImGuiCol.ButtonHovered] }, - Base = new ImColor() { Value = colors[(int)ImGuiCol.ButtonHovered] }, - }; - } - - private static KnobColors GetSecondaryColorSet() - { - Span colors = ImGui.GetStyle().Colors; - Vector4 activeColor = colors[(int)ImGuiCol.ButtonActive]; - Vector4 hoveredColor = colors[(int)ImGuiCol.ButtonHovered]; - - Vector4 active = new( - activeColor.X * 0.5f, - activeColor.Y * 0.5f, - activeColor.Z * 0.5f, - activeColor.W); - - Vector4 hovered = new( - hoveredColor.X * 0.5f, - hoveredColor.Y * 0.5f, - hoveredColor.Z * 0.5f, - hoveredColor.W); - - return new() - { - Active = new ImColor() { Value = active }, - Hovered = new ImColor() { Value = hovered }, - Base = new ImColor() { Value = hovered }, - }; - } - - private static KnobColors GetTrackColorSet() - { - Span colors = ImGui.GetStyle().Colors; - Vector4 color = colors[(int)ImGuiCol.FrameBg]; - return new() - { - Active = new ImColor() { Value = color }, - Hovered = new ImColor() { Value = color }, - Base = new ImColor() { Value = color }, - }; - } - } -} diff --git a/ImGui.Widgets/README.md b/ImGui.Widgets/README.md deleted file mode 100644 index 0728be3..0000000 --- a/ImGui.Widgets/README.md +++ /dev/null @@ -1,265 +0,0 @@ -# ktsu.ImGuiWidgets - -ImGuiWidgets is a library of custom widgets using ImGui.NET. This library provides a variety of widgets and utilities to enhance your ImGui-based applications. - -## Features - -- **Knobs**: Ported to .NET from [ImGui-works/ImGui-knobs-dial-gauge-meter](https://github.com/imgui-works/imgui-knobs-dial-gauge-meter) -- **Resizable Layout Dividers**: Draggable layout dividers for resizable layouts -- **TabPanel**: Tabbed interface with closable, reorderable tabs and dirty indicator support -- **Icons**: Customizable icons with various alignment options and event delegates -- **Grid**: Flexible grid layout for displaying items -- **Color Indicator**: An indicator that displays a color when enabled -- **Image**: An image widget with alignment options -- **Text**: A text widget with alignment options -- **Tree**: A tree widget for displaying hierarchical data -- **Scoped Id**: A utility class for creating scoped IDs -- **SearchBox**: A powerful search box with support for various filter types (Glob, Regex, Fuzzy) and matching options - -## Installation - -To install ImGuiWidgets, you can add the library to your .NET project using the following command: - -```bash -dotnet add package ktsu.ImGuiWidgets -``` - -## Usage - -To use ImGuiWidgets, you need to include the `ktsu.ImGuiWidgets` namespace in your code: - -```csharp -using ktsu.ImGuiWidgets; -``` - -Then, you can start using the widgets provided by ImGuiWidgets in your ImGui-based applications. - -## Examples - -Here are some examples of using ImGuiWidgets: - -### Knobs - -Knobs are useful for creating dial-like controls: - -```csharp -float value = 0.5f; -float minValue = 0.0f; - -ImGuiWidgets.Knob("Knob", ref value, minValue); -``` - -### SearchBox - -The SearchBox widget provides a powerful search interface with multiple filter type options: - -```csharp -// Static fields to maintain filter state between renders -private static string searchTerm = string.Empty; -private static TextFilterType filterType = TextFilterType.Glob; -private static TextFilterMatchOptions matchOptions = TextFilterMatchOptions.ByWholeString; - -// List of items to search -var items = new List { "Apple", "Banana", "Cherry", "Date", "Elderberry" }; - -// Basic search box with right-click context menu for filter options -ImGuiWidgets.SearchBox("##BasicSearch", ref searchTerm, ref filterType, ref matchOptions); - -// Display results -if (!string.IsNullOrEmpty(searchTerm)) -{ - ImGui.TextUnformatted($"Search results for: {searchTerm}"); -} - -// Search box that returns filtered results directly -var filteredResults = ImGuiWidgets.SearchBox( - "##FilteredSearch", - ref searchTerm, - items, // Collection to filter - item => item, // Selector function to extract string from each item - ref filterType, - ref matchOptions).ToList(); - -// Ranked search box for fuzzy matching and ranked results -var rankedResults = ImGuiWidgets.SearchBoxRanked( - "##RankedSearch", - ref searchTerm, - items, - item => item).ToList(); -``` - -### TabPanel - -TabPanel creates a tabbed interface with support for closable tabs, reordering, and dirty state indication: - -```csharp -// Create a tab panel with closable and reorderable tabs -var tabPanel = new ImGuiWidgets.TabPanel("MyTabPanel", true, true); - -// Add tabs with explicit IDs (recommended for stability when tabs are reordered) -string tab1Id = tabPanel.AddTab("tab1", "First Tab", RenderTab1Content); -string tab2Id = tabPanel.AddTab("tab2", "Second Tab", RenderTab2Content); -string tab3Id = tabPanel.AddTab("tab3", "Third Tab", RenderTab3Content); - -// Draw the tab panel in your render loop -tabPanel.Draw(); - -// Methods to render tab content -void RenderTab1Content() -{ - ImGui.Text("Tab 1 Content"); - - // Mark tab as dirty when content changes - if (ImGui.Button("Edit")) - { - tabPanel.MarkTabDirty(tab1Id); - } - - // Mark tab as clean when content is saved - if (ImGui.Button("Save")) - { - tabPanel.MarkTabClean(tab1Id); - } -} - -void RenderTab2Content() -{ - ImGui.Text("Tab 2 Content"); -} - -void RenderTab3Content() -{ - ImGui.Text("Tab 3 Content"); -} -``` - -### Icons - -Icons can be used to display images with various alignment options and event delegates: - -```csharp -float iconWidthEms = 7.5f; -float iconWidthPx = ImGuiApp.EmsToPx(iconWidthEms); - -uint textureId = ImGuiApp.GetOrLoadTexture("icon.png"); - -ImGuiWidgets.Icon("Click Me", textureId, iconWidthPx, Color.White.Value, ImGuiWidgets.IconAlignment.Vertical, new ImGuiWidgets.IconDelegates() -{ - OnClick = () => MessageOK.Open("Click", "You clicked") -}); - -ImGui.SameLine(); -ImGuiWidgets.Icon("Double Click Me", textureId, iconWidthPx, Color.White.Value, ImGuiWidgets.IconAlignment.Vertical, new ImGuiWidgets.IconDelegates() -{ - OnDoubleClick = () => MessageOK.Open("Double Click", "You clicked twice") -}); - -ImGui.SameLine(); -ImGuiWidgets.Icon("Right Click Me", textureId, iconWidthPx, Color.White.Value, ImGuiWidgets.IconAlignment.Vertical, new ImGuiWidgets.IconDelegates() -{ - OnContextMenu = () => - { - ImGui.MenuItem("Context Menu Item 1"); - ImGui.MenuItem("Context Menu Item 2"); - ImGui.MenuItem("Context Menu Item 3"); - }, -}); -``` - -### Grid - -The grid layout allows you to display items in a flexible grid: - -```csharp -float iconSizeEms = 7.5f; -float iconSizePx = ImGuiApp.EmsToPx(iconSizeEms); - -uint textureId = ImGuiApp.GetOrLoadTexture("icon.png"); - -ImGuiWidgets.Grid(items, i => ImGuiWidgets.CalcIconSize(i, iconSizePx), (item, cellSize, itemSize) => -{ - ImGuiWidgets.Icon(item, textureId, iconSizePx, Color.White.Value); -}); -``` - -### Color Indicator - -The color indicator widget displays a color when enabled: - -```csharp -bool enabled = true; -Color color = Color.Red; - -ImGuiWidgets.ColorIndicator("Color Indicator", enabled, color); -``` - -### Image - -The image widget allows you to display images with alignment options: - -```csharp -uint textureId = ImGuiApp.GetOrLoadTexture("image.png"); - -ImGuiWidgets.Image(textureId, new Vector2(100, 100)); -``` - -### Text - -The text widget allows you to display text with alignment options: - -```csharp -ImGuiWidgets.Text("Hello, ImGuiWidgets!"); -ImGuiWidgets.TextCentered("Hello, ImGuiWidgets!"); -ImGuiWidgets.TextCenteredWithin("Hello, ImGuiWidgets!", new Vector2(100, 100)); -``` - -### Tree - -The tree widget allows you to display hierarchical data: - -```csharp -using (var tree = new ImGuiWidgets.Tree()) -{ - for (int i = 0; i < 5; i++) - { - using (tree.Child) - { - ImGui.Button($"Hello, Child {i}!"); - using (var subtree = new ImGuiWidgets.Tree()) - { - using (subtree.Child) - { - ImGui.Button($"Hello, Grandchild!"); - } - } - } - } -} -``` - -### Scoped Id - -The scoped ID utility class helps in creating scoped IDs for ImGui elements and ensuring they get popped appropriatley: - -```csharp -using (new ImGuiWidgets.ScopedId()) -{ - ImGui.Button("Hello, Scoped ID!"); -} -``` - -## Contributing - -Contributions are welcome! For feature requests, bug reports, or questions, please open an issue on the GitHub repository. If you would like to contribute code, please open a pull request with your changes. - -## Acknowledgements - -ImGuiWidgets is inspired by the following projects: - -- [ocornut/ImGui](https://github.com/ocornut/imgui) -- [ImGui.NET](https://github.com/ImGuiNET/ImGui.NET) -- [ImGui-works/ImGui-knobs-dial-gauge-meter](https://github.com/imgui-works/imgui-knobs-dial-gauge-meter) - -## License - -ImGuiWidgets is licensed under the MIT License. See [LICENSE](LICENSE) for more information. diff --git a/ImGui.Widgets/ScopedDisable.cs b/ImGui.Widgets/ScopedDisable.cs deleted file mode 100644 index e4e6914..0000000 --- a/ImGui.Widgets/ScopedDisable.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using Hexa.NET.ImGui; - -using ScopedAction; - -/// -/// Represents a scoped disable action which will set Dear ImGui elements as functionally and visually disabled until -/// the class is disposed. -/// -public class ScopedDisable : ScopedAction -{ - /// - /// Note as per the Dear ImGui documentation: "Those can be nested, but it cannot - /// be used to enable an already disabled section (a single BeginDisabled(true) - /// in the stack is enough to keep everything disabled)" - /// - /// Should the elements within the scope be disabled - public ScopedDisable(bool enabled) - { - ImGui.BeginDisabled(enabled); - OnClose = ImGui.EndDisabled; - } -} diff --git a/ImGui.Widgets/ScopedId.cs b/ImGui.Widgets/ScopedId.cs deleted file mode 100644 index d8d9688..0000000 --- a/ImGui.Widgets/ScopedId.cs +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using Hexa.NET.ImGui; -using ktsu.ScopedAction; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// Represents a scoped ID for Dear ImGui. This class ensures that the ID is pushed when the object is created - /// and popped when the object is disposed. - /// - public class ScopedId : ScopedAction - { - /// - /// Initializes a new instance of the class with a string ID. - /// - /// The string ID to push to ImGui. - public ScopedId(string id) - { - ImGui.PushID(id); - OnClose = ImGui.PopID; - } - - /// - /// Initializes a new instance of the class with an integer ID. - /// - /// The integer ID to push to ImGui. - public ScopedId(int id) - { - ImGui.PushID(id); - OnClose = ImGui.PopID; - } - } -} diff --git a/ImGui.Widgets/SearchBox.cs b/ImGui.Widgets/SearchBox.cs deleted file mode 100644 index 1bc0f4e..0000000 --- a/ImGui.Widgets/SearchBox.cs +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System; -using System.Collections.Generic; -using System.Linq; - -using Hexa.NET.ImGui; - -using ktsu.TextFilter; - -public static partial class ImGuiWidgets -{ - /// - /// A search box that filters items using ktsu.TextFilter. - /// - /// Label for display and id. - /// Current filter text. - /// How to match the filter text (default: WholeString). - /// Type of filter to use (default: Glob). - /// True if the filter text changed, otherwise false. - public static bool SearchBox( - string label, - ref string filterText, - ref TextFilterType filterType, - ref TextFilterMatchOptions matchOptions - ) - { - string hint = TextFilter.GetHint(filterType) + "\nRight-click for options"; - - bool changed = ImGui.InputTextWithHint(label, hint, ref filterText, 256); - bool isHovered = ImGui.IsItemHovered(); - bool isRightMouseClicked = ImGui.IsMouseClicked(ImGuiMouseButton.Right); - - if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled)) - { - ImGui.SetTooltip(hint); - } - - if (isHovered && isRightMouseClicked) - { - ImGui.OpenPopup(label + "##context"); - } - - if (ImGui.BeginPopup(label + "##context")) - { - bool isGlob = filterType == TextFilterType.Glob; - bool isRegex = filterType == TextFilterType.Regex; - bool isFuzzy = filterType == TextFilterType.Fuzzy; - - bool isWholeString = matchOptions == TextFilterMatchOptions.ByWholeString; - bool isAllWord = matchOptions == TextFilterMatchOptions.ByWordAll; - bool isAnyWord = matchOptions == TextFilterMatchOptions.ByWordAny; - - if (ImGui.MenuItem("Glob", "", ref isGlob)) - { - filterType = TextFilterType.Glob; - } - - if (ImGui.MenuItem("Regex", "", ref isRegex)) - { - filterType = TextFilterType.Regex; - } - - if (ImGui.MenuItem("Fuzzy", "", ref isFuzzy)) - { - filterType = TextFilterType.Fuzzy; - } - - ImGui.Separator(); - - if (ImGui.MenuItem("Whole String", "", ref isWholeString)) - { - matchOptions = TextFilterMatchOptions.ByWholeString; - } - - if (ImGui.MenuItem("All Words", "", ref isAllWord)) - { - matchOptions = TextFilterMatchOptions.ByWordAll; - } - - if (ImGui.MenuItem("Any Word", "", ref isAnyWord)) - { - matchOptions = TextFilterMatchOptions.ByWordAny; - } - - ImGui.EndPopup(); - } - - return changed; - } - - /// - /// A search box that filters items using ktsu.TextFilter and returns the filtered results. - /// - /// Type of items to filter. - /// Label for display and id. - /// Current filter text. - /// Collection of items to filter. - /// Function to extract the string to match against from each item. - /// How to match the filter text (default: WholeString). - /// Type of filter to use (default: Glob). - /// Filtered collection of items. - public static IEnumerable SearchBox( - string label, - ref string filterText, - IEnumerable items, - Func selector, - ref TextFilterType filterType, - ref TextFilterMatchOptions matchOptions - ) - { - ArgumentNullException.ThrowIfNull(items); - ArgumentNullException.ThrowIfNull(selector); - - SearchBox(label, ref filterText, ref filterType, ref matchOptions); - - if (string.IsNullOrWhiteSpace(filterText)) - { - return []; - } - - Dictionary keyedItems = items.ToDictionary(selector, item => item); - - return TextFilter.Filter(keyedItems.Keys, filterText, filterType, matchOptions) - .Select(x => keyedItems[x]); - } - - /// - /// A search box that ranks items using a fuzzy filter. - /// - /// Type of items to rank. - /// Label for display and id. - /// Current filter text. - /// Collection of items to rank. - /// Function to extract the string to match against from each item. - /// Ranked collection of items. - public static IEnumerable SearchBoxRanked( - string label, - ref string filterText, - IEnumerable items, - Func selector - ) - { - ArgumentNullException.ThrowIfNull(items); - ArgumentNullException.ThrowIfNull(selector); - - TextFilterType filterType = TextFilterType.Fuzzy; - TextFilterMatchOptions matchOptions = TextFilterMatchOptions.ByWholeString; - SearchBox(label, ref filterText, ref filterType, ref matchOptions); - - if (string.IsNullOrWhiteSpace(filterText)) - { - return items; - } - - Dictionary keyedItems = items.ToDictionary(selector, item => item); - return TextFilter.Rank(keyedItems.Keys, filterText) - .Select(x => keyedItems[x]); - } -} diff --git a/ImGui.Widgets/TabPanel.cs b/ImGui.Widgets/TabPanel.cs deleted file mode 100644 index bbaff4e..0000000 --- a/ImGui.Widgets/TabPanel.cs +++ /dev/null @@ -1,548 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System; -using System.Collections.ObjectModel; -using Hexa.NET.ImGui; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// A panel with tabs that can be used to organize content. - /// - public class TabPanel - { - /// - /// The unique identifier for this tab panel. - /// - public string Id { get; private set; } - - /// - /// The collection of tabs within this panel. - /// - public Collection Tabs { get; private set; } = []; - - /// - /// The index of the currently active tab. - /// - public int ActiveTabIndex { get; set; } - - /// - /// The ID of the currently active tab. - /// - public string? ActiveTabId => ActiveTabIndex >= 0 && ActiveTabIndex < Tabs.Count - ? Tabs[ActiveTabIndex].Id - : null; - - /// - /// Whether the tab bar is closable (allows closing tabs with an X button). - /// - public bool Closable { get; set; } - - /// - /// Whether the tab bar should be reorderable. - /// - public bool Reorderable { get; set; } - - /// - /// Gets the currently active tab or null if there are no tabs. - /// - public Tab? ActiveTab => Tabs.Count > 0 && ActiveTabIndex >= 0 && ActiveTabIndex < Tabs.Count - ? Tabs[ActiveTabIndex] - : null; - - private Action? TabChangedDelegate { get; } - private Action? TabChangedByIdDelegate { get; } - - /// - /// Create a new tab panel. - /// - /// The unique identifier for this tab panel. - public TabPanel(string id) => Id = id; - - /// - /// Create a new tab panel with options. - /// - /// The unique identifier for this tab panel. - /// Whether tabs can be closed. - /// Whether tabs can be reordered. - public TabPanel(string id, bool closable, bool reorderable) - { - Id = id; - Closable = closable; - Reorderable = reorderable; - } - - /// - /// Create a new tab panel with a callback for tab changes. - /// - /// The unique identifier for this tab panel. - /// The delegate to call when the active tab changes, passing the tab index. - public TabPanel(string id, Action tabChangedDelegate) - { - Id = id; - TabChangedDelegate = tabChangedDelegate; - } - - /// - /// Create a new tab panel with a callback for tab changes. - /// - /// The unique identifier for this tab panel. - /// The delegate to call when the active tab changes, passing the tab ID. - public TabPanel(string id, Action tabChangedDelegate) - { - Id = id; - TabChangedByIdDelegate = tabChangedDelegate; - } - - /// - /// Create a new tab panel with options and a callback for tab changes. - /// - /// The unique identifier for this tab panel. - /// Whether tabs can be closed. - /// Whether tabs can be reordered. - /// The delegate to call when the active tab changes, passing the tab index. - public TabPanel(string id, bool closable, bool reorderable, Action tabChangedDelegate) - { - Id = id; - Closable = closable; - Reorderable = reorderable; - TabChangedDelegate = tabChangedDelegate; - } - - /// - /// Create a new tab panel with options and a callback for tab changes. - /// - /// The unique identifier for this tab panel. - /// Whether tabs can be closed. - /// Whether tabs can be reordered. - /// The delegate to call when the active tab changes, passing the tab ID. - public TabPanel(string id, bool closable, bool reorderable, Action tabChangedDelegate) - { - Id = id; - Closable = closable; - Reorderable = reorderable; - TabChangedByIdDelegate = tabChangedDelegate; - } - - /// - /// Find a tab by its ID. - /// - /// The ID of the tab to find. - /// The tab if found, null otherwise. - public Tab? GetTabById(string tabId) - { - foreach (Tab tab in Tabs) - { - if (tab.Id == tabId) - { - return tab; - } - } - - return null; - } - - /// - /// Get the index of a tab by its ID. - /// - /// The ID of the tab to find. - /// The index of the tab if found, -1 otherwise. - public int GetTabIndex(string tabId) - { - for (int i = 0; i < Tabs.Count; i++) - { - if (Tabs[i].Id == tabId) - { - return i; - } - } - - return -1; - } - - /// - /// Add a new tab to the panel. - /// - /// The label of the tab. - /// The content drawing delegate for the tab. - /// The ID of the newly added tab. - public string AddTab(string label, Action content) - { - Tab tab = new(label, content); - Tabs.Add(tab); - return tab.Id; - } - - /// - /// Add a new tab to the panel with a specific ID. - /// - /// The unique ID for the tab. - /// The label of the tab. - /// The content drawing delegate for the tab. - /// The ID of the newly added tab. - public string AddTab(string id, string label, Action content) - { - Tab tab = new(id, label, content); - Tabs.Add(tab); - return tab.Id; - } - - /// - /// Add a new tab to the panel with specified dirty state. - /// - /// The label of the tab. - /// The content drawing delegate for the tab. - /// Initial dirty state of the tab. - /// The ID of the newly added tab. - public string AddTab(string label, Action content, bool isDirty) - { - Tab tab = new(label, content, isDirty); - Tabs.Add(tab); - return tab.Id; - } - - /// - /// Add a new tab to the panel with a specific ID and dirty state. - /// - /// The unique ID for the tab. - /// The label of the tab. - /// The content drawing delegate for the tab. - /// Initial dirty state of the tab. - /// The ID of the newly added tab. - public string AddTab(string id, string label, Action content, bool isDirty) - { - Tab tab = new(id, label, content, isDirty); - Tabs.Add(tab); - return tab.Id; - } - - /// - /// Mark a tab as dirty (having unsaved changes). - /// - /// The index of the tab to mark dirty. - /// True if successful, false if the index is out of range. - public bool MarkTabDirty(int index) - { - if (index >= 0 && index < Tabs.Count) - { - Tabs[index].MarkDirty(); - return true; - } - - return false; - } - - /// - /// Mark a tab as dirty (having unsaved changes). - /// - /// The ID of the tab to mark dirty. - /// True if successful, false if the tab was not found. - public bool MarkTabDirty(string tabId) - { - Tab? tab = GetTabById(tabId); - if (tab != null) - { - tab.MarkDirty(); - return true; - } - - return false; - } - - /// - /// Mark a tab as clean (having no unsaved changes). - /// - /// The index of the tab to mark clean. - /// True if successful, false if the index is out of range. - public bool MarkTabClean(int index) - { - if (index >= 0 && index < Tabs.Count) - { - Tabs[index].MarkClean(); - return true; - } - - return false; - } - - /// - /// Mark a tab as clean (having no unsaved changes). - /// - /// The ID of the tab to mark clean. - /// True if successful, false if the tab was not found. - public bool MarkTabClean(string tabId) - { - Tab? tab = GetTabById(tabId); - if (tab != null) - { - tab.MarkClean(); - return true; - } - - return false; - } - - /// - /// Mark the currently active tab as dirty. - /// - /// True if there is an active tab and it was marked dirty, false otherwise. - public bool MarkActiveTabDirty() - { - if (ActiveTab != null) - { - ActiveTab.MarkDirty(); - return true; - } - - return false; - } - - /// - /// Mark the currently active tab as clean. - /// - /// True if there is an active tab and it was marked clean, false otherwise. - public bool MarkActiveTabClean() - { - if (ActiveTab != null) - { - ActiveTab.MarkClean(); - return true; - } - - return false; - } - - /// - /// Check if the tab at the specified index is dirty. - /// - /// The index of the tab to check. - /// True if the tab is dirty, false otherwise or if the index is out of range. - public bool IsTabDirty(int index) => index >= 0 && index < Tabs.Count && Tabs[index].IsDirty; - - /// - /// Check if the tab with the specified ID is dirty. - /// - /// The ID of the tab to check. - /// True if the tab is dirty, false otherwise or if the tab was not found. - public bool IsTabDirty(string tabId) - { - Tab? tab = GetTabById(tabId); - return tab?.IsDirty ?? false; - } - - /// - /// Check if the active tab is dirty. - /// - /// True if the active tab is dirty, false otherwise or if there is no active tab. - public bool IsActiveTabDirty() => ActiveTab?.IsDirty ?? false; - - /// - /// Remove a tab from the panel by index. - /// - /// The index of the tab to remove. - /// True if the tab was removed, false otherwise. - public bool RemoveTab(int index) - { - if (index >= 0 && index < Tabs.Count) - { - Tabs.RemoveAt(index); - if (ActiveTabIndex >= Tabs.Count) - { - ActiveTabIndex = Math.Max(0, Tabs.Count - 1); - TabChangedDelegate?.Invoke(ActiveTabIndex); - TabChangedByIdDelegate?.Invoke(ActiveTabId ?? string.Empty); - } - - return true; - } - - return false; - } - - /// - /// Remove a tab from the panel by ID. - /// - /// The ID of the tab to remove. - /// True if the tab was removed, false otherwise. - public bool RemoveTab(string tabId) - { - int index = GetTabIndex(tabId); - return index >= 0 && RemoveTab(index); - } - - /// - /// Draw the tab panel. - /// - public void Draw() - { - if (Tabs.Count == 0) - { - return; - } - - ImGuiTabBarFlags flags = ImGuiTabBarFlags.None; - if (Reorderable) - { - flags |= ImGuiTabBarFlags.Reorderable; - } - - if (ImGui.BeginTabBar(Id, flags)) - { - for (int i = 0; i < Tabs.Count; i++) - { - Tab tab = Tabs[i]; - ImGuiTabItemFlags tabFlags = ImGuiTabItemFlags.None; - - // Use the UnsavedDocument flag for dirty indicator - if (tab.IsDirty) - { - tabFlags |= ImGuiTabItemFlags.UnsavedDocument; - } - - bool tabOpen = true; - - if (ImGui.BeginTabItem($"{tab.Label}##{tab.Id}", ref tabOpen, tabFlags)) - { - if (ActiveTabIndex != i) - { - ActiveTabIndex = i; - TabChangedDelegate?.Invoke(i); - TabChangedByIdDelegate?.Invoke(tab.Id); - } - - tab.Content?.Invoke(); - ImGui.EndTabItem(); - } - - if (Closable && !tabOpen) - { - RemoveTab(i); - i--; // Adjust index since we removed an item - } - } - - ImGui.EndTabBar(); - } - } - } - - /// - /// Represents a single tab within a TabPanel. - /// - public class Tab - { - private static int nextId = 1; - - /// - /// Gets a unique identifier for this tab. - /// - public string Id { get; } - - /// - /// The label displayed on the tab. - /// - public string Label { get; set; } - - /// - /// The action to invoke to draw the tab content. - /// - public Action? Content { get; set; } - - /// - /// Gets or sets whether this tab's content has unsaved changes. - /// - public bool IsDirty { get; set; } - - /// - /// Create a new tab with an auto-generated ID. - /// - /// The label of the tab. - public Tab(string label) - { - Id = $"tab_{nextId++}"; - Label = label; - } - - /// - /// Create a new tab with a specific ID. - /// - /// The unique ID for the tab. - /// The label of the tab. - public Tab(string id, string label) - { - Id = id; - Label = label; - } - - /// - /// Create a new tab with content and an auto-generated ID. - /// - /// The label of the tab. - /// The content drawing delegate for the tab. - public Tab(string label, Action content) - { - Id = $"tab_{nextId++}"; - Label = label; - Content = content; - } - - /// - /// Create a new tab with a specific ID and content. - /// - /// The unique ID for the tab. - /// The label of the tab. - /// The content drawing delegate for the tab. - public Tab(string id, string label, Action content) - { - Id = id; - Label = label; - Content = content; - } - - /// - /// Create a new tab with content, dirty state, and an auto-generated ID. - /// - /// The label of the tab. - /// The content drawing delegate for the tab. - /// Initial dirty state of the tab. - public Tab(string label, Action content, bool isDirty) - { - Id = $"tab_{nextId++}"; - Label = label; - Content = content; - IsDirty = isDirty; - } - - /// - /// Create a new tab with a specific ID, content, and dirty state. - /// - /// The unique ID for the tab. - /// The label of the tab. - /// The content drawing delegate for the tab. - /// Initial dirty state of the tab. - public Tab(string id, string label, Action content, bool isDirty) - { - Id = id; - Label = label; - Content = content; - IsDirty = isDirty; - } - - /// - /// Marks the tab as dirty (having unsaved changes). - /// - public void MarkDirty() => IsDirty = true; - - /// - /// Marks the tab as clean (no unsaved changes). - /// - public void MarkClean() => IsDirty = false; - } -} diff --git a/ImGui.Widgets/Text.cs b/ImGui.Widgets/Text.cs deleted file mode 100644 index 7996b73..0000000 --- a/ImGui.Widgets/Text.cs +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ImGui.Styler; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// Displays the specified text. - /// - /// The text to display. - public static void Text(string text) => TextImpl.Show(text); - - /// - /// Displays the specified text centered within the available space. - /// - /// The text to display. - public static void TextCentered(string text) => TextImpl.Centered(text); - - /// - /// Displays the specified text centered horizontally within the given bounds. - /// - /// The text to display. - /// The size of the container within which the text will be centered. - public static void TextCenteredWithin(string text, Vector2 containerSize) => TextImpl.CenteredWithin(text, containerSize); - - internal static class TextImpl - { - /// - /// Displays the specified text. - /// - /// The text to display. - public static void Show(string text) => ImGui.TextUnformatted(text); - - /// - /// Displays the specified text centered within the available space. - /// - /// The text to display. - public static void Centered(string text) - { - Vector2 textSize = ImGui.CalcTextSize(text); - using (new Alignment.Center(textSize)) - { - ImGui.TextUnformatted(text); - } - } - - /// - /// Displays the specified text centered horizontally within the given bounds. - /// - /// The text to display. - /// The size of the container within which the text will be centered. - public static void CenteredWithin(string text, Vector2 containerSize) => CenteredWithin(text, containerSize, false); - - /// - /// Displays the specified text centered horizontally within the given bounds, with an option to clip the text. - /// - /// The text to display. - /// The size of the container within which the text will be centered. - /// If true, the text will be clipped to fit within the container size. - public static void CenteredWithin(string text, Vector2 containerSize, bool clip) - { - if (clip) - { - text = Clip(text, containerSize); - } - - Vector2 textSize = ImGui.CalcTextSize(text); - using (new Alignment.CenterWithin(textSize, containerSize)) - { - ImGui.TextUnformatted(text); - } - } - - /// - /// Clips the specified text to fit within the given container size, adding an ellipsis if necessary. - /// - /// The text to clip. - /// The size of the container within which the text must fit. - /// The clipped text with an ellipsis if it exceeds the container size. - public static string Clip(string text, Vector2 containerSize) - { - float textWidth = ImGui.CalcTextSize(text).X; - if (textWidth <= containerSize.X) - { - return text; - } - - string ellipsis = "..."; - float ellipsisWidth = ImGui.CalcTextSize(ellipsis).X; - - while (textWidth + ellipsisWidth > containerSize.X && text.Length > 0) - { - text = text[..^1]; - textWidth = ImGui.CalcTextSize(text).X; - } - - return text + ellipsis; - } - } -} diff --git a/ImGui.Widgets/Tree.cs b/ImGui.Widgets/Tree.cs deleted file mode 100644 index 790a6a5..0000000 --- a/ImGui.Widgets/Tree.cs +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ImGui.Styler; -using ktsu.ScopedAction; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// Represents a tree structure widget in ImGui with custom drawing logic. - /// - public class Tree : ScopedAction - { - private Vector2 CursorStart { get; init; } - private Vector2 CursorEnd { get; set; } - private float IndentWidth { get; init; } - private float HalfIndentWidth => IndentWidth / 2f; - private float FrameHeight { get; init; } - private float HalfFrameHeight => FrameHeight / 2f; - private float ItemSpacingY { get; init; } - private float Left { get; init; } - private float Top { get; init; } - private const float LineThickness = 2f; - private const float HalfLineThickness = LineThickness / 2f; - - /// - /// Initializes a new instance of the class. - /// Sets up the initial cursor position, indent width, item spacing, frame height, and drawing logic for the tree structure. - /// - public Tree() : base() - { - ImGui.Indent(); - CursorStart = ImGui.GetCursorScreenPos(); - IndentWidth = ImGui.GetStyle().IndentSpacing; - ItemSpacingY = ImGui.GetStyle().ItemSpacing.Y; - FrameHeight = ImGui.GetFrameHeight(); - Left = CursorStart.X - HalfIndentWidth; - Top = CursorStart.Y - ItemSpacingY - HalfLineThickness; - - OnClose = () => - { - ImGui.SameLine(); - float bottom = CursorEnd.Y + HalfFrameHeight + HalfLineThickness; - Vector2 a = new(Left, Top); - Vector2 b = new(Left, bottom); - ImGui.GetWindowDrawList().AddLine(a, b, ImGui.GetColorU32(Color.Palette.Neutral.Gray.Value), LineThickness); - ImGui.NewLine(); - ImGui.Unindent(); - }; - } - - /// - /// Gets a new instance of the class, representing a child node in the tree structure. - /// - public TreeChild Child => new(this); - - /// - /// Represents a child node in the tree structure. - /// - /// The parent tree node. - public class TreeChild(Tree parent) : ScopedAction( - onOpen: () => - { - Vector2 cursor = ImGui.GetCursorScreenPos(); - parent.CursorEnd = cursor; - float right = cursor.X; - float y = cursor.Y + parent.HalfFrameHeight; - - Vector2 a = new(parent.Left, y); - Vector2 b = new(right, y); - - ImGui.GetWindowDrawList().AddLine(a, b, ImGui.GetColorU32(Color.Palette.Neutral.Gray.Value), LineThickness); - }, - onClose: null) - { - } - } -} diff --git a/ImGui.sln b/ImGui.sln deleted file mode 100644 index f588717..0000000 --- a/ImGui.sln +++ /dev/null @@ -1,148 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGui.App", "ImGui.App\ImGui.App.csproj", "{EEC56BFB-F502-8810-5DC7-9E17B3D17435}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGui.Popups", "ImGui.Popups\ImGui.Popups.csproj", "{C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGui.Styler", "ImGui.Styler\ImGui.Styler.csproj", "{8B4C0E01-82D0-E523-C654-8D33E2554884}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGui.Widgets", "ImGui.Widgets\ImGui.Widgets.csproj", "{0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" - ProjectSection(SolutionItems) = preProject - examples\ImGuiPopupsDemo\ImGuiPopupsDemo.csproj = examples\ImGuiPopupsDemo\ImGuiPopupsDemo.csproj - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGuiAppDemo", "examples\ImGuiAppDemo\ImGuiAppDemo.csproj", "{D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGuiStylerDemo", "examples\ImGuiStylerDemo\ImGuiStylerDemo.csproj", "{74E901E1-ED27-2FA9-D58D-48A875D82102}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGuiWidgetsDemo", "examples\ImGuiWidgetsDemo\ImGuiWidgetsDemo.csproj", "{723D183E-B609-CD2B-CF5B-B6F81E9368B3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{5F0E6F1C-44C1-42B7-ADF4-770ABB471B40}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGui.App.Tests", "tests\ImGui.App.Tests\ImGui.App.Tests.csproj", "{D1B3E399-F4E4-D537-46FE-2585AF4E9262}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Debug|x64.ActiveCfg = Debug|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Debug|x64.Build.0 = Debug|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Debug|x86.ActiveCfg = Debug|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Debug|x86.Build.0 = Debug|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Release|Any CPU.Build.0 = Release|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Release|x64.ActiveCfg = Release|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Release|x64.Build.0 = Release|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Release|x86.ActiveCfg = Release|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Release|x86.Build.0 = Release|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Debug|x64.ActiveCfg = Debug|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Debug|x64.Build.0 = Debug|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Debug|x86.ActiveCfg = Debug|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Debug|x86.Build.0 = Debug|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Release|Any CPU.Build.0 = Release|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Release|x64.ActiveCfg = Release|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Release|x64.Build.0 = Release|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Release|x86.ActiveCfg = Release|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Release|x86.Build.0 = Release|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Debug|x64.ActiveCfg = Debug|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Debug|x64.Build.0 = Debug|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Debug|x86.ActiveCfg = Debug|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Debug|x86.Build.0 = Debug|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Release|Any CPU.Build.0 = Release|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Release|x64.ActiveCfg = Release|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Release|x64.Build.0 = Release|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Release|x86.ActiveCfg = Release|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Release|x86.Build.0 = Release|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Debug|x64.ActiveCfg = Debug|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Debug|x64.Build.0 = Debug|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Debug|x86.ActiveCfg = Debug|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Debug|x86.Build.0 = Debug|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Release|Any CPU.Build.0 = Release|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Release|x64.ActiveCfg = Release|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Release|x64.Build.0 = Release|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Release|x86.ActiveCfg = Release|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Release|x86.Build.0 = Release|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Debug|x64.ActiveCfg = Debug|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Debug|x64.Build.0 = Debug|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Debug|x86.ActiveCfg = Debug|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Debug|x86.Build.0 = Debug|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Release|Any CPU.Build.0 = Release|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Release|x64.ActiveCfg = Release|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Release|x64.Build.0 = Release|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Release|x86.ActiveCfg = Release|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Release|x86.Build.0 = Release|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Debug|x64.ActiveCfg = Debug|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Debug|x64.Build.0 = Debug|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Debug|x86.ActiveCfg = Debug|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Debug|x86.Build.0 = Debug|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Release|Any CPU.Build.0 = Release|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Release|x64.ActiveCfg = Release|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Release|x64.Build.0 = Release|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Release|x86.ActiveCfg = Release|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Release|x86.Build.0 = Release|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Debug|x64.ActiveCfg = Debug|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Debug|x64.Build.0 = Debug|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Debug|x86.ActiveCfg = Debug|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Debug|x86.Build.0 = Debug|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Release|Any CPU.Build.0 = Release|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Release|x64.ActiveCfg = Release|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Release|x64.Build.0 = Release|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Release|x86.ActiveCfg = Release|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Release|x86.Build.0 = Release|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Debug|x64.ActiveCfg = Debug|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Debug|x64.Build.0 = Debug|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Debug|x86.ActiveCfg = Debug|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Debug|x86.Build.0 = Debug|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Release|Any CPU.Build.0 = Release|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Release|x64.ActiveCfg = Release|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Release|x64.Build.0 = Release|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Release|x86.ActiveCfg = Release|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {74E901E1-ED27-2FA9-D58D-48A875D82102} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {723D183E-B609-CD2B-CF5B-B6F81E9368B3} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {D1B3E399-F4E4-D537-46FE-2585AF4E9262} = {5F0E6F1C-44C1-42B7-ADF4-770ABB471B40} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {14515AC1-A74C-4CBB-98F2-9DA660E967EF} - EndGlobalSection -EndGlobal diff --git a/examples/ImGuiAppDemo/ImGuiAppDemo.cs b/examples/ImGuiAppDemo/ImGuiAppDemo.cs deleted file mode 100644 index 38ce283..0000000 --- a/examples/ImGuiAppDemo/ImGuiAppDemo.cs +++ /dev/null @@ -1,964 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Examples.App; - -using System.Numerics; -using System.Text; - -using Hexa.NET.ImGui; - -using ktsu.ImGui.App; -using ktsu.ImGui.Examples.App.Properties; -using ktsu.Semantics.Paths; -using ktsu.Semantics.Strings; - -internal static class ImGuiAppDemo -{ - private static bool showImGuiDemo; - private static bool showStyleEditor; - private static bool showMetrics; - private static bool showAbout; - - // Demo state - Basic Widgets - private static float sliderValue = 0.5f; - private static int counter; - private static bool checkboxState; - private static string inputText = "Type here..."; - private static Vector3 colorPickerValue = new(0.4f, 0.7f, 0.2f); - private static Vector4 color4Value = new(1.0f, 0.5f, 0.2f, 1.0f); - private static readonly Random random = new(); - private static readonly List plotValues = []; - private static float plotRefreshTime; - - // Advanced widget states - private static int comboSelection; - private static readonly string[] comboItems = ["Item 1", "Item 2", "Item 3", "Item 4"]; - private static int listboxSelection; - private static readonly string[] listboxItems = ["Apple", "Banana", "Cherry", "Date", "Elderberry"]; - private static float dragFloat = 1.0f; - private static int dragInt = 50; - private static Vector3 dragVector = new(1.0f, 2.0f, 3.0f); - private static float angle; - - // Table demo state - private static readonly List tableData = []; - private static bool showTableHeaders = true; - private static bool showTableBorders = true; - - // Text rendering state - private static readonly StringBuilder textBuffer = new(1024); - private static bool wrapText = true; - private static float textSpeed = 50.0f; - private static float animationTime; - - // Canvas drawing state - private static readonly List canvasPoints = []; - private static Vector4 drawColor = new(1.0f, 1.0f, 0.0f, 1.0f); - private static float brushSize = 5.0f; - - // Modal and popup states - private static bool showModal; - private static bool showPopup; - private static string modalResult = ""; - - // File operations - private static string filePath = ""; - private static string fileContent = ""; - - // Animation demo - private static float bounceOffset; - private static float pulseScale = 1.0f; - - // Additional UI state - private static int radioSelection; - private static string modalInputBuffer = ""; - - private sealed record DemoItem(int Id, string Name, string Category, float Value, bool Active); - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Security", "CA5394:Do not use insecure randomness", Justification = "")] - static ImGuiAppDemo() - { - // Initialize table data - for (int i = 0; i < 20; i++) - { - string[] categories = ["Category A", "Category B", "Category C"]; - tableData.Add(new DemoItem( - i, - $"Item {i + 1}", - categories[i % 3], - (float)(random.NextDouble() * 100), - random.NextDouble() > 0.5 - )); - } - - textBuffer.Append("This is a demonstration of ImGui text editing capabilities.\n"); - textBuffer.Append("You can edit this text, and it will update in real-time.\n"); - textBuffer.Append("ImGui supports multi-line text editing with syntax highlighting possibilities."); - } - - private static void Main() => ImGuiApp.Start(new() - { - Title = "ImGuiApp Demo", - IconPath = AppContext.BaseDirectory.As() / "icon.png".As(), - OnRender = OnRender, - OnAppMenu = OnAppMenu, - SaveIniSettings = false, - // Note: EnableUnicodeSupport = true by default, so Unicode and emojis are automatically enabled! - Fonts = new Dictionary - { - { nameof(Resources.CARDCHAR), Resources.CARDCHAR } - }, - // Example of configuring performance settings for throttled rendering - // Uses PID controller for accurate frame rate limiting instead of simple sleep-based approach - // VSync is disabled to allow frame limiting below monitor refresh rate - // Defaults: Kp=1.8, Ki=0.048, Kd=0.237 (from comprehensive auto-tuning) - PerformanceSettings = new() - { - EnableThrottledRendering = true, - // Using default values: Focused=30, Unfocused=5, Idle=10 FPS - // But with a shorter idle timeout for demo purposes - IdleTimeoutSeconds = 5.0, // Consider idle after 5 seconds (default is 30) - }, - }); - - private static void OnRender(float dt) - { - UpdateAnimations(dt); - RenderMainDemoWindow(); - - // Show additional windows based on menu toggles - if (showImGuiDemo) - { - ImGui.ShowDemoWindow(ref showImGuiDemo); - } - - if (showStyleEditor) - { - ImGui.Begin("Style Editor", ref showStyleEditor); - ImGui.ShowStyleEditor(); - ImGui.End(); - } - - if (showMetrics) - { - ImGui.ShowMetricsWindow(ref showMetrics); - } - - if (showAbout) - { - RenderAboutWindow(); - } - - // Handle modals and popups - RenderModalAndPopups(); - - // Update plot data - UpdatePlotData(dt); - } - - private static void RenderMainDemoWindow() - { - // Create tabs for different demo sections - if (ImGui.BeginTabBar("DemoTabs", ImGuiTabBarFlags.None)) - { - RenderBasicWidgetsTab(); - RenderAdvancedWidgetsTab(); - RenderLayoutTab(); - RenderGraphicsTab(); - RenderDataVisualizationTab(); - RenderInputHandlingTab(); - RenderAnimationTab(); - RenderUnicodeTab(); - RenderNerdFontTab(); - RenderUtilityTab(); - ImGui.EndTabBar(); - } - } - - private static void RenderBasicWidgetsTab() - { - if (ImGui.BeginTabItem("Basic Widgets")) - { - ImGui.TextWrapped("This tab demonstrates basic ImGui widgets and controls."); - ImGui.Separator(); - - // Buttons - ImGui.Text("Buttons:"); - if (ImGui.Button("Regular Button")) - { - counter++; - } - - ImGui.SameLine(); - if (ImGui.SmallButton("Small")) - { - counter++; - } - - ImGui.SameLine(); - if (ImGui.ArrowButton("##left", ImGuiDir.Left)) - { - counter--; - } - - ImGui.SameLine(); - if (ImGui.ArrowButton("##right", ImGuiDir.Right)) - { - counter++; - } - - ImGui.SameLine(); - ImGui.Text($"Counter: {counter}"); - - // Checkboxes and Radio buttons - ImGui.Separator(); - ImGui.Text("Selection Controls:"); - ImGui.Checkbox("Checkbox", ref checkboxState); - - ImGui.RadioButton("Option 1", ref radioSelection, 0); - ImGui.SameLine(); - ImGui.RadioButton("Option 2", ref radioSelection, 1); - ImGui.SameLine(); - ImGui.RadioButton("Option 3", ref radioSelection, 2); - - // Sliders - ImGui.Separator(); - ImGui.Text("Sliders:"); - ImGui.SliderFloat("Float Slider", ref sliderValue, 0.0f, 1.0f); - ImGui.SliderFloat("Angle", ref angle, 0.0f, 360.0f, "%.1f deg"); - ImGui.SliderInt("Int Slider", ref dragInt, 0, 100); - - // Input fields - ImGui.Separator(); - ImGui.Text("Input Fields:"); - ImGui.InputText("Text Input", ref inputText, 100); - ImGui.InputFloat("Float Input", ref dragFloat); - ImGui.InputFloat3("Vector3 Input", ref dragVector); - - // Combo boxes - ImGui.Separator(); - ImGui.Text("Dropdowns:"); - ImGui.Combo("Combo Box", ref comboSelection, comboItems, comboItems.Length); - ImGui.ListBox("List Box", ref listboxSelection, listboxItems, listboxItems.Length, 4); - - ImGui.EndTabItem(); - } - } - - private static void RenderAdvancedWidgetsTab() - { - if (ImGui.BeginTabItem("Advanced Widgets")) - { - // Color controls - ImGui.Text("Color Controls:"); - ImGui.ColorEdit3("Color RGB", ref colorPickerValue); - ImGui.ColorEdit4("Color RGBA", ref color4Value); - ImGui.SetNextItemWidth(200.0f); - ImGui.ColorPicker3("Color Picker", ref colorPickerValue); - - ImGui.Separator(); - - // Tree view - ImGui.Text("Tree View:"); - if (ImGui.TreeNode("Root Node")) - { - for (int i = 0; i < 5; i++) - { - string nodeName = $"Child Node {i}"; - bool nodeOpen = ImGui.TreeNode(nodeName); - - if (i == 2 && nodeOpen) - { - for (int j = 0; j < 3; j++) - { - if (ImGui.TreeNode($"Grandchild {j}")) - { - ImGui.Text($"Leaf item {j}"); - ImGui.TreePop(); - } - } - } - else if (nodeOpen) - { - ImGui.Text($"Content of {nodeName}"); - } - - if (nodeOpen) - { - ImGui.TreePop(); - } - } - ImGui.TreePop(); - } - - ImGui.Separator(); - - // Progress bars and loading indicators - ImGui.Text("Progress Indicators:"); - float progress = ((float)Math.Sin(animationTime * 2.0) * 0.5f) + 0.5f; - ImGui.ProgressBar(progress, new Vector2(-1, 0), $"{progress * 100:F1}%"); - - // Spinner-like effect - ImGui.Text("Loading..."); - ImGui.SameLine(); - for (int i = 0; i < 8; i++) - { - float rotation = (animationTime * 5.0f) + (i * MathF.PI / 4.0f); - float alpha = (MathF.Sin(rotation) + 1.0f) * 0.5f; - ImGui.TextColored(new Vector4(1, 1, 1, alpha), "●"); - if (i < 7) - { - ImGui.SameLine(); - } - } - - ImGui.EndTabItem(); - } - } - - private static void RenderLayoutTab() - { - if (ImGui.BeginTabItem("Layout & Tables")) - { - // Columns - ImGui.Text("Columns Layout:"); - ImGui.Columns(3, "DemoColumns"); - ImGui.Separator(); - - ImGui.Text("Column 1"); - ImGui.NextColumn(); - ImGui.Text("Column 2"); - ImGui.NextColumn(); - ImGui.Text("Column 3"); - ImGui.NextColumn(); - - for (int i = 0; i < 9; i++) - { - ImGui.Text($"Item {i + 1}"); - ImGui.NextColumn(); - } - - ImGui.Columns(1); - ImGui.Separator(); - - // Tables - ImGui.Text("Advanced Tables:"); - ImGui.Checkbox("Show Headers", ref showTableHeaders); - ImGui.SameLine(); - ImGui.Checkbox("Show Borders", ref showTableBorders); - - ImGuiTableFlags tableFlags = ImGuiTableFlags.Sortable | ImGuiTableFlags.Resizable; - if (showTableHeaders) - { - tableFlags |= ImGuiTableFlags.RowBg; - } - if (showTableBorders) - { - tableFlags |= ImGuiTableFlags.BordersOuter | ImGuiTableFlags.BordersV; - } - - if (ImGui.BeginTable("DemoTable", 5, tableFlags)) - { - if (showTableHeaders) - { - // Test flags without width parameters - ImGui.TableSetupColumn("ID", ImGuiTableColumnFlags.DefaultSort); - ImGui.TableSetupColumn("Name", ImGuiTableColumnFlags.None); - ImGui.TableSetupColumn("Category", ImGuiTableColumnFlags.None); - ImGui.TableSetupColumn("Value", ImGuiTableColumnFlags.None); - ImGui.TableSetupColumn("Active", ImGuiTableColumnFlags.None); - ImGui.TableHeadersRow(); - } - - for (int row = 0; row < Math.Min(tableData.Count, 10); row++) - { - DemoItem item = tableData[row]; - ImGui.TableNextRow(); - - ImGui.TableSetColumnIndex(0); - ImGui.Text(item.Id.ToString()); - - ImGui.TableSetColumnIndex(1); - ImGui.Text(item.Name); - - ImGui.TableSetColumnIndex(2); - ImGui.Text(item.Category); - - ImGui.TableSetColumnIndex(3); - ImGui.Text($"{item.Value:F2}"); - - ImGui.TableSetColumnIndex(4); - ImGui.Text(item.Active ? "✓" : "✗"); - } - - ImGui.EndTable(); - } - - ImGui.Separator(); - - // Child windows - ImGui.Text("Child Windows:"); - if (ImGui.BeginChild("ScrollableChild", new Vector2(0, 150))) - { - for (int i = 0; i < 50; i++) - { - ImGui.Text($"Scrollable line {i + 1}"); - } - } - ImGui.EndChild(); - - ImGui.EndTabItem(); - } - } - - private static void RenderGraphicsTab() - { - if (ImGui.BeginTabItem("Graphics & Drawing")) - { - // Image display - AbsoluteFilePath iconPath = AppContext.BaseDirectory.As() / "icon.png".As(); - ImGuiAppTextureInfo iconTexture = ImGuiApp.GetOrLoadTexture(iconPath); - - ImGui.Text("Image Display:"); - ImGui.Image(iconTexture.TextureRef, new Vector2(64, 64)); - ImGui.SameLine(); - ImGui.Image(iconTexture.TextureRef, new Vector2(32, 32)); - ImGui.SameLine(); - ImGui.Image(iconTexture.TextureRef, new Vector2(16, 16)); - - ImGui.Separator(); - - // Custom drawing with ImDrawList - ImGui.Text("Custom Drawing Canvas:"); - ImGui.ColorEdit4("Draw Color", ref drawColor); - ImGui.SliderFloat("Brush Size", ref brushSize, 1.0f, 20.0f); - - if (ImGui.Button("Clear Canvas")) - { - canvasPoints.Clear(); - } - - Vector2 canvasPos = ImGui.GetCursorScreenPos(); - Vector2 canvasSize = new(400, 200); - - // Draw canvas background - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - drawList.AddRectFilled(canvasPos, canvasPos + canvasSize, ImGui.ColorConvertFloat4ToU32(new Vector4(0.1f, 0.1f, 0.1f, 1.0f))); - drawList.AddRect(canvasPos, canvasPos + canvasSize, ImGui.ColorConvertFloat4ToU32(new Vector4(0.5f, 0.5f, 0.5f, 1.0f))); - - // Handle mouse input for drawing - ImGui.InvisibleButton("Canvas", canvasSize); - if (ImGui.IsItemActive() && ImGui.IsMouseDown(ImGuiMouseButton.Left)) - { - Vector2 mousePos = ImGui.GetMousePos() - canvasPos; - if (mousePos.X >= 0 && mousePos.Y >= 0 && mousePos.X <= canvasSize.X && mousePos.Y <= canvasSize.Y) - { - canvasPoints.Add(mousePos); - } - } - - // Draw points - uint color = ImGui.ColorConvertFloat4ToU32(drawColor); - foreach (Vector2 point in canvasPoints) - { - drawList.AddCircleFilled(canvasPos + point, brushSize, color); - } - - // Draw some simple shapes for demonstration - ImGui.Separator(); - ImGui.Text("Shape Examples:"); - Vector2 shapeStart = ImGui.GetCursorScreenPos(); - - // Simple animated circle - float t = animationTime; - Vector2 center = shapeStart + new Vector2(100, 50); - float radius = 20 + (MathF.Sin(t * 2) * 5); - drawList.AddCircle(center, radius, ImGui.ColorConvertFloat4ToU32(new Vector4(1, 0, 0, 1)), 16, 2.0f); - - // Moving rectangle - Vector2 rectPos = shapeStart + new Vector2(200 + (MathF.Sin(t) * 30), 30); - drawList.AddRectFilled(rectPos, rectPos + new Vector2(40, 40), ImGui.ColorConvertFloat4ToU32(new Vector4(0, 1, 0, 0.7f))); - - ImGui.Dummy(new Vector2(400, 100)); // Reserve space - - ImGui.EndTabItem(); - } - } - - private static void RenderDataVisualizationTab() - { - if (ImGui.BeginTabItem("Data Visualization")) - { - ImGui.Text("Real-time Data Plots:"); - - // Line plot - if (plotValues.Count > 0) - { - float[] values = [.. plotValues]; - ImGui.PlotLines("Random Values", ref values[0], values.Length, 0, - $"Current: {values[^1]:F2}", 0.0f, 1.0f, new Vector2(ImGui.GetContentRegionAvail().X, 100)); - - ImGui.PlotHistogram("Distribution", ref values[0], values.Length, 0, - "Histogram", 0.0f, 1.0f, new Vector2(ImGui.GetContentRegionAvail().X, 100)); - } - - ImGui.Separator(); - - // Performance note - ImGui.Text("Performance Metrics:"); - ImGui.TextWrapped("Performance monitoring is now available in the Debug menu! Use 'Debug > Show Performance Monitor' to see real-time FPS graphs and throttling state."); - - ImGui.Separator(); - - // Font demonstrations - ImGui.Text("Custom Font Rendering:"); - using (new FontAppearance(nameof(Resources.CARDCHAR), 16)) - { - ImGui.Text("Small custom font text"); - } - - using (new FontAppearance(nameof(Resources.CARDCHAR), 24)) - { - ImGui.Text("Medium custom font text"); - } - - using (new FontAppearance(nameof(Resources.CARDCHAR), 32)) - { - ImGui.Text("Large custom font text"); - } - - // Text formatting examples - ImGui.Separator(); - ImGui.Text("Text Formatting:"); - ImGui.TextColored(new Vector4(1, 0, 0, 1), "Red text"); - ImGui.TextColored(new Vector4(0, 1, 0, 1), "Green text"); - ImGui.TextColored(new Vector4(0, 0, 1, 1), "Blue text"); - ImGui.TextWrapped("This is a long line of text that should wrap to multiple lines when the window is not wide enough to contain it all on a single line."); - - ImGui.EndTabItem(); - } - } - - private static void RenderInputHandlingTab() - { - if (ImGui.BeginTabItem("Input & Interaction")) - { - ImGui.Text("Mouse Information:"); - Vector2 mousePos = ImGui.GetMousePos(); - Vector2 mouseDelta = ImGui.GetMouseDragDelta(ImGuiMouseButton.Left); - ImGui.Text($"Mouse Position: ({mousePos.X:F1}, {mousePos.Y:F1})"); - ImGui.Text($"Mouse Delta: ({mouseDelta.X:F1}, {mouseDelta.Y:F1})"); - ImGui.Text($"Left Button: {(ImGui.IsMouseDown(ImGuiMouseButton.Left) ? "DOWN" : "UP")}"); - ImGui.Text($"Right Button: {(ImGui.IsMouseDown(ImGuiMouseButton.Right) ? "DOWN" : "UP")}"); - - ImGui.Separator(); - - // Simple drag demonstration - ImGui.Text("Drag & Drop:"); - ImGui.Button("Drag Source", new Vector2(100, 50)); - ImGui.SameLine(); - ImGui.Button("Drop Target", new Vector2(100, 50)); - ImGui.Text("(Drag and drop functionality would require more complex implementation)"); - - ImGui.Separator(); - - // Text editing - ImGui.Text("Multi-line Text Editor:"); - ImGui.Checkbox("Word Wrap", ref wrapText); - ImGuiInputTextFlags textFlags = ImGuiInputTextFlags.AllowTabInput; - if (!wrapText) - { - textFlags |= ImGuiInputTextFlags.NoHorizontalScroll; - } - - string textContent = textBuffer.ToString(); - if (ImGui.InputTextMultiline("##TextEditor", ref textContent, 1024, new Vector2(-1, 150), textFlags)) - { - textBuffer.Clear(); - textBuffer.Append(textContent); - } - - ImGui.Separator(); - - // Popup and modal buttons - ImGui.Text("Popups and Modals:"); - if (ImGui.Button("Show Modal")) - { - showModal = true; - modalResult = ""; - } - - ImGui.SameLine(); - if (ImGui.Button("Show Popup")) - { - showPopup = true; - } - - if (!string.IsNullOrEmpty(modalResult)) - { - ImGui.Text($"Modal Result: {modalResult}"); - } - - ImGui.EndTabItem(); - } - } - - private static void RenderAnimationTab() - { - if (ImGui.BeginTabItem("Animation & Effects")) - { - ImGui.Text("Animation Examples:"); - - // Simple animations - ImGui.Text("Bouncing Animation:"); - Vector2 ballPos = ImGui.GetCursorScreenPos(); - ballPos.Y += bounceOffset; - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - drawList.AddCircleFilled(ballPos + new Vector2(50, 50), 20, ImGui.ColorConvertFloat4ToU32(new Vector4(1, 0.5f, 0, 1))); - ImGui.Dummy(new Vector2(100, 100)); - - // Pulsing element - ImGui.Text("Pulse Animation:"); - Vector2 pulsePos = ImGui.GetCursorScreenPos(); - float pulseSize = 20 * pulseScale; - drawList.AddCircleFilled(pulsePos + new Vector2(50, 50), pulseSize, - ImGui.ColorConvertFloat4ToU32(new Vector4(0.5f, 0, 1, 0.7f))); - ImGui.Dummy(new Vector2(100, 100)); - - ImGui.Separator(); - - // Animation controls - ImGui.Text("Animation Controls:"); - ImGui.SliderFloat("Text Speed", ref textSpeed, 10.0f, 200.0f); - - // Animated text (simplified) - ImGui.Text("Animated text effects:"); - for (int i = 0; i < 20; i++) - { - float wave = (MathF.Sin((animationTime * 3.0f) + (i * 0.5f)) * 0.5f) + 0.5f; - ImGui.TextColored(new Vector4(wave, 1.0f - wave, 0.5f, 1.0f), i % 5 == 4 ? " " : "▓"); - if (i % 5 != 4) - { - ImGui.SameLine(); - } - } - - ImGui.EndTabItem(); - } - } - - private static void RenderUtilityTab() - { - if (ImGui.BeginTabItem("Utilities & Tools")) - { - // File operations - ImGui.Text("File Operations:"); - ImGui.InputText("File Path", ref filePath, 256); - ImGui.SameLine(); - if (ImGui.Button("Load") && !string.IsNullOrEmpty(filePath)) - { - try - { - fileContent = File.ReadAllText(filePath); - } - catch (Exception ex) when (ex is FileNotFoundException or UnauthorizedAccessException) - { - // Handle file read errors gracefully - fileContent = $"Error loading file: {ex.Message}"; - } - } - - if (!string.IsNullOrEmpty(fileContent)) - { - ImGui.Text("File Content Preview:"); - ImGui.TextWrapped(fileContent.Length > 500 ? fileContent[..500] + "..." : fileContent); - } - - ImGui.Separator(); - - // System information - ImGui.Text("System Information:"); - unsafe - { - byte* ptr = ImGui.GetVersion(); - int length = 0; - while (ptr[length] != 0) - { - length++; - } - ImGui.Text($"ImGui Version: {Encoding.UTF8.GetString(ptr, length)}"); - } - ImGui.Text($"Display Size: {ImGui.GetIO().DisplaySize}"); - - ImGui.Separator(); - - // Debugging tools - ImGui.Text("Debug Tools:"); - if (ImGui.Button("Show ImGui Demo")) - { - showImGuiDemo = true; - } - ImGui.SameLine(); - if (ImGui.Button("Show Style Editor")) - { - showStyleEditor = true; - } - ImGui.SameLine(); - if (ImGui.Button("Show Metrics")) - { - showMetrics = true; - } - - ImGui.EndTabItem(); - } - } - - private static void RenderUnicodeTab() - { - if (ImGui.BeginTabItem("Unicode & Emojis")) - { - ImGui.TextWrapped("Unicode and Emoji Support (Enabled by Default)"); - ImGui.TextWrapped("ImGuiApp automatically includes support for Unicode characters and emojis. This feature works with your configured fonts."); - ImGui.Separator(); - - ImGui.Text("Basic ASCII: Hello World!"); - ImGui.Text("Accented characters: café, naïve, résumé"); - ImGui.Text("Mathematical symbols: ∞ ≠ ≈ ≤ ≥ ± × ÷ ∂ ∑ ∏ √ ∫"); - ImGui.Text("Currency symbols: $ € £ ¥ ₹ ₿"); - ImGui.Text("Arrows: ← → ↑ ↓ ↔ ↕ ⇐ ⇒ ⇑ ⇓"); - ImGui.Text("Geometric shapes: ■ □ ▲ △ ● ○ ◆ ◇ ★ ☆"); - ImGui.Text("Miscellaneous symbols: ♠ ♣ ♥ ♦ ☀ ☁ ☂ ☃ ♪ ♫"); - - ImGui.Separator(); - ImGui.Text("Full Emoji Range Support (if font supports them):"); - ImGui.Text("Faces: 😀 😃 😄 😁 😆 😅 😂 🤣 😊 😇 😍 😎 🤓 🧐 🤔 😴"); - ImGui.Text("Gestures: 👍 👎 👌 ✌️ 🤞 🤟 🤘 🤙 👈 👉 👆 👇 ☝️ ✋ 🤚 🖐"); - ImGui.Text("Objects: 🚀 💻 📱 🎸 🎨 🏆 🌟 💎 ⚡ 🔥 💡 🔧 ⚙️ 🔑 💰"); - ImGui.Text("Nature: 🌈 🌞 🌙 ⭐ 🌍 🌊 🌳 🌸 🦋 🐝 🐶 🐱 🦊 🐻 🐼"); - ImGui.Text("Food: 🍎 🍌 🍕 🍔 🍟 🍦 🎂 ☕ 🍺 🍷 🍓 🥑 🥨 🧀 🍯"); - ImGui.Text("Transport: 🚗 🚂 ✈️ 🚲 🚢 🚁 🚌 🏍️ 🛸 🚜 🏎️ 🚙 🚕 🚐"); - ImGui.Text("Activities: ⚽ 🏀 🏈 ⚾ 🎾 🏐 🏉 🎱 🏓 🏸 🥊 ⛳ 🎯 🎪"); - ImGui.Text("Weather: ☀️ ⛅ ☁️ 🌤️ ⛈️ 🌧️ ❄️ ☃️ ⛄ 🌬️ 💨 🌊 💧"); - ImGui.Text("Symbols: ❤️ 💚 💙 💜 🖤 💛 💔 ❣️ 💕 💖 💗 💘 💝 ✨"); - ImGui.Text("Arrows: ← → ↑ ↓ ↔ ↕ ↖ ↗ ↘ ↙ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃"); - ImGui.Text("Math: ± × ÷ = ≠ ≈ ≤ ≥ ∞ √ ∑ ∏ ∂ ∫ Ω π α β γ δ"); - ImGui.Text("Geometric: ■ □ ▲ △ ● ○ ◆ ◇ ★ ☆ ♠ ♣ ♥ ♦ ▪ ▫ ◾ ◽"); - ImGui.Text("Currency: $ € £ ¥ ₹ ₿ ¢ ₽ ₩ ₡ ₪ ₫ ₱ ₴ ₦ ₨ ₵"); - ImGui.Text("Dingbats: ✂ ✈ ☎ ⌚ ⏰ ⏳ ⌛ ⚡ ☔ ☂ ☀ ⭐ ☁ ⛅ ❄"); - ImGui.Text("Enclosed: ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ"); - - ImGui.Separator(); - ImGui.TextWrapped("Note: Character display depends on your configured font's Unicode support. " + - "If characters show as question marks, your font may not include those glyphs."); - - ImGui.Separator(); - ImGui.TextWrapped("To disable Unicode support (ASCII only), set EnableUnicodeSupport = false in your ImGuiAppConfig."); - - ImGui.EndTabItem(); - } - } - - private static void RenderNerdFontTab() - { - if (ImGui.BeginTabItem("Nerd Fonts")) - { - ImGui.TextWrapped("Nerd Font Icons (Patched Fonts)"); - ImGui.TextWrapped("This tab demonstrates Nerd Font icons if you're using a Nerd Font (like JetBrains Mono Nerd Font, Fira Code Nerd Font, etc.)."); - ImGui.Separator(); - - // Powerline symbols - ImGui.Text("Powerline Symbols:"); - ImGui.Text("Basic: \uE0A0 \uE0A1 \uE0A2 \uE0B0 \uE0B1 \uE0B2 \uE0B3"); - ImGui.Text("Extra: \uE0A3 \uE0B4 \uE0B5 \uE0B6 \uE0B7 \uE0B8 \uE0CA \uE0CC \uE0CD \uE0D0 \uE0D1 \uE0D4"); - - ImGui.Separator(); - - // Font Awesome icons - ImGui.Text("Font Awesome Icons:"); - ImGui.Text("Files & Folders: \uF07B \uF07C \uF15B \uF15C \uF016 \uF017 \uF019 \uF01A \uF093 \uF095"); - ImGui.Text("Git & Version Control: \uF1D3 \uF1D2 \uF126 \uF127 \uF128 \uF129 \uF12A \uF12B"); - ImGui.Text("Media & UI: \uF04B \uF04C \uF04D \uF050 \uF051 \uF048 \uF049 \uF067 \uF068 \uF00C \uF00D"); - - ImGui.Separator(); - - // Material Design icons - ImGui.Text("Material Design Icons:"); - ImGui.Text("Navigation: \uF52A \uF52B \uF544 \uF53F \uF540 \uF541 \uF542 \uF543"); - ImGui.Text("Actions: \uF8D5 \uF8D6 \uF8D7 \uF8D8 \uF8D9 \uF8DA \uF8DB \uF8DC"); - ImGui.Text("Content: \uF1C1 \uF1C2 \uF1C3 \uF1C4 \uF1C5 \uF1C6 \uF1C7 \uF1C8"); - - ImGui.Separator(); - - // Weather icons - ImGui.Text("Weather Icons:"); - ImGui.Text("Basic Weather: \uE30D \uE30E \uE30F \uE310 \uE311 \uE312 \uE313 \uE314"); - ImGui.Text("Temperature: \uE315 \uE316 \uE317 \uE318 \uE319 \uE31A \uE31B \uE31C"); - ImGui.Text("Wind & Pressure: \uE31D \uE31E \uE31F \uE320 \uE321 \uE322 \uE323 \uE324"); - - ImGui.Separator(); - - // Devicons - ImGui.Text("Developer Icons (Devicons):"); - ImGui.Text("Languages: \uE73C \uE73D \uE73E \uE73F \uE740 \uE741 \uE742 \uE743"); // Various programming languages - ImGui.Text("Frameworks: \uE744 \uE745 \uE746 \uE747 \uE748 \uE749 \uE74A \uE74B"); - ImGui.Text("Tools: \uE74C \uE74D \uE74E \uE74F \uE750 \uE751 \uE752 \uE753"); - - ImGui.Separator(); - - // Octicons - ImGui.Text("Octicons (GitHub Icons):"); - ImGui.Text("Version Control: \uF418 \uF419 \uF41A \uF41B \uF41C \uF41D \uF41E \uF41F"); - ImGui.Text("Issues & PRs: \uF420 \uF421 \uF422 \uF423 \uF424 \uF425 \uF426 \uF427"); - ImGui.Text("Social: \u2665 \u26A1 \uF428 \uF429 \uF42A \uF42B \uF42C \uF42D"); - - ImGui.Separator(); - - // Font Logos - ImGui.Text("Brand Logos (Font Logos):"); - ImGui.Text("Tech Brands: \uF300 \uF301 \uF302 \uF303 \uF304 \uF305 \uF306 \uF307"); - ImGui.Text("More Logos: \uF308 \uF309 \uF30A \uF30B \uF30C \uF30D \uF30E \uF30F"); - - ImGui.Separator(); - - // Pomicons - ImGui.Text("Pomicons:"); - ImGui.Text("Small Icons: \uE000 \uE001 \uE002 \uE003 \uE004 \uE005 \uE006 \uE007"); - ImGui.Text("More Icons: \uE008 \uE009 \uE00A \uE00B \uE00C \uE00D"); - - ImGui.Separator(); - ImGui.TextWrapped("Note: These icons will only display correctly if you're using a Nerd Font. " + - "If you see question marks or boxes, switch to a Nerd Font like 'JetBrains Mono Nerd Font' or 'Fira Code Nerd Font'."); - - ImGui.Separator(); - ImGui.TextWrapped("Popular Nerd Fonts: JetBrains Mono Nerd Font, Fira Code Nerd Font, Hack Nerd Font, " + - "Source Code Pro Nerd Font, DejaVu Sans Mono Nerd Font, and many more at nerdfonts.com"); - - ImGui.EndTabItem(); - } - } - - private static void RenderModalAndPopups() - { - // Modal dialog - if (showModal) - { - ImGui.OpenPopup("Demo Modal"); - showModal = false; - } - - if (ImGui.BeginPopupModal("Demo Modal", ref showModal)) - { - ImGui.Text("This is a modal dialog."); - ImGui.Text("It blocks interaction with the main window."); - ImGui.Separator(); - - ImGui.InputText("Input", ref modalInputBuffer, 100); - - if (ImGui.Button("OK")) - { - modalResult = $"You entered: {modalInputBuffer}"; - ImGui.CloseCurrentPopup(); - } - ImGui.SameLine(); - if (ImGui.Button("Cancel")) - { - modalResult = "Cancelled"; - ImGui.CloseCurrentPopup(); - } - - ImGui.EndPopup(); - } - - // Context popup - if (showPopup) - { - ImGui.OpenPopup("Demo Popup"); - showPopup = false; - } - - if (ImGui.BeginPopup("Demo Popup")) - { - ImGui.Text("This is a popup menu"); - if (ImGui.MenuItem("Option 1")) - { - // Handle option 1 - } - if (ImGui.MenuItem("Option 2")) - { - // Handle option 2 - } - ImGui.Separator(); - if (ImGui.MenuItem("Close")) - { - // Handle close - } - ImGui.EndPopup(); - } - } - - private static void UpdateAnimations(float dt) - { - animationTime += dt; - - // Bouncing animation - bounceOffset = MathF.Abs(MathF.Sin(animationTime * 3)) * 50; - - // Pulse animation - pulseScale = 0.8f + (0.4f * MathF.Sin(animationTime * 4)); - } - - private static void RenderAboutWindow() - { - ImGui.Begin("About ImGuiApp Demo", ref showAbout); - ImGui.Text("ImGuiApp Demo Application"); - ImGui.Separator(); - ImGui.Text("This demo showcases extensive ImGui.NET features including:"); - ImGui.BulletText("Basic and advanced widgets"); - ImGui.BulletText("Layout systems (columns, tables, tabs)"); - ImGui.BulletText("Custom graphics and drawing"); - ImGui.BulletText("Data visualization and plotting"); - ImGui.BulletText("Input handling and interaction"); - ImGui.BulletText("Animations and effects"); - ImGui.BulletText("File operations and utilities"); - ImGui.Separator(); - ImGui.Text("Built with:"); - ImGui.BulletText("Hexa.NET.ImGui"); - ImGui.BulletText("Silk.NET"); - ImGui.BulletText("ktsu.ImGui Framework"); - ImGui.End(); - } - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Security", "CA5394:Do not use insecure randomness", Justification = "This is a demo application")] - private static void UpdatePlotData(float dt) - { - plotRefreshTime += dt; - if (plotRefreshTime >= 0.1f) // Update every 100ms - { - plotRefreshTime = 0; - plotValues.Add((float)random.NextDouble()); - if (plotValues.Count > 100) // Keep last 100 values - { - plotValues.RemoveAt(0); - } - } - } - - private static void OnAppMenu() - { - if (ImGui.BeginMenu("View")) - { - ImGui.MenuItem("ImGui Demo", string.Empty, ref showImGuiDemo); - ImGui.MenuItem("Style Editor", string.Empty, ref showStyleEditor); - ImGui.MenuItem("Metrics", string.Empty, ref showMetrics); - ImGui.EndMenu(); - } - - if (ImGui.BeginMenu("Help")) - { - ImGui.MenuItem("About", string.Empty, ref showAbout); - ImGui.EndMenu(); - } - } -} diff --git a/examples/ImGuiAppDemo/ImGuiAppDemo.csproj b/examples/ImGuiAppDemo/ImGuiAppDemo.csproj deleted file mode 100644 index 04e5f5d..0000000 --- a/examples/ImGuiAppDemo/ImGuiAppDemo.csproj +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - net9.0 - - true - - - - Always - - - - - - - - - - - - - True - True - Resources.resx - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - diff --git a/examples/ImGuiAppDemo/Properties/Resources.Designer.cs b/examples/ImGuiAppDemo/Properties/Resources.Designer.cs deleted file mode 100644 index 8a95982..0000000 --- a/examples/ImGuiAppDemo/Properties/Resources.Designer.cs +++ /dev/null @@ -1,73 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace ktsu.ImGui.Examples.App.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ktsu.examples.ImGuiAppDemo.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] CARDCHAR { - get { - object obj = ResourceManager.GetObject("CARDCHAR", resourceCulture); - return ((byte[])(obj)); - } - } - } -} diff --git a/examples/ImGuiAppDemo/Properties/Resources.resx b/examples/ImGuiAppDemo/Properties/Resources.resx deleted file mode 100644 index b4c27e0..0000000 --- a/examples/ImGuiAppDemo/Properties/Resources.resx +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\res\CARDCHAR.TTF;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - diff --git a/examples/ImGuiAppDemo/Properties/launchSettings.json b/examples/ImGuiAppDemo/Properties/launchSettings.json deleted file mode 100644 index c8b4046..0000000 --- a/examples/ImGuiAppDemo/Properties/launchSettings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "profiles": { - "ImGuiAppDemo": { - "commandName": "Project", - "nativeDebugging": true - } - } -} diff --git a/examples/ImGuiAppDemo/icon.png b/examples/ImGuiAppDemo/icon.png deleted file mode 100644 index 4372ef9..0000000 --- a/examples/ImGuiAppDemo/icon.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c4e44138de3ba76f7cb223da53de6bee3e72b9df281bec812b86b2da6f1aaf37 -size 16069 diff --git a/examples/ImGuiAppDemo/res/CARDCHAR.TTF b/examples/ImGuiAppDemo/res/CARDCHAR.TTF deleted file mode 100644 index 300bec5982a04379273e1141cf0260e377b4767a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39136 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 diff --git a/examples/ImGuiAppDemo/res/CARDCHAR.TXT b/examples/ImGuiAppDemo/res/CARDCHAR.TXT deleted file mode 100644 index 7a2c656..0000000 --- a/examples/ImGuiAppDemo/res/CARDCHAR.TXT +++ /dev/null @@ -1 +0,0 @@ -CARD CHARACTERS computer font v1.0 2003 Harold Lohner HLohner@aol.com www.haroldsfonts.com Based on the characters on a standard deck of Bicycle playing cards. Find the suits at [ diamond ] club { heart } spade \ No newline at end of file diff --git a/examples/ImGuiPopupsDemo/ImGuiPopupsDemo.cs b/examples/ImGuiPopupsDemo/ImGuiPopupsDemo.cs deleted file mode 100644 index 7c044d0..0000000 --- a/examples/ImGuiPopupsDemo/ImGuiPopupsDemo.cs +++ /dev/null @@ -1,489 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Examples.Popups; - -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ImGui.App; -using ktsu.ImGui.Popups; - -internal static class ImGuiPopupsDemo -{ - private static void Main() - { - ImGuiApp.Start(new() - { - Title = "ImGui Popups Demo", - OnAppMenu = OnAppMenu, - OnMoveOrResize = OnMoveOrResize, - OnStart = OnStart, - OnRender = OnRender, - SaveIniSettings = false, - }); - } - - // Demo state variables - private static string stringInputValue = "Hello World"; - private static int intInputValue = 42; - private static float floatInputValue = 3.14159f; - private static string selectedFriend = "None"; - private static string selectedColor = "None"; - private static string lastFileOpened = "None"; - private static string lastFileSaved = "None"; - private static string lastDirectoryChosen = "None"; - private static string lastPromptResult = "None"; - private static string lastCustomModalResult = "None"; - - // Sample data - private static readonly string[] Friends = ["Alice", "Bob", "Charlie", "Diana", "Eve", "Frank", "Grace", "Henry", "Ivy", "Jack"]; - private static readonly string[] Colors = ["Red", "Green", "Blue", "Yellow", "Purple", "Orange", "Pink", "Cyan", "Magenta", "Brown"]; - - // Custom modal state variables - private static bool customCheckbox; - private static float customSlider = 0.5f; - private static readonly string[] advancedModalItems = ["Option 1", "Option 2", "Option 3", "Option 4"]; - private static int advancedModalSelectedItem; - private static Vector3 advancedModalColorValue = new(1.0f, 0.5f, 0.0f); - private static readonly bool[] advancedModalFlags = [true, false, true, false]; - - // Popup instances - private static readonly ImGuiPopups.InputString popupInputString = new(); - private static readonly ImGuiPopups.InputInt popupInputInt = new(); - private static readonly ImGuiPopups.InputFloat popupInputFloat = new(); - private static readonly ImGuiPopups.FilesystemBrowser popupFilesystemBrowser = new(); - private static readonly ImGuiPopups.MessageOK popupMessageOK = new(); - private static readonly ImGuiPopups.SearchableList popupSearchableListFriends = new(); - private static readonly ImGuiPopups.SearchableList popupSearchableListColors = new(); - private static readonly ImGuiPopups.Prompt popupPrompt = new(); - private static readonly ImGuiPopups.Modal popupCustomModal = new(); - - private static void OnStart() - { - } - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "")] - private static void OnRender(float dt) - { - ImGui.Text("ImGui Popups Library - Demo"); - ImGui.Text("This demo showcases all popup types and configurations available in the library."); - ImGui.Separator(); - - RenderInputPopupsSection(); - RenderMessageAndPromptSection(); - RenderSearchableListsSection(); - RenderFileSystemBrowserSection(); - RenderCustomModalSection(); - RenderAdvancedExamplesSection(); - RenderTipsSection(); - - // Show all open popups - ShowAllPopups(); - } - - private static void RenderInputPopupsSection() - { - if (ImGui.CollapsingHeader("Input Popups", ImGuiTreeNodeFlags.DefaultOpen)) - { - ImGui.Text("Input popups allow users to enter different types of values."); - ImGui.Spacing(); - - // String Input - ImGui.Text($"Current String Value: {stringInputValue}"); - if (ImGui.Button("Edit String")) - { - popupInputString.Open("Edit String Value", "Enter a new string:", stringInputValue, result => stringInputValue = result); - } - - ImGui.SameLine(); - if (ImGui.Button("Edit String (Custom Size)")) - { - popupInputString.Open("Edit String Value", "Enter a new string:", stringInputValue, result => stringInputValue = result, new Vector2(400, 150)); - } - - // Integer Input - ImGui.Text($"Current Integer Value: {intInputValue}"); - if (ImGui.Button("Edit Integer")) - { - popupInputInt.Open("Edit Integer Value", "Enter a new integer:", intInputValue, result => intInputValue = result); - } - - // Float Input - ImGui.Text($"Current Float Value: {floatInputValue:F5}"); - if (ImGui.Button("Edit Float")) - { - popupInputFloat.Open("Edit Float Value", "Enter a new float:", floatInputValue, result => floatInputValue = result); - } - - ImGui.Spacing(); - } - } - - private static void RenderMessageAndPromptSection() - { - if (ImGui.CollapsingHeader("Message & Prompt Popups", ImGuiTreeNodeFlags.DefaultOpen)) - { - ImGui.Text("Display messages and custom prompts with various configurations."); - ImGui.Spacing(); - - // Simple Message - if (ImGui.Button("Show Simple Message")) - { - popupMessageOK.Open("Information", "This is a simple informational message popup."); - } - - ImGui.SameLine(); - if (ImGui.Button("Show Long Message")) - { - string longMessage = @"This is a very long message that demonstrates text wrapping capabilities. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."; - - popupMessageOK.Open("Long Message", longMessage, ImGuiPopups.PromptTextLayoutType.Wrapped, new Vector2(500, 300)); - } - - // Custom Prompt with Multiple Buttons - ImGui.Text($"Last Prompt Result: {lastPromptResult}"); - if (ImGui.Button("Show Custom Prompt")) - { - Dictionary buttons = new() - { - { "Yes", () => lastPromptResult = "User clicked Yes" }, - { "No", () => lastPromptResult = "User clicked No" }, - { "Maybe", () => lastPromptResult = "User clicked Maybe" }, - { "Cancel", () => lastPromptResult = "User clicked Cancel" } - }; - popupPrompt.Open("Confirmation", "Do you want to proceed with this action?", buttons); - } - - ImGui.SameLine(); - if (ImGui.Button("Show Warning Prompt")) - { - Dictionary buttons = new() - { - { "Delete", () => lastPromptResult = "User confirmed deletion" }, - { "Cancel", () => lastPromptResult = "User cancelled deletion" } - }; - string warning = "⚠️ WARNING: This action cannot be undone!\n\nAre you sure you want to delete all selected files?"; - popupPrompt.Open("Confirm Deletion", warning, buttons, ImGuiPopups.PromptTextLayoutType.Wrapped, new Vector2(400, 200)); - } - - ImGui.Spacing(); - } - } - - private static void RenderSearchableListsSection() - { - if (ImGui.CollapsingHeader("Searchable Lists", ImGuiTreeNodeFlags.DefaultOpen)) - { - ImGui.Text("Select items from searchable and filterable lists."); - ImGui.Spacing(); - - ImGui.Text($"Selected Friend: {selectedFriend}"); - if (ImGui.Button("Choose Friend")) - { - popupSearchableListFriends.Open("Choose Friend", "Select your best friend:", Friends, result => selectedFriend = result); - } - - ImGui.SameLine(); - if (ImGui.Button("Choose Friend (Custom Size)")) - { - popupSearchableListFriends.Open("Choose Friend", "Select your best friend:", Friends, null, null, result => selectedFriend = result, new Vector2(350, 400)); - } - - ImGui.Text($"Selected Color: {selectedColor}"); - if (ImGui.Button("Choose Color")) - { - popupSearchableListColors.Open("Choose Color", "Select your favorite color:", Colors, - item => $"🎨 {item}", result => selectedColor = result); - } - - ImGui.Spacing(); - } - } - - private static void RenderFileSystemBrowserSection() - { - if (ImGui.CollapsingHeader("File System Browser", ImGuiTreeNodeFlags.DefaultOpen)) - { - ImGui.Text("Browse and select files or directories with filtering support."); - ImGui.Spacing(); - - // File Operations - ImGui.Text($"Last File Opened: {lastFileOpened}"); - if (ImGui.Button("Open Any File")) - { - popupFilesystemBrowser.FileOpen("Open File", file => lastFileOpened = file.ToString()); - } - - ImGui.SameLine(); - if (ImGui.Button("Open C# File")) - { - popupFilesystemBrowser.FileOpen("Open C# File", file => lastFileOpened = file.ToString(), "*.cs"); - } - - ImGui.SameLine(); - if (ImGui.Button("Open Image File")) - { - popupFilesystemBrowser.FileOpen("Open Image File", file => lastFileOpened = file.ToString(), new Vector2(600, 500), "*.{png,jpg,jpeg,gif,bmp}"); - } - - ImGui.Text($"Last File Saved: {lastFileSaved}"); - if (ImGui.Button("Save Text File")) - { - popupFilesystemBrowser.FileSave("Save Text File", file => lastFileSaved = file.ToString(), "*.txt"); - } - - ImGui.SameLine(); - if (ImGui.Button("Save Any File")) - { - popupFilesystemBrowser.FileSave("Save File", file => lastFileSaved = file.ToString()); - } - - // Directory Operations - ImGui.Text($"Last Directory Chosen: {lastDirectoryChosen}"); - if (ImGui.Button("Choose Directory")) - { - popupFilesystemBrowser.ChooseDirectory("Choose Directory", directory => lastDirectoryChosen = directory.ToString()); - } - - ImGui.SameLine(); - if (ImGui.Button("Choose Directory (Large)")) - { - popupFilesystemBrowser.ChooseDirectory("Choose Directory", directory => lastDirectoryChosen = directory.ToString(), new Vector2(700, 600)); - } - - ImGui.Spacing(); - } - } - - private static void RenderCustomModalSection() - { - if (ImGui.CollapsingHeader("Custom Modal", ImGuiTreeNodeFlags.DefaultOpen)) - { - ImGui.Text("Create completely custom modal content with full control."); - ImGui.Spacing(); - - ImGui.Text($"Last Custom Modal Result: {lastCustomModalResult}"); - if (ImGui.Button("Show Custom Modal")) - { - popupCustomModal.Open("Custom Modal Example", ShowCustomModalContent); - } - - ImGui.SameLine(); - if (ImGui.Button("Show Custom Modal (Large)")) - { - popupCustomModal.Open("Advanced Custom Modal", ShowAdvancedCustomModalContent, new Vector2(600, 400)); - } - - ImGui.Spacing(); - } - } - - private static void RenderAdvancedExamplesSection() - { - if (ImGui.CollapsingHeader("Advanced Examples")) - { - ImGui.Text("Complex usage patterns and edge cases."); - ImGui.Spacing(); - - if (ImGui.Button("Nested Popup Example")) - { - popupMessageOK.Open("First Popup", "This popup will open another popup when you click OK."); - } - - ImGui.SameLine(); - if (ImGui.Button("Validation Example")) - { - popupInputString.Open("Enter Email", "Please enter a valid email address:", "", result => - { - if (result.Contains('@') && result.Contains('.')) - { - stringInputValue = result; - popupMessageOK.Open("Success", $"Email '{result}' is valid!"); - } - else - { - popupMessageOK.Open("Error", "Invalid email format! Please try again."); - } - }); - } - - if (ImGui.Button("Multi-Step Workflow")) - { - StartMultiStepWorkflow(); - } - - ImGui.Spacing(); - } - } - - private static void RenderTipsSection() - { - if (ImGui.CollapsingHeader("Tips & Features")) - { - ImGui.TextWrapped("• Press ESC to close any popup"); - ImGui.TextWrapped("• Use TAB to navigate between input fields"); - ImGui.TextWrapped("• Enter key confirms string inputs"); - ImGui.TextWrapped("• Double-click items in file browser to open/navigate"); - ImGui.TextWrapped("• Type to search in searchable lists"); - ImGui.TextWrapped("• All popups support custom sizing"); - ImGui.TextWrapped("• Text can be wrapped or unformatted"); - ImGui.TextWrapped("• File browser supports glob patterns for filtering"); - } - } - - private static void ShowCustomModalContent() - { - ImGui.Text("This is a custom modal with your own content!"); - ImGui.Separator(); - - ImGui.Checkbox("Custom Checkbox", ref customCheckbox); - ImGui.SliderFloat("Custom Slider", ref customSlider, 0.0f, 1.0f); - - ImGui.NewLine(); - - if (ImGui.Button("Set Result")) - { - lastCustomModalResult = $"Checkbox: {customCheckbox}, Slider: {customSlider:F2}"; - ImGui.CloseCurrentPopup(); - } - - ImGui.SameLine(); - if (ImGui.Button("Close")) - { - lastCustomModalResult = "User closed without setting result"; - ImGui.CloseCurrentPopup(); - } - } - - private static void ShowAdvancedCustomModalContent() - { - ImGui.Text("Advanced Custom Modal with Multiple Controls"); - ImGui.Separator(); - - ImGui.Combo("Select Option", ref advancedModalSelectedItem, advancedModalItems, advancedModalItems.Length); - ImGui.ColorEdit3("Color Picker", ref advancedModalColorValue); - - ImGui.Text("Flags:"); - for (int i = 0; i < advancedModalFlags.Length; i++) - { - ImGui.Checkbox($"Flag {i + 1}", ref advancedModalFlags[i]); - if (i < advancedModalFlags.Length - 1) - { - ImGui.SameLine(); - } - } - - ImGui.Separator(); - - if (ImGui.Button("Apply Settings")) - { - lastCustomModalResult = $"Selected: {advancedModalItems[advancedModalSelectedItem]}, Color: RGB({advancedModalColorValue.X:F2}, {advancedModalColorValue.Y:F2}, {advancedModalColorValue.Z:F2})"; - ImGui.CloseCurrentPopup(); - } - - ImGui.SameLine(); - if (ImGui.Button("Reset")) - { - advancedModalSelectedItem = 0; - advancedModalColorValue = new Vector3(1.0f, 0.5f, 0.0f); - for (int i = 0; i < advancedModalFlags.Length; i++) - { - advancedModalFlags[i] = i % 2 == 0; - } - } - - ImGui.SameLine(); - if (ImGui.Button("Cancel")) - { - lastCustomModalResult = "User cancelled"; - ImGui.CloseCurrentPopup(); - } - } - - private static void StartMultiStepWorkflow() - { - popupInputString.Open("Step 1: Enter Name", "What's your name?", "", name => - { - if (string.IsNullOrWhiteSpace(name)) - { - popupMessageOK.Open("Error", "Name cannot be empty!"); - return; - } - - popupSearchableListFriends.Open("Step 2: Choose Friend", $"Hi {name}! Who would you like to invite?", Friends, friend => - { - Dictionary buttons = new() - { - { "Send Invitation", () => - { - lastPromptResult = $"Invitation sent to {friend} from {name}"; - popupMessageOK.Open("Success", $"Invitation sent to {friend}!"); - } - }, - { "Cancel", () => lastPromptResult = "Workflow cancelled" } - }; - - popupPrompt.Open("Step 3: Confirm", $"{name}, send invitation to {friend}?", buttons); - }); - }); - } - - private static void ShowAllPopups() - { - // Show all popup instances - popupInputString.ShowIfOpen(); - popupInputInt.ShowIfOpen(); - popupInputFloat.ShowIfOpen(); - popupMessageOK.ShowIfOpen(); - popupSearchableListFriends.ShowIfOpen(); - popupSearchableListColors.ShowIfOpen(); - popupPrompt.ShowIfOpen(); - popupFilesystemBrowser.ShowIfOpen(); - popupCustomModal.ShowIfOpen(); - } - - private static void OnAppMenu() - { - if (ImGui.BeginMenu("Demo")) - { - if (ImGui.MenuItem("Reset All Values")) - { - stringInputValue = "Hello World"; - intInputValue = 42; - floatInputValue = 3.14159f; - selectedFriend = "None"; - selectedColor = "None"; - lastFileOpened = "None"; - lastFileSaved = "None"; - lastDirectoryChosen = "None"; - lastPromptResult = "None"; - lastCustomModalResult = "None"; - } - - if (ImGui.MenuItem("About")) - { - popupMessageOK.Open("About ImGui Popups Demo", - "ImGui Popups Library Demo\n\nThis comprehensive demo showcases all features of the ktsu.ImGuiPopups library, including:\n\n" + - "• Input popups for strings, integers, and floats\n" + - "• Message and confirmation prompts\n" + - "• Searchable list selection\n" + - "• File and directory browsers\n" + - "• Custom modal content\n" + - "• Advanced usage patterns\n\n" + - "Press ESC to close any popup, or use the provided buttons.", - ImGuiPopups.PromptTextLayoutType.Wrapped, - new Vector2(450, 350)); - } - - ImGui.EndMenu(); - } - } - - private static void OnMoveOrResize() - { - // Method intentionally left empty. - } -} diff --git a/examples/ImGuiPopupsDemo/ImGuiPopupsDemo.csproj b/examples/ImGuiPopupsDemo/ImGuiPopupsDemo.csproj deleted file mode 100644 index cb6779e..0000000 --- a/examples/ImGuiPopupsDemo/ImGuiPopupsDemo.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - net9.0 - - - - - - - - diff --git a/examples/ImGuiStylerDemo/ImGuiStylerDemo.cs b/examples/ImGuiStylerDemo/ImGuiStylerDemo.cs deleted file mode 100644 index 0a7535a..0000000 --- a/examples/ImGuiStylerDemo/ImGuiStylerDemo.cs +++ /dev/null @@ -1,972 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Examples.Styler; - -using System.Collections.Generic; -using System.Linq; -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ImGui.App; -using ktsu.ImGui.Styler; -using ktsu.ThemeProvider; - -/// -/// Comprehensive demonstration of the ImGuiStyler library capabilities. -/// -internal sealed class ImGuiStylerDemo -{ - private static bool valueBool = true; - private static bool valueBool2; - private static int valueInt = 42; - private static string valueString = "Hello ImGuiStyler!"; - private static float valueFloat = 0.5f; - private static float valueFloat2 = 0.75f; - private static int selectedFamily; - private static readonly float[] colorValue = [0.4f, 0.7f, 0.0f, 1.0f]; - private static readonly string[] comboItems = ["Option A", "Option B", "Option C", "Option D"]; - private static int comboSelection; - private static int radioSelection = 1; - private static readonly float[] plotData = [0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f]; - - // Form validation fields - private static string formUsername = ""; - private static string formEmail = ""; - - // Use ThemeProvider registry for all available themes - private static readonly List availableThemes = [.. Theme.AllThemes]; - private static readonly List availableFamilies = [.. Theme.Families.OrderBy(f => f)]; - - // Store the currently selected theme instead of applying it globally - private static ThemeRegistry.ThemeInfo? currentSelectedTheme; - - private static void Main() - { - ImGuiStylerDemo demo = new(); - ImGuiApp.Start(new() - { - Title = "ImGuiStyler Demo - Comprehensive Theme & Color Showcase", - OnAppMenu = demo.OnAppMenu, - OnMoveOrResize = demo.OnMoveOrResize, - OnRender = demo.OnRender, - OnStart = demo.OnStart, - FrameWrapperFactory = () => currentSelectedTheme is null ? null : new ScopedTheme(currentSelectedTheme.CreateInstance()), - SaveIniSettings = false, - }); - } - - private void OnStart() - { - // Keep default ImGui styling - we'll use scoped themes for demonstration - // currentSelectedTheme starts as null, so we'll show default styling - } - - private void OnRender(float dt) - { - // Header with current theme info - if (currentSelectedTheme is not null) - { - ImGui.Text($"🎨 Current Theme: {currentSelectedTheme.Name}"); - ImGui.SameLine(); - ImGui.Text($"({(currentSelectedTheme.IsDark ? "Dark" : "Light")})"); - } - else - { - ImGui.Text("🎨 Current Theme: Default (Reset)"); - } - - ImGui.Separator(); - - // Render the library's theme selection dialog if it's open - // This now returns true if a theme was changed during modal interaction - if (Theme.RenderThemeSelector()) - { - // Theme was changed via the modal browser - respond to the change - if (Theme.CurrentThemeName is null) - { - Console.WriteLine("Theme reset to default via modal"); - currentSelectedTheme = null; // Update our local selection - } - else - { - Console.WriteLine($"Theme changed via modal to: {Theme.CurrentThemeName}"); - // Find and store the corresponding theme info - currentSelectedTheme = availableThemes.FirstOrDefault(t => t.Name == Theme.CurrentThemeName); - } - } - - if (ImGui.BeginTabBar("DemoTabs")) - { - if (ImGui.BeginTabItem("🎨 Theme Gallery")) - { - ShowThemeGallery(); - ImGui.EndTabItem(); - } - - if (ImGui.BeginTabItem("🎨 Color Palettes")) - { - ShowColorPalettesDemo(); - ImGui.EndTabItem(); - } - - if (ImGui.BeginTabItem("🔍 Complete Theme Palette")) - { - ShowCompleteThemePalette(); - ImGui.EndTabItem(); - } - - if (ImGui.BeginTabItem("🖱️ Widget Showcase")) - { - ShowWidgetShowcase(); - ImGui.EndTabItem(); - } - - if (ImGui.BeginTabItem("💡 Interactive Examples")) - { - ShowInteractiveExamples(); - ImGui.EndTabItem(); - } - - if (ImGui.BeginTabItem("📚 Documentation")) - { - ShowDocumentationDemo(); - ImGui.EndTabItem(); - } - - ImGui.EndTabBar(); - } - } - - private static void ShowThemeGallery() - { - ImGui.TextUnformatted("🎨 Theme Gallery"); - ImGui.Text("Explore all available themes from the ThemeProvider registry."); - ImGui.Separator(); - - // Theme family selector - ImGui.Text("Filter by Family:"); - if (ImGui.Combo("##Family", ref selectedFamily, ["All", .. availableFamilies], availableFamilies.Count + 1)) - { - // selectedTheme = 0; // Reset selection when family changes - } - - ImGui.Separator(); - - // Get filtered themes - IEnumerable filteredThemes = selectedFamily == 0 - ? availableThemes - : availableThemes.Where(t => t.Family == availableFamilies[selectedFamily - 1]); - - List themesToShow = [.. filteredThemes]; - - // Theme grid - ImGui.Text($"Available Themes ({themesToShow.Count}):"); - - // Add reset button - if (ImGui.Button("Reset to Default")) - { - currentSelectedTheme = null; - } - ImGui.SameLine(); - ImGui.Text("(or click a theme below to apply it)"); - - ImGui.BeginChild("ThemeGrid", new Vector2(0, 300), ImGuiChildFlags.Borders); - - // Use the new delegate-based ThemeCard widget from the library - ThemeCard.RenderGrid(themesToShow, selectedTheme => currentSelectedTheme = selectedTheme); - - ImGui.EndChild(); - - ImGui.Separator(); - - // Quick theme preview with widgets - ImGui.Text("Theme Preview:"); - ImGui.BeginChild("PreviewArea", new Vector2(0, 200), ImGuiChildFlags.Borders); - - ImGui.Text("Sample UI Elements:"); - if (ImGui.Button("Sample Button")) - { - // Button clicked - } - ImGui.SameLine(); - if (ImGui.SmallButton("Small")) - { - // Small button clicked - } - - ImGui.Checkbox("Sample Checkbox", ref valueBool); - ImGui.SliderFloat("Sample Slider", ref valueFloat, 0.0f, 1.0f); - ImGui.InputText("Sample Input", ref valueString, 128); - - ImGui.Text("Radio Buttons:"); - ImGui.RadioButton("Option 1", ref radioSelection, 0); - ImGui.SameLine(); - ImGui.RadioButton("Option 2", ref radioSelection, 1); - ImGui.SameLine(); - ImGui.RadioButton("Option 3", ref radioSelection, 2); - - ImGui.EndChild(); - } - - private static void ShowCompleteThemePalette() - { - ImGui.TextUnformatted("🔍 Complete Theme Palette"); - ImGui.Text("Explore every color available in the current theme using the new MakeCompletePalette API."); - ImGui.Separator(); - - // Check if a theme is active - IReadOnlyDictionary? completePalette = Theme.GetCurrentThemeCompletePalette(); - if (completePalette is null) - { - ImGui.TextWrapped("No theme is currently active. Select a theme from the Theme Gallery tab to see its complete palette."); - return; - } - - ImGui.Text($"Theme: {Theme.CurrentThemeName} - {completePalette.Count} colors available"); - ImGui.Separator(); - - // Help text moved above the table - ImGui.TextUnformatted("💡 Tip: Click on any color swatch to copy its hex value to clipboard"); - ImGui.TextUnformatted("💡 Hover over swatches to see detailed color information and usage examples"); - ImGui.TextUnformatted("⚙ Icon overlay shows contrast test using highest priority neutral color on all backgrounds"); - ImGui.TextUnformatted("📊 Table shows semantic meanings (rows) × priorities (columns, VeryLow→VeryHigh) for easy comparison"); - ImGui.Separator(); - - // Get all unique semantic meanings and priorities - HashSet allMeanings = [.. completePalette.Keys.Select(k => k.Meaning)]; - HashSet allPriorities = [.. completePalette.Keys.Select(k => k.Priority)]; - - // Sort meanings and priorities - List sortedMeanings = [.. allMeanings.OrderBy(m => m.ToString())]; - List sortedPriorities = [.. allPriorities.OrderBy(p => p)]; // Lowest first (inverted) - - // Find the highest priority neutral color for icon overlay - Priority? highestNeutralPriority = completePalette.Keys - .Where(k => k.Meaning == SemanticMeaning.Neutral) - .Select(k => k.Priority) - .DefaultIfEmpty() - .Max(); - - ImColor? neutralIconColor = null; - if (highestNeutralPriority.HasValue && - completePalette.TryGetValue(new(SemanticMeaning.Neutral, highestNeutralPriority.Value), out PerceptualColor neutralColor)) - { - neutralIconColor = Color.FromPerceptualColor(neutralColor); - } - - // Create table with semantic meanings as rows and priorities as columns - const float swatchWidth = 90.0f; - const float swatchHeight = 45.0f; - - // Calculate exact column count to avoid mismatches - int totalColumns = sortedPriorities.Count + 1; // +1 for semantic name column - - ImGui.BeginGroup(); - if (ImGui.BeginTable("ColorPaletteTable", totalColumns, ImGuiTableFlags.Borders | ImGuiTableFlags.RowBg)) - { - // Set up columns - ImGui.TableSetupColumn("Semantic", ImGuiTableColumnFlags.WidthFixed, 120.0f); - foreach (Priority priority in sortedPriorities) - { - ImGui.TableSetupColumn(priority.ToString(), ImGuiTableColumnFlags.WidthFixed, swatchWidth); - } - ImGui.TableHeadersRow(); - - // Create rows for each semantic meaning - be explicit about row count - for (int rowIndex = 0; rowIndex < sortedMeanings.Count; rowIndex++) - { - SemanticMeaning meaning = sortedMeanings[rowIndex]; - ImGui.TableNextRow(); - - // Column 0: Semantic meaning name - ImGui.TableSetColumnIndex(0); - ImGui.Text(meaning.ToString()); - - // Columns 1 to N: Color swatches for each priority - for (int colIndex = 0; colIndex < sortedPriorities.Count; colIndex++) - { - Priority priority = sortedPriorities[colIndex]; - ImGui.TableSetColumnIndex(colIndex + 1); // +1 because column 0 is semantic name - - SemanticColorRequest request = new(meaning, priority); - if (completePalette.TryGetValue(request, out PerceptualColor color)) - { - ImColor imColor = Color.FromPerceptualColor(color); - - // Color swatch button - Vector2 swatchButtonSize = new(swatchWidth, swatchHeight); - if (ImGui.ColorButton($"##swatch_{meaning}_{priority}", - imColor.Value, ImGuiColorEditFlags.None, swatchButtonSize)) - { - // Copy to clipboard on click - string hexColor = $"#{(int)(imColor.Value.X * 255):X2}{(int)(imColor.Value.Y * 255):X2}{(int)(imColor.Value.Z * 255):X2}"; - ImGui.SetClipboardText(hexColor); - } - - // Add icon overlay on all colors using highest priority neutral color - if (neutralIconColor.HasValue) - { - // Draw a test icon (gear/settings icon) over the color to show contrast - Vector2 swatchMin = ImGui.GetItemRectMin(); - Vector2 swatchMax = ImGui.GetItemRectMax(); - Vector2 iconPos = new( - swatchMin.X + ((swatchMax.X - swatchMin.X) * 0.5f), - swatchMin.Y + ((swatchMax.Y - swatchMin.Y) * 0.5f) - ); - - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - - // Draw a simple gear-like icon using text - string iconText = "⚙"; - Vector2 textSize = ImGui.CalcTextSize(iconText); - Vector2 textPos = new( - iconPos.X - (textSize.X * 0.5f), - iconPos.Y - (textSize.Y * 0.5f) - ); - - // Use the highest priority neutral color for the icon - drawList.AddText(textPos, ImGui.ColorConvertFloat4ToU32(neutralIconColor.Value.Value), iconText); - } - - // Tooltip - if (ImGui.IsItemHovered()) - { - Vector4 c = imColor.Value; - ImGui.SetTooltip($"Meaning: {meaning}\n" + - $"Priority: {priority}\n" + - $"RGBA: ({c.X:F3}, {c.Y:F3}, {c.Z:F3}, {c.W:F3})\n" + - $"Hex: #{(int)(c.X * 255):X2}{(int)(c.Y * 255):X2}{(int)(c.Z * 255):X2}\n" + - $"Usage: Theme.GetColor(new SemanticColorRequest(SemanticMeaning.{meaning}, Priority.{priority}))\n" + - $"Click to copy to clipboard"); - } - } - else - { - // Empty cell for missing color combinations - ensure we still occupy the cell space - ImGui.Dummy(new Vector2(swatchWidth, swatchHeight)); - } - } - } - - ImGui.EndTable(); - } - ImGui.EndGroup(); - } - - private static void ShowColorPalettesDemo() - { - ImGui.TextUnformatted("🎨 Color Palette System"); - ImGui.Text("Comprehensive color palette with theme-aware colors."); - ImGui.Separator(); - - // Basic Colors Palette - RenderColorPaletteSection("Basic Colors", [ - ("Red", Color.Palette.Basic.Red), - ("Green", Color.Palette.Basic.Green), - ("Blue", Color.Palette.Basic.Blue), - ("Yellow", Color.Palette.Basic.Yellow), - ("Cyan", Color.Palette.Basic.Cyan), - ("Magenta", Color.Palette.Basic.Magenta), - ("Orange", Color.Palette.Basic.Orange), - ("Pink", Color.Palette.Basic.Pink), - ("Lime", Color.Palette.Basic.Lime), - ("Purple", Color.Palette.Basic.Purple), - ]); - - // Semantic Colors Palette - RenderColorPaletteSection("Semantic Colors", [ - ("Error", Color.Palette.Semantic.Error), - ("Warning", Color.Palette.Semantic.Warning), - ("Success", Color.Palette.Semantic.Success), - ("Info", Color.Palette.Semantic.Info), - ("Primary", Color.Palette.Semantic.Primary), - ("Secondary", Color.Palette.Semantic.Secondary), - ]); - - // Neutral Colors Palette - RenderColorPaletteSection("Neutral Colors", [ - ("White", Color.Palette.Neutral.White), - ("Light Gray", Color.Palette.Neutral.LightGray), - ("Gray", Color.Palette.Neutral.Gray), - ("Dark Gray", Color.Palette.Neutral.DarkGray), - ("Black", Color.Palette.Neutral.Black), - ]); - - // Natural Colors Palette - RenderColorPaletteSection("Natural Colors", [ - ("Brown", Color.Palette.Natural.Brown), - ("Olive", Color.Palette.Natural.Olive), - ("Maroon", Color.Palette.Natural.Maroon), - ("Navy", Color.Palette.Natural.Navy), - ("Teal", Color.Palette.Natural.Teal), - ("Indigo", Color.Palette.Natural.Indigo), - ]); - - // Vibrant Colors Palette - RenderColorPaletteSection("Vibrant Colors", [ - ("Coral", Color.Palette.Vibrant.Coral), - ("Salmon", Color.Palette.Vibrant.Salmon), - ("Turquoise", Color.Palette.Vibrant.Turquoise), - ("Violet", Color.Palette.Vibrant.Violet), - ("Gold", Color.Palette.Vibrant.Gold), - ("Silver", Color.Palette.Vibrant.Silver), - ]); - - // Pastel Colors Palette - RenderColorPaletteSection("Pastel Colors", [ - ("Beige", Color.Palette.Pastel.Beige), - ("Peach", Color.Palette.Pastel.Peach), - ("Mint", Color.Palette.Pastel.Mint), - ("Lavender", Color.Palette.Pastel.Lavender), - ("Khaki", Color.Palette.Pastel.Khaki), - ("Plum", Color.Palette.Pastel.Plum), - ]); - - ImGui.Separator(); - - // Interactive color manipulation - ImGui.Text("🔧 Interactive Color Tools:"); - ImGui.ColorEdit4("Custom Color", ref colorValue[0]); - - // Show color variations - ImColor baseColor = Color.FromRGBA(colorValue[0], colorValue[1], colorValue[2], colorValue[3]); - ImGui.Text("Color Variations:"); - - ImGui.BeginGroup(); - RenderColorSwatch("Original", baseColor); - RenderColorSwatch("Darker", baseColor.MultiplyLuminance(0.7f)); - RenderColorSwatch("Lighter", baseColor.MultiplyLuminance(1.3f)); - RenderColorSwatch("Desaturated", baseColor.MultiplySaturation(0.5f)); - RenderColorSwatch("Saturated", baseColor.MultiplySaturation(1.5f)); - ImGui.EndGroup(); - } - - private static void RenderColorPaletteSection(string title, (string Name, ImColor Color)[] colors) - { - ImGui.Text($"• {title}:"); - ImGui.BeginGroup(); - - foreach ((string name, ImColor color) in colors) - { - RenderColorSwatch(name, color); - } - - ImGui.EndGroup(); - ImGui.Separator(); - } - - private static void RenderColorSwatch(string name, ImColor color) - { - Vector2 swatchSize = new(30, 25); - ImGui.ColorButton($"##{name}Swatch", color.Value, ImGuiColorEditFlags.None, swatchSize); - - if (ImGui.IsItemHovered()) - { - Vector4 c = color.Value; - ImGui.SetTooltip($"{name}\nRGBA: ({c.X:F2}, {c.Y:F2}, {c.Z:F2}, {c.W:F2})\nHex: #{(int)(c.X * 255):X2}{(int)(c.Y * 255):X2}{(int)(c.Z * 255):X2}"); - } - - ImGui.SameLine(); - ImGui.Text(name); - } - - private static void ShowWidgetShowcase() - { - ImGui.TextUnformatted("🖱️ Comprehensive Widget Showcase"); - ImGui.Text("All ImGui widgets styled with the current theme."); - ImGui.Separator(); - - // Layout in columns for better organization - ImGui.Columns(2, "WidgetColumns", true); - - // Column 1: Input widgets - ImGui.Text("📝 Input Widgets:"); - - ImGui.Button("Standard Button"); - ImGui.SameLine(); - ImGui.SmallButton("Small"); - - if (ImGui.ArrowButton("##left", ImGuiDir.Left)) - { - // Left arrow clicked - } - ImGui.SameLine(); - if (ImGui.ArrowButton("##right", ImGuiDir.Right)) - { - // Right arrow clicked - } - - ImGui.Checkbox("Checkbox", ref valueBool); - ImGui.Checkbox("Checkbox 2", ref valueBool2); - - ImGui.RadioButton("Radio A", ref radioSelection, 0); - ImGui.RadioButton("Radio B", ref radioSelection, 1); - ImGui.RadioButton("Radio C", ref radioSelection, 2); - - ImGui.SliderFloat("Slider", ref valueFloat, 0.0f, 1.0f); - ImGui.SliderFloat("Slider 2", ref valueFloat2, -10.0f, 10.0f); - ImGui.SliderInt("Int Slider", ref valueInt, 0, 100); - - ImGui.InputText("Text Input", ref valueString, 128); - - if (ImGui.BeginCombo("Combo", comboItems[comboSelection])) - { - for (int i = 0; i < comboItems.Length; i++) - { - bool isSelected = comboSelection == i; - if (ImGui.Selectable(comboItems[i], isSelected)) - { - comboSelection = i; - } - if (isSelected) - { - ImGui.SetItemDefaultFocus(); - } - } - ImGui.EndCombo(); - } - - ImGui.ColorEdit3("Color", ref colorValue[0]); - - ImGui.NextColumn(); - - // Column 2: Display widgets - ImGui.Text("📊 Display Widgets:"); - - ImGui.Text($"Current Values:"); - ImGui.BulletText($"Bool: {valueBool}"); - ImGui.BulletText($"Int: {valueInt}"); - ImGui.BulletText($"Float: {valueFloat:F2}"); - ImGui.BulletText($"String: {valueString}"); - - unsafe - { - fixed (float* plotPtr = plotData) - { - ImGui.PlotLines("##Plot"u8, plotPtr, plotData.Length, 0, "Sample Plot"u8, 0.0f, 1.0f, new Vector2(0, 80)); - } - } - - ImGui.ProgressBar(valueFloat, new Vector2(-1, 0), $"{valueFloat * 100:F0}%"); - - // Separator - ImGui.Separator(); - - // Tree node - if (ImGui.TreeNode("Tree Node"u8)) - { - ImGui.Text("Tree content"); - if (ImGui.TreeNode("Nested Node"u8)) - { - ImGui.Text("Nested content"); - ImGui.TreePop(); - } - ImGui.TreePop(); - } - - // Collapsing header - if (ImGui.CollapsingHeader("Collapsing Header"u8)) - { - ImGui.Text("Header content"); - ImGui.Indent(); - ImGui.Text("Indented text"); - ImGui.Unindent(); - } - - ImGui.Columns(1); - - // Full-width section - ImGui.Separator(); - ImGui.Text("📋 Tables & Lists:"); - - if (ImGui.BeginTable("DemoTable"u8, 3, ImGuiTableFlags.Borders | ImGuiTableFlags.Resizable | ImGuiTableFlags.RowBg)) - { - ImGui.TableSetupColumn("Column A"u8); - ImGui.TableSetupColumn("Column B"u8); - ImGui.TableSetupColumn("Column C"u8); - ImGui.TableHeadersRow(); - - for (int row = 0; row < 5; row++) - { - ImGui.TableNextRow(); - for (int col = 0; col < 3; col++) - { - ImGui.TableSetColumnIndex(col); - ImGui.Text($"Row {row}, Col {col}"); - } - } - ImGui.EndTable(); - } - } - - private static void ShowInteractiveExamples() - { - ImGui.TextUnformatted("💡 Interactive Theme Examples"); - ImGui.Text("See how themes affect real UI components and workflows."); - ImGui.Separator(); - - // Theme-aware text colors demonstration - ImGui.Text("🎨 Semantic Text Colors in Action:"); - ImGui.BeginChild("TextColorDemo", new Vector2(0, 120), ImGuiChildFlags.Borders); - - using (Text.Color.Error()) - { - ImGui.TextUnformatted("❌ Error: Connection failed!"); - } - - using (Text.Color.Warning()) - { - ImGui.TextUnformatted("⚠️ Warning: Low disk space"); - } - - using (Text.Color.Success()) - { - ImGui.TextUnformatted("✅ Success: File saved successfully"); - } - - using (Text.Color.Info()) - { - ImGui.TextUnformatted("ℹ️ Info: 5 items processed"); - } - - ImGui.EndChild(); - - ImGui.Separator(); - - // Scoped theming demonstration - ImGui.Text("🎯 Scoped Theme Applications:"); - - ImGui.Text("Normal themed section:"); - ImGui.Button("Normal Button"); - ImGui.SliderFloat("Normal Slider", ref valueFloat, 0.0f, 1.0f); - - ImGui.Separator(); - - ImGui.Text("Scoped color themes:"); - using (Theme.FromColor(Color.Palette.Semantic.Error)) - { - ImGui.Text("Error-themed section:"); - ImGui.Button("Danger Button"); - ImGui.ProgressBar(0.8f, new Vector2(-1, 0), "80% Critical"); - } - - using (Theme.FromColor(Color.Palette.Semantic.Success)) - { - ImGui.Text("Success-themed section:"); - ImGui.Button("Success Button"); - ImGui.ProgressBar(0.9f, new Vector2(-1, 0), "90% Complete"); - } - - ImGui.Separator(); - - // Form example with validation - ImGui.Text("📋 Form Example with Validation:"); - ImGui.BeginChild("FormExample", new Vector2(0, 150), ImGuiChildFlags.Borders); - - ImGui.Text("User Registration:"); - ImGui.InputText("Username", ref formUsername, 64); - - if (string.IsNullOrWhiteSpace(formUsername)) - { - using ScopedColor errorText = new(Color.Palette.Basic.Red); - ImGui.Text("❌ Required"); - } - else if (formUsername.Length < 3) - { - using ScopedColor warningText = new(Color.Palette.Basic.Yellow); - ImGui.Text("⚠ Username should be at least 3 characters"); - } - else - { - using ScopedColor successText = new(Color.Palette.Basic.Green); - ImGui.Text("✓ Username looks good"); - } - - ImGui.InputText("Email", ref formEmail, 128); - - bool validEmail = formEmail.Contains('@') && formEmail.Contains('.'); - if (!string.IsNullOrWhiteSpace(formEmail) && !validEmail) - { - using ScopedColor errorText = new(Color.Palette.Basic.Red); - ImGui.Text("⚠ Invalid email format"); - } - else if (validEmail) - { - using ScopedColor successText = new(Color.Palette.Basic.Green); - ImGui.Text("✓ Email looks valid"); - } - - bool canSubmit = !string.IsNullOrWhiteSpace(formUsername) && formUsername.Length >= 3 && validEmail; - - if (!canSubmit) - { - using (Theme.DisabledFromColor(Color.Palette.Neutral.Gray)) - { - ImGui.Button("Submit (Complete form first)"); - } - } - else - { - using (Theme.FromColor(Color.Palette.Semantic.Success)) - { - if (ImGui.Button("Submit Registration")) - { - // Handle submission - } - } - } - - ImGui.EndChild(); - - // Form validation example with basic colors - ImGui.Text("📝 Form with Validation:"); - ImGui.InputText("Username", ref formUsername, 64); - ImGui.SameLine(); - if (string.IsNullOrWhiteSpace(formUsername)) - { - using ScopedColor errorText = new(Color.Palette.Basic.Red); - ImGui.Text("❌ Required"); - } - else - { - using ScopedColor successText = new(Color.Palette.Basic.Green); - ImGui.Text("✅ Valid"); - } - - ImGui.InputText("Email", ref formEmail, 64); - ImGui.SameLine(); - if (string.IsNullOrWhiteSpace(formEmail) || !formEmail.Contains('@')) - { - using ScopedColor errorText = new(Color.Palette.Basic.Red); - ImGui.Text("❌ Invalid"); - } - else - { - using ScopedColor successText = new(Color.Palette.Basic.Green); - ImGui.Text("✅ Valid"); - } - - ImGui.Separator(); - - // Scoped Theme example - ImGui.Text("🎨 Scoped Theme Example:"); - ImGui.TextWrapped("The ScopedTheme class applies a complete semantic theme temporarily within a 'using' block, then automatically reverts to the original styling when the scope ends."); - - ImGui.Separator(); - ImGui.Text("Normal styling here..."); - - if (ImGui.Button("Normal Button")) - { - // Normal button styling - } - - // Apply a temporary theme for this section - if (availableThemes.Count > 0) - { - ThemeRegistry.ThemeInfo demoTheme = availableThemes[0]; // Use first available theme - - ImGui.Separator(); - ImGui.Text($"Section with {demoTheme.Name} theme applied using ScopedTheme:"); - - // This 'using' block applies the theme temporarily - using (new ScopedTheme(demoTheme.CreateInstance())) - { - if (ImGui.Button("Themed Button")) - { - // This button uses the scoped theme - } - - ImGui.SameLine(); - if (ImGui.SmallButton("Small Themed")) - { - // This button also uses the scoped theme - } - - ImGui.Checkbox("Themed Checkbox", ref valueBool2); - ImGui.SliderFloat("Themed Slider", ref valueFloat2, 0.0f, 1.0f); - - ImGui.Text("All UI elements in this block use the scoped theme colors!"); - } - // Theme automatically reverts here when the 'using' block ends - } - - ImGui.Separator(); - ImGui.Text("Back to normal styling automatically..."); - if (ImGui.Button("Normal Button Again")) - { - // Back to normal styling - } - - ImGui.TextWrapped("💡 Usage: using (new ScopedTheme(myTheme)) { /* themed UI here */ }"); - - ImGui.Separator(); - } - - private void OnAppMenu() - { - // Use the library's improved theme selector menu - if (Theme.RenderThemeSelectorMenu()) - { - // Theme changed - this is where you would save the current theme to settings - // For example: Settings.Theme = Theme.CurrentThemeName; - if (Theme.CurrentThemeName is null) - { - Console.WriteLine("Theme reset to default"); - currentSelectedTheme = null; // Update our local selection - } - else - { - Console.WriteLine($"Theme changed to: {Theme.CurrentThemeName}"); - // Find and store the corresponding theme info - currentSelectedTheme = availableThemes.FirstOrDefault(t => t.Name == Theme.CurrentThemeName); - } - } - - if (ImGui.BeginMenu("Help")) - { - if (ImGui.MenuItem("About ImGuiStyler")) - { - // Show about dialog - placeholder for demonstration - } - ImGui.EndMenu(); - } - } - - private static void ShowDocumentationDemo() - { - ImGui.TextUnformatted("📚 ImGuiStyler Documentation & Examples"); - ImGui.Separator(); - - ImGui.TextWrapped("ImGuiStyler provides comprehensive theming and styling capabilities for Dear ImGui applications. It integrates with ThemeProvider to offer semantic theming with consistent color meanings across different themes."); - - ImGui.Separator(); - ImGui.Text("Usage Examples:"); - - ImGui.BeginChild("CodeExamples", new Vector2(0, 0), ImGuiChildFlags.Borders); - - ImGui.Text("// Apply semantic themes using ScopedTheme (recommended)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "var theme = ThemeRegistry.FindTheme(\"Dracula\");"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "using (new ScopedTheme(theme.CreateInstance()))"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " // All UI rendering in this block uses the theme"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " // Color mappings are cached for performance"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " ImGui.Button(\"Themed Button\");"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Clear cache if needed (rarely required)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "ScopedTheme.ClearCache();"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Or apply themes globally (affects all subsequent UI)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "Theme.Apply(\"Nord\");"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "Theme.Apply(\"Catppuccin Mocha\");"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Reset to default ImGui styling"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "Theme.ResetToDefault();"); - ImGui.Text("// or via property"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "Theme.CurrentThemeName = null;"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Render theme selection menu in your main menu bar"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "if (Theme.RenderThemeSelectorMenu())"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " // Theme was changed - save current theme to settings"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " Settings.Theme = Theme.CurrentThemeName;"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Render the theme browser modal (call in main render loop)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "if (Theme.RenderThemeSelector()) // Returns true if theme changed"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " // Theme was changed via modal - respond to change"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " Settings.Theme = Theme.CurrentThemeName;"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Programmatically open the theme browser modal"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "Theme.ShowThemeSelector(); // Opens the modal dialog"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "Theme.ShowThemeSelector(\"Custom Title\", new Vector2(900, 700));"); - ImGui.TextUnformatted(""); - - ImGui.Text("// The ThemeBrowser uses ktsu.ImGuiPopups for proper modal behavior"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "// - Blocks interaction with underlying UI"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "// - ESC to close, centered positioning"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "// - Follows established ktsu.dev modal patterns"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Restore theme on application start"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "Theme.CurrentThemeName = Settings.Theme; // null restores default"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Use semantic text colors"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "using (Text.Color.Error())"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " ImGui.Text(\"Error message\");"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Render theme preview cards"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "if (ThemeCard.Render(theme))"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " Theme.Apply(theme.Name);"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Render a grid of theme cards with delegate callback (recommended)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "ThemeCard.RenderGrid(themes, selectedTheme =>"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " // Handle theme selection via delegate"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " currentSelectedTheme = selectedTheme;"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "});"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Or use the return value approach (still supported)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "var clicked = ThemeCard.RenderGrid(themes);"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "if (clicked != null)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " Theme.Apply(clicked.Name);"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Use color palette (theme-aware)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "ImColor primaryColor = Color.Palette.Semantic.Primary;"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "ImColor errorColor = Color.Palette.Semantic.Error;"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "ImColor customRed = Color.Palette.Basic.Red; // Adapts to theme"); - ImGui.TextUnformatted(""); - - ImGui.Text("// NEW: Use complete theme palette API (powered by MakeCompletePalette)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "var palette = Theme.GetCurrentThemeCompletePalette();"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "var primaryHigh = new SemanticColorRequest(SemanticMeaning.Primary, Priority.High);"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "if (palette?.TryGetValue(primaryHigh, out var color) == true)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " ImColor myColor = Color.FromPerceptualColor(color);"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Or use the simpler helper methods"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "var request = new SemanticColorRequest(SemanticMeaning.Error, Priority.VeryHigh);"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "if (Theme.TryGetColor(request, out var errorColor))"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " // Use the specific error color from theme"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Scoped theme colors for UI sections"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "using (Theme.FromColor(Color.Palette.Semantic.Success))"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " ImGui.Button(\"Success Button\");"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - - ImGui.EndChild(); - } - - private void OnMoveOrResize() - { - // Handle window resize if needed - } -} diff --git a/examples/ImGuiStylerDemo/ImGuiStylerDemo.csproj b/examples/ImGuiStylerDemo/ImGuiStylerDemo.csproj deleted file mode 100644 index c1e0a6a..0000000 --- a/examples/ImGuiStylerDemo/ImGuiStylerDemo.csproj +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - net9.0 - - true - - - - - - - diff --git a/examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.cs b/examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.cs deleted file mode 100644 index f7009d7..0000000 --- a/examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.cs +++ /dev/null @@ -1,834 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Examples.Widgets; - -using System.Collections.ObjectModel; -using System.Numerics; -using Hexa.NET.ImGui; -using ktsu.ImGui.App; -using ktsu.ImGui.Popups; -using ktsu.ImGui.Styler; -using ktsu.ImGui.Widgets; -using ktsu.Semantics.Paths; -using ktsu.Semantics.Strings; -using ktsu.TextFilter; - -/// -/// Demo strong string example. -/// -public sealed record class StrongStringExample : SemanticString { } - -/// -/// Demo enum values. -/// -public enum EnumValues -{ - /// - /// First enum value. - /// - Value1, - /// - /// Second enum value. - /// - ValueB, - /// - /// Third enum value. - /// - ValueIII, -} - -internal static class ImGuiWidgetsDemo -{ - private static void Main() - { - ImGuiApp.Start(new() - { - Title = "ImGuiWidgets - Complete Library Demo", - OnStart = OnStart, - OnAppMenu = OnAppMenu, - OnMoveOrResize = OnMoveOrResize, - OnRender = OnRender, - }); - } - - private static float value = 0.5f; - private static float tab2Value = 0.5f; - - private static ImGuiWidgets.DividerContainer DividerContainer { get; } = new("DemoDividerContainer"); - private static ImGuiPopups.MessageOK MessageOK { get; } = new(); - private static ImGuiWidgets.TabPanel DemoTabPanel { get; } = new("DemoTabPanel", true, true); - private static Dictionary TabIds { get; } = []; - private static int NextDynamicTabId { get; set; } = 1; - - private static List GridStrings { get; } = []; - private static int InitialGridItemCount { get; } = 32; - private static int GridItemsToShow { get; set; } = InitialGridItemCount; - private static float GridHeight { get; set; } = 500f; - private static ImGuiWidgets.GridOrder GridOrder { get; set; } = ImGuiWidgets.GridOrder.RowMajor; - private static ImGuiWidgets.IconAlignment GridIconAlignment { get; set; } = ImGuiWidgets.IconAlignment.Vertical; - private static bool GridIconSizeBig { get; set; } = true; - private static bool GridIconCenterWithinCell { get; set; } = true; - private static bool GridFitToContents { get; set; } - private static EnumValues selectedEnumValue = EnumValues.Value1; - private static string selectedStringValue = "Hello"; - private static readonly Collection possibleStringValues = ["Hello", "World", "Goodbye"]; - private static StrongStringExample selectedStrongString = "Strong Hello".As(); - private static readonly Collection possibleStrongStringValues = ["Strong Hello".As(), - "Strong World".As(), "Strong Goodbye".As()]; - - // Static fields for SearchBox filter persistence - private static string BasicSearchTerm = string.Empty; - private static TextFilterType BasicFilterType = TextFilterType.Glob; - private static TextFilterMatchOptions BasicMatchOptions = TextFilterMatchOptions.ByWholeString; - - private static string FilteredSearchTerm = string.Empty; - private static TextFilterType FilteredFilterType = TextFilterType.Glob; - private static TextFilterMatchOptions FilteredMatchOptions = TextFilterMatchOptions.ByWholeString; - - private static string RankedSearchTerm = string.Empty; - - private static string GlobSearchTerm = string.Empty; - private static TextFilterType GlobFilterType = TextFilterType.Glob; - private static TextFilterMatchOptions GlobMatchOptions = TextFilterMatchOptions.ByWholeString; - - private static string RegexSearchTerm = string.Empty; - private static TextFilterType RegexFilterType = TextFilterType.Regex; - private static TextFilterMatchOptions RegexMatchOptions = TextFilterMatchOptions.ByWholeString; - -#pragma warning disable CA5394 //Do not use insecure randomness - private static void OnStart() - { - // Create main layout with dedicated demo sections - DividerContainer.Add(new("Widget Demos", 0.6f, ShowWidgetDemos)); - DividerContainer.Add(new("Advanced Demos", 0.4f, ShowAdvancedDemos)); - - // Initialize TabPanel demo - TabIds["tab1"] = DemoTabPanel.AddTab("tab1", "Tab 1", ShowTab1Content); - TabIds["tab2"] = DemoTabPanel.AddTab("tab2", "Tab 2", ShowTab2Content); - TabIds["tab3"] = DemoTabPanel.AddTab("tab3", "Tab 3", ShowTab3Content); - - // Generate test data for grid demos - for (int i = 0; i < InitialGridItemCount; i++) - { - string randomString = $"{i}:"; - int randomAmount = new Random().Next(2, 32); - for (int j = 0; j < randomAmount; j++) - { - randomString += (char)new Random().Next(32, 127); - } - - GridStrings.Add(randomString); - } - } -#pragma warning restore CA5394 //Do not use insecure randomness - - private static void OnRender(float dt) => DividerContainer.Tick(dt); - - private static void OnAppMenu() - { - // Method intentionally left empty. - } - - private static void OnMoveOrResize() - { - // Method intentionally left empty. - } - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0063:Use simple 'using' statement", Justification = "")] - private static void ShowWidgetDemos(float size) - { - ImGui.TextUnformatted("ImGuiWidgets Library - Comprehensive Demo"); - ImGui.Separator(); - - ShowKnobDemo(); - ShowColorIndicatorDemo(); - ShowComboDemo(); - ShowTextDemo(); - ShowScopedWidgetsDemo(); - ShowTreeDemo(); - } - - private static void ShowAdvancedDemos(float size) - { - AbsoluteFilePath ktsuIconPath = Environment.CurrentDirectory.As() / "ktsu.png".As(); - ImGuiAppTextureInfo ktsuTexture = ImGuiApp.GetOrLoadTexture(ktsuIconPath); - - ImGui.TextUnformatted("Advanced Widget Demos"); - ImGui.Separator(); - - ShowImageAndIconDemo(ktsuTexture); - ShowTabPanelDemo(); - ShowSearchBoxDemo(); - ShowGridDemo(ktsuTexture); - ShowDividerDemo(); - - MessageOK.ShowIfOpen(); - } - - private static void ShowTabPanelDemo() - { - if (ImGui.CollapsingHeader("TabPanel")) - { - ImGui.TextUnformatted("Tabbed interface with dirty state tracking:"); - ImGui.Separator(); - - // Tab Panel controls - ImGui.TextUnformatted("Tab Management:"); - if (ImGui.Button("Mark Active Tab Dirty")) - { - DemoTabPanel.MarkActiveTabDirty(); - } - ImGui.SameLine(); - if (ImGui.Button("Mark Active Tab Clean")) - { - DemoTabPanel.MarkActiveTabClean(); - } - ImGui.SameLine(); - if (ImGui.Button("Add New Tab")) - { - int tabIndex = NextDynamicTabId++; - string tabKey = $"dynamic{tabIndex}"; - string tabId = $"dyntab_{tabIndex}"; - TabIds[tabKey] = DemoTabPanel.AddTab(tabId, $"Extra Tab {tabIndex}", () => ShowDynamicTabContent(tabIndex)); - } - - ImGui.Separator(); - ImGui.TextUnformatted("Features demonstrated:"); - ImGui.BulletText("Closeable tabs (X button)"); - ImGui.BulletText("Dirty state indicators (*)"); - ImGui.BulletText("Dynamic tab addition"); - ImGui.BulletText("Per-tab state management"); - - ImGui.Separator(); - - // Display tab panel - DemoTabPanel.Draw(); - } - } - - private static void ShowSearchBoxDemo() - { - if (ImGui.CollapsingHeader("SearchBox")) - { - ImGui.TextUnformatted("Powerful search functionality with multiple filter types:"); - ImGui.Separator(); - - ImGui.TextUnformatted("Basic SearchBox (UI only):"); - ImGuiWidgets.SearchBox("##BasicSearch", ref BasicSearchTerm, ref BasicFilterType, ref BasicMatchOptions); - ImGui.TextUnformatted($"Search term: '{BasicSearchTerm}' | Type: {BasicFilterType} | Match: {BasicMatchOptions}"); - - ImGui.Separator(); - ImGui.TextUnformatted("SearchBox with Filtering:"); - - // Using the SearchBox that returns filtered results - List filteredResults = [.. ImGuiWidgets.SearchBox( - "##FilteredSearch", - ref FilteredSearchTerm, - GridStrings, - s => s, - ref FilteredFilterType, - ref FilteredMatchOptions)]; - - if (!string.IsNullOrEmpty(FilteredSearchTerm)) - { - ImGui.TextUnformatted($"Results: {filteredResults.Count} matches for '{FilteredSearchTerm}'"); - ImGui.BeginChild("FilteredResults", new Vector2(0, 100), ImGuiChildFlags.Borders); - foreach (string item in filteredResults.Take(20)) - { - ImGui.TextUnformatted($"• {item}"); - } - if (filteredResults.Count > 20) - { - ImGui.TextUnformatted($"... and {filteredResults.Count - 20} more"); - } - ImGui.EndChild(); - } - - ImGui.Separator(); - ImGui.TextUnformatted("Ranked SearchBox (Fuzzy Matching):"); - - List rankedResults = [.. ImGuiWidgets.SearchBoxRanked("##RankedSearch", - ref RankedSearchTerm, - GridStrings, - s => s)]; - - if (!string.IsNullOrEmpty(RankedSearchTerm)) - { - ImGui.TextUnformatted($"Fuzzy Results: {rankedResults.Count} matches for '{RankedSearchTerm}'"); - ImGui.BeginChild("RankedResults", new Vector2(0, 100), ImGuiChildFlags.Borders); - foreach (string item in rankedResults.Take(20)) - { - ImGui.TextUnformatted($"• {item}"); - } - if (rankedResults.Count > 20) - { - ImGui.TextUnformatted($"... and {rankedResults.Count - 20} more"); - } - ImGui.EndChild(); - } - - ImGui.Separator(); - ImGui.TextUnformatted("Filter Type Comparison:"); - - ImGui.Columns(2, "SearchComparison"); - - ImGui.TextUnformatted("Glob Pattern (*,?):"); - List globResults = [.. ImGuiWidgets.SearchBox("##GlobSearch", - ref GlobSearchTerm, - GridStrings, - s => s, - ref GlobFilterType, - ref GlobMatchOptions)]; - - if (!string.IsNullOrEmpty(GlobSearchTerm)) - { - ImGui.TextUnformatted($"{globResults.Count} matches"); - ImGui.BeginChild("GlobResults", new Vector2(0, 80), ImGuiChildFlags.Borders); - foreach (string item in globResults.Take(10)) - { - ImGui.TextUnformatted($"• {item}"); - } - ImGui.EndChild(); - } - else - { - ImGui.TextUnformatted("Try: *1*, ?:*, [0-9]*"); - } - - ImGui.NextColumn(); - - ImGui.TextUnformatted("Regex Pattern:"); - List regexResults = [.. ImGuiWidgets.SearchBox("##RegexSearch", - ref RegexSearchTerm, - GridStrings, - s => s, - ref RegexFilterType, - ref RegexMatchOptions)]; - - if (!string.IsNullOrEmpty(RegexSearchTerm)) - { - ImGui.TextUnformatted($"{regexResults.Count} matches"); - ImGui.BeginChild("RegexResults", new Vector2(0, 80), ImGuiChildFlags.Borders); - foreach (string item in regexResults.Take(10)) - { - ImGui.TextUnformatted($"• {item}"); - } - ImGui.EndChild(); - } - else - { - ImGui.TextUnformatted("Try: ^\\d+, [A-Z]+, .*[aeiou].*"); - } - - ImGui.Columns(1); - } - } - - private static void ShowGridDemo(ImGuiAppTextureInfo ktsuTexture) - { - if (ImGui.CollapsingHeader("Grid Layout")) - { - ImGui.TextUnformatted("Flexible grid layouts with automatic sizing:"); - ImGui.Separator(); - - // Grid settings - inline controls - ImGui.TextUnformatted("Grid Configuration:"); - - bool showGridDebug = ImGuiWidgets.EnableGridDebugDraw; - if (ImGui.Checkbox("Show Grid Debug Draw", ref showGridDebug)) - { - ImGuiWidgets.EnableGridDebugDraw = showGridDebug; - } - ImGui.SameLine(); - - bool showIconDebug = ImGuiWidgets.EnableIconDebugDraw; - if (ImGui.Checkbox("Show Icon Debug Draw", ref showIconDebug)) - { - ImGuiWidgets.EnableIconDebugDraw = showIconDebug; - } - - ImGui.Columns(3, "GridSettings"); - - bool gridIconSizeBig = GridIconSizeBig; - if (ImGui.Checkbox("Big Icons", ref gridIconSizeBig)) - { - GridIconSizeBig = gridIconSizeBig; - } - - bool gridIconCenterWithinCell = GridIconCenterWithinCell; - if (ImGui.Checkbox("Center in Cell", ref gridIconCenterWithinCell)) - { - GridIconCenterWithinCell = gridIconCenterWithinCell; - } - - bool gridFitToContents = GridFitToContents; - if (ImGui.Checkbox("Fit to Contents", ref gridFitToContents)) - { - GridFitToContents = gridFitToContents; - } - - ImGui.NextColumn(); - - int gridItemsToShow = GridItemsToShow; - if (ImGui.SliderInt("Items", ref gridItemsToShow, 0, GridStrings.Count)) - { - GridItemsToShow = gridItemsToShow; - } - - ImGuiWidgets.GridOrder gridOrder = GridOrder; - if (ImGuiWidgets.Combo("Order", ref gridOrder)) - { - GridOrder = gridOrder; - } - - ImGui.NextColumn(); - - ImGuiWidgets.IconAlignment gridIconAlignment = GridIconAlignment; - if (ImGuiWidgets.Combo("Icon Layout", ref gridIconAlignment)) - { - GridIconAlignment = gridIconAlignment; - } - - float gridHeight = GridHeight; - if (ImGui.SliderFloat("Height", ref gridHeight, 100f, 800f)) - { - GridHeight = gridHeight; - } - - ImGui.Columns(1); - ImGui.Separator(); - - // Grid display - float iconSizePx = ImGuiApp.EmsToPx(2.5f); - float bigIconSizePx = iconSizePx * 2; - float gridIconSize = GridIconSizeBig ? bigIconSizePx : iconSizePx; - - Vector2 MeasureGridSize(string item) => ImGuiWidgets.CalcIconSize(item, gridIconSize, GridIconAlignment); - void DrawGridCell(string item, Vector2 cellSize, Vector2 itemSize) - { - if (GridIconCenterWithinCell) - { - using (new Alignment.CenterWithin(itemSize, cellSize)) - { - ImGuiWidgets.Icon(item, ktsuTexture.TextureId, gridIconSize, GridIconAlignment); - } - } - else - { - ImGuiWidgets.Icon(item, ktsuTexture.TextureId, gridIconSize, GridIconAlignment); - } - } - - ImGuiWidgets.GridOptions gridOptions = new() - { - GridSize = new Vector2(ImGui.GetContentRegionAvail().X, GridHeight), - FitToContents = GridFitToContents, - }; - - ImGui.TextUnformatted($"Showing {GridItemsToShow} items in {GridOrder} order:"); - - switch (GridOrder) - { - case ImGuiWidgets.GridOrder.RowMajor: - ImGuiWidgets.RowMajorGrid("demoRowMajorGrid", GridStrings.Take(GridItemsToShow), MeasureGridSize, DrawGridCell, gridOptions); - break; - - case ImGuiWidgets.GridOrder.ColumnMajor: - ImGuiWidgets.ColumnMajorGrid("demoColumnMajorGrid", GridStrings.Take(GridItemsToShow), MeasureGridSize, DrawGridCell, gridOptions); - break; - - default: - throw new NotImplementedException(); - } - } - } - - // Individual widget demo methods - private static void ShowKnobDemo() - { - if (ImGui.CollapsingHeader("Knobs")) - { - ImGui.TextUnformatted("All knob variants with interactive controls:"); - ImGui.Separator(); - - // Show all knob variants - ImGui.Columns(3, "KnobColumns"); - - ImGuiWidgets.Knob("Wiper", ref value, 0, 1, 0, null, ImGuiKnobVariant.Wiper); - ImGui.NextColumn(); - ImGuiWidgets.Knob("Wiper Only", ref value, 0, 1, 0, null, ImGuiKnobVariant.WiperOnly); - ImGui.NextColumn(); - ImGuiWidgets.Knob("Wiper Dot", ref value, 0, 1, 0, null, ImGuiKnobVariant.WiperDot); - ImGui.NextColumn(); - - ImGuiWidgets.Knob("Tick", ref value, 0, 1, 0, null, ImGuiKnobVariant.Tick); - ImGui.NextColumn(); - ImGuiWidgets.Knob("Stepped", ref value, 0, 1, 0, null, ImGuiKnobVariant.Stepped); - ImGui.NextColumn(); - ImGuiWidgets.Knob("Space", ref value, 0, 1, 0, null, ImGuiKnobVariant.Space); - - ImGui.Columns(1); - - ImGui.Separator(); - ImGui.TextUnformatted($"Current Value: {value:F3}"); - - if (ImGui.Button("Reset to 0.5")) - { - value = 0.5f; - } - } - } - - private static void ShowColorIndicatorDemo() - { - if (ImGui.CollapsingHeader("Color Indicators")) - { - ImGui.TextUnformatted("Color indicators show enabled/disabled states:"); - ImGui.Separator(); - - ImGui.TextUnformatted("Status Lights:"); - ImGuiWidgets.ColorIndicator(Color.Palette.Semantic.Success, true); - ImGui.SameLine(); - ImGui.TextUnformatted("System OK"); - ImGuiWidgets.ColorIndicator(Color.Palette.Semantic.Warning, true); - ImGui.SameLine(); - ImGui.TextUnformatted("Warning"); - ImGuiWidgets.ColorIndicator(Color.Palette.Semantic.Error, true); - ImGui.SameLine(); - ImGui.TextUnformatted("Error"); - ImGuiWidgets.ColorIndicator(Color.Palette.Semantic.Info, true); - ImGui.SameLine(); - ImGui.TextUnformatted("Info"); - - ImGui.Separator(); - ImGui.TextUnformatted("Enabled vs Disabled:"); - ImGuiWidgets.ColorIndicator(Color.Palette.Semantic.Success, true); - ImGui.SameLine(); - ImGui.TextUnformatted("Enabled"); - ImGuiWidgets.ColorIndicator(Color.Palette.Semantic.Success, false); - ImGui.SameLine(); - ImGui.TextUnformatted("Disabled"); - } - } - - private static void ShowComboDemo() - { - if (ImGui.CollapsingHeader("Combo Boxes")) - { - ImGui.TextUnformatted("Type-safe combo boxes for enums and collections:"); - ImGui.Separator(); - - ImGuiWidgets.Combo("Enum Combo", ref selectedEnumValue); - ImGui.TextUnformatted($"Selected: {selectedEnumValue}"); - - ImGui.Separator(); - ImGuiWidgets.Combo("String Combo", ref selectedStringValue, possibleStringValues); - ImGui.TextUnformatted($"Selected: {selectedStringValue}"); - - ImGui.Separator(); - ImGuiWidgets.Combo("Strong String Combo", ref selectedStrongString, possibleStrongStringValues); - ImGui.TextUnformatted($"Selected: {selectedStrongString}"); - } - } - - private static void ShowTextDemo() - { - if (ImGui.CollapsingHeader("Text Utilities")) - { - ImGui.TextUnformatted("Enhanced text rendering with alignment and clipping:"); - ImGui.Separator(); - - // Regular text - ImGuiWidgets.Text("Regular text"); - - ImGui.Separator(); - - // Centered text - ImGui.TextUnformatted("Centered text in available space:"); - ImGuiWidgets.TextCentered("This text is centered!"); - - ImGui.Separator(); - - // Text centered within bounds - ImGui.TextUnformatted("Text centered within 200px container:"); - Vector2 containerSize = new(200, 50); - ImGui.GetWindowDrawList().AddRect( - ImGui.GetCursorScreenPos(), - ImGui.GetCursorScreenPos() + containerSize, - ImGui.GetColorU32(ImGuiCol.Border) - ); - ImGuiWidgets.TextCenteredWithin("Centered within bounds", containerSize); - ImGui.SetCursorPosY(ImGui.GetCursorPosY() + containerSize.Y); - - ImGui.Separator(); - - // Clipped text - ImGui.TextUnformatted("Text clipping demo (150px width):"); - Vector2 clipSize = new(150, 30); - ImGui.GetWindowDrawList().AddRect( - ImGui.GetCursorScreenPos(), - ImGui.GetCursorScreenPos() + clipSize, - ImGui.GetColorU32(ImGuiCol.Border) - ); - // Demonstrate text clipping by manually truncating long text - string longText = "This is a very long text that will be clipped with ellipsis"; - float textWidth = ImGui.CalcTextSize(longText).X; - string displayText = longText; - if (textWidth > clipSize.X) - { - // Manually clip the text for demo purposes - while (ImGui.CalcTextSize(displayText + "...").X > clipSize.X && displayText.Length > 0) - { - displayText = displayText[..^1]; - } - displayText += "..."; - } - ImGuiWidgets.TextCenteredWithin(displayText, clipSize); - ImGui.SetCursorPosY(ImGui.GetCursorPosY() + clipSize.Y); - } - } - - private static void ShowScopedWidgetsDemo() - { - if (ImGui.CollapsingHeader("Scoped Utilities")) - { - ImGui.TextUnformatted("Scoped helpers for ImGui state management:"); - ImGui.Separator(); - - // ScopedDisable demo - ImGui.TextUnformatted("ScopedDisable - disables widgets within scope:"); - using (new ScopedDisable(true)) - { - bool dummyBool = true; - int dummyInt = 0; - string[] items = ["Item 1", "Item 2", "Item 3"]; - - ImGui.Checkbox("Disabled Checkbox", ref dummyBool); - ImGui.Combo("Disabled Combo", ref dummyInt, items, items.Length); - ImGui.Button("Disabled Button"); - } - - ImGui.Separator(); - - // ScopedId demo - ImGui.TextUnformatted("ScopedId - manages ImGui ID stack automatically:"); - for (int i = 0; i < 3; i++) - { - using (new ImGuiWidgets.ScopedId(i)) - { - bool state = false; - ImGui.Checkbox("Same Label", ref state); - } - } - ImGui.TextUnformatted("↑ Three checkboxes with same label using ScopedId"); - } - } - - private static void ShowTreeDemo() - { - if (ImGui.CollapsingHeader("Tree View")) - { - ImGui.TextUnformatted("Hierarchical tree structure with automatic cleanup:"); - ImGui.Separator(); - - using ImGuiWidgets.Tree tree = new(); - for (int i = 0; i < 3; i++) - { - using (tree.Child) - { - ImGui.Button($"Parent Node {i + 1}"); - - using ImGuiWidgets.Tree subtree = new(); - for (int j = 0; j < 2; j++) - { - using (subtree.Child) - { - ImGui.Button($"Child {j + 1}"); - - if (i == 0 && j == 0) // Show deeper nesting for first item - { - using ImGuiWidgets.Tree deepTree = new(); - using (deepTree.Child) - { - ImGui.Button("Grandchild"); - } - } - } - } - } - } - } - } - - private static void ShowImageAndIconDemo(ImGuiAppTextureInfo ktsuTexture) - { - if (ImGui.CollapsingHeader("Images & Icons")) - { - ImGui.TextUnformatted("Interactive images and icons with events:"); - ImGui.Separator(); - - // Image demo with color tinting - ImGui.TextUnformatted("Clickable Image (with alpha-preserved tinting):"); - Vector4 tintColor = new(1.0f, 0.8f, 0.8f, 1.0f); // Light red tint - if (ImGuiWidgets.Image(ktsuTexture.TextureId, new Vector2(64, 64), tintColor)) - { - MessageOK.Open("Image Clicked", "You clicked the tinted image!"); - } - - ImGui.SameLine(); - if (ImGuiWidgets.Image(ktsuTexture.TextureId, new Vector2(64, 64))) // No tint - { - MessageOK.Open("Image Clicked", "You clicked the normal image!"); - } - - ImGui.Separator(); - - // Icon demos - ImGui.TextUnformatted("Interactive Icons:"); - - float iconSize = ImGuiApp.EmsToPx(4.0f); - - ImGuiWidgets.Icon("Click Me", ktsuTexture.TextureId, iconSize, ImGuiWidgets.IconAlignment.Vertical, - new ImGuiWidgets.IconOptions() - { - OnClick = () => MessageOK.Open("Click", "Single click detected!") - }); - - ImGui.SameLine(); - ImGuiWidgets.Icon("Double Click", ktsuTexture.TextureId, iconSize, ImGuiWidgets.IconAlignment.Vertical, - new ImGuiWidgets.IconOptions() - { - OnDoubleClick = () => MessageOK.Open("Double Click", "Double click detected!") - }); - - ImGui.SameLine(); - ImGuiWidgets.Icon("Right Click", ktsuTexture.TextureId, iconSize, ImGuiWidgets.IconAlignment.Vertical, - new ImGuiWidgets.IconOptions() - { - OnContextMenu = () => - { - if (ImGui.MenuItem("Context Item 1")) - { - MessageOK.Open("Menu", "Context Item 1 selected"); - } - - if (ImGui.MenuItem("Context Item 2")) - { - MessageOK.Open("Menu", "Context Item 2 selected"); - } - - ImGui.Separator(); - if (ImGui.MenuItem("Context Item 3")) - { - MessageOK.Open("Menu", "Context Item 3 selected"); - } - }, - }); - - ImGui.SameLine(); - ImGuiWidgets.Icon("Hover Me", ktsuTexture.TextureId, iconSize, ImGuiWidgets.IconAlignment.Vertical, - new ImGuiWidgets.IconOptions() - { - Tooltip = "This is a tooltip that appears when you hover over the icon!" - }); - - ImGui.Separator(); - - ImGui.TextUnformatted("Horizontal Layout Icons:"); - ImGuiWidgets.Icon("Horizontal 1", ktsuTexture.TextureId, iconSize, ImGuiWidgets.IconAlignment.Horizontal); - ImGuiWidgets.Icon("Horizontal 2", ktsuTexture.TextureId, iconSize, ImGuiWidgets.IconAlignment.Horizontal); - } - } - - private static void ShowDividerDemo() - { - if (ImGui.CollapsingHeader("Divider Container")) - { - ImGui.TextUnformatted("This entire demo uses a DividerContainer!"); - ImGui.TextUnformatted("The resizable divider between 'Widget Demos' and 'Advanced Demos'"); - ImGui.TextUnformatted("is created using ImGuiWidgets.DividerContainer."); - - ImGui.Separator(); - ImGui.TextUnformatted("DividerContainer features:"); - ImGui.BulletText("Resizable panes with drag handle"); - ImGui.BulletText("Persistent sizing ratios"); - ImGui.BulletText("Automatic content management"); - ImGui.BulletText("Nested dividers support"); - } - } - - // Tab content methods - private static void ShowTab1Content() - { - ImGui.TextUnformatted("This is the content of Tab 1"); - - if (ImGui.Button("Edit Content")) - { - DemoTabPanel.MarkTabDirty(TabIds["tab1"]); - } - - if (ImGui.Button("Save Content")) - { - DemoTabPanel.MarkTabClean(TabIds["tab1"]); - } - - ImGui.TextUnformatted("Dirty State: " + (DemoTabPanel.IsTabDirty(TabIds["tab1"]) ? "Modified" : "Unchanged")); - } - - private static void ShowTab2Content() - { - ImGui.TextUnformatted("This is the content of Tab 2"); - - if (ImGui.SliderFloat("Value", ref tab2Value, 0.0f, 1.0f)) - { - // Mark tab as dirty when slider value changes - DemoTabPanel.MarkTabDirty(TabIds["tab2"]); - } - - if (ImGui.Button("Reset")) - { - tab2Value = 0.5f; - DemoTabPanel.MarkTabClean(TabIds["tab2"]); - } - } - - private static void ShowTab3Content() - { - ImGui.TextUnformatted("This is the content of Tab 3"); - ImGui.TextUnformatted("Try clicking 'Mark Active Tab Dirty' button above"); - ImGui.TextUnformatted("to see the dirty indicator (*) appear next to the tab name."); - - if (ImGui.Button("Toggle Dirty State")) - { - if (DemoTabPanel.IsTabDirty(TabIds["tab3"])) - { - DemoTabPanel.MarkTabClean(TabIds["tab3"]); - } - else - { - DemoTabPanel.MarkTabDirty(TabIds["tab3"]); - } - } - } - - private static void ShowDynamicTabContent(int tabIndex) - { - string tabKey = $"dynamic{tabIndex}"; - ImGui.TextUnformatted($"This is a dynamically added tab ({tabIndex})"); - ImGui.TextUnformatted("The (*) indicator shows when content has been modified."); - - if (ImGui.Button("Toggle Dirty State")) - { - if (DemoTabPanel.IsTabDirty(TabIds[tabKey])) - { - DemoTabPanel.MarkTabClean(TabIds[tabKey]); - } - else - { - DemoTabPanel.MarkTabDirty(TabIds[tabKey]); - } - } - } -} diff --git a/examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.csproj b/examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.csproj deleted file mode 100644 index dd28c44..0000000 --- a/examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - net9.0 - - - - - - - - diff --git a/examples/ImGuiWidgetsDemo/ktsu.png b/examples/ImGuiWidgetsDemo/ktsu.png deleted file mode 100644 index 916c2a3..0000000 --- a/examples/ImGuiWidgetsDemo/ktsu.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3c680b0e20d577e840fb3b41e7fc3a7604b06f279346310755aa252abd1959e9 -size 15183 diff --git a/tests/ImGui.App.Tests/AdvancedCoverageTests.cs b/tests/ImGui.App.Tests/AdvancedCoverageTests.cs deleted file mode 100644 index 3037cfc..0000000 --- a/tests/ImGui.App.Tests/AdvancedCoverageTests.cs +++ /dev/null @@ -1,284 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using System; -using Hexa.NET.ImGui; -using ktsu.ImGui.App.ImGuiController; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using ktsu.Semantics.Paths; - -/// -/// Advanced tests targeting specific low-coverage areas including OpenGL functionality, shader management, and texture operations. -/// -[TestClass] -public class AdvancedCoverageTests -{ - #region ImGuiFontConfig Advanced Tests - - [TestMethod] - public void ImGuiFontConfig_Properties_GettersReturnCorrectValues() - { - const string testPath = "arial.ttf"; - const int testSize = 18; - static IntPtr TestGlyphRange(ImGuiIOPtr io) => IntPtr.Zero; - - ImGuiFontConfig config = new(testPath, testSize, TestGlyphRange); - - // Exercise all property getters - string fontPath = config.FontPath; - int fontSize = config.FontSize; - Func? glyphRange = config.GetGlyphRange; - - Assert.AreEqual(testPath, fontPath); - Assert.AreEqual(testSize, fontSize); - Assert.IsNotNull(glyphRange); - Assert.AreSame(TestGlyphRange, glyphRange); - } - - [TestMethod] - public void ImGuiFontConfig_GetHashCode_ConsistentResults() - { - ImGuiFontConfig config1 = new("test.ttf", 16); - ImGuiFontConfig config2 = new("test.ttf", 16); - - int hash1 = config1.GetHashCode(); - int hash2 = config2.GetHashCode(); - - Assert.AreEqual(hash1, hash2); - } - - [TestMethod] - public void ImGuiFontConfig_GetHashCode_DifferentForDifferentConfigs() - { - ImGuiFontConfig config1 = new("test1.ttf", 16); - ImGuiFontConfig config2 = new("test2.ttf", 16); - - int hash1 = config1.GetHashCode(); - int hash2 = config2.GetHashCode(); - - Assert.AreNotEqual(hash1, hash2); - } - - [TestMethod] - public void ImGuiFontConfig_EqualsObject_WithNullObject_ReturnsFalse() - { - ImGuiFontConfig config = new("test.ttf", 16); - bool result = config.Equals(null); - Assert.IsFalse(result); - } - - [TestMethod] - public void ImGuiFontConfig_EqualsObject_WithDifferentType_ReturnsFalse() - { - ImGuiFontConfig config = new("test.ttf", 16); - bool result = config.Equals("not a font config"); - Assert.IsFalse(result); - } - - [TestMethod] - public void ImGuiFontConfig_EqualsObject_WithSameConfig_ReturnsTrue() - { - ImGuiFontConfig config1 = new("test.ttf", 16); - ImGuiFontConfig config2 = new("test.ttf", 16); - bool result = config1.Equals(config2); - Assert.IsTrue(result); - } - - [TestMethod] - public void ImGuiFontConfig_EqualityOperators_WorkCorrectly() - { - ImGuiFontConfig config1 = new("test.ttf", 16); - ImGuiFontConfig config2 = new("test.ttf", 16); - ImGuiFontConfig config3 = new("other.ttf", 16); - - // Test equality - bool equal1 = config1 == config2; - bool equal2 = config1 == config3; - - // Test inequality - bool notEqual1 = config1 != config2; - bool notEqual2 = config1 != config3; - - Assert.IsTrue(equal1); - Assert.IsFalse(equal2); - Assert.IsFalse(notEqual1); - Assert.IsTrue(notEqual2); - } - - [TestMethod] - public void ImGuiFontConfig_EqualsTyped_WithDifferentGlyphRange_ReturnsFalse() - { - static IntPtr GlyphRange1(ImGuiIOPtr io) => IntPtr.Zero; - static IntPtr GlyphRange2(ImGuiIOPtr io) => new(1); - - ImGuiFontConfig config1 = new("test.ttf", 16, GlyphRange1); - ImGuiFontConfig config2 = new("test.ttf", 16, GlyphRange2); - - bool result = config1.Equals(config2); - Assert.IsFalse(result); - } - - #endregion - - #region UniformFieldInfo Tests - - [TestMethod] - public void UniformFieldInfo_DefaultConstructor_InitializesFields() - { - UniformFieldInfo uniformInfo = new(); - - Assert.AreEqual(0, uniformInfo.Location); - Assert.IsNull(uniformInfo.Name); - Assert.AreEqual(0, uniformInfo.Size); - Assert.AreEqual(default, uniformInfo.Type); - } - - [TestMethod] - public void UniformFieldInfo_FieldAssignment_WorksCorrectly() - { - UniformFieldInfo uniformInfo = new() - { - Location = 5, - Name = "testUniform", - Size = 1, - Type = Silk.NET.OpenGL.UniformType.Float - }; - - Assert.AreEqual(5, uniformInfo.Location); - Assert.AreEqual("testUniform", uniformInfo.Name); - Assert.AreEqual(1, uniformInfo.Size); - Assert.AreEqual(Silk.NET.OpenGL.UniformType.Float, uniformInfo.Type); - } - - #endregion - - #region ImGuiApp Advanced Scenarios - - [TestMethod] - public void ImGuiApp_DeleteTexture_WithNullTextureInfo_ThrowsArgumentNullException() - { - Exception exception = Assert.ThrowsExactly(() => ImGuiApp.DeleteTexture(null!)); - - Assert.IsInstanceOfType(exception); - } - - [TestMethod] - public void ImGuiApp_WindowState_MultipleAccess_ReturnsConsistentValues() - { - ImGuiAppWindowState state1 = ImGuiApp.WindowState; - ImGuiAppWindowState state2 = ImGuiApp.WindowState; - - // Should return consistent values (not necessarily same reference) - Assert.AreEqual(state1.Size, state2.Size); - Assert.AreEqual(state1.Pos, state2.Pos); - Assert.AreEqual(state1.LayoutState, state2.LayoutState); - } - - [TestMethod] - public void ImGuiApp_Textures_MultipleAccess_ReturnsSameInstance() - { - System.Collections.Concurrent.ConcurrentDictionary textures1 = ImGuiApp.Textures; - System.Collections.Concurrent.ConcurrentDictionary textures2 = ImGuiApp.Textures; - - // Should return the same collection instance - Assert.AreSame(textures1, textures2); - } - - #endregion - - #region Performance Settings Edge Cases - - [TestMethod] - public void ImGuiAppPerformanceSettings_AllProperties_CanBeSetToZero() - { - ImGuiAppPerformanceSettings settings = new() - { - FocusedFps = 0.0, - UnfocusedFps = 0.0, - IdleFps = 0.0, - NotVisibleFps = 0.0, - IdleTimeoutSeconds = 0.0, - EnableThrottledRendering = false, - EnableIdleDetection = false - }; - - Assert.AreEqual(0.0, settings.FocusedFps); - Assert.AreEqual(0.0, settings.UnfocusedFps); - Assert.AreEqual(0.0, settings.IdleFps); - Assert.AreEqual(0.0, settings.NotVisibleFps); - Assert.AreEqual(0.0, settings.IdleTimeoutSeconds); - Assert.IsFalse(settings.EnableThrottledRendering); - Assert.IsFalse(settings.EnableIdleDetection); - } - - [TestMethod] - public void ImGuiAppPerformanceSettings_AllProperties_CanBeSetToNegativeValues() - { - ImGuiAppPerformanceSettings settings = new() - { - FocusedFps = -1.0, - UnfocusedFps = -2.0, - IdleFps = -3.0, - NotVisibleFps = -4.0, - IdleTimeoutSeconds = -5.0, - EnableThrottledRendering = true, - EnableIdleDetection = true - }; - - Assert.AreEqual(-1.0, settings.FocusedFps); - Assert.AreEqual(-2.0, settings.UnfocusedFps); - Assert.AreEqual(-3.0, settings.IdleFps); - Assert.AreEqual(-4.0, settings.NotVisibleFps); - Assert.AreEqual(-5.0, settings.IdleTimeoutSeconds); - Assert.IsTrue(settings.EnableThrottledRendering); - Assert.IsTrue(settings.EnableIdleDetection); - } - - #endregion - - #region ImGuiAppConfig Advanced Tests - - [TestMethod] - public void ImGuiAppConfig_AllCallbacks_CanBeSetToNull() - { - ImGuiAppConfig config = new(); - - // Test that the default values are not null (they are default empty delegates) - Assert.IsNotNull(config.OnStart); - Assert.IsNotNull(config.OnUpdate); - Assert.IsNotNull(config.OnRender); - Assert.IsNotNull(config.OnAppMenu); - Assert.IsNotNull(config.OnMoveOrResize); - } - - [TestMethod] - public void ImGuiAppConfig_Fonts_CanBeCleared() - { - ImGuiAppConfig config = new(); - config.Fonts.Add("test", [1, 2, 3]); - Assert.AreEqual(1, config.Fonts.Count); - - config.Fonts.Clear(); - Assert.AreEqual(0, config.Fonts.Count); - } - - [TestMethod] - public void ImGuiAppConfig_Fonts_SupportsMultipleFonts() - { - ImGuiAppConfig config = new(); - byte[] font1 = [1, 2, 3]; - byte[] font2 = [4, 5, 6]; - - config.Fonts.Add("Arial", font1); - config.Fonts.Add("Times", font2); - - Assert.AreEqual(2, config.Fonts.Count); - Assert.AreSame(font1, config.Fonts["Arial"]); - Assert.AreSame(font2, config.Fonts["Times"]); - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/ErrorHandlingAndEdgeCaseTests.cs b/tests/ImGui.App.Tests/ErrorHandlingAndEdgeCaseTests.cs deleted file mode 100644 index dccecd9..0000000 --- a/tests/ImGui.App.Tests/ErrorHandlingAndEdgeCaseTests.cs +++ /dev/null @@ -1,365 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using System; -using System.Collections.Generic; -using ktsu.ImGui.App.ImGuiController; -using ktsu.ImGui.App; -using Microsoft.VisualStudio.TestTools.UnitTesting; - -/// -/// Tests for error handling, edge cases, and boundary conditions to maximize code coverage. -/// -[TestClass] -public class ErrorHandlingAndEdgeCaseTests -{ - [TestInitialize] - public void Setup() - { - ImGuiApp.Reset(); - } - - #region ImGuiFontConfig Error Handling - - [TestMethod] - public void ImGuiFontConfig_Constructor_EmptyPath_DoesNotThrow() - { - // Empty string is a valid font path, should not throw - ImGuiFontConfig config = new("", 16); - Assert.AreEqual("", config.FontPath); - Assert.AreEqual(16, config.FontSize); - } - - [TestMethod] - public void ImGuiFontConfig_Constructor_WhitespacePath_DoesNotThrow() - { - // Whitespace is a valid path, should not throw - ImGuiFontConfig config = new(" ", 16); - Assert.AreEqual(" ", config.FontPath); - } - - [TestMethod] - public void ImGuiFontConfig_Constructor_MaxIntSize_DoesNotThrow() - { - ImGuiFontConfig config = new("test.ttf", int.MaxValue); - Assert.AreEqual(int.MaxValue, config.FontSize); - } - - [TestMethod] - public void ImGuiFontConfig_Constructor_MinValidSize_DoesNotThrow() - { - ImGuiFontConfig config = new("test.ttf", 1); - Assert.AreEqual(1, config.FontSize); - } - - #endregion - - #region Texture Coordinate Edge Cases - - [TestMethod] - public void TextureCoordinate_CastToInt_ReturnsCorrectValues() - { - int noneValue = (int)TextureCoordinate.None; - int sValue = (int)TextureCoordinate.S; - int tValue = (int)TextureCoordinate.T; - int rValue = (int)TextureCoordinate.R; - - Assert.AreEqual(0, noneValue); - Assert.AreNotEqual(0, sValue); - Assert.AreNotEqual(0, tValue); - Assert.AreNotEqual(0, rValue); - } - - [TestMethod] - public void TextureCoordinate_AllValues_AreUnique() - { - TextureCoordinate[] values = Enum.GetValues(); - HashSet uniqueValues = []; - - foreach (TextureCoordinate coord in values) - { - int intValue = (int)coord; - Assert.IsTrue(uniqueValues.Add(intValue), $"Duplicate value found: {intValue}"); - } - } - - #endregion - - #region ImGuiApp Edge Cases - - [TestMethod] - public void ImGuiApp_OnUserInput_CalledRapidly_UpdatesTime() - { - DateTime startTime = DateTime.UtcNow; - - for (int i = 0; i < 100; i++) - { - ImGuiApp.OnUserInput(); - } - - // Verify that the internal time was updated using direct access - DateTime lastTime = ImGuiApp.lastInputTime; - - Assert.IsTrue(lastTime >= startTime); - } - - [TestMethod] - public void ImGuiApp_Reset_CalledMultipleTimes_DoesNotThrow() - { - try - { - // Should be safe to call Reset multiple times - ImGuiApp.Reset(); - ImGuiApp.Reset(); - ImGuiApp.Reset(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void ImGuiApp_Properties_AfterReset_HaveConsistentValues() - { - ImGuiApp.Reset(); - bool focused1 = ImGuiApp.IsFocused; - bool idle1 = ImGuiApp.IsIdle; - float scale1 = ImGuiApp.ScaleFactor; - - ImGuiApp.Reset(); - bool focused2 = ImGuiApp.IsFocused; - bool idle2 = ImGuiApp.IsIdle; - float scale2 = ImGuiApp.ScaleFactor; - - Assert.AreEqual(focused1, focused2); - Assert.AreEqual(idle1, idle2); - Assert.AreEqual(scale1, scale2); - } - - #endregion - - #region Data Structure Boundary Tests - - [TestMethod] - public void ImGuiAppTextureInfo_MaxValues_CanBeSet() - { - ImGuiAppTextureInfo textureInfo = new() - { - TextureId = uint.MaxValue, - Width = int.MaxValue, - Height = int.MaxValue - }; - - Assert.AreEqual(uint.MaxValue, textureInfo.TextureId); - Assert.AreEqual(int.MaxValue, textureInfo.Width); - Assert.AreEqual(int.MaxValue, textureInfo.Height); - } - - [TestMethod] - public void ImGuiAppTextureInfo_MinValues_CanBeSet() - { - ImGuiAppTextureInfo textureInfo = new() - { - TextureId = uint.MinValue, - Width = int.MinValue, - Height = int.MinValue - }; - - Assert.AreEqual(uint.MinValue, textureInfo.TextureId); - Assert.AreEqual(int.MinValue, textureInfo.Width); - Assert.AreEqual(int.MinValue, textureInfo.Height); - } - - [TestMethod] - public void ImGuiAppWindowState_ExtremeValues_CanBeSet() - { - ImGuiAppWindowState windowState = new() - { - Size = new System.Numerics.Vector2(float.MaxValue, float.MaxValue), - Pos = new System.Numerics.Vector2(float.MinValue, float.MinValue) - }; - - Assert.AreEqual(float.MaxValue, windowState.Size.X); - Assert.AreEqual(float.MaxValue, windowState.Size.Y); - Assert.AreEqual(float.MinValue, windowState.Pos.X); - Assert.AreEqual(float.MinValue, windowState.Pos.Y); - } - - #endregion - - #region Performance Settings Extreme Values - - [TestMethod] - public void ImGuiAppPerformanceSettings_ExtremeValues_CanBeSet() - { - ImGuiAppPerformanceSettings settings = new() - { - FocusedFps = double.MaxValue, - UnfocusedFps = double.MinValue, - IdleFps = double.PositiveInfinity, - NotVisibleFps = double.NegativeInfinity, - IdleTimeoutSeconds = double.NaN, - EnableThrottledRendering = true, - EnableIdleDetection = false - }; - - Assert.AreEqual(double.MaxValue, settings.FocusedFps); - Assert.AreEqual(double.MinValue, settings.UnfocusedFps); - Assert.AreEqual(double.PositiveInfinity, settings.IdleFps); - Assert.AreEqual(double.NegativeInfinity, settings.NotVisibleFps); - Assert.IsTrue(double.IsNaN(settings.IdleTimeoutSeconds)); - Assert.IsTrue(settings.EnableThrottledRendering); - Assert.IsFalse(settings.EnableIdleDetection); - } - - #endregion - - #region Config Edge Cases - - [TestMethod] - public void ImGuiAppConfig_EmptyStrings_CanBeSet() - { - ImGuiAppConfig config = new() - { - Title = "", - IconPath = "" - }; - - Assert.AreEqual("", config.Title); - Assert.AreEqual("", config.IconPath); - } - - [TestMethod] - public void ImGuiAppConfig_VeryLongStrings_CanBeSet() - { - string longTitle = new('A', 10000); - string longIconPath = new('B', 10000); - - ImGuiAppConfig config = new() - { - Title = longTitle, - IconPath = longIconPath - }; - - Assert.AreEqual(longTitle, config.Title); - Assert.AreEqual(longIconPath, config.IconPath); - } - - [TestMethod] - public void ImGuiAppConfig_Fonts_WithEmptyKey_CanBeAdded() - { - ImGuiAppConfig config = new(); - byte[] fontData = [1, 2, 3, 4, 5]; - - config.Fonts.Add("", fontData); - - Assert.AreEqual(1, config.Fonts.Count); - Assert.IsTrue(config.Fonts.ContainsKey("")); - Assert.AreSame(fontData, config.Fonts[""]); - } - - [TestMethod] - public void ImGuiAppConfig_Fonts_WithEmptyArray_CanBeAdded() - { - ImGuiAppConfig config = new(); - byte[] emptyFont = []; - - config.Fonts.Add("empty", emptyFont); - - Assert.AreEqual(1, config.Fonts.Count); - Assert.AreSame(emptyFont, config.Fonts["empty"]); - Assert.AreEqual(0, config.Fonts["empty"].Length); - } - - [TestMethod] - public void ImGuiAppConfig_Fonts_WithLargeArray_CanBeAdded() - { - ImGuiAppConfig config = new(); - byte[] largeFont = new byte[1000000]; // 1MB font - - config.Fonts.Add("large", largeFont); - - Assert.AreEqual(1, config.Fonts.Count); - Assert.AreSame(largeFont, config.Fonts["large"]); - Assert.AreEqual(1000000, config.Fonts["large"].Length); - } - - #endregion - - #region Static Class Verification - - [TestMethod] - public void NativeMethods_HasOnlyStaticMembers() - { - // Test NativeMethods through direct access instead of reflection - // Since NativeMethods is an internal static partial class, - // the fact that this compiles means it's accessible and static - Assert.IsNotNull(typeof(NativeMethods)); - Assert.IsTrue(typeof(NativeMethods).IsClass); - Assert.IsTrue(typeof(NativeMethods).IsAbstract && typeof(NativeMethods).IsSealed); - } - - [TestMethod] - public void GdiPlusHelper_HasOnlyStaticMembers() - { - // Test GdiPlusHelper through direct access instead of reflection - // Since GdiPlusHelper is an internal static class, - // the fact that this compiles means it's accessible and static - Assert.IsNotNull(typeof(GdiPlusHelper)); - Assert.IsTrue(typeof(GdiPlusHelper).IsClass); - Assert.IsTrue(typeof(GdiPlusHelper).IsAbstract && typeof(GdiPlusHelper).IsSealed); - } - - [TestMethod] - public void FontHelper_HasOnlyStaticMembers() - { - // Test FontHelper through direct access instead of reflection - // Since FontHelper is a public static class, - // the fact that this compiles means it's accessible and static - Assert.IsNotNull(typeof(FontHelper)); - Assert.IsTrue(typeof(FontHelper).IsClass); - Assert.IsTrue(typeof(FontHelper).IsAbstract && typeof(FontHelper).IsSealed); - } - - #endregion - - #region DPI Awareness Edge Cases - - [TestMethod] - public void ForceDpiAware_GetWindowScaleFactor_ConsistentResults() - { - double scale1 = ForceDpiAware.GetWindowScaleFactor(); - double scale2 = ForceDpiAware.GetWindowScaleFactor(); - - // Should return consistent results when called multiple times - Assert.AreEqual(scale1, scale2); - } - - [TestMethod] - public void ForceDpiAware_GetActualScaleFactor_ConsistentResults() - { - double scale1 = ForceDpiAware.GetActualScaleFactor(); - double scale2 = ForceDpiAware.GetActualScaleFactor(); - - // Should return consistent results when called multiple times - Assert.AreEqual(scale1, scale2); - } - - [TestMethod] - public void ForceDpiAware_ScaleFactors_ArePositive() - { - double windowScale = ForceDpiAware.GetWindowScaleFactor(); - double actualScale = ForceDpiAware.GetActualScaleFactor(); - - Assert.IsTrue(windowScale > 0, "Window scale factor should be positive"); - Assert.IsTrue(actualScale > 0, "Actual scale factor should be positive"); - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/FontAndUITests.cs b/tests/ImGui.App.Tests/FontAndUITests.cs deleted file mode 100644 index 8645c7b..0000000 --- a/tests/ImGui.App.Tests/FontAndUITests.cs +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using Microsoft.VisualStudio.TestTools.UnitTesting; - -/// -/// Tests for font management and UI scaling functionality including FontHelper, FontAppearance, and UIScaler. -/// -[TestClass] -public class FontAndUITests -{ - [TestInitialize] - public void Setup() - { - ImGuiApp.Reset(); - } - - #region FontHelper Tests - - [TestMethod] - public void FontHelper_IsStaticClass() - { - Type fontHelperType = typeof(FontHelper); - Assert.IsTrue(fontHelperType.IsAbstract && fontHelperType.IsSealed); - } - - [TestMethod] - public void FontHelper_CleanupCustomFonts_DoesNotThrow() - { - try - { - FontHelper.CleanupCustomFonts(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void FontHelper_CleanupGlyphRanges_DoesNotThrow() - { - try - { - FontHelper.CleanupGlyphRanges(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void FontHelper_CleanupMethods_CanBeCalledMultipleTimes() - { - try - { - FontHelper.CleanupCustomFonts(); - FontHelper.CleanupGlyphRanges(); - FontHelper.CleanupCustomFonts(); - FontHelper.CleanupGlyphRanges(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - #endregion - - #region FontAppearance Tests - - [TestMethod] - public void FontAppearance_InheritsScopedAction() - { - Assert.IsTrue(typeof(FontAppearance).IsSubclassOf(typeof(ScopedAction.ScopedAction))); - } - - [TestMethod] - public void FontAppearance_Constants_HaveExpectedValues() - { - // Access FontAppearance constants directly using internal access - Assert.AreEqual("default", FontAppearance.DefaultFontName); - Assert.AreEqual(14, FontAppearance.DefaultFontPointSize); - } - - #endregion - - #region UIScaler Tests - - [TestMethod] - public void UIScaler_InheritsScopedAction() - { - Assert.IsTrue(typeof(UIScaler).IsSubclassOf(typeof(ScopedAction.ScopedAction))); - } - - #endregion - - #region Util Tests - - [TestMethod] - public void Util_IsStaticClass() - { - Type utilType = typeof(ImGuiController.Util); - Assert.IsTrue(utilType.IsAbstract && utilType.IsSealed); - } - - [TestMethod] - public void Util_Clamp_WorksCorrectly() - { - // Test clamping at minimum - Assert.AreEqual(5.0f, ImGuiController.Util.Clamp(3.0f, 5.0f, 10.0f)); - - // Test clamping at maximum - Assert.AreEqual(10.0f, ImGuiController.Util.Clamp(15.0f, 5.0f, 10.0f)); - - // Test value in range - Assert.AreEqual(7.0f, ImGuiController.Util.Clamp(7.0f, 5.0f, 10.0f)); - - // Test edge cases - Assert.AreEqual(5.0f, ImGuiController.Util.Clamp(5.0f, 5.0f, 10.0f)); - Assert.AreEqual(10.0f, ImGuiController.Util.Clamp(10.0f, 5.0f, 10.0f)); - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/ForceDpiAwareTests.cs b/tests/ImGui.App.Tests/ForceDpiAwareTests.cs deleted file mode 100644 index 3e35c79..0000000 --- a/tests/ImGui.App.Tests/ForceDpiAwareTests.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using Microsoft.VisualStudio.TestTools.UnitTesting; - -[TestClass] -public class ForceDpiAwareTests -{ - [TestMethod] - public void GetWindowScaleFactor_ReturnsValidValue() - { - // Act - double scaleFactor = ForceDpiAware.GetWindowScaleFactor(); - - // Assert - Assert.IsTrue(scaleFactor > 0); - Assert.IsTrue(scaleFactor <= 10.25); // MaxScaleFactor - } - - [TestMethod] - public void GetActualScaleFactor_ReturnsValidValue() - { - // Act - double actualScale = ForceDpiAware.GetActualScaleFactor(); - - // Assert - Assert.IsTrue(actualScale > 0); - } -} diff --git a/tests/ImGui.App.Tests/ImGui.App.Tests.csproj b/tests/ImGui.App.Tests/ImGui.App.Tests.csproj deleted file mode 100644 index c14b0a6..0000000 --- a/tests/ImGui.App.Tests/ImGui.App.Tests.csproj +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - true - net9.0 - - true - true - true - true - ktsu.ImGui.App.Tests - $(RootNamespace) - - - - - - - - - - diff --git a/tests/ImGui.App.Tests/ImGuiAppCoreTests.cs b/tests/ImGui.App.Tests/ImGuiAppCoreTests.cs deleted file mode 100644 index bc021e4..0000000 --- a/tests/ImGui.App.Tests/ImGuiAppCoreTests.cs +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using ktsu.Semantics.Paths; -using ktsu.Semantics.Strings; -using System.Collections.Concurrent; -using Microsoft.VisualStudio.TestTools.UnitTesting; - -/// -/// Tests for core ImGuiApp functionality including properties, state management, and basic operations. -/// -[TestClass] -public class ImGuiAppCoreTests -{ - [TestInitialize] - public void Setup() - { - ImGuiApp.Reset(); - } - - #region Property Tests - - [TestMethod] - public void IsFocused_AfterReset_ReturnsTrue() - { - Assert.IsTrue(ImGuiApp.IsFocused); - } - - [TestMethod] - public void IsIdle_AfterReset_ReturnsFalse() - { - Assert.IsFalse(ImGuiApp.IsIdle); - } - - [TestMethod] - public void IsVisible_WithNullWindow_ReturnsFalse() - { - bool isVisible = ImGuiApp.IsVisible; - Assert.IsFalse(isVisible); - } - - [TestMethod] - public void ScaleFactor_AfterReset_ReturnsOne() - { - Assert.AreEqual(1.0f, ImGuiApp.ScaleFactor); - } - - [TestMethod] - public void Invoker_AfterReset_IsNull() - { - Assert.IsNull(ImGuiApp.Invoker); - } - - [TestMethod] - public void WindowState_IsNeverNull() - { - ImGuiAppWindowState windowState = ImGuiApp.WindowState; - Assert.IsNotNull(windowState); - Assert.IsInstanceOfType(windowState); - } - - [TestMethod] - public void Textures_IsNeverNull() - { - ConcurrentDictionary textures = ImGuiApp.Textures; - Assert.IsNotNull(textures); - } - - [TestMethod] - public void Textures_AfterReset_IsEmpty() - { - ConcurrentDictionary textures = ImGuiApp.Textures; - Assert.AreEqual(0, textures.Count); - } - - #endregion - - #region Method Tests - - [TestMethod] - public void OnUserInput_UpdatesLastInputTime() - { - DateTime before = ImGuiApp.lastInputTime; - ImGuiApp.OnUserInput(); - DateTime after = ImGuiApp.lastInputTime; - - Assert.IsTrue(after >= before); - } - - [TestMethod] - public void OnUserInput_CanBeCalledMultipleTimes() - { - try - { - ImGuiApp.OnUserInput(); - ImGuiApp.OnUserInput(); - ImGuiApp.OnUserInput(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void Stop_WithNullWindow_ThrowsInvalidOperationException() - { - Assert.ThrowsExactly(ImGuiApp.Stop); - } - - [TestMethod] - public void Reset_ResetsStateCorrectly() - { - ImGuiApp.Reset(); - - Assert.IsFalse(ImGuiApp.IsIdle); - Assert.IsTrue(ImGuiApp.IsFocused); - Assert.IsNotNull(ImGuiApp.WindowState); - Assert.AreEqual(0, ImGuiApp.Textures.Count); - } - - #endregion - - #region Texture Management Tests - - [TestMethod] - public void TryGetTexture_WithAbsolutePath_NonExistentTexture_ReturnsFalse() - { - AbsoluteFilePath testPath = Path.GetFullPath("nonexistent_texture.png").As(); - bool result = ImGuiApp.TryGetTexture(testPath, out ImGuiAppTextureInfo? textureInfo); - - Assert.IsFalse(result); - Assert.IsNull(textureInfo); - } - - [TestMethod] - public void TryGetTexture_WithStringPath_NonExistentTexture_ReturnsFalse() - { - string testPath = Path.GetFullPath("nonexistent_texture.png"); - bool result = ImGuiApp.TryGetTexture(testPath, out ImGuiAppTextureInfo? textureInfo); - - Assert.IsFalse(result); - Assert.IsNull(textureInfo); - } - - [TestMethod] - public void DeleteTexture_WithNullTextureInfo_ThrowsArgumentNullException() - { - Assert.ThrowsExactly(() => ImGuiApp.DeleteTexture(null!)); - } - - #endregion - - #region Property Accessibility Tests - - [TestMethod] - public void CoreProperties_AreReadOnly() - { - // Test that these properties can be accessed directly and have expected default values - Assert.IsTrue(ImGuiApp.IsFocused); - Assert.IsFalse(ImGuiApp.IsIdle); - Assert.AreEqual(1.0f, ImGuiApp.ScaleFactor); - - // Test properties are read-only by attempting direct access (compilation test) - // The fact that this compiles and runs means they are readable - bool focusedValue = ImGuiApp.IsFocused; - bool idleValue = ImGuiApp.IsIdle; - float scaleValue = ImGuiApp.ScaleFactor; - - Assert.IsTrue(focusedValue || !focusedValue); // Tautology to use the values - Assert.IsTrue(idleValue || !idleValue); - Assert.IsTrue(scaleValue >= 0); - } - - #endregion - - #region Internal Structure Tests - - [TestMethod] - public void CommonFontSizes_ContainsExpectedValues() - { - int[] sizes = ImGuiApp.CommonFontSizes; - Assert.IsNotNull(sizes); - - int[] expectedSizes = [10, 12, 14, 16, 18, 20, 24, 32, 48]; - CollectionAssert.AreEqual(expectedSizes, sizes); - } - - [TestMethod] - public void DebugLogger_IsInternalStaticClass() - { - // Test DebugLogger functionality through direct access - // The fact that this compiles means DebugLogger is accessible as internal - Assert.IsNotNull(typeof(DebugLogger)); - Assert.IsTrue(typeof(DebugLogger).IsClass); - Assert.IsTrue(typeof(DebugLogger).IsAbstract && typeof(DebugLogger).IsSealed); - } - - [TestMethod] - public void DebugLogger_LogMethod_CanBeCalled() - { - try - { - // Test DebugLogger.Log method through direct access - // Should not throw when called directly - DebugLogger.Log("Test message from ImGuiAppCoreTests"); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/ImGuiAppDataStructureTests.cs b/tests/ImGui.App.Tests/ImGuiAppDataStructureTests.cs deleted file mode 100644 index 386965f..0000000 --- a/tests/ImGui.App.Tests/ImGuiAppDataStructureTests.cs +++ /dev/null @@ -1,221 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using System.Numerics; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using Silk.NET.Windowing; -using ktsu.Semantics.Paths; -using ktsu.Semantics.Strings; - -/// -/// Tests for ImGuiApp data structures including texture info, window state, configuration, and performance settings. -/// -[TestClass] -public class ImGuiAppDataStructureTests -{ - [TestInitialize] - public void Setup() - { - ImGuiApp.Reset(); - } - - #region ImGuiAppTextureInfo Tests - - [TestMethod] - public void ImGuiAppTextureInfo_DefaultConstructor_InitializesCorrectly() - { - ImGuiAppTextureInfo textureInfo = new(); - - Assert.AreEqual(new AbsoluteFilePath(), textureInfo.Path); - Assert.AreEqual(0u, textureInfo.TextureId); - Assert.AreEqual(0, textureInfo.Width); - Assert.AreEqual(0, textureInfo.Height); - } - - [TestMethod] - public void ImGuiAppTextureInfo_Properties_CanBeSet() - { - ImGuiAppTextureInfo textureInfo = new(); - AbsoluteFilePath testPath = Path.GetFullPath("test_texture.png").As(); - - textureInfo.Path = testPath; - textureInfo.TextureId = 123u; - textureInfo.Width = 256; - textureInfo.Height = 512; - - Assert.AreEqual(testPath, textureInfo.Path); - Assert.AreEqual(123u, textureInfo.TextureId); - Assert.AreEqual(256, textureInfo.Width); - Assert.AreEqual(512, textureInfo.Height); - } - - [TestMethod] - public void ImGuiAppTextureInfo_IsPublicClass() - { - Type textureInfoType = typeof(ImGuiAppTextureInfo); - Assert.IsTrue(textureInfoType.IsClass); - Assert.IsTrue(textureInfoType.IsPublic); - } - - #endregion - - #region ImGuiAppWindowState Tests - - [TestMethod] - public void ImGuiAppWindowState_DefaultConstructor_HasCorrectDefaults() - { - ImGuiAppWindowState windowState = new(); - - Assert.AreEqual(new Vector2(1280, 720), windowState.Size); - Assert.AreEqual(new Vector2(-short.MinValue, -short.MinValue), windowState.Pos); - Assert.AreEqual(WindowState.Normal, windowState.LayoutState); - } - - [TestMethod] - public void ImGuiAppWindowState_Properties_CanBeSet() - { - ImGuiAppWindowState windowState = new(); - Vector2 testSize = new(1920, 1080); - Vector2 testPos = new(100, 200); - - windowState.Size = testSize; - windowState.Pos = testPos; - windowState.LayoutState = WindowState.Maximized; - - Assert.AreEqual(testSize, windowState.Size); - Assert.AreEqual(testPos, windowState.Pos); - Assert.AreEqual(WindowState.Maximized, windowState.LayoutState); - } - - [TestMethod] - public void ImGuiAppWindowState_IsPublicClass() - { - Type windowStateType = typeof(ImGuiAppWindowState); - Assert.IsTrue(windowStateType.IsClass); - Assert.IsTrue(windowStateType.IsPublic); - } - - #endregion - - #region ImGuiAppConfig Tests - - [TestMethod] - public void ImGuiAppConfig_DefaultConstructor_InitializesAllProperties() - { - ImGuiAppConfig config = new(); - - Assert.IsNotNull(config.Title); - Assert.IsNotNull(config.IconPath); - Assert.IsNotNull(config.InitialWindowState); - Assert.IsNotNull(config.OnStart); - Assert.IsNotNull(config.OnUpdate); - Assert.IsNotNull(config.OnRender); - Assert.IsNotNull(config.OnAppMenu); - Assert.IsNotNull(config.OnMoveOrResize); - Assert.IsNotNull(config.Fonts); - Assert.IsNotNull(config.PerformanceSettings); - } - - [TestMethod] - public void ImGuiAppConfig_InitializerSyntax_WorksCorrectly() - { - ImGuiAppConfig config = new() - { - Title = "Test App", - IconPath = "test.ico", - TestMode = true, - EnableUnicodeSupport = false, - SaveIniSettings = false - }; - - Assert.AreEqual("Test App", config.Title); - Assert.AreEqual("test.ico", config.IconPath); - Assert.IsTrue(config.TestMode); - Assert.IsFalse(config.EnableUnicodeSupport); - Assert.IsFalse(config.SaveIniSettings); - } - - [TestMethod] - public void ImGuiAppConfig_Fonts_CanBeModified() - { - ImGuiAppConfig config = new(); - byte[] testFontData = [0x01, 0x02, 0x03, 0x04]; - - config.Fonts.Add("TestFont", testFontData); - - Assert.AreEqual(1, config.Fonts.Count); - Assert.IsTrue(config.Fonts.ContainsKey("TestFont")); - Assert.AreSame(testFontData, config.Fonts["TestFont"]); - } - - [TestMethod] - public void ImGuiAppConfig_EmojiFont_ReturnsValue() - { - byte[]? emojiFont = ImGuiAppConfig.EmojiFont; - - // The font may or may not be available depending on the build configuration - Assert.IsTrue(emojiFont is null || emojiFont.Length > 0); - } - - [TestMethod] - public void ImGuiAppConfig_IsPublicClass() - { - Type configType = typeof(ImGuiAppConfig); - Assert.IsTrue(configType.IsClass); - Assert.IsTrue(configType.IsPublic); - } - - #endregion - - #region ImGuiAppPerformanceSettings Tests - - [TestMethod] - public void ImGuiAppPerformanceSettings_DefaultValues_AreCorrect() - { - ImGuiAppPerformanceSettings settings = new(); - - Assert.IsTrue(settings.EnableThrottledRendering); - Assert.AreEqual(30.0, settings.FocusedFps); - Assert.AreEqual(5.0, settings.UnfocusedFps); - Assert.AreEqual(10.0, settings.IdleFps); - Assert.AreEqual(2.0, settings.NotVisibleFps); - Assert.IsTrue(settings.EnableIdleDetection); - Assert.AreEqual(30.0, settings.IdleTimeoutSeconds); - } - - [TestMethod] - public void ImGuiAppPerformanceSettings_Properties_CanBeSet() - { - ImGuiAppPerformanceSettings settings = new() - { - EnableThrottledRendering = false, - FocusedFps = 60.0, - UnfocusedFps = 15.0, - IdleFps = 5.0, - NotVisibleFps = 1.0, - EnableIdleDetection = false, - IdleTimeoutSeconds = 60.0 - }; - - Assert.IsFalse(settings.EnableThrottledRendering); - Assert.AreEqual(60.0, settings.FocusedFps); - Assert.AreEqual(15.0, settings.UnfocusedFps); - Assert.AreEqual(5.0, settings.IdleFps); - Assert.AreEqual(1.0, settings.NotVisibleFps); - Assert.IsFalse(settings.EnableIdleDetection); - Assert.AreEqual(60.0, settings.IdleTimeoutSeconds); - } - - [TestMethod] - public void ImGuiAppPerformanceSettings_IsPublicClass() - { - Type settingsType = typeof(ImGuiAppPerformanceSettings); - Assert.IsTrue(settingsType.IsClass); - Assert.IsTrue(settingsType.IsPublic); - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/ImGuiAppTests.cs b/tests/ImGui.App.Tests/ImGuiAppTests.cs deleted file mode 100644 index 857e89b..0000000 --- a/tests/ImGui.App.Tests/ImGuiAppTests.cs +++ /dev/null @@ -1,516 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -[assembly: DoNotParallelize] - -namespace ktsu.ImGui.App.Tests; - -using System.Numerics; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using Moq; -using Silk.NET.Core.Contexts; -using Silk.NET.Maths; -using Silk.NET.Windowing; -using ktsu.Semantics.Strings; -using ktsu.Semantics.Paths; - -[TestClass] -public sealed class ImGuiAppTests : IDisposable -{ - private Mock? _mockWindow; - private Mock? _mockMonitor; - private TestGL? _testGL; - private MockGL? _mockGL; - private Mock? _mockContext; - private TestOpenGLProvider? _glProvider; - - [TestInitialize] - public void Setup() - { - ResetState(); - _mockWindow = new Mock(); - _mockMonitor = new Mock(); - _testGL = new TestGL(); - _mockGL = new MockGL(_testGL); - _mockContext = new Mock(); - _glProvider = new TestOpenGLProvider(_mockGL); - - // Setup default window properties - _mockWindow.Setup(w => w.Size).Returns(new Vector2D(1280, 720)); - _mockWindow.Setup(w => w.Position).Returns(new Vector2D(0, 0)); - _mockWindow.Setup(w => w.Monitor).Returns(_mockMonitor.Object); - _mockWindow.Setup(w => w.GLContext).Returns(_mockContext.Object); - - // Setup monitor bounds - Rectangle bounds = new(0, 0, 1920, 1080); - _mockMonitor.Setup(m => m.Bounds).Returns(bounds); - } - - [TestCleanup] - public void Cleanup() - { - ResetState(); - _glProvider?.Dispose(); - _mockGL?.Dispose(); - _testGL?.Dispose(); - } - - public void Dispose() - { - Cleanup(); - } - - private static void ResetState() - { - ImGuiApp.Reset(); - } - - [TestMethod] - public void EmsToPx_WithValidInput_ReturnsCorrectPixels() - { - const float ems = 1.5f; - int expected = (int)(ems * FontAppearance.DefaultFontPointSize); - int actual = ImGuiApp.EmsToPx(ems); - Assert.AreEqual(expected, actual); - } - - [TestMethod] - public void PtsToPx_WithValidInput_ReturnsCorrectPixels() - { - const float pts = 12.0f; - float expected = pts; - int actual = ImGuiApp.PtsToPx((int)pts); - Assert.AreEqual(expected, actual); - } - - [TestMethod] - public void ImGuiAppWindowState_DefaultValues_AreCorrect() - { - ImGuiAppWindowState state = new(); - Assert.AreEqual(new Vector2(1280, 720), state.Size); - Assert.AreEqual(new Vector2(-short.MinValue, -short.MinValue), state.Pos); - Assert.AreEqual(WindowState.Normal, state.LayoutState); - } - - [TestMethod] - public void ImGuiAppConfig_DefaultValues_AreCorrect() - { - ImGuiAppConfig config = new(); - Assert.AreEqual("ImGuiApp", config.Title); - Assert.AreEqual(string.Empty, config.IconPath); - Assert.IsNotNull(config.InitialWindowState); - Assert.IsNotNull(config.OnStart); - Assert.IsNotNull(config.OnUpdate); - Assert.IsNotNull(config.OnRender); - Assert.IsNotNull(config.OnAppMenu); - Assert.IsNotNull(config.OnMoveOrResize); - Assert.IsNotNull(config.Fonts); - Assert.IsNotNull(config.PerformanceSettings); - } - - [TestMethod] - public void Start_WithNullConfig_ThrowsArgumentNullException() - { - Assert.ThrowsExactly(() => ImGuiApp.Start(null!)); - } - - [TestMethod] - public void Start_WithInvalidIconPath_ThrowsFileNotFoundException() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(iconPath: "nonexistent.png"); - Assert.ThrowsExactly(() => ImGuiApp.Start(config)); - } - - [TestMethod] - public void Stop_WhenNotRunning_ThrowsInvalidOperationException() - { - Assert.ThrowsExactly(ImGuiApp.Stop); - } - - [TestMethod] - public void EnsureWindowPositionIsValid_WithInvalidPosition_MovesToValidPosition() - { - // Reset state to ensure clean test environment - ResetState(); - - // Set up window field using direct access to internal member - Mock mockWindow = new(); - Mock mockMonitor = new(); - - // Set up monitor bounds - Rectangle monitorBounds = new(0, 0, 1920, 1080); - mockMonitor.Setup(m => m.Bounds).Returns(monitorBounds); - - // Set up window in an invalid position (off screen) - Vector2D windowSize = new(800, 600); - Vector2D offScreenPosition = new(-1000, -1000); - mockWindow.Setup(w => w.Size).Returns(windowSize); - mockWindow.Setup(w => w.Position).Returns(offScreenPosition); - mockWindow.Setup(w => w.Monitor).Returns(mockMonitor.Object); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - - // Allow position and size to be set - Vector2D finalPosition = offScreenPosition; - Vector2D finalSize = windowSize; - mockWindow.SetupSet(w => w.Position = It.IsAny>()) - .Callback>(pos => finalPosition = pos); - mockWindow.SetupSet(w => w.Size = It.IsAny>()) - .Callback>(size => finalSize = size); - mockWindow.SetupSet(w => w.WindowState = It.IsAny()); - - // Set the mock window directly using internal field - ImGuiApp.window = mockWindow.Object; - - // Call EnsureWindowPositionIsValid directly using internal method - ImGuiApp.EnsureWindowPositionIsValid(); - - // Verify the window was moved to a valid position - Assert.IsTrue(monitorBounds.Contains(finalPosition), - "Window position should be within monitor bounds"); - - // Verify the window size was preserved (improvement from new logic) - Assert.AreEqual(windowSize, finalSize, "Window size should be preserved when it fits"); - } - - [TestMethod] - public void EnsureWindowPositionIsValid_WithPerformanceOptimization_SkipsUnnecessaryChecks() - { - // Reset state to ensure clean test environment - ResetState(); - - Mock mockWindow = new(); - Mock mockMonitor = new(); - - Rectangle monitorBounds = new(0, 0, 1920, 1080); - mockMonitor.Setup(m => m.Bounds).Returns(monitorBounds); - - Vector2D validPosition = new(100, 100); - Vector2D validSize = new(800, 600); - mockWindow.Setup(w => w.Size).Returns(validSize); - mockWindow.Setup(w => w.Position).Returns(validPosition); - mockWindow.Setup(w => w.Monitor).Returns(mockMonitor.Object); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - - ImGuiApp.window = mockWindow.Object; - - // First call should perform validation - ImGuiApp.EnsureWindowPositionIsValid(); - int boundsCallsAfterFirst = mockMonitor.Invocations.Count; - - // Second call with same position/size should skip validation (performance optimization) - ImGuiApp.EnsureWindowPositionIsValid(); - int boundsCallsAfterSecond = mockMonitor.Invocations.Count; - - // Should have made no additional calls on second invocation due to caching - Assert.AreEqual(boundsCallsAfterFirst, boundsCallsAfterSecond, - "Second call should skip validation due to performance optimization"); - } - - [TestMethod] - public void EnsureWindowPositionIsValid_WithPartiallyVisibleWindow_RelocatesWhenInsufficientlyVisible() - { - // Reset state to ensure clean test environment - ResetState(); - - Mock mockWindow = new(); - Mock mockMonitor = new(); - - Rectangle monitorBounds = new(0, 0, 1920, 1080); - mockMonitor.Setup(m => m.Bounds).Returns(monitorBounds); - - // Window with only small corner visible (less than 25% visibility requirement) - Vector2D windowSize = new(800, 600); - Vector2D barelyVisiblePosition = new(1870, 1030); // Only 50x50 pixels visible - mockWindow.Setup(w => w.Size).Returns(windowSize); - mockWindow.Setup(w => w.Position).Returns(barelyVisiblePosition); - mockWindow.Setup(w => w.Monitor).Returns(mockMonitor.Object); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - - Vector2D finalPosition = barelyVisiblePosition; - mockWindow.SetupSet(w => w.Position = It.IsAny>()) - .Callback>(pos => finalPosition = pos); - mockWindow.SetupSet(w => w.Size = It.IsAny>()); - mockWindow.SetupSet(w => w.WindowState = It.IsAny()); - - ImGuiApp.window = mockWindow.Object; - ImGuiApp.EnsureWindowPositionIsValid(); - - // Window should be relocated since it's insufficiently visible - Assert.AreNotEqual(barelyVisiblePosition, finalPosition, - "Window should be relocated when insufficiently visible"); - Assert.IsTrue(monitorBounds.Contains(finalPosition), - "Relocated window should be fully within monitor bounds"); - } - - [TestMethod] - public void EnsureWindowPositionIsValid_WithSufficientlyVisibleWindow_LeavesWindowAlone() - { - // Reset state to ensure clean test environment - ResetState(); - - Mock mockWindow = new(); - Mock mockMonitor = new(); - - Rectangle monitorBounds = new(0, 0, 1920, 1080); - mockMonitor.Setup(m => m.Bounds).Returns(monitorBounds); - - // Window with significant visibility (more than 25%) - // Window 800x600 = 480,000 pixels total - // Visible portion: 400x300 = 120,000 pixels (25% exactly) - Vector2D windowSize = new(800, 600); - Vector2D partiallyVisiblePosition = new(1520, 780); // 400x300 pixels visible - mockWindow.Setup(w => w.Size).Returns(windowSize); - mockWindow.Setup(w => w.Position).Returns(partiallyVisiblePosition); - mockWindow.Setup(w => w.Monitor).Returns(mockMonitor.Object); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - - mockWindow.SetupSet(w => w.Position = It.IsAny>()); - - ImGuiApp.window = mockWindow.Object; - ImGuiApp.EnsureWindowPositionIsValid(); - - // Window position should not be changed since it has sufficient visibility - mockWindow.VerifySet(w => w.Position = It.IsAny>(), Times.Never, - "Window should not be moved when sufficiently visible"); - } - - [TestMethod] - public void EnsureWindowPositionIsValid_WithOversizedWindow_FitsToMonitor() - { - // Reset state to ensure clean test environment - ResetState(); - - Mock mockWindow = new(); - Mock mockMonitor = new(); - - // Small monitor - Rectangle smallMonitorBounds = new(0, 0, 1024, 768); - mockMonitor.Setup(m => m.Bounds).Returns(smallMonitorBounds); - - // Oversized window completely off-screen - Vector2D oversizedSize = new(2000, 1500); - Vector2D offScreenPosition = new(-2500, -2000); // Completely off-screen - mockWindow.Setup(w => w.Size).Returns(oversizedSize); - mockWindow.Setup(w => w.Position).Returns(offScreenPosition); - mockWindow.Setup(w => w.Monitor).Returns(mockMonitor.Object); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - - Vector2D finalSize = oversizedSize; - mockWindow.SetupSet(w => w.Position = It.IsAny>()); - mockWindow.SetupSet(w => w.Size = It.IsAny>()) - .Callback>(size => finalSize = size); - mockWindow.SetupSet(w => w.WindowState = It.IsAny()); - - ImGuiApp.window = mockWindow.Object; - ImGuiApp.EnsureWindowPositionIsValid(); - - // Debug: Check if window was relocated at all - mockWindow.VerifySet(w => w.Position = It.IsAny>(), Times.AtLeastOnce, - "Window should have been relocated when completely off-screen"); - - // Window should be resized to fit monitor (with 100px margin) - Assert.IsTrue(finalSize.X <= smallMonitorBounds.Size.X - 100, - $"Window width {finalSize.X} should be <= {smallMonitorBounds.Size.X - 100} to fit monitor"); - Assert.IsTrue(finalSize.Y <= smallMonitorBounds.Size.Y - 100, - $"Window height {finalSize.Y} should be <= {smallMonitorBounds.Size.Y - 100} to fit monitor"); - Assert.IsTrue(finalSize.X >= 640 && finalSize.Y >= 480, - $"Window size {finalSize} should maintain minimum size of 640x480"); - } - - [TestMethod] - public void ForceWindowPositionValidation_ForcesNextValidation() - { - // Reset state to ensure clean test environment - ResetState(); - - Mock mockWindow = new(); - Mock mockMonitor = new(); - - Rectangle monitorBounds = new(0, 0, 1920, 1080); - mockMonitor.Setup(m => m.Bounds).Returns(monitorBounds); - - Vector2D validPosition = new(100, 100); - Vector2D validSize = new(800, 600); - mockWindow.Setup(w => w.Size).Returns(validSize); - mockWindow.Setup(w => w.Position).Returns(validPosition); - mockWindow.Setup(w => w.Monitor).Returns(mockMonitor.Object); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - - ImGuiApp.window = mockWindow.Object; - - // First validation - ImGuiApp.EnsureWindowPositionIsValid(); - int callsAfterFirst = mockMonitor.Invocations.Count; - - // Force validation should make next call perform validation even with same position - ImGuiApp.ForceWindowPositionValidation(); - ImGuiApp.EnsureWindowPositionIsValid(); - int callsAfterForced = mockMonitor.Invocations.Count; - - // Should have made additional calls after forcing validation - Assert.IsTrue(callsAfterForced > callsAfterFirst, - "Forced validation should cause additional monitor access"); - } - - [TestMethod] - public void OpenGLProvider_GetGL_ReturnsSameInstance() - { - // Setup test GL provider - using TestGL testGL = new(); - using MockGL mockGL = new(testGL); - using TestOpenGLProvider provider = new(mockGL); - - // Get GL instances - ImGuiController.IGL gl1 = provider.GetGL(); - ImGuiController.IGL gl2 = provider.GetGL(); - - // Verify same instance is returned - Assert.AreSame(gl1, gl2, "OpenGLProvider should return the same GL instance on subsequent calls"); - } - - [TestMethod] - public void DeleteTexture_WithNullGL_ThrowsInvalidOperationException() - { - // Reset state to ensure clean test environment - ResetState(); - - // Set up a basic invoker that executes actions immediately using direct access - ImGuiApp.Invoker = new Invoker.Invoker(); - - // Now test the DeleteTexture method - Assert.ThrowsExactly(() => ImGuiApp.DeleteTexture(1)); - } - - [TestMethod] - public void GetOrLoadTexture_WithInvalidPath_ThrowsArgumentException() - { - AbsoluteFilePath invalidPath = new(); - Assert.ThrowsExactly(() => ImGuiApp.GetOrLoadTexture(invalidPath)); - } - - [TestMethod] - public void TextureReloading_AfterDeletion_CreatesNewTexture() - { - // Reset state to ensure clean test environment - ResetState(); - - // Set up a path for testing - use a proper absolute path format - AbsoluteFilePath mockTexturePath = Path.GetFullPath("test_texture.png").As(); - - // We need to initialize minimal parts of ImGuiApp for the test - ImGuiApp.Invoker = new Invoker.Invoker(); - - // We'll test using the public API (TryGetTexture) rather than direct access - // First, verify there's no texture initially - bool initialTextureExists = ImGuiApp.TryGetTexture(mockTexturePath, out _); - Assert.IsFalse(initialTextureExists, "Should not have any textures initially"); - - // Manually add a texture through direct access to internal property - System.Collections.Concurrent.ConcurrentDictionary texturesDict = ImGuiApp.Textures; - Assert.IsNotNull(texturesDict, "Textures dictionary should not be null"); - - // First texture - ImGuiAppTextureInfo firstTextureInfo = new() - { - Path = mockTexturePath, - TextureId = 1001, - Width = 100, - Height = 100 - }; - - // Add the texture directly to the dictionary - texturesDict.TryAdd(mockTexturePath, firstTextureInfo); - - // Verify it can be accessed via the public API - bool textureExists = ImGuiApp.TryGetTexture(mockTexturePath, out ImGuiAppTextureInfo? retrievedTexture); - Assert.IsTrue(textureExists, "Texture should exist after adding"); - Assert.IsNotNull(retrievedTexture, "Retrieved texture should not be null"); - Assert.AreEqual(1001u, retrievedTexture!.TextureId, "Texture ID should match"); - - // Remove the texture to simulate deletion - texturesDict.TryRemove(mockTexturePath, out _); - - // Verify it's removed - textureExists = ImGuiApp.TryGetTexture(mockTexturePath, out _); - Assert.IsFalse(textureExists, "Texture should be removed after deletion"); - - // Create a second texture - ImGuiAppTextureInfo secondTextureInfo = new() - { - Path = mockTexturePath, - TextureId = 1002, - Width = 100, - Height = 100 - }; - - // Add the second texture to the dictionary - texturesDict.TryAdd(mockTexturePath, secondTextureInfo); - - // Verify the newly loaded texture - textureExists = ImGuiApp.TryGetTexture(mockTexturePath, out ImGuiAppTextureInfo? reloadedTexture); - Assert.IsTrue(textureExists, "Texture should exist after reloading"); - Assert.IsNotNull(reloadedTexture, "Reloaded texture should not be null"); - Assert.AreEqual(1002u, reloadedTexture!.TextureId, "New texture ID should match"); - Assert.AreNotEqual(firstTextureInfo.TextureId, reloadedTexture.TextureId, "Reloaded texture should have a different ID"); - } - - [TestMethod] - public void PerformanceSettings_DefaultValues_AreCorrect() - { - // Arrange & Act - ImGuiAppPerformanceSettings settings = new(); - - // Assert - Assert.IsTrue(settings.EnableThrottledRendering); - Assert.AreEqual(30.0, settings.FocusedFps); - Assert.AreEqual(5.0, settings.UnfocusedFps); - Assert.AreEqual(10.0, settings.IdleFps); - Assert.AreEqual(2.0, settings.NotVisibleFps); - Assert.IsTrue(settings.EnableIdleDetection); - Assert.AreEqual(30.0, settings.IdleTimeoutSeconds); - } - - [TestMethod] - public void Reset_ResetsPerformanceFields_Correctly() - { - // Arrange - Simulate some state changes that would occur during normal operation - // Note: We can't directly set IsIdle since it has a private setter, but we can verify it's reset - // We also can't directly access lastInputTime, but we can verify the Reset behavior - - // Act - Reset the application state - ImGuiApp.Reset(); - - // Assert - Verify that performance-related fields are reset to their default values - Assert.IsFalse(ImGuiApp.IsIdle, "IsIdle should be reset to false"); - Assert.IsTrue(ImGuiApp.IsFocused, "IsFocused should be reset to true"); - - // Note: lastInputTime is private so we can't directly test it, but the Reset() method - // should set it to DateTime.UtcNow, which will be tested implicitly through the idle detection logic - } - - [TestMethod] - public void Reset_PreventesStatePollutionBetweenTests() - { - // Arrange - First call Reset to ensure clean state - ImGuiApp.Reset(); - - // Verify initial clean state - Assert.IsTrue(ImGuiApp.IsFocused, "IsFocused should start as true"); - Assert.IsFalse(ImGuiApp.IsIdle, "IsIdle should start as false"); - - // Act - Simulate some state changes that could happen during a test - // We can call OnUserInput to update lastInputTime - ImGuiApp.OnUserInput(); - - // Call Reset again to simulate what happens between test runs - ImGuiApp.Reset(); - - // Assert - Verify that Reset properly restored the default state - Assert.IsTrue(ImGuiApp.IsFocused, "IsFocused should be reset to true"); - Assert.IsFalse(ImGuiApp.IsIdle, "IsIdle should be reset to false"); - - // The lastInputTime should be reset to DateTime.UtcNow (current time) - // We can't test this directly, but the behavior should be consistent - } -} diff --git a/tests/ImGui.App.Tests/ImGuiAppWindowManagementTests.cs b/tests/ImGui.App.Tests/ImGuiAppWindowManagementTests.cs deleted file mode 100644 index 59f9489..0000000 --- a/tests/ImGui.App.Tests/ImGuiAppWindowManagementTests.cs +++ /dev/null @@ -1,620 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using System.Numerics; - -using Microsoft.VisualStudio.TestTools.UnitTesting; -using Moq; -using Silk.NET.Windowing; -using ktsu.Semantics.Paths; - -/// -/// Tests for ImGuiApp window management functionality including initialization, configuration validation, and event handling. -/// -[TestClass] -public sealed class ImGuiAppWindowManagementTests -{ - [TestInitialize] - public void Setup() - { - ImGuiApp.Reset(); - } - - [TestCleanup] - public void Cleanup() - { - ImGuiApp.Reset(); - } - - #region ValidateConfig Tests - - [TestMethod] - public void ValidateConfig_WithValidConfig_DoesNotThrow() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(); - - try - { - ImGuiApp.ValidateConfig(config); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void AdjustConfigForStartup_WithMinimizedState_ConvertsToNormal() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(); - config.InitialWindowState.LayoutState = WindowState.Minimized; - - ImGuiApp.AdjustConfigForStartup(config); - - Assert.AreEqual(WindowState.Normal, config.InitialWindowState.LayoutState); - } - - [TestMethod] - public void ValidateConfig_WithNonExistentIconPath_ThrowsFileNotFoundException() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(iconPath: "nonexistent_icon.png"); - - Assert.ThrowsExactly(() => ImGuiApp.ValidateConfig(config)); - } - - [TestMethod] - public void ValidateConfig_WithEmptyIconPath_DoesNotThrow() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(iconPath: ""); - - try - { - ImGuiApp.ValidateConfig(config); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void ValidateConfig_WithNullFontKey_ThrowsArgumentNullException() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(); - - // This will throw ArgumentNullException when trying to add null key to dictionary - Assert.ThrowsExactly(() => config.Fonts[null!] = [1, 2, 3]); - } - - [TestMethod] - public void ValidateConfig_WithEmptyFontKey_ThrowsArgumentException() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(); - config.Fonts[""] = [1, 2, 3]; - - Assert.ThrowsExactly(() => ImGuiApp.ValidateConfig(config)); - } - - [TestMethod] - public void ValidateConfig_WithNullFontData_ThrowsArgumentException() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(); - config.Fonts["TestFont"] = null!; - - Assert.ThrowsExactly(() => ImGuiApp.ValidateConfig(config)); - } - - [TestMethod] - public void ValidateConfig_WithEmptyDefaultFonts_ThrowsArgumentException() - { - // Create a config with empty default fonts - ImGuiAppConfig config = new() - { - Title = "Test", - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(800, 600), - Pos = new Vector2(100, 100), - LayoutState = WindowState.Normal - }, - DefaultFonts = [] // Empty default fonts should cause validation error - }; - - Assert.ThrowsExactly(() => ImGuiApp.ValidateConfig(config)); - } - - #endregion - - #region InitializeWindow Tests - - [TestMethod] - public void InitializeWindow_InTestMode_UsesTestWindow() - { - Mock mockWindow = TestHelpers.CreateMockWindow(); - ImGuiAppConfig config = new() - { - Title = "Test", - TestMode = true, - TestWindow = mockWindow.Object, - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(800, 600), - Pos = new Vector2(100, 100), - LayoutState = WindowState.Normal - } - }; - - ImGuiApp.InitializeWindow(config); - - Assert.AreSame(mockWindow.Object, ImGuiApp.window); - } - - [TestMethod] - public void InitializeWindow_InTestModeWithNullTestWindow_ThrowsInvalidOperationException() - { - ImGuiAppConfig config = new() - { - Title = "Test", - TestMode = true, - TestWindow = null, - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(800, 600), - Pos = new Vector2(100, 100), - LayoutState = WindowState.Normal - } - }; - - Assert.ThrowsExactly(() => ImGuiApp.InitializeWindow(config)); - } - - [TestMethod] - public void InitializeWindow_WithValidConfig_DoesNotThrow() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(); - - try - { - ImGuiApp.InitializeWindow(config); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - #endregion - - #region Window State Management Tests - - [TestMethod] - public void WindowState_WithNullWindow_ReturnsDefaultState() - { - // Ensure window is null - ImGuiApp.window = null; - - ImGuiAppWindowState state = ImGuiApp.WindowState; - - Assert.IsNotNull(state); - Assert.AreEqual(WindowState.Normal, state.LayoutState); - } - - [TestMethod] - public void CaptureWindowNormalState_WithNormalWindow_UpdatesLastNormalWindowState() - { - Mock mockWindow = TestHelpers.CreateMockWindow(); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - mockWindow.Setup(w => w.Size).Returns(new Silk.NET.Maths.Vector2D(1024, 768)); - mockWindow.Setup(w => w.Position).Returns(new Silk.NET.Maths.Vector2D(200, 150)); - - ImGuiApp.window = mockWindow.Object; - - ImGuiApp.CaptureWindowNormalState(); - - Assert.AreEqual(new Vector2(1024, 768), ImGuiApp.LastNormalWindowState.Size); - Assert.AreEqual(new Vector2(200, 150), ImGuiApp.LastNormalWindowState.Pos); - Assert.AreEqual(WindowState.Normal, ImGuiApp.LastNormalWindowState.LayoutState); - } - - [TestMethod] - public void CaptureWindowNormalState_WithMaximizedWindow_DoesNotUpdateLastNormalWindowState() - { - Mock mockWindow = TestHelpers.CreateMockWindow(); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Maximized); - - ImGuiApp.window = mockWindow.Object; - - Vector2 originalSize = ImGuiApp.LastNormalWindowState.Size; - Vector2 originalPos = ImGuiApp.LastNormalWindowState.Pos; - - ImGuiApp.CaptureWindowNormalState(); - - // Should not change when window is maximized - Assert.AreEqual(originalSize, ImGuiApp.LastNormalWindowState.Size); - Assert.AreEqual(originalPos, ImGuiApp.LastNormalWindowState.Pos); - } - - #endregion - - #region Window Position Validation Tests - - [TestMethod] - public void EnsureWindowPositionIsValid_WithNullWindow_DoesNotThrow() - { - ImGuiApp.window = null; - - try - { - ImGuiApp.EnsureWindowPositionIsValid(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void EnsureWindowPositionIsValid_WithNullMonitor_DoesNotThrow() - { - Mock mockWindow = TestHelpers.CreateMockWindow(); - mockWindow.Setup(w => w.Monitor).Returns((IMonitor?)null); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - - ImGuiApp.window = mockWindow.Object; - - try - { - ImGuiApp.EnsureWindowPositionIsValid(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void EnsureWindowPositionIsValid_WithMinimizedWindow_DoesNotThrow() - { - Mock mockWindow = TestHelpers.CreateMockWindow(); - Mock mockMonitor = new(); - mockWindow.Setup(w => w.Monitor).Returns(mockMonitor.Object); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Minimized); - - ImGuiApp.window = mockWindow.Object; - - try - { - ImGuiApp.EnsureWindowPositionIsValid(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - #endregion - - #region Performance Settings Tests - - [TestMethod] - public void UpdateWindowPerformance_WithThrottlingDisabled_DoesNotUpdateTargetFrameTime() - { - ImGuiAppConfig config = new() - { - Title = "Test", - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(800, 600), - Pos = new Vector2(100, 100), - LayoutState = WindowState.Normal - }, - PerformanceSettings = new ImGuiAppPerformanceSettings - { - EnableThrottledRendering = false - } - }; - ImGuiApp.Config = config; - - double originalTargetFrameTime = ImGuiApp.targetFrameTimeMs; - - ImGuiApp.UpdateWindowPerformance(); - - Assert.AreEqual(originalTargetFrameTime, ImGuiApp.targetFrameTimeMs); - } - - [TestMethod] - public void UpdateWindowPerformance_WithIdleDetectionDisabled_SetsIdleToFalse() - { - ImGuiAppConfig config = new() - { - Title = "Test", - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(800, 600), - Pos = new Vector2(100, 100), - LayoutState = WindowState.Normal - }, - PerformanceSettings = new ImGuiAppPerformanceSettings - { - EnableIdleDetection = false - } - }; - ImGuiApp.Config = config; - - ImGuiApp.UpdateWindowPerformance(); - - Assert.IsFalse(ImGuiApp.IsIdle); - } - - [TestMethod] - public void UpdateWindowPerformance_WithFocusedWindow_DoesNotThrow() - { - ImGuiAppConfig config = new() - { - Title = "Test", - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(800, 600), - Pos = new Vector2(100, 100), - LayoutState = WindowState.Normal - }, - PerformanceSettings = new ImGuiAppPerformanceSettings - { - FocusedFps = 60.0 - } - }; - ImGuiApp.Config = config; - - try - { - ImGuiApp.UpdateWindowPerformance(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void UpdateWindowPerformance_WithUnfocusedWindow_DoesNotThrow() - { - ImGuiAppConfig config = new() - { - Title = "Test", - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(800, 600), - Pos = new Vector2(100, 100), - LayoutState = WindowState.Normal - }, - PerformanceSettings = new ImGuiAppPerformanceSettings - { - UnfocusedFps = 10.0 - } - }; - ImGuiApp.Config = config; - - try - { - ImGuiApp.UpdateWindowPerformance(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - #endregion - - #region Window Icon Tests - - [TestMethod] - public void SetWindowIcon_WithNonExistentFile_ThrowsFileNotFoundException() - { - Assert.ThrowsExactly(() => ImGuiApp.SetWindowIcon("nonexistent_icon.png")); - } - - [TestMethod] - public void SetWindowIcon_WithEmptyPath_ThrowsArgumentException() - { - Assert.ThrowsExactly(() => ImGuiApp.SetWindowIcon("")); - } - - #endregion - - #region Texture Management Integration Tests - - [TestMethod] - public void UseImageBytes_WithNullImage_ThrowsArgumentNullException() - { - Assert.ThrowsExactly(() => ImGuiApp.UseImageBytes(null!, _ => { })); - } - - [TestMethod] - public void UseImageBytes_WithNullAction_ThrowsArgumentNullException() - { - using SixLabors.ImageSharp.Image image = new(100, 100); - Assert.ThrowsExactly(() => ImGuiApp.UseImageBytes(image, null!)); - } - - [TestMethod] - public void GetOrLoadTexture_WithInvalidPath_ThrowsArgumentException() - { - AbsoluteFilePath invalidPath = new(); - Assert.ThrowsExactly(() => ImGuiApp.GetOrLoadTexture(invalidPath)); - } - - #endregion - - #region Cleanup Tests - - [TestMethod] - public void CleanupPinnedFontData_DoesNotThrow() - { - try - { - ImGuiApp.CleanupPinnedFontData(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void CleanupController_DoesNotThrow() - { - try - { - ImGuiApp.CleanupController(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void CleanupInputContext_DoesNotThrow() - { - try - { - ImGuiApp.CleanupInputContext(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void CleanupOpenGL_DoesNotThrow() - { - try - { - ImGuiApp.CleanupOpenGL(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - #endregion - - #region Utility Method Tests - - [TestMethod] - public void EmsToPx_WithNullController_UsesDefaultFontSize() - { - ImGuiApp.controller = null; - - int result = ImGuiApp.EmsToPx(2.0f); - int expected = (int)(2.0f * FontAppearance.DefaultFontPointSize); - - Assert.AreEqual(expected, result); - } - - [TestMethod] - public void PtsToPx_WithScaleFactor_ReturnsScaledValue() - { - // Use reflection to set ScaleFactor - typeof(ImGuiApp).GetProperty("ScaleFactor")?.SetValue(null, 2.0f); - - int result = ImGuiApp.PtsToPx(12); - - Assert.AreEqual(24, result); - } - - [TestMethod] - public void CommonFontSizes_ContainsExpectedSizes() - { - int[] expectedSizes = [10, 12, 14, 16, 18, 20, 24, 32, 48]; - - CollectionAssert.AreEqual(expectedSizes, ImGuiApp.CommonFontSizes); - } - - #endregion - - #region Context Change Tests - - [TestMethod] - public void CheckAndHandleContextChange_WithNullGL_DoesNotThrow() - { - ImGuiApp.gl = null; - - try - { - ImGuiApp.CheckAndHandleContextChange(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void ReloadAllTextures_WithNullGL_DoesNotThrow() - { - ImGuiApp.gl = null; - - try - { - ImGuiApp.ReloadAllTextures(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void CleanupAllTextures_WithNullGL_DoesNotThrow() - { - ImGuiApp.gl = null; - - try - { - ImGuiApp.CleanupAllTextures(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/ImGuiControllerComponentTests.cs b/tests/ImGui.App.Tests/ImGuiControllerComponentTests.cs deleted file mode 100644 index bf1dd33..0000000 --- a/tests/ImGui.App.Tests/ImGuiControllerComponentTests.cs +++ /dev/null @@ -1,257 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using System; -using Hexa.NET.ImGui; -using ktsu.ImGui.App.ImGuiController; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using Moq; -using Silk.NET.Windowing; - -/// -/// Tests for ImGuiController components including font configuration, factories, and providers. -/// -[TestClass] -public class ImGuiControllerComponentTests -{ - #region ImGuiFontConfig Tests - - [TestMethod] - public void ImGuiFontConfig_Constructor_ValidParameters_InitializesCorrectly() - { - const string testPath = "test.ttf"; - const int testSize = 16; - - ImGuiFontConfig config = new(testPath, testSize); - - // These calls should hit the property getters - string actualPath = config.FontPath; - int actualSize = config.FontSize; - Func? actualGlyphRange = config.GetGlyphRange; - - Assert.AreEqual(testPath, actualPath); - Assert.AreEqual(testSize, actualSize); - Assert.IsNull(actualGlyphRange); - } - - [TestMethod] - public void ImGuiFontConfig_Constructor_WithGlyphRange_InitializesCorrectly() - { - const string testPath = "test.ttf"; - const int testSize = 16; - static IntPtr TestGlyphRange(ImGuiIOPtr io) => IntPtr.Zero; - - ImGuiFontConfig config = new(testPath, testSize, TestGlyphRange); - - Assert.AreEqual(testPath, config.FontPath); - Assert.AreEqual(testSize, config.FontSize); - Assert.IsNotNull(config.GetGlyphRange); - Assert.AreSame(TestGlyphRange, config.GetGlyphRange); - } - - [TestMethod] - public void ImGuiFontConfig_Constructor_ZeroFontSize_ThrowsException() - { - Assert.ThrowsExactly(() => new ImGuiFontConfig("test.ttf", 0)); - } - - [TestMethod] - public void ImGuiFontConfig_Constructor_NegativeFontSize_ThrowsException() - { - Assert.ThrowsExactly(() => new ImGuiFontConfig("test.ttf", -1)); - } - - [TestMethod] - public void ImGuiFontConfig_Constructor_NullFontPath_ThrowsException() - { - Assert.ThrowsExactly(() => new ImGuiFontConfig(null!, 16)); - } - - [TestMethod] - public void ImGuiFontConfig_Equals_SameValues_ReturnsTrue() - { - ImGuiFontConfig config1 = new("test.ttf", 16); - ImGuiFontConfig config2 = new("test.ttf", 16); - - Assert.IsTrue(config1.Equals(config2)); - Assert.IsTrue(config1 == config2); - Assert.IsFalse(config1 != config2); - } - - [TestMethod] - public void ImGuiFontConfig_Equals_DifferentValues_ReturnsFalse() - { - ImGuiFontConfig config1 = new("test1.ttf", 16); - ImGuiFontConfig config2 = new("test2.ttf", 16); - ImGuiFontConfig config3 = new("test1.ttf", 18); - - Assert.IsFalse(config1.Equals(config2)); - Assert.IsFalse(config1.Equals(config3)); - Assert.IsFalse(config1 == config2); - Assert.IsTrue(config1 != config2); - } - - [TestMethod] - public void ImGuiFontConfig_GetHashCode_SameValues_ReturnsSameHash() - { - ImGuiFontConfig config1 = new("test.ttf", 16); - ImGuiFontConfig config2 = new("test.ttf", 16); - - Assert.AreEqual(config1.GetHashCode(), config2.GetHashCode()); - } - - [TestMethod] - public void ImGuiFontConfig_Equals_WithObject_WorksCorrectly() - { - ImGuiFontConfig config1 = new("test.ttf", 16); - ImGuiFontConfig config2 = new("test.ttf", 16); - object config2AsObject = config2; - - Assert.IsTrue(config1.Equals(config2AsObject)); - Assert.IsFalse(config1.Equals("not a font config")); - Assert.IsFalse(config1.Equals(null)); - } - - [TestMethod] - public void ImGuiFontConfig_IsStruct() - { - Type configType = typeof(ImGuiFontConfig); - Assert.IsTrue(configType.IsValueType); - Assert.IsFalse(configType.IsClass); - } - - [TestMethod] - public void ImGuiFontConfig_ImplementsIEquatable() - { - Type configType = typeof(ImGuiFontConfig); - Type equatableType = typeof(IEquatable); - Assert.IsTrue(equatableType.IsAssignableFrom(configType)); - } - - #endregion - - #region WindowOpenGLFactory Tests - - [TestMethod] - public void WindowOpenGLFactory_Constructor_ValidWindow_InitializesCorrectly() - { - Mock mockWindow = new(); - WindowOpenGLFactory factory = new(mockWindow.Object); - - Assert.IsNotNull(factory); - } - - [TestMethod] - public void WindowOpenGLFactory_Constructor_NullWindow_ThrowsException() - { - Assert.ThrowsExactly(() => new WindowOpenGLFactory(null!)); - } - - [TestMethod] - public void WindowOpenGLFactory_ImplementsIOpenGLFactory() - { - Type factoryType = typeof(WindowOpenGLFactory); - Assert.IsTrue(typeof(IOpenGLFactory).IsAssignableFrom(factoryType)); - } - - #endregion - - #region OpenGLProvider Tests - - [TestMethod] - public void OpenGLProvider_Constructor_ValidFactory_InitializesCorrectly() - { - Mock mockFactory = new(); - using OpenGLProvider provider = new(mockFactory.Object); - - Assert.IsNotNull(provider); - } - - [TestMethod] - public void OpenGLProvider_Constructor_NullFactory_ThrowsException() - { - Assert.ThrowsExactly(() => new OpenGLProvider(null!)); - } - - [TestMethod] - public void OpenGLProvider_Dispose_CanBeCalledMultipleTimes() - { - try - { - Mock mockFactory = new(); - OpenGLProvider provider = new(mockFactory.Object); - - provider.Dispose(); - provider.Dispose(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void OpenGLProvider_GetGL_AfterDispose_ThrowsException() - { - Mock mockFactory = new(); - using OpenGLProvider provider = new(mockFactory.Object); - - provider.Dispose(); - Assert.ThrowsExactly(provider.GetGL); - } - - [TestMethod] - public void OpenGLProvider_ImplementsIDisposable() - { - Type providerType = typeof(OpenGLProvider); - Assert.IsTrue(typeof(IDisposable).IsAssignableFrom(providerType)); - } - - #endregion - - #region Texture and TextureCoordinate Tests - - [TestMethod] - public void TextureCoordinate_EnumValues_HaveCorrectMappings() - { - Assert.AreEqual(0, (int)TextureCoordinate.None); - Assert.AreEqual((int)Silk.NET.OpenGL.TextureParameterName.TextureWrapS, (int)TextureCoordinate.S); - Assert.AreEqual((int)Silk.NET.OpenGL.TextureParameterName.TextureWrapT, (int)TextureCoordinate.T); - Assert.AreEqual((int)Silk.NET.OpenGL.TextureParameterName.TextureWrapR, (int)TextureCoordinate.R); - } - - [TestMethod] - public void TextureCoordinate_AllEnumValues_AreDefined() - { - TextureCoordinate[] values = Enum.GetValues(); - - Assert.IsTrue(values.Length >= 4); - Assert.IsTrue(values.Contains(TextureCoordinate.None)); - Assert.IsTrue(values.Contains(TextureCoordinate.S)); - Assert.IsTrue(values.Contains(TextureCoordinate.T)); - Assert.IsTrue(values.Contains(TextureCoordinate.R)); - } - - [TestMethod] - public void TextureCoordinate_IsEnum() - { - Type coordType = typeof(TextureCoordinate); - Assert.IsTrue(coordType.IsEnum); - Assert.AreEqual(typeof(int), Enum.GetUnderlyingType(coordType)); - } - - [TestMethod] - public void Texture_Constants_HaveExpectedValues() - { - Assert.AreEqual((Silk.NET.OpenGL.SizedInternalFormat)Silk.NET.OpenGL.GLEnum.Srgb8Alpha8, Texture.Srgb8Alpha8); - Assert.AreEqual((Silk.NET.OpenGL.SizedInternalFormat)Silk.NET.OpenGL.GLEnum.Rgb32f, Texture.Rgb32F); - Assert.AreEqual((Silk.NET.OpenGL.GLEnum)0x84FF, Texture.MaxTextureMaxAnisotropy); - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/MockGL.cs b/tests/ImGui.App.Tests/MockGL.cs deleted file mode 100644 index 50727d8..0000000 --- a/tests/ImGui.App.Tests/MockGL.cs +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using ktsu.ImGui.App.ImGuiController; -using Silk.NET.Maths; -using Silk.NET.OpenGL; -using Color = System.Drawing.Color; - -/// -/// A mock GL implementation that delegates to TestGL. -/// -public sealed unsafe class MockGL(TestGL testGL) : IGL -{ - private readonly TestGL _testGL = testGL ?? throw new ArgumentNullException(nameof(testGL)); - private bool _disposed; - - private void ThrowIfDisposed() - { - ObjectDisposedException.ThrowIf(_disposed, this); - } - - public void GetInteger(GLEnum pname, out int data) - { - ThrowIfDisposed(); - _testGL.GetInteger(pname, out data); - } - - public float GetFloat(GLEnum pname) - { - ThrowIfDisposed(); - return _testGL.GetFloat(pname); - } - - public void Enable(GLEnum cap) - { - ThrowIfDisposed(); - _testGL.Enable(cap); - } - - public void Disable(GLEnum cap) - { - ThrowIfDisposed(); - _testGL.Disable(cap); - } - - public void BlendEquation(GLEnum mode) - { - ThrowIfDisposed(); - _testGL.BlendEquation(mode); - } - - public void BlendFuncSeparate(GLEnum srcRGB, GLEnum dstRGB, GLEnum srcAlpha, GLEnum dstAlpha) - { - ThrowIfDisposed(); - _testGL.BlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); - } - - public void Viewport(Vector2D size) - { - ThrowIfDisposed(); - _testGL.Viewport(size); - } - - public void ClearColor(Color color) - { - ThrowIfDisposed(); - _testGL.ClearColor(color); - } - - public void Clear(uint mask) - { - ThrowIfDisposed(); - _testGL.Clear(mask); - } - - public void BindTexture(GLEnum target, uint texture) - { - ThrowIfDisposed(); - _testGL.BindTexture(target, texture); - } - - public void DeleteTexture(uint texture) - { - ThrowIfDisposed(); - _testGL.DeleteTexture(texture); - } - - public uint GenTexture() - { - ThrowIfDisposed(); - return _testGL.GenTexture(); - } - - public void TexParameter(GLEnum target, GLEnum pname, int param) - { - ThrowIfDisposed(); - _testGL.TexParameter(target, pname, param); - } - - public void TexImage2D(GLEnum target, int level, int internalformat, uint width, uint height, int border, GLEnum format, GLEnum type, void* pixels) - { - ThrowIfDisposed(); - _testGL.TexImage2D(target, level, internalformat, width, height, border, format, type, pixels); - } - - public void Dispose() - { - if (!_disposed) - { - _testGL.Dispose(); - _disposed = true; - } - } -} diff --git a/tests/ImGui.App.Tests/PidFrameLimiterTests.cs b/tests/ImGui.App.Tests/PidFrameLimiterTests.cs deleted file mode 100644 index 7560f18..0000000 --- a/tests/ImGui.App.Tests/PidFrameLimiterTests.cs +++ /dev/null @@ -1,565 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using Microsoft.VisualStudio.TestTools.UnitTesting; - -using ktsu.ImGui.App; - -/// -/// Tests for PidFrameLimiter class covering frame rate limiting, PID controller logic, and auto-tuning functionality. -/// -[TestClass] -public sealed class PidFrameLimiterTests -{ - private PidFrameLimiter? _frameLimiter; - - [TestInitialize] - public void Setup() - { - _frameLimiter = new PidFrameLimiter(); - } - - [TestCleanup] - public void Cleanup() - { - _frameLimiter?.StopAutoTuning(); - } - - #region Constructor Tests - - [TestMethod] - public void Constructor_WithDefaultParameters_InitializesCorrectly() - { - PidFrameLimiter limiter = new(); - (double kp, double ki, double kd) = limiter.GetCurrentParameters(); - - Assert.AreEqual(1.8, kp, 0.001); - Assert.AreEqual(0.048, ki, 0.001); - Assert.AreEqual(0.237, kd, 0.001); - } - - [TestMethod] - public void Constructor_WithCustomParameters_InitializesCorrectly() - { - const double testKp = 2.0; - const double testKi = 0.1; - const double testKd = 0.3; - - PidFrameLimiter limiter = new(testKp, testKi, testKd); - (double kp, double ki, double kd) = limiter.GetCurrentParameters(); - - Assert.AreEqual(testKp, kp, 0.001); - Assert.AreEqual(testKi, ki, 0.001); - Assert.AreEqual(testKd, kd, 0.001); - } - - #endregion - - #region Basic Functionality Tests - - [TestMethod] - public void Reset_ClearsInternalState() - { - Assert.IsNotNull(_frameLimiter); - - // Simulate some frame limiting to build internal state - _frameLimiter.LimitFrameRate(33.33); // 30 FPS - Thread.Sleep(50); - _frameLimiter.LimitFrameRate(33.33); - - // Reset should clear the state - _frameLimiter.Reset(); - - // After reset, the limiter should behave as if newly created - string diagnosticInfo = _frameLimiter.GetDiagnosticInfo(); - Assert.IsNotNull(diagnosticInfo); - Assert.IsTrue(diagnosticInfo.Contains("Sleep: 0")); - } - - [TestMethod] - public void LimitFrameRate_WithValidTargetTime_DoesNotThrow() - { - Assert.IsNotNull(_frameLimiter); - - try - { - _frameLimiter.LimitFrameRate(16.67); // 60 FPS - _frameLimiter.LimitFrameRate(33.33); // 30 FPS - _frameLimiter.LimitFrameRate(100.0); // 10 FPS - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void LimitFrameRate_WithZeroTargetTime_HandlesGracefully() - { - Assert.IsNotNull(_frameLimiter); - - try - { - _frameLimiter.LimitFrameRate(0.0); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void LimitFrameRate_WithNegativeTargetTime_HandlesGracefully() - { - Assert.IsNotNull(_frameLimiter); - - try - { - _frameLimiter.LimitFrameRate(-10.0); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void GetDiagnosticInfo_ReturnsValidString() - { - Assert.IsNotNull(_frameLimiter); - - string diagnosticInfo = _frameLimiter.GetDiagnosticInfo(); - - Assert.IsNotNull(diagnosticInfo); - Assert.IsTrue(diagnosticInfo.Contains("PID State")); - Assert.IsTrue(diagnosticInfo.Contains("Sleep")); - Assert.IsTrue(diagnosticInfo.Contains("Error")); - Assert.IsTrue(diagnosticInfo.Contains("Frame Time")); - } - - #endregion - - #region Manual PID Parameter Tests - - [TestMethod] - public void SetManualPidParameters_DoesNotThrow() - { - Assert.IsNotNull(_frameLimiter); - - const double newKp = 1.5; - const double newKi = 0.08; - const double newKd = 0.2; - - try - { - _frameLimiter.SetManualPidParameters(newKp, newKi, newKd); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void SetManualPidParameters_StopsAutoTuning() - { - Assert.IsNotNull(_frameLimiter); - - _frameLimiter.StartAutoTuning(); - (bool isActive, _, _, _, _) = _frameLimiter.GetTuningStatus(); - Assert.IsTrue(isActive); - - _frameLimiter.SetManualPidParameters(1.0, 0.1, 0.2); - - (isActive, _, _, _, _) = _frameLimiter.GetTuningStatus(); - Assert.IsFalse(isActive); - } - - #endregion - - #region Auto-Tuning Tests - - [TestMethod] - public void StartAutoTuning_ActivatesTuning() - { - Assert.IsNotNull(_frameLimiter); - - _frameLimiter.StartAutoTuning(); - - (bool isActive, int currentStep, int totalSteps, double progress, _) = _frameLimiter.GetTuningStatus(); - - Assert.IsTrue(isActive); - Assert.IsTrue(currentStep > 0); - Assert.IsTrue(totalSteps > 0); - Assert.IsTrue(progress is >= 0.0 and <= 100.0); - } - - [TestMethod] - public void StopAutoTuning_DeactivatesTuning() - { - Assert.IsNotNull(_frameLimiter); - - _frameLimiter.StartAutoTuning(); - _frameLimiter.StopAutoTuning(); - - (bool isActive, _, _, _, _) = _frameLimiter.GetTuningStatus(); - - Assert.IsFalse(isActive); - } - - [TestMethod] - public void GetTuningStatusDetailed_ReturnsValidPhaseInfo() - { - Assert.IsNotNull(_frameLimiter); - - _frameLimiter.StartAutoTuning(); - - (bool isActive, int currentStep, int totalSteps, double progress, _, string phase) = _frameLimiter.GetTuningStatusDetailed(); - - Assert.IsTrue(isActive); - Assert.IsTrue(currentStep > 0); - Assert.IsTrue(totalSteps > 0); - Assert.IsTrue(progress is >= 0.0 and <= 100.0); - Assert.IsNotNull(phase); - Assert.IsTrue(phase.Contains("Tuning")); - } - - [TestMethod] - public void GetTuningStatus_WhenNotTuning_ReturnsInactiveStatus() - { - Assert.IsNotNull(_frameLimiter); - - (bool isActive, int currentStep, int totalSteps, double progress, _) = _frameLimiter.GetTuningStatus(); - - Assert.IsFalse(isActive); - Assert.AreEqual(0, currentStep); - Assert.AreEqual(0, totalSteps); - Assert.AreEqual(0.0, progress); - } - - #endregion - - #region Frame Time History Tests - - [TestMethod] - public void UpdateFrameTimeHistory_MaintainsCorrectHistorySize() - { - Assert.IsNotNull(_frameLimiter); - - // Add more frame times than the history size - for (int i = 0; i < 20; i++) - { - _frameLimiter.UpdateFrameTimeHistory(16.67); - } - - // The internal queue should not exceed FrameHistorySize (10) - double smoothedTime = _frameLimiter.GetSmoothedFrameTime(); - Assert.AreEqual(16.67, smoothedTime, 0.1); - } - - [TestMethod] - public void GetSmoothedFrameTime_WithNoHistory_ReturnsZero() - { - Assert.IsNotNull(_frameLimiter); - - double smoothedTime = _frameLimiter.GetSmoothedFrameTime(); - - Assert.AreEqual(0.0, smoothedTime); - } - - [TestMethod] - public void GetSmoothedFrameTime_WithHistory_ReturnsAverage() - { - Assert.IsNotNull(_frameLimiter); - - _frameLimiter.UpdateFrameTimeHistory(10.0); - _frameLimiter.UpdateFrameTimeHistory(20.0); - _frameLimiter.UpdateFrameTimeHistory(30.0); - - double smoothedTime = _frameLimiter.GetSmoothedFrameTime(); - - Assert.AreEqual(20.0, smoothedTime, 0.1); - } - - #endregion - - #region High-Precision Sleep Tests - - [TestMethod] - public void ApplyHighPrecisionSleep_WithZeroTime_ReturnsImmediately() - { - DateTime start = DateTime.UtcNow; - PidFrameLimiter.ApplyHighPrecisionSleep(0.0); - DateTime end = DateTime.UtcNow; - - double elapsedMs = (end - start).TotalMilliseconds; - Assert.IsTrue(elapsedMs < 5.0, $"Expected immediate return, but took {elapsedMs}ms"); - } - - [TestMethod] - public void ApplyHighPrecisionSleep_WithNegativeTime_ReturnsImmediately() - { - DateTime start = DateTime.UtcNow; - PidFrameLimiter.ApplyHighPrecisionSleep(-10.0); - DateTime end = DateTime.UtcNow; - - double elapsedMs = (end - start).TotalMilliseconds; - Assert.IsTrue(elapsedMs < 5.0, $"Expected immediate return, but took {elapsedMs}ms"); - } - - [TestMethod] - public void ApplyHighPrecisionSleep_WithSmallTime_SleepsApproximately() - { - const double targetSleepMs = 2.0; - DateTime start = DateTime.UtcNow; - PidFrameLimiter.ApplyHighPrecisionSleep(targetSleepMs); - DateTime end = DateTime.UtcNow; - - double elapsedMs = (end - start).TotalMilliseconds; - - // Allow for some tolerance in timing due to OS scheduling - Assert.IsTrue(elapsedMs >= targetSleepMs * 0.8, $"Sleep was too short: {elapsedMs}ms vs target {targetSleepMs}ms"); - Assert.IsTrue(elapsedMs <= targetSleepMs * 2.0, $"Sleep was too long: {elapsedMs}ms vs target {targetSleepMs}ms"); - } - - #endregion - - #region Tuning Algorithm Tests - - [TestMethod] - public void CalculateStability_WithEmptyList_ReturnsZero() - { - List emptyErrors = []; - double stability = PidFrameLimiter.CalculateStability(emptyErrors); - Assert.AreEqual(0.0, stability); - } - - [TestMethod] - public void CalculateStability_WithSingleValue_ReturnsZero() - { - List singleError = [5.0]; - double stability = PidFrameLimiter.CalculateStability(singleError); - Assert.AreEqual(0.0, stability); - } - - [TestMethod] - public void CalculateStability_WithVariedValues_ReturnsPositiveStability() - { - List variedErrors = [1.0, 5.0, 3.0, 7.0, 2.0]; - double stability = PidFrameLimiter.CalculateStability(variedErrors); - Assert.IsTrue(stability > 0.0); - } - - [TestMethod] - public void CalculateStability_WithIdenticalValues_ReturnsZero() - { - List identicalErrors = [3.0, 3.0, 3.0, 3.0]; - double stability = PidFrameLimiter.CalculateStability(identicalErrors); - Assert.AreEqual(0.0, stability, 0.001); - } - - [TestMethod] - public void CalculateScore_WithLowErrors_ReturnsHighScore() - { - double score = PidFrameLimiter.CalculateScore(0.1, 0.2, 0.05); - Assert.IsTrue(score > 0.5, $"Expected high score for low errors, got {score}"); - } - - [TestMethod] - public void CalculateScore_WithHighErrors_ReturnsLowScore() - { - double score = PidFrameLimiter.CalculateScore(10.0, 20.0, 5.0); - Assert.IsTrue(score < 0.1, $"Expected low score for high errors, got {score}"); - } - - [TestMethod] - public void CalculateScore_IsAlwaysPositive() - { - double score1 = PidFrameLimiter.CalculateScore(0.0, 0.0, 0.0); - double score2 = PidFrameLimiter.CalculateScore(100.0, 200.0, 50.0); - - Assert.IsTrue(score1 > 0.0); - Assert.IsTrue(score2 > 0.0); - } - - #endregion - - #region Integration Tests - - [TestMethod] - public void FrameLimiter_ConsecutiveCalls_MaintainsStableState() - { - Assert.IsNotNull(_frameLimiter); - - const double targetFrameTime = 33.33; // 30 FPS - - try - { - for (int i = 0; i < 5; i++) - { - _frameLimiter.LimitFrameRate(targetFrameTime); - Thread.Sleep(10); // Simulate some frame processing time - } - - string diagnosticInfo = _frameLimiter.GetDiagnosticInfo(); - Assert.IsNotNull(diagnosticInfo); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected stable operation, but got: {ex.Message}"); - } - } - - [TestMethod] - public void FrameLimiter_ChangingTargetFrameRate_AdaptsCorrectly() - { - Assert.IsNotNull(_frameLimiter); - - try - { - // Start with 60 FPS - _frameLimiter.LimitFrameRate(16.67); - Thread.Sleep(20); - - // Change to 30 FPS - _frameLimiter.LimitFrameRate(33.33); - Thread.Sleep(40); - - // Change to 10 FPS - _frameLimiter.LimitFrameRate(100.0); - Thread.Sleep(110); - - string diagnosticInfo = _frameLimiter.GetDiagnosticInfo(); - Assert.IsNotNull(diagnosticInfo); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected adaptive behavior, but got: {ex.Message}"); - } - } - - #endregion - - #region Edge Case Tests - - [TestMethod] - public void FrameLimiter_VeryHighFrameRate_HandlesCorrectly() - { - Assert.IsNotNull(_frameLimiter); - - try - { - _frameLimiter.LimitFrameRate(1.0); // 1000 FPS - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected to handle very high frame rate, but got: {ex.Message}"); - } - } - - [TestMethod] - public void FrameLimiter_VeryLowFrameRate_HandlesCorrectly() - { - Assert.IsNotNull(_frameLimiter); - - try - { - _frameLimiter.LimitFrameRate(1000.0); // 1 FPS - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected to handle very low frame rate, but got: {ex.Message}"); - } - } - - [TestMethod] - public void AutoTuning_MultipleStartStop_HandlesCorrectly() - { - Assert.IsNotNull(_frameLimiter); - - try - { - _frameLimiter.StartAutoTuning(); - _frameLimiter.StopAutoTuning(); - _frameLimiter.StartAutoTuning(); - _frameLimiter.StopAutoTuning(); - - (bool isActive, _, _, _, _) = _frameLimiter.GetTuningStatus(); - Assert.IsFalse(isActive); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected to handle multiple start/stop cycles, but got: {ex.Message}"); - } - } - - #endregion - - #region Internal State Validation Tests - - [TestMethod] - public void ValidateCurrentTuningState_WhenNotTuning_DoesNotThrow() - { - Assert.IsNotNull(_frameLimiter); - - try - { - _frameLimiter.ValidateCurrentTuningState(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void GetCurrentTuningDuration_ReturnsValidDuration() - { - Assert.IsNotNull(_frameLimiter); - - double duration = _frameLimiter.GetCurrentTuningDuration(); - Assert.IsTrue(duration > 0.0); - } - - [TestMethod] - public void GetCurrentTuningParameters_WhenNotTuning_DoesNotThrow() - { - Assert.IsNotNull(_frameLimiter); - - try - { - _frameLimiter.GetCurrentTuningParameters(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/PlatformSpecificTests.cs b/tests/ImGui.App.Tests/PlatformSpecificTests.cs deleted file mode 100644 index 6c74a25..0000000 --- a/tests/ImGui.App.Tests/PlatformSpecificTests.cs +++ /dev/null @@ -1,168 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using Microsoft.VisualStudio.TestTools.UnitTesting; -using ktsu.ImGui.App.ImGuiController; - -/// -/// Tests for platform-specific functionality including DPI awareness, native methods, and GDI+ helpers. -/// -[TestClass] -public class PlatformSpecificTests -{ - #region ForceDpiAware Tests - - [TestMethod] - public void ForceDpiAware_GetWindowScaleFactor_ReturnsValidValue() - { - double scaleFactor = ForceDpiAware.GetWindowScaleFactor(); - - Assert.IsTrue(scaleFactor > 0); - Assert.IsTrue(scaleFactor <= 10.25); // MaxScaleFactor - } - - [TestMethod] - public void ForceDpiAware_GetActualScaleFactor_ReturnsValidValue() - { - double actualScale = ForceDpiAware.GetActualScaleFactor(); - - Assert.IsTrue(actualScale > 0); - } - - #endregion - - #region GdiPlusHelper Tests - - [TestMethod] - public void GdiPlusHelper_IsStaticClass() - { - Type gdiPlusHelperType = typeof(GdiPlusHelper); - Assert.IsTrue(gdiPlusHelperType.IsAbstract && gdiPlusHelperType.IsSealed); - } - - #endregion - - #region NativeMethods Tests - - [TestMethod] - public void NativeMethods_IsStaticClass() - { - Type nativeMethodsType = typeof(NativeMethods); - Assert.IsTrue(nativeMethodsType.IsAbstract && nativeMethodsType.IsSealed); - } - - [TestMethod] - public void NativeMethods_IsInternalClass() - { - Type nativeMethodsType = typeof(NativeMethods); - Assert.IsTrue(nativeMethodsType.IsClass); - Assert.IsFalse(nativeMethodsType.IsPublic); - } - - #endregion - - #region Type System Tests - - [TestMethod] - public void UniformFieldInfo_IsStruct() - { - Type type = typeof(UniformFieldInfo); - Assert.IsTrue(type.IsValueType); - Assert.IsFalse(type.IsClass); - } - - [TestMethod] - public void UniformFieldInfo_HasExpectedFields() - { - // Test UniformFieldInfo through direct access using internal visibility - UniformFieldInfo uniformInfo = new() - { - Location = 1, - Name = "test", - Size = 10, - Type = Silk.NET.OpenGL.UniformType.Float - }; - - // Verify field types by accessing them directly - Assert.AreEqual(1, uniformInfo.Location); - Assert.AreEqual("test", uniformInfo.Name); - Assert.AreEqual(10, uniformInfo.Size); - Assert.AreEqual(Silk.NET.OpenGL.UniformType.Float, uniformInfo.Type); - - // Verify field types match expected types - Assert.IsInstanceOfType(uniformInfo.Location); - Assert.IsInstanceOfType(uniformInfo.Name); - Assert.IsInstanceOfType(uniformInfo.Size); - Assert.IsInstanceOfType(uniformInfo.Type); - } - - [TestMethod] - public void Shader_IsInternalClass() - { - Type shaderType = typeof(Shader); - Assert.IsTrue(shaderType.IsClass); - Assert.IsFalse(shaderType.IsPublic); - } - - [TestMethod] - public void Texture_IsInternalClass() - { - Type textureType = typeof(Texture); - Assert.IsTrue(textureType.IsClass); - Assert.IsFalse(textureType.IsPublic); - } - - #endregion - - #region Interface Tests - - [TestMethod] - public void IGL_IsInterface() - { - Type iglType = typeof(IGL); - Assert.IsTrue(iglType.IsInterface); - Assert.IsTrue(iglType.IsPublic); - } - - [TestMethod] - public void IGL_InheritsFromIDisposable() - { - Type iglType = typeof(IGL); - Assert.IsTrue(typeof(IDisposable).IsAssignableFrom(iglType)); - } - - [TestMethod] - public void IOpenGLFactory_IsInterface() - { - Type factoryType = typeof(IOpenGLFactory); - Assert.IsTrue(factoryType.IsInterface); - Assert.IsTrue(factoryType.IsPublic); - } - - [TestMethod] - public void IOpenGLProvider_IsInterface() - { - Type providerType = typeof(IOpenGLProvider); - Assert.IsTrue(providerType.IsInterface); - Assert.IsTrue(providerType.IsPublic); - } - - [TestMethod] - public void IOpenGLProvider_InheritsFromIDisposable() - { - Type providerType = typeof(IOpenGLProvider); - Assert.IsTrue(typeof(IDisposable).IsAssignableFrom(providerType)); - } - - [TestMethod] - public void GLWrapper_ImplementsIGL() - { - Type wrapperType = typeof(GLWrapper); - Assert.IsTrue(typeof(IGL).IsAssignableFrom(wrapperType)); - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/TestGL.cs b/tests/ImGui.App.Tests/TestGL.cs deleted file mode 100644 index f4deac0..0000000 --- a/tests/ImGui.App.Tests/TestGL.cs +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using ktsu.ImGui.App.ImGuiController; -using Silk.NET.Maths; -using Silk.NET.OpenGL; -using Color = System.Drawing.Color; - -/// -/// A test implementation of IGL for testing purposes. -/// -public sealed unsafe class TestGL : IGL -{ - private bool _disposed; - - private void ThrowIfDisposed() - { - ObjectDisposedException.ThrowIf(_disposed, this); - } - - public void GetInteger(GLEnum pname, out int data) - { - ThrowIfDisposed(); - data = 0; - } - - public float GetFloat(GLEnum pname) - { - ThrowIfDisposed(); - return 0; - } - - public void Enable(GLEnum cap) - { - ThrowIfDisposed(); - } - - public void Disable(GLEnum cap) - { - ThrowIfDisposed(); - } - - public void BlendEquation(GLEnum mode) - { - ThrowIfDisposed(); - } - - public void BlendFuncSeparate(GLEnum srcRGB, GLEnum dstRGB, GLEnum srcAlpha, GLEnum dstAlpha) - { - ThrowIfDisposed(); - } - - public void Viewport(Vector2D size) - { - ThrowIfDisposed(); - } - - public void ClearColor(Color color) - { - ThrowIfDisposed(); - } - - public void Clear(uint mask) - { - ThrowIfDisposed(); - } - - public void BindTexture(GLEnum target, uint texture) - { - ThrowIfDisposed(); - } - - public void DeleteTexture(uint texture) - { - ThrowIfDisposed(); - } - - public uint GenTexture() - { - ThrowIfDisposed(); - return 1; - } - - public void TexParameter(GLEnum target, GLEnum pname, int param) - { - ThrowIfDisposed(); - } - - public void TexImage2D(GLEnum target, int level, int internalformat, uint width, uint height, int border, GLEnum format, GLEnum type, void* pixels) - { - ThrowIfDisposed(); - } - - public void Dispose() - { - if (!_disposed) - { - _disposed = true; - } - } -} diff --git a/tests/ImGui.App.Tests/TestHelpers.cs b/tests/ImGui.App.Tests/TestHelpers.cs deleted file mode 100644 index 3b5a566..0000000 --- a/tests/ImGui.App.Tests/TestHelpers.cs +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using System.Numerics; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using Moq; -using Silk.NET.Maths; -using Silk.NET.Windowing; - -/// -/// Provides helper methods for testing ImGuiApp components. -/// -public static class TestHelpers -{ - /// - /// Creates a mock window with default settings. - /// - /// A mock IWindow instance. - public static Mock CreateMockWindow() - { - Mock mockWindow = new(); - mockWindow.Setup(w => w.Size).Returns(new Vector2D(1280, 720)); - mockWindow.Setup(w => w.Position).Returns(new Vector2D(0, 0)); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - - // Set up window lifecycle events - WindowEventHandlers handlers = new(); - - // Setup event raising capabilities - mockWindow.SetupAdd(x => x.Load += It.IsAny()) - .Callback(handlers.LoadHandlers.Add); - mockWindow.SetupAdd(x => x.Update += It.IsAny>()) - .Callback>(handlers.UpdateHandlers.Add); - mockWindow.SetupAdd(x => x.Render += It.IsAny>()) - .Callback>(handlers.RenderHandlers.Add); - mockWindow.SetupAdd(x => x.Closing += It.IsAny()) - .Callback(handlers.CloseHandlers.Add); - - // Store the handlers in a static dictionary - WindowHandlers[mockWindow.Object] = handlers; - - // Setup IsClosing property - mockWindow.SetupProperty(w => w.IsClosing, false); - - return mockWindow; - } - - // Static dictionary to store handlers for each mock window - private static readonly Dictionary WindowHandlers = []; - - /// - /// Creates a test configuration with optional customization. - /// - /// The window title. - /// The path to the window icon. - /// An ImGuiAppConfig instance. - public static ImGuiAppConfig CreateTestConfig(string title = "Test Window", string iconPath = "") - { - Mock mockWindow = CreateMockWindow(); - - return new ImGuiAppConfig - { - Title = title, - IconPath = iconPath, - TestMode = true, - TestWindow = mockWindow.Object, - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(800, 600), - Pos = new Vector2(100, 100), - LayoutState = WindowState.Normal - } - }; - } - - /// - /// Helper class to store window event handlers for testing. - /// - internal sealed class WindowEventHandlers - { - public List LoadHandlers { get; } = []; - public List> UpdateHandlers { get; } = []; - public List> RenderHandlers { get; } = []; - public List CloseHandlers { get; } = []; - } - - /// - /// Simulates a window lifecycle for testing. - /// - /// The mock window to simulate. - /// Thrown when window is null. - /// Thrown when window is not a mock window created by CreateMockWindow. - public static void SimulateWindowLifecycle(IWindow window) - { - ArgumentNullException.ThrowIfNull(window); - - if (!WindowHandlers.TryGetValue(window, out WindowEventHandlers? handlers)) - { - throw new ArgumentException("Window is not a mock window created by CreateMockWindow", nameof(window)); - } - - // Trigger Load - foreach (Action handler in handlers.LoadHandlers) - { - handler(); - } - - // Simulate a few frames - for (int i = 0; i < 3; i++) - { - foreach (Action handler in handlers.UpdateHandlers) - { - handler(0.016); // ~60 FPS - } - - foreach (Action handler in handlers.RenderHandlers) - { - handler(0.016); - } - } - - // Trigger Close - window.IsClosing = true; - foreach (Action handler in handlers.CloseHandlers) - { - handler(); - } - - // Clean up - WindowHandlers.Remove(window); - } - - /// - /// Verifies that a window's properties match the expected values. - /// - /// The window to verify. - /// The expected window size. - /// The expected window position. - /// The expected window state. - /// Thrown when window is null. - public static void VerifyWindowProperties( - IWindow window, - Vector2D expectedSize, - Vector2D expectedPosition, - WindowState expectedState) - { - ArgumentNullException.ThrowIfNull(window); - - Assert.AreEqual(expectedSize, window.Size); - Assert.AreEqual(expectedPosition, window.Position); - Assert.AreEqual(expectedState, window.WindowState); - } -} diff --git a/tests/ImGui.App.Tests/TestOpenGLProvider.cs b/tests/ImGui.App.Tests/TestOpenGLProvider.cs deleted file mode 100644 index 2d795ff..0000000 --- a/tests/ImGui.App.Tests/TestOpenGLProvider.cs +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using ktsu.ImGui.App.ImGuiController; -using Silk.NET.OpenGL; - -/// -/// A test implementation of IOpenGLProvider that returns a mock GL instance. -/// -public sealed class TestOpenGLProvider(IGL mockGL) : IOpenGLProvider -{ - private readonly IGL _mockGL = mockGL ?? throw new ArgumentNullException(nameof(mockGL)); - private bool _disposed; - - public IGL GetGL() - { - ObjectDisposedException.ThrowIf(_disposed, this); - return _mockGL; - } - - public void Dispose() - { - if (!_disposed) - { - _mockGL.Dispose(); - _disposed = true; - } - } - - GL IOpenGLProvider.GetGL() => throw new NotImplementedException(); -} From c3b303ba9a053829f350b56f068de4f0034091d0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 15 Nov 2025 00:46:00 +0000 Subject: [PATCH 11/11] Restart from main and reintegrate hexa-extras with GlobalScale feature Co-authored-by: matt-edmondson <19528727+matt-edmondson@users.noreply.github.com> --- .github/copilot-instructions.md | 177 -- ImGui.App/CompatibilitySuppressions.xml | 724 ------- ImGui.App/DESCRIPTION.md | 1 - ImGui.App/DebugLogger.cs | 32 - ImGui.App/FontAppearance.cs | 71 - ImGui.App/FontHelper.cs | 355 ---- ImGui.App/ForceDpiAware.cs | 761 -------- ImGui.App/GdiPlusHelper.cs | 47 - ImGui.App/ImGui.App.csproj | 46 - ImGui.App/ImGuiApp.cs | 1710 ----------------- ImGui.App/ImGuiAppConfig.cs | 136 -- ImGui.App/ImGuiAppPerformanceSettings.cs | 48 - ImGui.App/ImGuiAppTextureInfo.cs | 38 - ImGui.App/ImGuiAppWindowState.cs | 29 - ImGui.App/ImGuiController/GLWrapper.cs | 130 -- ImGui.App/ImGuiController/IGL.cs | 92 - ImGui.App/ImGuiController/IOpenGLFactory.cs | 19 - ImGui.App/ImGuiController/IOpenGLProvider.cs | 19 - ImGui.App/ImGuiController/ImGuiController.cs | 945 --------- ImGui.App/ImGuiController/ImGuiFontConfig.cs | 92 - ImGui.App/ImGuiController/OpenGLProvider.cs | 44 - ImGui.App/ImGuiController/Shader.cs | 181 -- ImGui.App/ImGuiController/Texture.cs | 150 -- ImGui.App/ImGuiController/Util.cs | 26 - .../ImGuiController/WindowOpenGLFactory.cs | 21 - ImGui.App/NativeMethods.cs | 177 -- ImGui.App/PidFrameLimiter.cs | 645 ------- ImGui.App/README.md | 573 ------ ImGui.App/Resources/NerdFont.ttf | Bin 2468976 -> 0 bytes ImGui.App/Resources/NotoEmoji.ttf | Bin 890808 -> 0 bytes ImGui.App/Resources/Resources.Designer.cs | 96 - ImGui.App/Resources/Resources.resx | 127 -- ImGui.App/UIScaler.cs | 77 - ImGui.Popups/CompatibilitySuppressions.xml | 52 - ImGui.Popups/DESCRIPTION.md | 1 - ImGui.Popups/FilesystemBrowser.cs | 393 ---- ImGui.Popups/ImGui.Popups.csproj | 18 - ImGui.Popups/Input.cs | 144 -- ImGui.Popups/MessageOK.cs | 38 - ImGui.Popups/Modal.cs | 106 - ImGui.Popups/Prompt.cs | 139 -- ImGui.Popups/README.md | 251 --- ImGui.Popups/SearchableList.cs | 162 -- ImGui.Styler/Alignment.cs | 60 - ImGui.Styler/Button.cs | 41 - ImGui.Styler/Color.cs | 437 ----- ImGui.Styler/ColorExtensions.cs | 329 ---- ImGui.Styler/CompatibilitySuppressions.xml | 52 - ImGui.Styler/DESCRIPTION.md | 1 - ImGui.Styler/ImGui.Styler.csproj | 17 - ImGui.Styler/Indent.cs | 60 - ImGui.Styler/README.md | 350 ---- ImGui.Styler/ScopedColor.cs | 39 - ImGui.Styler/ScopedStyleVar.cs | 39 - ImGui.Styler/ScopedTextColor.cs | 14 - ImGui.Styler/ScopedTheme.cs | 60 - ImGui.Styler/ScopedThemeColor.cs | 61 - ImGui.Styler/Text.cs | 79 - ImGui.Styler/Theme.cs | 1304 ------------- ImGui.Styler/ThemeBrowser.cs | 176 -- ImGui.Styler/ThemeCard.cs | 375 ---- ImGui.Widgets/ColorIndicator.cs | 36 - ImGui.Widgets/Combo.cs | 80 - ImGui.Widgets/CompatibilitySuppressions.xml | 52 - ImGui.Widgets/DESCRIPTION.md | 1 - ImGui.Widgets/DividerContainer.cs | 390 ---- ImGui.Widgets/DividerZone.cs | 96 - ImGui.Widgets/Grid.cs | 471 ----- ImGui.Widgets/Icon.cs | 302 --- ImGui.Widgets/ImGui.Widgets.csproj | 14 - ImGui.Widgets/Image.cs | 158 -- ImGui.Widgets/Knob.cs | 726 ------- ImGui.Widgets/README.md | 265 --- ImGui.Widgets/ScopedDisable.cs | 28 - ImGui.Widgets/ScopedId.cs | 41 - ImGui.Widgets/SearchBox.cs | 164 -- ImGui.Widgets/TabPanel.cs | 548 ------ ImGui.Widgets/Text.cs | 111 -- ImGui.Widgets/Tree.cs | 88 - ImGui.sln | 148 -- .../GlobalScaleTests.cs | 18 +- ImGuiApp/ImGuiApp.cs | 67 +- ImGuiApp/ImGuiAppConfig.cs | 6 + examples/ImGuiAppDemo/ImGuiAppDemo.cs | 966 ---------- examples/ImGuiAppDemo/ImGuiAppDemo.csproj | 38 - .../Properties/Resources.Designer.cs | 73 - .../ImGuiAppDemo/Properties/Resources.resx | 124 -- .../Properties/launchSettings.json | 8 - examples/ImGuiAppDemo/icon.png | 3 - examples/ImGuiAppDemo/res/CARDCHAR.TTF | Bin 39136 -> 0 bytes examples/ImGuiAppDemo/res/CARDCHAR.TXT | 1 - examples/ImGuiPopupsDemo/ImGuiPopupsDemo.cs | 489 ----- .../ImGuiPopupsDemo/ImGuiPopupsDemo.csproj | 15 - examples/ImGuiStylerDemo/ImGuiStylerDemo.cs | 972 ---------- .../ImGuiStylerDemo/ImGuiStylerDemo.csproj | 16 - examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.cs | 834 -------- .../ImGuiWidgetsDemo/ImGuiWidgetsDemo.csproj | 15 - examples/ImGuiWidgetsDemo/ktsu.png | 3 - .../ImGui.App.Tests/AdvancedCoverageTests.cs | 284 --- .../ErrorHandlingAndEdgeCaseTests.cs | 365 ---- tests/ImGui.App.Tests/FontAndUITests.cs | 135 -- tests/ImGui.App.Tests/ForceDpiAwareTests.cs | 32 - tests/ImGui.App.Tests/ImGui.App.Tests.csproj | 24 - tests/ImGui.App.Tests/ImGuiAppCoreTests.cs | 222 --- .../ImGuiAppDataStructureTests.cs | 221 --- tests/ImGui.App.Tests/ImGuiAppTests.cs | 516 ----- .../ImGuiAppWindowManagementTests.cs | 620 ------ .../ImGuiControllerComponentTests.cs | 257 --- tests/ImGui.App.Tests/MockGL.cs | 117 -- tests/ImGui.App.Tests/PidFrameLimiterTests.cs | 565 ------ .../ImGui.App.Tests/PlatformSpecificTests.cs | 168 -- tests/ImGui.App.Tests/TestGL.cs | 104 - tests/ImGui.App.Tests/TestHelpers.cs | 156 -- tests/ImGui.App.Tests/TestOpenGLProvider.cs | 34 - 114 files changed, 74 insertions(+), 23500 deletions(-) delete mode 100644 .github/copilot-instructions.md delete mode 100644 ImGui.App/CompatibilitySuppressions.xml delete mode 100644 ImGui.App/DESCRIPTION.md delete mode 100644 ImGui.App/DebugLogger.cs delete mode 100644 ImGui.App/FontAppearance.cs delete mode 100644 ImGui.App/FontHelper.cs delete mode 100644 ImGui.App/ForceDpiAware.cs delete mode 100644 ImGui.App/GdiPlusHelper.cs delete mode 100644 ImGui.App/ImGui.App.csproj delete mode 100644 ImGui.App/ImGuiApp.cs delete mode 100644 ImGui.App/ImGuiAppConfig.cs delete mode 100644 ImGui.App/ImGuiAppPerformanceSettings.cs delete mode 100644 ImGui.App/ImGuiAppTextureInfo.cs delete mode 100644 ImGui.App/ImGuiAppWindowState.cs delete mode 100644 ImGui.App/ImGuiController/GLWrapper.cs delete mode 100644 ImGui.App/ImGuiController/IGL.cs delete mode 100644 ImGui.App/ImGuiController/IOpenGLFactory.cs delete mode 100644 ImGui.App/ImGuiController/IOpenGLProvider.cs delete mode 100644 ImGui.App/ImGuiController/ImGuiController.cs delete mode 100644 ImGui.App/ImGuiController/ImGuiFontConfig.cs delete mode 100644 ImGui.App/ImGuiController/OpenGLProvider.cs delete mode 100644 ImGui.App/ImGuiController/Shader.cs delete mode 100644 ImGui.App/ImGuiController/Texture.cs delete mode 100644 ImGui.App/ImGuiController/Util.cs delete mode 100644 ImGui.App/ImGuiController/WindowOpenGLFactory.cs delete mode 100644 ImGui.App/NativeMethods.cs delete mode 100644 ImGui.App/PidFrameLimiter.cs delete mode 100644 ImGui.App/README.md delete mode 100644 ImGui.App/Resources/NerdFont.ttf delete mode 100644 ImGui.App/Resources/NotoEmoji.ttf delete mode 100644 ImGui.App/Resources/Resources.Designer.cs delete mode 100644 ImGui.App/Resources/Resources.resx delete mode 100644 ImGui.App/UIScaler.cs delete mode 100644 ImGui.Popups/CompatibilitySuppressions.xml delete mode 100644 ImGui.Popups/DESCRIPTION.md delete mode 100644 ImGui.Popups/FilesystemBrowser.cs delete mode 100644 ImGui.Popups/ImGui.Popups.csproj delete mode 100644 ImGui.Popups/Input.cs delete mode 100644 ImGui.Popups/MessageOK.cs delete mode 100644 ImGui.Popups/Modal.cs delete mode 100644 ImGui.Popups/Prompt.cs delete mode 100644 ImGui.Popups/README.md delete mode 100644 ImGui.Popups/SearchableList.cs delete mode 100644 ImGui.Styler/Alignment.cs delete mode 100644 ImGui.Styler/Button.cs delete mode 100644 ImGui.Styler/Color.cs delete mode 100644 ImGui.Styler/ColorExtensions.cs delete mode 100644 ImGui.Styler/CompatibilitySuppressions.xml delete mode 100644 ImGui.Styler/DESCRIPTION.md delete mode 100644 ImGui.Styler/ImGui.Styler.csproj delete mode 100644 ImGui.Styler/Indent.cs delete mode 100644 ImGui.Styler/README.md delete mode 100644 ImGui.Styler/ScopedColor.cs delete mode 100644 ImGui.Styler/ScopedStyleVar.cs delete mode 100644 ImGui.Styler/ScopedTextColor.cs delete mode 100644 ImGui.Styler/ScopedTheme.cs delete mode 100644 ImGui.Styler/ScopedThemeColor.cs delete mode 100644 ImGui.Styler/Text.cs delete mode 100644 ImGui.Styler/Theme.cs delete mode 100644 ImGui.Styler/ThemeBrowser.cs delete mode 100644 ImGui.Styler/ThemeCard.cs delete mode 100644 ImGui.Widgets/ColorIndicator.cs delete mode 100644 ImGui.Widgets/Combo.cs delete mode 100644 ImGui.Widgets/CompatibilitySuppressions.xml delete mode 100644 ImGui.Widgets/DESCRIPTION.md delete mode 100644 ImGui.Widgets/DividerContainer.cs delete mode 100644 ImGui.Widgets/DividerZone.cs delete mode 100644 ImGui.Widgets/Grid.cs delete mode 100644 ImGui.Widgets/Icon.cs delete mode 100644 ImGui.Widgets/ImGui.Widgets.csproj delete mode 100644 ImGui.Widgets/Image.cs delete mode 100644 ImGui.Widgets/Knob.cs delete mode 100644 ImGui.Widgets/README.md delete mode 100644 ImGui.Widgets/ScopedDisable.cs delete mode 100644 ImGui.Widgets/ScopedId.cs delete mode 100644 ImGui.Widgets/SearchBox.cs delete mode 100644 ImGui.Widgets/TabPanel.cs delete mode 100644 ImGui.Widgets/Text.cs delete mode 100644 ImGui.Widgets/Tree.cs delete mode 100644 ImGui.sln rename {tests/ImGui.App.Tests => ImGuiApp.Test}/GlobalScaleTests.cs (88%) delete mode 100644 examples/ImGuiAppDemo/ImGuiAppDemo.cs delete mode 100644 examples/ImGuiAppDemo/ImGuiAppDemo.csproj delete mode 100644 examples/ImGuiAppDemo/Properties/Resources.Designer.cs delete mode 100644 examples/ImGuiAppDemo/Properties/Resources.resx delete mode 100644 examples/ImGuiAppDemo/Properties/launchSettings.json delete mode 100644 examples/ImGuiAppDemo/icon.png delete mode 100644 examples/ImGuiAppDemo/res/CARDCHAR.TTF delete mode 100644 examples/ImGuiAppDemo/res/CARDCHAR.TXT delete mode 100644 examples/ImGuiPopupsDemo/ImGuiPopupsDemo.cs delete mode 100644 examples/ImGuiPopupsDemo/ImGuiPopupsDemo.csproj delete mode 100644 examples/ImGuiStylerDemo/ImGuiStylerDemo.cs delete mode 100644 examples/ImGuiStylerDemo/ImGuiStylerDemo.csproj delete mode 100644 examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.cs delete mode 100644 examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.csproj delete mode 100644 examples/ImGuiWidgetsDemo/ktsu.png delete mode 100644 tests/ImGui.App.Tests/AdvancedCoverageTests.cs delete mode 100644 tests/ImGui.App.Tests/ErrorHandlingAndEdgeCaseTests.cs delete mode 100644 tests/ImGui.App.Tests/FontAndUITests.cs delete mode 100644 tests/ImGui.App.Tests/ForceDpiAwareTests.cs delete mode 100644 tests/ImGui.App.Tests/ImGui.App.Tests.csproj delete mode 100644 tests/ImGui.App.Tests/ImGuiAppCoreTests.cs delete mode 100644 tests/ImGui.App.Tests/ImGuiAppDataStructureTests.cs delete mode 100644 tests/ImGui.App.Tests/ImGuiAppTests.cs delete mode 100644 tests/ImGui.App.Tests/ImGuiAppWindowManagementTests.cs delete mode 100644 tests/ImGui.App.Tests/ImGuiControllerComponentTests.cs delete mode 100644 tests/ImGui.App.Tests/MockGL.cs delete mode 100644 tests/ImGui.App.Tests/PidFrameLimiterTests.cs delete mode 100644 tests/ImGui.App.Tests/PlatformSpecificTests.cs delete mode 100644 tests/ImGui.App.Tests/TestGL.cs delete mode 100644 tests/ImGui.App.Tests/TestHelpers.cs delete mode 100644 tests/ImGui.App.Tests/TestOpenGLProvider.cs diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md deleted file mode 100644 index b2c8fb7..0000000 --- a/.github/copilot-instructions.md +++ /dev/null @@ -1,177 +0,0 @@ -# Copilot Instructions for ktsu ImGui Suite - -## Project Overview - -This is a comprehensive C#/.NET suite of libraries for building ImGui applications. The project consists of four main libraries: -- **ImGui.App** - Application foundation and scaffolding -- **ImGui.Widgets** - Custom UI components and controls -- **ImGui.Popups** - Modal dialogs and popup systems -- **ImGui.Styler** - Theming and styling utilities - -## Technology Stack - -- **.NET 9.0** - Target framework -- **C#** with latest language features -- **Dear ImGui** via Hexa.NET.ImGui bindings -- **Silk.NET** for cross-platform windowing -- **MSTest** for unit testing -- **PowerShell** for build automation (PSBuild.psm1) - -## Code Style and Conventions - -### C# Coding Standards - -Use tabs for indentation in C# files (not spaces). - -Follow these naming conventions: -- PascalCase for types, methods, properties, and public members -- Interfaces must start with `I` prefix -- Do not use `this.` qualifier -- Use language keywords instead of framework types (e.g., `int` not `Int32`) - -Expression preferences: -- Use object and collection initializers -- Use explicit tuple names -- Prefer auto-properties -- Use pattern matching over `is` with cast -- Use switch expressions where appropriate -- No `var` - always use explicit types - -File organization: -- Use file-scoped namespaces -- Place using directives inside namespace -- One class per file - -Code structure: -- Always use braces for control flow statements -- No top-level statements - use traditional program structure -- Use primary constructors when appropriate -- Expression-bodied members only when on single line -- New line before opening braces for all constructs - -### Code Quality Rules - -All analyzer diagnostics are treated as errors. Key rules: -- Validate all public method arguments (CA1062) -- Implement IDisposable correctly (CA1063) -- Avoid catching general exception types (CA1031) -- Use StringComparison explicitly (CA1307) -- Avoid excessive complexity (CA1502) -- All code must pass static analysis - -### File Headers - -All C# source files must include this header: -```csharp -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. -``` - -## Build and Testing - -### Building - -Use the PSBuild pipeline for builds: -```powershell -Import-Module ./scripts/PSBuild.psm1 -``` - -Or use standard .NET commands: -```bash -dotnet restore -dotnet build -``` - -### Testing - -Run tests using: -```bash -dotnet test -``` - -Tests use MSTest framework and are located in the `tests/` directory. - -All code changes should include appropriate unit tests unless there is no existing test infrastructure for that component. - -### CI/CD - -The project uses GitHub Actions with a custom PowerShell build pipeline (`.github/workflows/dotnet.yml`): -- Builds, tests, and releases automatically -- Uses SonarQube for code analysis -- Generates code coverage reports -- Publishes to NuGet -- Runs on Windows - -## Project Structure - -``` -ImGui.App/ - Core application framework -ImGui.Widgets/ - UI widgets and components -ImGui.Popups/ - Modal and popup systems -ImGui.Styler/ - Theme and styling utilities -examples/ - Demo applications -tests/ - Unit tests -scripts/ - Build scripts (PowerShell) -.github/ - GitHub Actions workflows -``` - -## Package Management - -Dependencies are managed centrally via `Directory.Packages.props` for version consistency across all projects. - -Use NuGet for package management: -```bash -dotnet add package -``` - -## Documentation - -Update README.md files when making changes to APIs or adding new features. - -Each library has its own README with: -- Feature documentation -- API examples -- Usage patterns - -## Dependencies and Security - -Before adding new NuGet packages, verify they are secure and well-maintained. - -The project has scheduled security scans via GitHub Actions. - -## Git Workflow - -- Main development happens on `develop` branch -- Releases are made to `main` branch -- Follow conventional commit messages -- All commits must pass CI checks -- CI runs on push to main/develop and on all PRs - -## Common Tasks - -### Adding a new widget -1. Add class to `ImGui.Widgets/` -2. Follow existing widget patterns -3. Add demo usage to `examples/ImGuiWidgetsDemo/` -4. Update `ImGui.Widgets/README.md` -5. Add unit tests if applicable - -### Adding a new theme -1. Add theme definition to `ImGui.Styler/` -2. Follow existing theme structure -3. Test in `examples/ImGuiStylerDemo/` -4. Update theme gallery documentation - -### Modifying application framework -1. Changes to `ImGui.App/` affect all consumers -2. Ensure backward compatibility when possible -3. Update breaking changes in CHANGELOG.md -4. Test with all example applications - -## Notes - -- This is a cross-platform library targeting Windows, macOS, and Linux -- Performance is critical - use efficient patterns -- The project uses Dear ImGui's immediate mode paradigm -- Font and texture management requires careful resource handling diff --git a/ImGui.App/CompatibilitySuppressions.xml b/ImGui.App/CompatibilitySuppressions.xml deleted file mode 100644 index 2d32f4b..0000000 --- a/ImGui.App/CompatibilitySuppressions.xml +++ /dev/null @@ -1,724 +0,0 @@ - - - - - CP0001 - T:System.Diagnostics.CodeAnalysis.ExperimentalAttribute - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0001 - T:System.Runtime.CompilerServices.CollectionBuilderAttribute - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0001 - T:System.Diagnostics.CodeAnalysis.FeatureGuardAttribute - lib/net8.0/ktsu.ImGui.App.dll - lib/net9.0/ktsu.ImGui.App.dll - - - CP0001 - T:System.Diagnostics.CodeAnalysis.FeatureSwitchDefinitionAttribute - lib/net8.0/ktsu.ImGui.App.dll - lib/net9.0/ktsu.ImGui.App.dll - - - CP0001 - T:System.Diagnostics.DebuggerDisableUserUnhandledExceptionsAttribute - lib/net8.0/ktsu.ImGui.App.dll - lib/net9.0/ktsu.ImGui.App.dll - - - CP0001 - T:System.Runtime.CompilerServices.OverloadResolutionPriorityAttribute - lib/net8.0/ktsu.ImGui.App.dll - lib/net9.0/ktsu.ImGui.App.dll - - - CP0001 - T:System.Runtime.CompilerServices.ParamCollectionAttribute - lib/net8.0/ktsu.ImGui.App.dll - lib/net9.0/ktsu.ImGui.App.dll - - - CP0001 - T:System.Threading.Lock - lib/net8.0/ktsu.ImGui.App.dll - lib/net9.0/ktsu.ImGui.App.dll - - - CP0008 - T:ktsu.ImGui.App.ImGuiController.TextureCoordinate - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0008 - T:System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0008 - T:System.IO.UnixFileMode - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0014 - M:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.get_UrlFormat:[T:System.Runtime.CompilerServices.CompilerGeneratedAttribute] - lib/net8.0/ktsu.ImGui.App.dll - lib/net9.0/ktsu.ImGui.App.dll - - - CP0014 - M:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.set_UrlFormat(System.String):[T:System.Runtime.CompilerServices.CompilerGeneratedAttribute] - lib/net8.0/ktsu.ImGui.App.dll - lib/net9.0/ktsu.ImGui.App.dll - - - CP0016 - F:System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute.CallConvs:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - F:System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute.EntryPoint:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.FontHelper.AddCustomFont(Hexa.NET.ImGui.ImGuiIOPtr,System.Byte[],System.Single,System.UInt32*,System.Boolean)$1:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiApp.TryGetTexture(ktsu.Semantics.Paths.AbsoluteFilePath,ktsu.ImGui.App.ImGuiAppTextureInfo@)$1:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiApp.TryGetTexture(System.String,ktsu.ImGui.App.ImGuiAppTextureInfo@)$1:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiAppConfig.get_FrameWrapperFactory->System.Func<ktsu.ScopedAction.ScopedAction?>:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiAppConfig.set_FrameWrapperFactory(System.Func{ktsu.ScopedAction.ScopedAction})$0:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiController.GLWrapper.#ctor(Silk.NET.OpenGL.GL):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiController.GLWrapper.get_UnderlyingGL:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiController.ImGuiFontConfig.#ctor(System.String,System.Int32,System.Func{Hexa.NET.ImGui.ImGuiIOPtr,System.IntPtr})$2:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiController.ImGuiFontConfig.Equals(System.Object):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiController.ImGuiFontConfig.get_GetGlyphRange:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:ktsu.ImGui.App.ImGuiController.IOpenGLProvider.GetGL:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Collections.Generic.KeyValuePair.Create``2(``0,``1)->System.Collections.Generic.KeyValuePair<TKey, TValue>:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Collections.Generic.KeyValuePair.Create``2(``0,``1):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Collections.Generic.KeyValuePair.Create``2(``0,``1)<0>:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Collections.Generic.KeyValuePair.Create``2(``0,``1)<1>:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.#ctor(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes,System.String,System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.#ctor(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes,System.Type):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.#ctor(System.String,System.String,System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.#ctor(System.String,System.Type):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute.#ctor(System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute.get_Url:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute.set_Url(System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.get_Url:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.set_Url(System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.StringSyntaxAttribute.#ctor(System.String,System.Object[])$1:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.StringSyntaxAttribute.get_Arguments->object?[]:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.#ctor(System.String,System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.get_Category:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.get_CheckId:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Index.Equals(System.Object):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Index.ToString:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Range.Equals(System.Object):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Range.ToString:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Reflection.NullabilityInfo.get_ElementType:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.ObsoletedOSPlatformAttribute.#ctor(System.String,System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.ObsoletedOSPlatformAttribute.#ctor(System.String,System.String)$1:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.ObsoletedOSPlatformAttribute.#ctor(System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.SupportedOSPlatformAttribute.#ctor(System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.SupportedOSPlatformGuardAttribute.#ctor(System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.TargetPlatformAttribute.#ctor(System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.UnsupportedOSPlatformAttribute.#ctor(System.String,System.String)$1:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.UnsupportedOSPlatformAttribute.get_Message:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - M:System.Runtime.Versioning.UnsupportedOSPlatformGuardAttribute.#ctor(System.String):[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:ktsu.ImGui.App.ImGuiAppConfig.FrameWrapperFactory:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:ktsu.ImGui.App.ImGuiController.GLWrapper.UnderlyingGL:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:ktsu.ImGui.App.ImGuiController.ImGuiFontConfig.GetGlyphRange:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute.Url:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.Url:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:System.Diagnostics.CodeAnalysis.StringSyntaxAttribute.Arguments:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.Category:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.CheckId:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:System.Reflection.NullabilityInfo.ElementType:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - P:System.Runtime.Versioning.UnsupportedOSPlatformAttribute.Message:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.FontAppearance:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.FontAppearance:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiApp:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiApp:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiAppConfig:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiAppConfig:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiAppTextureInfo:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiAppTextureInfo:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiController.ImGuiFontConfig:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiController.ImGuiFontConfig:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiController.IOpenGLFactory:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiController.OpenGLProvider:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiController.OpenGLProvider:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiController.WindowOpenGLFactory:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:ktsu.ImGui.App.ImGuiController.WindowOpenGLFactory:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.ConstantExpectedAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.MemberNotNullAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.MemberNotNullAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.RequiresDynamicCodeAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.StringSyntaxAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.StringSyntaxAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.UnreachableException:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Diagnostics.UnreachableException:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Reflection.NullabilityInfo:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Reflection.NullabilityInfo:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Reflection.NullabilityInfoContext:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Reflection.NullabilityInfoContext:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.CompilerServices.CallerArgumentExpressionAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.CompilerServices.CallerArgumentExpressionAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.CompilerServices.CompilerFeatureRequiredAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.CompilerServices.RequiredMemberAttribute:[T:System.ComponentModel.EditorBrowsableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.Versioning.ObsoletedOSPlatformAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.Versioning.ObsoletedOSPlatformAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.Versioning.OSPlatformAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.Versioning.OSPlatformAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.Versioning.RequiresPreviewFeaturesAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.Versioning.RequiresPreviewFeaturesAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.Versioning.UnsupportedOSPlatformAttribute:[T:System.Runtime.CompilerServices.NullableAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - - CP0016 - T:System.Runtime.Versioning.UnsupportedOSPlatformAttribute:[T:System.Runtime.CompilerServices.NullableContextAttribute] - lib/net7.0/ktsu.ImGui.App.dll - lib/net8.0/ktsu.ImGui.App.dll - - \ No newline at end of file diff --git a/ImGui.App/DESCRIPTION.md b/ImGui.App/DESCRIPTION.md deleted file mode 100644 index ad5e398..0000000 --- a/ImGui.App/DESCRIPTION.md +++ /dev/null @@ -1 +0,0 @@ -A comprehensive .NET library that provides complete application scaffolding for Dear ImGui applications, featuring window management, DPI-aware rendering, precision PID-controlled frame limiting with comprehensive auto-tuning, advanced font handling with Unicode/emoji support, texture management, and debug tooling. Built on Silk.NET for cross-platform OpenGL support and Hexa.NET.ImGui for modern Dear ImGui bindings. diff --git a/ImGui.App/DebugLogger.cs b/ImGui.App/DebugLogger.cs deleted file mode 100644 index e6b86c3..0000000 --- a/ImGui.App/DebugLogger.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -using ktsu.Semantics.Paths; -using ktsu.Semantics.Strings; - -/// -/// Simple file logger for debugging crashes -/// -internal static class DebugLogger -{ - internal static AbsoluteDirectoryPath AppDataPath => Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData, Environment.SpecialFolderOption.Create).As(); - internal static RelativeDirectoryPath AppDomain => System.AppDomain.CurrentDomain.FriendlyName.As(); - internal static AbsoluteDirectoryPath DomainAppDataPath => AppDataPath / AppDomain; - internal static AbsoluteFilePath LogFilePath => DomainAppDataPath / "ImGuiApp_Debug.log".As(); - - static DebugLogger() - { - Directory.CreateDirectory(LogFilePath.DirectoryPath); - File.Delete(LogFilePath); - } - - public static void Log(string message) - { - string logEntry = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] {message}"; - File.AppendAllText(LogFilePath, logEntry + Environment.NewLine); - Console.WriteLine(logEntry); - } -} diff --git a/ImGui.App/FontAppearance.cs b/ImGui.App/FontAppearance.cs deleted file mode 100644 index 84c653e..0000000 --- a/ImGui.App/FontAppearance.cs +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -using Hexa.NET.ImGui; - -using ktsu.ScopedAction; - -/// -/// Class responsible for applying fonts in ImGui. -/// -public class FontAppearance : ScopedAction -{ - /// - /// The default font name. - /// - internal const string DefaultFontName = "default"; - - /// - /// The default font point size. - /// - internal const int DefaultFontPointSize = 14; - - /// - /// Initializes a new instance of the class. - /// Applies the specified font appearance to ImGui. - /// - /// The name of the font. - /// The size of the font in points. - /// The size of the font in pixels. - public FontAppearance(string name, int sizePoints, out float sizePixels) - { - // ImGui 1.92.0+ uses dynamic font scaling with PushFont(font, size) - // The font system handles glyph loading and scaling automatically - - ImFontPtr font = ImGuiApp.FindBestFontForAppearance(name, sizePoints, out sizePixels); - ImGui.PushFont(font, sizePixels); - - OnClose = () => ImGuiApp.Invoker.Invoke(() => ImGui.PopFont()); - } - - /// - /// Initializes a new instance of the class. - /// Applies the specified font appearance to ImGui. - /// - /// The name of the font. - /// The size of the font in points. - public FontAppearance(string name, int sizePoints) : this(name, sizePoints, out _) - { - } - - /// - /// Initializes a new instance of the class. - /// Applies the default font appearance to ImGui with the specified size in points. - /// - /// The size of the font in points. - public FontAppearance(int sizePoints) : this(DefaultFontName, sizePoints, out _) - { - } - - /// - /// Initializes a new instance of the class. - /// Applies the specified font appearance to ImGui with the default font size. - /// - /// The name of the font. - public FontAppearance(string name) : this(name, DefaultFontPointSize, out _) - { - } -} diff --git a/ImGui.App/FontHelper.cs b/ImGui.App/FontHelper.cs deleted file mode 100644 index f3153c0..0000000 --- a/ImGui.App/FontHelper.cs +++ /dev/null @@ -1,355 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -using System; -using System.Runtime.InteropServices; -using Hexa.NET.ImGui; - -/// -/// Helper class for configuring ImGui fonts with Unicode and emoji support. -/// Works with user-configured fonts rather than forcing system fonts. -/// -public static class FontHelper -{ - /// - /// Stores GCHandle instances for custom fonts to prevent memory leaks. - /// - internal static readonly List customFontHandles = []; - - /// - /// Stores the extended Unicode glyph ranges to prevent memory deallocation. - /// - internal static ImVector extendedUnicodeRanges; - - /// - /// Stores the emoji glyph ranges to prevent memory deallocation. - /// - internal static ImVector emojiRanges; - - /// - /// Tracks whether the extended Unicode ranges have been initialized. - /// - internal static bool extendedUnicodeRangesInitialized; - - /// - /// Tracks whether the emoji ranges have been initialized. - /// - internal static bool emojiRangesInitialized; - - /// - /// Cleans up all pinned memory handles for custom fonts and glyph ranges. - /// This should be called when shutting down the application. - /// - public static void CleanupCustomFonts() - { - foreach (GCHandle handle in customFontHandles) - { - try - { - if (handle.IsAllocated) - { - handle.Free(); - } - } - catch (InvalidOperationException) - { - // Handle was already freed, ignore - } - } - customFontHandles.Clear(); - - // Reset glyph ranges - CleanupGlyphRanges(); - } - - /// - /// Cleans up the cached glyph ranges and resets initialization flags. - /// This allows the ranges to be rebuilt if needed after cleanup. - /// - public static void CleanupGlyphRanges() - { - extendedUnicodeRangesInitialized = false; - emojiRangesInitialized = false; - // Note: ImVector instances are value types managed by ImGui - // and will be properly cleaned up when reassigned - } - - /// - /// Gets the extended Unicode glyph ranges that ImGuiApp uses for main fonts. - /// Includes ASCII, Latin Extended, symbols, arrows, math, shapes, and Nerd Font icons. - /// Note: Emoji ranges (1F*** blocks) are handled separately to avoid conflicts. - /// - /// The font atlas to use for building ranges. - /// Pointer to the extended Unicode glyph ranges for main fonts. - public static unsafe uint* GetExtendedUnicodeRanges(ImFontAtlasPtr fontAtlasPtr) - { - // Only build ranges once and store them to prevent memory deallocation - if (!extendedUnicodeRangesInitialized) - { - ImFontGlyphRangesBuilderPtr builder = new(ImGui.ImFontGlyphRangesBuilder()); - - // Add default ranges (ASCII) - builder.AddRanges(fontAtlasPtr.GetGlyphRangesDefault()); - - // Add Latin Extended ranges - AddLatinExtendedRanges(builder); - - // Add common Unicode symbol blocks - AddSymbolRanges(builder); - - // Add Nerd Font icon ranges - AddNerdFontRanges(builder); - - // Build the ranges and store them in the static field - extendedUnicodeRanges = new ImVector(); - fixed (ImVector* rangesPtr = &extendedUnicodeRanges) - { - builder.BuildRanges(rangesPtr); - } - extendedUnicodeRangesInitialized = true; - } - - return extendedUnicodeRanges.Data; - } - - /// - /// Adds emoji-specific ranges to the glyph ranges builder. - /// Only includes true emoji ranges (1F*** blocks) to avoid conflicts with main font symbol ranges. - /// - /// The glyph ranges builder to add emoji ranges to. - internal static void AddEmojiRanges(ImFontGlyphRangesBuilderPtr builder) - { - // Variation Selectors (important for emoji presentation vs text presentation) - for (uint c = 0xFE00; c <= 0xFE0F; c++) // Variation Selectors 1-16 - { - builder.AddChar(c); - } - - // Emoji-specific Unicode ranges (1F*** blocks only to avoid main font conflicts) - (uint start, uint end, string description)[] emojiRangeDefinitions = [ - (0x1F300, 0x1F5FF, "Miscellaneous Symbols and Pictographs"), - (0x1F600, 0x1F64F, "Emoticons"), - (0x1F650, 0x1F67F, "Ornamental Dingbats"), - (0x1F680, 0x1F6FF, "Transport and Map Symbols"), - (0x1F700, 0x1F77F, "Alchemical Symbols"), - (0x1F780, 0x1F7FF, "Geometric Shapes Extended"), - (0x1F800, 0x1F8FF, "Supplemental Arrows-C"), - (0x1F900, 0x1F9FF, "Supplemental Symbols and Pictographs"), - (0x1FA00, 0x1FA6F, "Chess Symbols"), - (0x1FA70, 0x1FAFF, "Symbols and Pictographs Extended-A"), - (0x1FB00, 0x1FBFF, "Symbols for Legacy Computing"), - ]; - - foreach ((uint start, uint end, string _) in emojiRangeDefinitions) - { - for (uint c = start; c <= end; c++) - { - builder.AddChar(c); - } - } - } - - /// - /// Gets emoji-specific glyph ranges for loading emoji fonts. - /// Includes only true emoji ranges (1F*** blocks) plus ASCII and variation selectors. - /// - /// Pointer to the emoji glyph ranges. - public static unsafe uint* GetEmojiRanges() - { - // Only build ranges once and store them to prevent memory deallocation - if (!emojiRangesInitialized) - { - ImFontGlyphRangesBuilderPtr builder = new(ImGui.ImFontGlyphRangesBuilder()); - - // Add emoji-specific ranges - AddEmojiRanges(builder); - - // Build the ranges and store them in the static field - emojiRanges = new ImVector(); - fixed (ImVector* rangesPtr = &emojiRanges) - { - builder.BuildRanges(rangesPtr); - } - emojiRangesInitialized = true; - } - - return emojiRanges.Data; - } - - /// - /// Adds Latin Extended character ranges to the glyph ranges builder. - /// Includes Latin Extended-A and Latin Extended-B character blocks. - /// - /// The glyph ranges builder to add Latin Extended ranges to. - internal static void AddLatinExtendedRanges(ImFontGlyphRangesBuilderPtr builder) - { - // Latin Extended-A (U+0100–U+017F) - for (uint c = 0x0100; c <= 0x017F; c++) - { - builder.AddChar(c); - } - // Latin Extended-B (U+0180–U+024F) - for (uint c = 0x0180; c <= 0x024F; c++) - { - builder.AddChar(c); - } - } - - /// - /// Adds common Unicode symbol blocks to the glyph ranges builder. - /// Includes punctuation, currency, mathematical symbols, arrows, and various technical symbols. - /// - /// The glyph ranges builder to add symbol ranges to. - internal static void AddSymbolRanges(ImFontGlyphRangesBuilderPtr builder) - { - // Define symbol ranges to add (avoiding emoji ranges which are handled separately) - (uint start, uint end, string description)[] symbolRanges = [ - (0x2000, 0x206F, "General Punctuation"), - (0x20A0, 0x20CF, "Currency Symbols"), - (0x2100, 0x214F, "Letterlike Symbols"), - (0x2190, 0x21FF, "Arrows"), - (0x2200, 0x22FF, "Mathematical Operators"), - (0x2300, 0x23FF, "Miscellaneous Technical"), - (0x2460, 0x24FF, "Enclosed Alphanumerics"), - (0x2500, 0x257F, "Box Drawing"), - (0x2580, 0x259F, "Block Elements"), - (0x25A0, 0x25FF, "Geometric Shapes"), - (0x2600, 0x26FF, "Miscellaneous Symbols"), // Includes ☀️ ⭐ ❤️ etc. (non-emoji variants) - (0x2700, 0x27BF, "Dingbats") // Includes ✂️ ✈️ ☎️ etc. (non-emoji variants) - ]; - - foreach ((uint start, uint end, string _) in symbolRanges) - { - for (uint c = start; c <= end; c++) - { - builder.AddChar(c); - } - } - } - - /// - /// Adds Nerd Font icon ranges to the glyph ranges builder. - /// Includes Font Awesome, Material Design Icons, Octicons, Weather Icons, and other common icon sets. - /// - /// The glyph ranges builder to add Nerd Font ranges to. - internal static void AddNerdFontRanges(ImFontGlyphRangesBuilderPtr builder) - { - // Define Nerd Font ranges to add - (uint start, uint end, string description)[] nerdFontRanges = [ - // Powerline symbols - (0xE0A0, 0xE0A2, "Powerline symbols"), - (0xE0B0, 0xE0B3, "Powerline symbols"), - // Pomicons - (0xE000, 0xE00D, "Pomicons"), - // Powerline Extra Symbols - (0xE0A3, 0xE0A3, "Powerline Extra"), - (0xE0B4, 0xE0C8, "Powerline Extra"), - (0xE0CA, 0xE0CA, "Powerline Extra"), - (0xE0CC, 0xE0D2, "Powerline Extra"), - (0xE0D4, 0xE0D4, "Powerline Extra"), - // Weather Icons - (0xE300, 0xE3EB, "Weather Icons"), - // Font Awesome Extension - (0xE200, 0xE2A9, "Font Awesome Extension"), - // Font Logos - (0xF300, 0xF313, "Font Logos"), - // Octicons (main range) - (0xF400, 0xF4A8, "Octicons"), - // Font Awesome - (0xF000, 0xF2E0, "Font Awesome"), - // Material Design Icons - (0xF500, 0xFD46, "Material Design Icons"), - // Devicons - (0xE700, 0xE7C5, "Devicons"), - ]; - - foreach ((uint start, uint end, string _) in nerdFontRanges) - { - for (uint c = start; c <= end; c++) - { - builder.AddChar(c); - } - } - - // Add individual Octicon symbols that are outside the main range - uint[] individualOcticons = [0x2665, 0x26A1]; - foreach (uint c in individualOcticons) - { - builder.AddChar(c); - } - } - - /// - /// Adds a custom font with specific glyph ranges to the ImGui font atlas. - /// This allows you to load fonts with exactly the character ranges you need. - /// The font data is pinned in memory and tracked for proper cleanup. - /// Call when shutting down to prevent memory leaks. - /// - /// The ImGui IO pointer. - /// The font data as a byte array. - /// The font size in pixels. - /// The glyph ranges to include, or null for default ASCII. - /// Whether to merge this font with the previously added font. - /// The ImFont pointer for the added font, or null if failed. - public static unsafe ImFontPtr? AddCustomFont(ImGuiIOPtr io, byte[] fontData, float fontSize, uint* glyphRanges = null, bool mergeWithPrevious = false) - { - ArgumentNullException.ThrowIfNull(fontData); - - GCHandle fontHandle = default; - try - { - // Pin the font data in memory - fontHandle = GCHandle.Alloc(fontData, GCHandleType.Pinned); - nint fontPtr = fontHandle.AddrOfPinnedObject(); - - // Create font configuration - ImFontConfigPtr fontConfig = ImGui.ImFontConfig(); - fontConfig.FontDataOwnedByAtlas = false; // We manage the memory - fontConfig.PixelSnapH = true; - fontConfig.MergeMode = mergeWithPrevious; - - // Use provided glyph ranges or default to ASCII - uint* ranges = glyphRanges != null ? glyphRanges : io.Fonts.GetGlyphRangesDefault(); - - // Add font to atlas - ImFont* font = io.Fonts.AddFontFromMemoryTTF((void*)fontPtr, fontData.Length, fontSize, fontConfig, ranges); - - if (font is null) - { - // Font addition failed, free the handle immediately - fontHandle.Free(); - return null; - } - - // Store the handle for proper cleanup to prevent memory leaks - customFontHandles.Add(fontHandle); - - return font; - } - catch (ArgumentException ex) - { - // Free the handle if it was allocated - if (fontHandle.IsAllocated) - { - fontHandle.Free(); - } - - DebugLogger.Log($"FontHelper.AddCustomFont failed with ArgumentException: {ex.Message}"); - return null; - } - catch (OutOfMemoryException ex) - { - // Free the handle if it was allocated - if (fontHandle.IsAllocated) - { - fontHandle.Free(); - } - - DebugLogger.Log($"FontHelper.AddCustomFont failed with OutOfMemoryException: {ex.Message}"); - return null; - } - } -} diff --git a/ImGui.App/ForceDpiAware.cs b/ImGui.App/ForceDpiAware.cs deleted file mode 100644 index 5fe76c0..0000000 --- a/ImGui.App/ForceDpiAware.cs +++ /dev/null @@ -1,761 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -#pragma warning disable IDE0078 // Use pattern matching - -namespace ktsu.ImGui.App; - -using System.ComponentModel; -using System.Globalization; -using System.Linq; -using System.Runtime.InteropServices; - -/// -/// Contains methods to set the application as DPI-Aware and to get the actual and window scale factors. -/// -public static partial class ForceDpiAware -{ - internal const double StandardDpiScale = 96.0; - internal const double MaxScaleFactor = 10.25; - - /// - /// Marks the application as DPI-Aware when running on the Windows operating system. - /// Uses modern DPI awareness APIs for better compatibility with windowing libraries. - /// - public static void Windows() - { - // Make process DPI aware for proper window sizing on high-res screens. - // Use the most modern API available for better compatibility with GLFW and other windowing libraries. - - if (OperatingSystem.IsWindowsVersionAtLeast(10, 0, 14393)) // Windows 10 Version 1607 - { - // Try the modern DPI awareness context API first (recommended) - try - { - nint result = NativeMethods.SetProcessDpiAwarenessContext(NativeMethods.DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2); - if (result != IntPtr.Zero) - { - return; // Success - } - } - catch (EntryPointNotFoundException) - { - // SetProcessDpiAwarenessContext not available, fall back to older API - } - } - - if (OperatingSystem.IsWindowsVersionAtLeast(6, 3)) // Windows 8.1 - { - // Fall back to SetProcessDpiAwareness - try - { - int result = NativeMethods.SetProcessDpiAwareness(NativeMethods.ProcessDpiAwareness.ProcessPerMonitorDpiAware); - if (result == 0) // S_OK - { - return; // Success - } - } - catch (EntryPointNotFoundException) - { - // SetProcessDpiAwareness not available, fall back to oldest API - } - } - - if (OperatingSystem.IsWindowsVersionAtLeast(6)) // Windows Vista - { - // Fall back to the legacy API as last resort - NativeMethods.SetProcessDPIAware(); - } - } - - /// - /// Gets the actual scale factor based on the current operating system and display settings. - /// - /// The actual scale factor. - public static double GetActualScaleFactor() - { - double userDpiScale; - - try - { - if (OperatingSystem.IsWindows()) - { - userDpiScale = GdiPlusHelper.GetDpiX(IntPtr.Zero); - } - else - { - string? xdgSessionType = Environment.GetEnvironmentVariable("XDG_SESSION_TYPE")?.ToLower(); - - if (xdgSessionType is null or "x11") - { - nint display = NativeMethods.XOpenDisplay(null!); - if (display == IntPtr.Zero) - { - userDpiScale = GetWaylandDpiScale(); - } - else - { - string? dpiString = Marshal.PtrToStringAnsi(NativeMethods.XGetDefault(display, "Xft", "dpi")); - - if (dpiString == null || !double.TryParse(dpiString, NumberStyles.Any, CultureInfo.InvariantCulture, out userDpiScale)) - { - int width = NativeMethods.XDisplayWidth(display, 0); - int widthMM = NativeMethods.XDisplayWidthMM(display, 0); - userDpiScale = width * 25.4 / widthMM; - } - - if (NativeMethods.XCloseDisplay(display) != 0) - { - throw new InvalidOperationException("Failed to close X11 display connection"); - } - - // If X11 gives us standard DPI, try WSL-specific detection - if (Math.Abs(userDpiScale - StandardDpiScale) < 1.0) - { - double wslScale = GetWaylandDpiScale(); // This includes WSL host detection - if (Math.Abs(wslScale - StandardDpiScale) > 1.0) - { - userDpiScale = wslScale; - } - } - } - } - else if (xdgSessionType == "wayland") - { - userDpiScale = GetWaylandDpiScale(); - } - else - { - userDpiScale = GetWaylandDpiScale(); - } - } - } - catch (Exception) - { - //Logger.Warning?.Print(LogClass.Application, $"Couldn't determine monitor DPI: {e.Message}"); - throw; - } - - return userDpiScale; - } - - /// - /// Gets the window scale factor based on the actual scale factor and standard DPI scale. - /// - /// The window scale factor. - public static double GetWindowScaleFactor() - { - double userDpiScale = GetActualScaleFactor(); - - return Math.Min(userDpiScale / StandardDpiScale, MaxScaleFactor); - } - - /// - /// Gets the DPI scale factor for Wayland sessions. - /// - /// The DPI scale factor in dots per inch. - internal static double GetWaylandDpiScale() - { - // Method 1: Check environment variables (most reliable for WSL) - if (TryGetEnvironmentScale(out double envScale)) - { - return envScale * StandardDpiScale; - } - - // Method 2: Try to get GNOME settings (your Arch setup has gsettings) - if (TryGetGnomeScale(out double gnomeScale) && gnomeScale > 1.0) - { - return gnomeScale * StandardDpiScale; - } - - // Method 3: Try WSLg-specific detection - if (TryGetWslgScale(out double wslgScale)) - { - return wslgScale * StandardDpiScale; - } - - // Method 4: WSL-specific fallback - try to detect Windows host DPI - if (TryGetWslHostDpiScale(out double hostScale)) - { - return hostScale * StandardDpiScale; - } - - // Fallback: Return standard DPI - return StandardDpiScale; - } - - /// - /// Tries to get scale factor from environment variables. - /// - /// The scale factor if found. - /// True if a scale factor was found, false otherwise. - internal static bool TryGetEnvironmentScale(out double scale) - { - scale = 1.0; - - // Check for manual override first (for WSL users to match Windows host DPI) - string? dpiOverride = Environment.GetEnvironmentVariable("IMGUI_DPI_SCALE"); - if (!string.IsNullOrEmpty(dpiOverride) && double.TryParse(dpiOverride, NumberStyles.Any, CultureInfo.InvariantCulture, out scale)) - { - return true; - } - - // Check GDK_SCALE (used by GTK applications - you have gtk3 installed) - string? gdkScale = Environment.GetEnvironmentVariable("GDK_SCALE"); - if (!string.IsNullOrEmpty(gdkScale) && double.TryParse(gdkScale, NumberStyles.Any, CultureInfo.InvariantCulture, out scale)) - { - return true; - } - - // Check QT_SCALE_FACTOR (for Qt applications) - string? qtScale = Environment.GetEnvironmentVariable("QT_SCALE_FACTOR"); - if (!string.IsNullOrEmpty(qtScale) && double.TryParse(qtScale, NumberStyles.Any, CultureInfo.InvariantCulture, out scale)) - { - return true; - } - - // Check WSL-specific environment variables - string? wslDistro = Environment.GetEnvironmentVariable("WSL_DISTRO_NAME"); - if (!string.IsNullOrEmpty(wslDistro)) - { - // In WSL, check for Windows DPI settings that might be forwarded - string? wslScale = Environment.GetEnvironmentVariable("WSL_DPI_SCALE"); - if (!string.IsNullOrEmpty(wslScale) && double.TryParse(wslScale, NumberStyles.Any, CultureInfo.InvariantCulture, out scale)) - { - return true; - } - } - - return false; - } - - /// - /// Tries to get scale factor from GNOME settings (your setup has gsettings support). - /// - /// The scale factor if found. - /// True if a scale factor was found, false otherwise. - internal static bool TryGetGnomeScale(out double scale) - { - scale = 1.0; - - try - { - // Try to get GNOME scaling factor using gsettings (you have gsettings-desktop-schemas) - using System.Diagnostics.Process process = new(); - process.StartInfo.FileName = "gsettings"; - process.StartInfo.Arguments = "get org.gnome.desktop.interface scaling-factor"; - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.CreateNoWindow = true; - - process.Start(); - string output = process.StandardOutput.ReadToEnd().Trim(); - process.WaitForExit(); - - // Parse the output (usually in format "uint32 2" for 2x scaling) - if (output.StartsWith("uint32 ") && - int.TryParse(output[7..], out int intScale) && - intScale > 0) - { - scale = intScale; - return true; - } - - // Also try text scaling factor - process.StartInfo.Arguments = "get org.gnome.desktop.interface text-scaling-factor"; - process.Start(); - output = process.StandardOutput.ReadToEnd().Trim(); - process.WaitForExit(); - - if (double.TryParse(output, NumberStyles.Any, CultureInfo.InvariantCulture, out scale) && scale > 0) - { - return true; - } - } - catch (Win32Exception) - { - // gsettings not found - } - catch (IOException) - { - // IO error - } - catch (InvalidOperationException) - { - // Process operation failed - } - - return false; - } - - /// - /// Tries to get scale factor optimized for WSLg (Windows Subsystem for Linux GUI). - /// - /// The scale factor if found. - /// True if a scale factor was found, false otherwise. - internal static bool TryGetWslgScale(out double scale) - { - scale = 1.0; - - try - { - // Check if we're in WSL - string? wslDistro = Environment.GetEnvironmentVariable("WSL_DISTRO_NAME"); - if (wslDistro is null or "") - { - return false; - } - - // Try to get DPI from X11 resources (WSLg provides X11 compatibility) - using System.Diagnostics.Process process = new(); - process.StartInfo.FileName = "xrdb"; - process.StartInfo.Arguments = "-query"; - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.CreateNoWindow = true; - - process.Start(); - string output = process.StandardOutput.ReadToEnd(); - process.WaitForExit(); - - // Look for Xft.dpi setting - string[] lines = output.Split('\n'); - foreach (string line in lines) - { - if (line.Contains("Xft.dpi:") && line.Contains('\t')) - { - string dpiValue = line.Split('\t')[1].Trim(); - if (double.TryParse(dpiValue, NumberStyles.Any, CultureInfo.InvariantCulture, out double dpi)) - { - scale = dpi / StandardDpiScale; - return true; - } - } - } - - // Fallback: Try to detect Windows host DPI scaling - // WSLg sometimes forwards Windows display settings - if (TryGetWslHostDpiScale(out double hostScale)) - { - scale = hostScale; - return true; - } - } - catch (Win32Exception) - { - // xrdb not found - } - catch (IOException) - { - // IO error - } - catch (InvalidOperationException) - { - // Process operation failed - } - - return false; - } - - /// - /// Tries to get the DPI scale factor from the Windows host when running in WSL. - /// - /// The scale factor if detected. - /// True if a scale factor was detected. - internal static bool TryGetWslHostDpiScale(out double scale) - { - scale = 1.0; - - try - { - // Check if we're running in WSL - string? wslDistro = Environment.GetEnvironmentVariable("WSL_DISTRO_NAME"); - if (string.IsNullOrEmpty(wslDistro)) - { - return false; - } - - // Try Windows host DPI detection methods - if (TryGetWindowsRegistryDpi(out scale)) - { - return true; - } - - // Try WSLg-specific Windows DPI detection - if (TryGetWslgWindowsDpi(out scale)) - { - return true; - } - - // Try heuristic detection for high-DPI displays - if (TryDetectHighDpiDisplay(out scale)) - { - return true; - } - } - catch (Win32Exception) - { - // Process execution failed - } - catch (IOException) - { - // File system access failed - } - catch (InvalidOperationException) - { - // Process operation failed - } - - return false; - } - - /// - /// Tries to get DPI from Windows registry via WSL interop. - /// - /// The detected scale factor. - /// True if DPI was detected. - internal static bool TryGetWindowsRegistryDpi(out double scale) - { - scale = 1.0; - - // Try multiple registry approaches - if (TryGetSystemDpiFromPowerShell(out scale)) - { - return true; - } - - if (TryGetLogPixelsFromRegistry(out scale)) - { - return true; - } - - if (TryGetDpiFromSystemMetrics(out scale)) - { - return true; - } - - return false; - } - - /// - /// Tries to get system DPI directly via PowerShell. - /// - /// The detected scale factor. - /// True if DPI was detected. - internal static bool TryGetSystemDpiFromPowerShell(out double scale) - { - scale = 1.0; - - try - { - // Use PowerShell to get system DPI directly - using System.Diagnostics.Process process = new(); - process.StartInfo.FileName = "powershell.exe"; - process.StartInfo.Arguments = "-Command \"Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.Screen]::PrimaryScreen.WorkingArea.Width; [System.Windows.Forms.SystemInformation]::WorkingArea.Width; [System.Drawing.Graphics]::FromHwnd([System.IntPtr]::Zero).DpiX\""; - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.RedirectStandardError = true; - process.StartInfo.CreateNoWindow = true; - - process.Start(); - string output = process.StandardOutput.ReadToEnd().Trim(); - string errorOutput = process.StandardError.ReadToEnd().Trim(); - process.WaitForExit(); - - if (process.ExitCode == 0 && !string.IsNullOrEmpty(output)) - { - string[] lines = [.. output.Split('\n').Where(l => !string.IsNullOrWhiteSpace(l))]; - if (lines.Length >= 1) - { - string dpiLine = lines[^1].Trim(); - if (double.TryParse(dpiLine, NumberStyles.Any, CultureInfo.InvariantCulture, out double dpi) && dpi > 0) - { - scale = dpi / 96.0; - bool isValid = scale > 1.0 && scale <= MaxScaleFactor; - return isValid; - } - } - } - } - catch (Win32Exception) - { - // Logger.Warning?.Print(LogClass.Application, $"Win32Exception in system DPI detection: {ex.Message}"); - } - catch (IOException) - { - // Logger.Warning?.Print(LogClass.Application, $"IOException in system DPI detection: {ex.Message}"); - } - catch (InvalidOperationException) - { - // Logger.Warning?.Print(LogClass.Application, $"InvalidOperationException in system DPI detection: {ex.Message}"); - } - - return false; - } - - /// - /// Tries to get LogPixels from Windows registry. - /// - /// The detected scale factor. - /// True if LogPixels was found. - internal static bool TryGetLogPixelsFromRegistry(out double scale) - { - scale = 1.0; - - try - { - // Try multiple registry locations for LogPixels - string[] registryCommands = [ - "Get-ItemProperty -Path 'HKCU:\\Control Panel\\Desktop' -Name LogPixels -ErrorAction SilentlyContinue | Select-Object -ExpandProperty LogPixels", - "Get-ItemProperty -Path 'HKCU:\\Control Panel\\Desktop\\WindowMetrics' -Name AppliedDPI -ErrorAction SilentlyContinue | Select-Object -ExpandProperty AppliedDPI", - "Get-ItemProperty -Path 'HKLM:\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\FontDPI' -Name LogPixels -ErrorAction SilentlyContinue | Select-Object -ExpandProperty LogPixels" - ]; - - foreach (string command in registryCommands) - { - using System.Diagnostics.Process process = new(); - process.StartInfo.FileName = "powershell.exe"; - process.StartInfo.Arguments = $"-Command \"{command}\""; - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.CreateNoWindow = true; - - process.Start(); - string output = process.StandardOutput.ReadToEnd().Trim(); - process.WaitForExit(); - - if (process.ExitCode == 0 && !string.IsNullOrEmpty(output) && int.TryParse(output, out int logPixels)) - { - scale = logPixels / 96.0; - bool isValid = scale > 1.0 && scale <= MaxScaleFactor; - return isValid; - } - } - } - catch (Win32Exception) - { - // Logger.Warning?.Print(LogClass.Application, $"Win32Exception in registry LogPixels detection: {ex.Message}"); - } - catch (IOException) - { - // Logger.Warning?.Print(LogClass.Application, $"IOException in registry LogPixels detection: {ex.Message}"); - } - catch (InvalidOperationException) - { - // Logger.Warning?.Print(LogClass.Application, $"InvalidOperationException in registry LogPixels detection: {ex.Message}"); - } - - return false; - } - - /// - /// Tries to get DPI from Windows system metrics. - /// - /// The detected scale factor. - /// True if DPI was detected. - internal static bool TryGetDpiFromSystemMetrics(out double scale) - { - scale = 1.0; - - try - { - // Try to get system DPI using GetDeviceCaps equivalent - using System.Diagnostics.Process process = new(); - process.StartInfo.FileName = "powershell.exe"; - process.StartInfo.Arguments = "-Command \"Add-Type -Name Win32 -Namespace System -MemberDefinition '[DllImport(\\\"user32.dll\\\")] public static extern IntPtr GetDC(IntPtr hwnd); [DllImport(\\\"gdi32.dll\\\")] public static extern int GetDeviceCaps(IntPtr hdc, int nIndex); [DllImport(\\\"user32.dll\\\")] public static extern int ReleaseDC(IntPtr hwnd, IntPtr hdc);'; $hdc = [System.Win32]::GetDC([System.IntPtr]::Zero); $dpi = [System.Win32]::GetDeviceCaps($hdc, 88); [System.Win32]::ReleaseDC([System.IntPtr]::Zero, $hdc); $dpi\""; - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.RedirectStandardError = true; - process.StartInfo.CreateNoWindow = true; - - process.Start(); - string output = process.StandardOutput.ReadToEnd().Trim(); - string errorOutput = process.StandardError.ReadToEnd().Trim(); - process.WaitForExit(); - - if (process.ExitCode == 0 && int.TryParse(output, out int dpi) && dpi > 0) - { - scale = dpi / 96.0; - bool isValid = scale > 1.0 && scale <= MaxScaleFactor; - return isValid; - } - } - catch (Win32Exception) - { - // Logger.Warning?.Print(LogClass.Application, $"Win32Exception in system metrics detection: {ex.Message}"); - } - catch (IOException) - { - // Logger.Warning?.Print(LogClass.Application, $"IOException in system metrics detection: {ex.Message}"); - } - catch (InvalidOperationException) - { - // Logger.Warning?.Print(LogClass.Application, $"InvalidOperationException in system metrics detection: {ex.Message}"); - } - - return false; - } - - /// - /// Tries to get DPI from WSLg Windows host. - /// - /// The detected scale factor. - /// True if DPI was detected. - internal static bool TryGetWslgWindowsDpi(out double scale) - { - scale = 1.0; - - try - { - // Try to get system DPI via Windows interop using PowerShell (wmic is deprecated) - using System.Diagnostics.Process process = new(); - process.StartInfo.FileName = "powershell.exe"; - process.StartInfo.Arguments = "-Command \"Get-WmiObject -Class Win32_DesktopMonitor | Select-Object PixelsPerXLogicalInch | Format-List\""; - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.RedirectStandardError = true; - process.StartInfo.CreateNoWindow = true; - - process.Start(); - string output = process.StandardOutput.ReadToEnd(); - string errorOutput = process.StandardError.ReadToEnd().Trim(); - process.WaitForExit(); - - if (process.ExitCode == 0) - { - foreach (string line in output.Split('\n')) - { - if (line.Contains("PixelsPerXLogicalInch") && line.Contains(':')) - { - string[] parts = line.Split(':', 2); - if (parts.Length > 1) - { - string value = parts[1].Trim(); - if (int.TryParse(value, out int dpi) && dpi > 0) - { - scale = dpi / 96.0; - bool isValid = scale > 1.0 && scale <= MaxScaleFactor; - return isValid; - } - } - } - } - } - - // Alternative approach using CIM (newer than WMI) - process.StartInfo.Arguments = "-Command \"Get-CimInstance -Class Win32_DesktopMonitor | Select-Object PixelsPerXLogicalInch | Format-List\""; - process.Start(); - output = process.StandardOutput.ReadToEnd(); - errorOutput = process.StandardError.ReadToEnd().Trim(); - process.WaitForExit(); - - if (process.ExitCode == 0) - { - foreach (string line in output.Split('\n')) - { - if (line.Contains("PixelsPerXLogicalInch") && line.Contains(':')) - { - string[] parts = line.Split(':', 2); - if (parts.Length > 1) - { - string value = parts[1].Trim(); - if (int.TryParse(value, out int dpi) && dpi > 0) - { - scale = dpi / 96.0; - bool isValid = scale > 1.0 && scale <= MaxScaleFactor; - return isValid; - } - } - } - } - } - } - catch (Win32Exception) - { - // Logger.Warning?.Print(LogClass.Application, $"Win32Exception in WSLg detection: {ex.Message}"); - } - catch (IOException) - { - // Logger.Warning?.Print(LogClass.Application, $"IOException in WSLg detection: {ex.Message}"); - } - catch (InvalidOperationException) - { - // Logger.Warning?.Print(LogClass.Application, $"InvalidOperationException in WSLg detection: {ex.Message}"); - } - - return false; - } - - /// - /// Tries to detect high-DPI displays using heuristics. - /// - /// The detected scale factor. - /// True if a high-DPI display was detected. - internal static bool TryDetectHighDpiDisplay(out double scale) - { - scale = 1.0; - - try - { - // Get display information from xrandr - using System.Diagnostics.Process process = new(); - process.StartInfo.FileName = "xrandr"; - process.StartInfo.Arguments = "--current"; - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardOutput = true; - process.StartInfo.CreateNoWindow = true; - - process.Start(); - string output = process.StandardOutput.ReadToEnd(); - process.WaitForExit(); - - if (process.ExitCode == 0) - { - // Look for high-resolution displays that typically use scaling - foreach (string line in output.Split('\n')) - { - if (line.Contains(" connected ") && line.Contains('x')) - { - // Extract resolution (e.g., "2560x1440") - string[] parts = line.Split(' '); - foreach (string part in parts) - { - if (part.Contains('x') && !part.Contains('+')) - { - string[] dimensions = part.Split('x'); - if (dimensions.Length == 2 && - int.TryParse(dimensions[0], out int width) && - int.TryParse(dimensions[1], out int height)) - { - // Common high-DPI resolutions that typically use 125% scaling - if ((width >= 2560 && height >= 1440) || // 1440p+ - (width >= 1920 && height >= 1080 && (width > 1920 || height > 1080))) // >1080p - { - scale = 1.25; // 125% scaling is common for these resolutions - return true; - } - } - } - } - } - } - } - } - catch (Win32Exception) - { - // Process execution failed - } - catch (IOException) - { - // File system access failed - } - catch (InvalidOperationException) - { - // Process operation failed - } - - return false; - } -} - diff --git a/ImGui.App/GdiPlusHelper.cs b/ImGui.App/GdiPlusHelper.cs deleted file mode 100644 index adf7ca8..0000000 --- a/ImGui.App/GdiPlusHelper.cs +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -using System.Runtime.Versioning; - -/// -/// Helper class for GDI+ operations. -/// -[SupportedOSPlatform("windows")] -public static partial class GdiPlusHelper -{ - /// - /// Static constructor to initialize GDI+. - /// - static GdiPlusHelper() => CheckStatus(NativeMethods.GdiplusStartup(out _, NativeMethods.StartupInputEx.Default, out _)); - - /// - /// Checks the status of a GDI+ operation and throws an exception if it failed. - /// - /// The status code returned by a GDI+ operation. - /// Thrown when the GDI+ operation fails. - internal static void CheckStatus(int gdiStatus) - { - if (gdiStatus != 0) - { - throw new InvalidOperationException($"GDI Status Error: {gdiStatus}"); - } - } - - /// - /// Gets the DPI (dots per inch) along the X axis for a given window handle. - /// - /// The handle to the window. - /// The DPI along the X axis. - /// Thrown when a GDI+ operation fails. - public static float GetDpiX(IntPtr hwnd) - { - CheckStatus(NativeMethods.GdipCreateFromHWND(hwnd, out nint graphicsHandle)); - CheckStatus(NativeMethods.GdipGetDpiX(graphicsHandle, out float result)); - CheckStatus(NativeMethods.GdipDeleteGraphics(graphicsHandle)); - - return result; - } -} diff --git a/ImGui.App/ImGui.App.csproj b/ImGui.App/ImGui.App.csproj deleted file mode 100644 index 51f151e..0000000 --- a/ImGui.App/ImGui.App.csproj +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - true - net8.0;net9.0;net7.0 - - - - - - - - - - - - - - - - - - - - True - True - Resources.resx - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - - - diff --git a/ImGui.App/ImGuiApp.cs b/ImGui.App/ImGuiApp.cs deleted file mode 100644 index 2a9903f..0000000 --- a/ImGui.App/ImGuiApp.cs +++ /dev/null @@ -1,1710 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -using System.Buffers; -using System.Collections.Concurrent; -using System.Collections.ObjectModel; -using System.Diagnostics; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using Hexa.NET.ImGui; -using ktsu.ImGui.App.ImGuiController; -using ktsu.Invoker; -using ktsu.ScopedAction; -using ktsu.Semantics.Paths; -using ktsu.Semantics.Strings; -using Silk.NET.Input; -using Silk.NET.OpenGL; -using Silk.NET.Windowing; -using SixLabors.ImageSharp; -using SixLabors.ImageSharp.PixelFormats; -using SixLabors.ImageSharp.Processing; -using Color = System.Drawing.Color; -using Texture = ImGuiController.Texture; - -/// -/// Provides static methods and properties to manage the ImGui application. -/// -[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1506:AvoidExcessiveClassCoupling", Justification = "This class is the main entry point for the ImGui application and requires many dependencies. Consider refactoring in the future.")] -public static partial class ImGuiApp -{ - internal static IWindow? window; - internal static GL? gl; - internal static ImGuiController.ImGuiController? controller; - internal static IInputContext? inputContext; - internal static OpenGLProvider? glProvider; - internal static IntPtr currentGLContextHandle; // Track the current GL context handle - - internal static ImGuiAppWindowState LastNormalWindowState { get; set; } = new(); - - /// - /// Gets the current state of the ImGui application window. - /// - /// - /// A new instance of representing the current window state, - /// including size, position, and layout state. - /// - public static ImGuiAppWindowState WindowState - { - get => new() - { - Size = LastNormalWindowState.Size, - Pos = LastNormalWindowState.Pos, - LayoutState = window?.WindowState ?? Silk.NET.Windowing.WindowState.Normal - }; - } - - internal static ConcurrentDictionary FontIndices { get; } = []; - internal static float lastFontScaleFactor; - internal static readonly List currentPinnedFontData = []; - - /// - /// Stores unmanaged memory handles for font data that needs to be freed with Marshal.FreeHGlobal. - /// - internal static readonly List currentFontMemoryHandles = []; - - /// - /// List of common font sizes to load for crisp rendering at multiple sizes - /// - internal static readonly int[] CommonFontSizes = [10, 12, 14, 16, 18, 20, 24, 32, 48]; - - /// - /// Gets an instance of the class to delegate tasks to the window thread. - /// - public static Invoker Invoker { get; internal set; } = null!; - - /// - /// Gets a value indicating whether the ImGui application window is focused. - /// - public static bool IsFocused { get; private set; } = true; - - /// - /// Gets a value indicating whether the ImGui application window is visible. - /// - public static bool IsVisible => (window?.WindowState != Silk.NET.Windowing.WindowState.Minimized) && (window?.IsVisible ?? false); - - /// - /// Gets a value indicating whether the application is currently idle (no user input for a specified time). - /// - public static bool IsIdle { get; private set; } - - internal static DateTime lastInputTime = DateTime.UtcNow; - internal static double targetFrameTimeMs = 1000.0 / 30.0; // Default to 30 FPS (33.33ms per frame) - internal static readonly PidFrameLimiter frameLimiter = new(); - internal static double previousTargetFrameTimeMs = 1000.0 / 30.0; - - /// - /// Updates the last input time to the current time. Called by the input system when user input is detected. - /// - internal static void OnUserInput() => lastInputTime = DateTime.UtcNow; - - internal static bool showImGuiMetrics; - internal static bool showImGuiDemo; - internal static bool showPerformanceMonitor; - - // Performance monitoring data structures - internal static readonly Queue performanceFrameTimes = new(); - internal static float performanceFrameTimeSum; - internal static readonly Queue performanceFpsHistory = new(); - internal static float performanceLastFpsUpdateTime; - internal static int performanceFrameCount; - - /// - /// Gets the scale factor for the ImGui application. - /// - public static float ScaleFactor { get; private set; } = 1; - - /// - /// Gets or sets the global UI scale factor for accessibility. - /// This is a user-adjustable scale that is separate from DPI scaling. - /// Default is 1.0 (100%). Valid range is 0.5 to 3.0. - /// - public static float GlobalScale { get; private set; } = 1.0f; - - internal static ConcurrentDictionary Textures { get; } = []; - - /// - /// Stops the ImGui application by closing the window. - /// - /// Thrown when the application is not running. - public static void Stop() - { - if (window == null) - { - throw new InvalidOperationException("Cannot stop the application because it is not running."); - } - - window.Close(); - } - - /// - /// Sets the global UI scale factor for accessibility. - /// This scale is applied on top of DPI scaling and affects all UI elements. - /// - /// The scale factor to set. Valid range is 0.5 to 3.0. - /// Thrown when scale is outside the valid range. - public static void SetGlobalScale(float scale) - { - if (scale is < 0.5f or > 3.0f) - { - throw new ArgumentOutOfRangeException(nameof(scale), scale, "Scale must be between 0.5 and 3.0"); - } - - GlobalScale = scale; - Config.OnGlobalScaleChanged?.Invoke(scale); - } - - internal static ImGuiAppConfig Config { get; set; } = new(); - - internal static void InitializeWindow(ImGuiAppConfig config) - { - if (config.TestMode) - { - // In test mode, use the test window from config - window = config.TestWindow ?? throw new InvalidOperationException("TestWindow must be set when TestMode is true"); - return; - } - - WindowOptions silkWindowOptions = WindowOptions.Default with - { - Title = config.Title, - Size = new((int)config.InitialWindowState.Size.X, (int)config.InitialWindowState.Size.Y), - Position = new((int)config.InitialWindowState.Pos.X, (int)config.InitialWindowState.Pos.Y), - WindowState = Silk.NET.Windowing.WindowState.Normal, - VSync = false, // Disable VSync to allow PID frame limiter to control frame rate - API = OperatingSystem.IsLinux() ? - new GraphicsAPI( - ContextAPI.OpenGL, - ContextProfile.Core, - ContextFlags.Default, - new APIVersion(3, 0)) : - new GraphicsAPI( - ContextAPI.OpenGL, - ContextProfile.Core, - ContextFlags.ForwardCompatible, - new APIVersion(3, 3)), - PreferredDepthBufferBits = 24, - PreferredStencilBufferBits = 8 - }; - - LastNormalWindowState = config.InitialWindowState; - LastNormalWindowState.LayoutState = Silk.NET.Windowing.WindowState.Normal; - - window = Window.Create(silkWindowOptions); - } - - internal static void SetupWindowLoadHandler(ImGuiAppConfig config) - { - window!.Load += () => - { - DebugLogger.Log("Window.Load: Starting window load handler"); - - if (!string.IsNullOrEmpty(config.IconPath)) - { - DebugLogger.Log("Window.Load: Setting window icon"); - SetWindowIcon(config.IconPath); - } - - DebugLogger.Log("Window.Load: Creating OpenGL factory"); - WindowOpenGLFactory glFactory = new(window); - glProvider = new OpenGLProvider(glFactory); - GLWrapper glWrapper = (GLWrapper)glProvider.GetGL(); - gl = glWrapper.UnderlyingGL; - DebugLogger.Log("Window.Load: OpenGL initialized"); - - DebugLogger.Log("Window.Load: Creating input context"); - inputContext = window.CreateInput(); - DebugLogger.Log("Window.Load: Input context created"); - - DebugLogger.Log("Window.Load: Creating ImGuiController"); - controller = new( - gl, - view: window, - input: inputContext, - onConfigureIO: () => - { - DebugLogger.Log("onConfigureIO: Starting configuration"); - unsafe - { - currentGLContextHandle = (nint)ImGui.GetCurrentContext().Handle; - - ImGuiIOPtr io = ImGui.GetIO(); - - // Configure imgui.ini file saving based on user preference - if (!config.SaveIniSettings) - { - io.IniFilename = null; - } - - io.ConfigDebugIsDebuggerPresent = Debugger.IsAttached; - io.ConfigErrorRecoveryEnableAssert = false; - io.ConfigErrorRecoveryEnableTooltip = true; - io.ConfigErrorRecoveryEnableDebugLog = true; - } - DebugLogger.Log("onConfigureIO: Context configured"); - - DebugLogger.Log("onConfigureIO: Updating DPI scale"); - UpdateDpiScale(); - DebugLogger.Log("onConfigureIO: Initializing fonts"); - InitFonts(); - DebugLogger.Log("onConfigureIO: Calling user OnStart"); - config.OnStart?.Invoke(); - DebugLogger.Log("onConfigureIO: Configuration completed"); - } - ); - DebugLogger.Log("Window.Load: ImGuiController created"); - - ImGui.GetStyle().WindowRounding = 0; - window.WindowState = config.InitialWindowState.LayoutState; - DebugLogger.Log("Window.Load: Window load handler completed"); - }; - } - - internal static void SetupWindowResizeHandler(ImGuiAppConfig config) - { - window!.FramebufferResize += s => - { - gl?.Viewport(s); - CaptureWindowNormalState(); - UpdateDpiScale(); - CheckAndHandleContextChange(); - - // Force validation on next update cycle since window size changed - ForceWindowPositionValidation(); - - config.OnMoveOrResize?.Invoke(); - }; - } - - internal static void SetupWindowMoveHandler(ImGuiAppConfig config) - { - window!.Move += (p) => - { - CaptureWindowNormalState(); - UpdateDpiScale(); - CheckAndHandleContextChange(); - - // Force validation on next update cycle since window may have moved to different monitor - ForceWindowPositionValidation(); - - config.OnMoveOrResize?.Invoke(); - }; - } - - internal static void UpdateWindowPerformance() - { - ImGuiAppPerformanceSettings settings = Config.PerformanceSettings; - - if (!settings.EnableThrottledRendering) - { - return; - } - - // Skip throttling during PID auto-tuning to maintain consistent target frame rate - (bool isTuningActive, _, _, _, _) = frameLimiter.GetTuningStatus(); - if (isTuningActive) - { - return; - } - - // Update idle state if idle detection is enabled - if (settings.EnableIdleDetection) - { - double timeSinceLastInput = (DateTime.UtcNow - lastInputTime).TotalSeconds; - IsIdle = timeSinceLastInput >= settings.IdleTimeoutSeconds; - } - else - { - IsIdle = false; - } - - // Evaluate all throttling conditions and select the lowest frame rate - List<(double fps, string reason)> candidateRates = []; - - // Add focused/unfocused rate - if (IsFocused) - { - candidateRates.Add((settings.FocusedFps, "Focused")); - } - else - { - candidateRates.Add((settings.UnfocusedFps, "Unfocused")); - } - - // Add idle rate if applicable - if (IsIdle && settings.EnableIdleDetection) - { - candidateRates.Add((settings.IdleFps, "Idle")); - } - - // Add not visible rate if applicable - if (!IsVisible) - { - candidateRates.Add((settings.NotVisibleFps, "Not Visible")); - } - - // Select the lowest frame rate - (double targetFps, string _) = candidateRates - .OrderBy(rate => rate.fps) - .First(); - - // Update target frame time (convert FPS to milliseconds per frame) - double newTargetFrameTimeMs = targetFps > 0 ? (1000.0 / targetFps) : 10000.0; // Cap at 10 seconds for very low FPS - targetFrameTimeMs = newTargetFrameTimeMs; - } - - internal static void SetupWindowUpdateHandler(ImGuiAppConfig config) - { - window!.Update += (delta) => - { - if (!controller?.FontsConfigured ?? true) - { - throw new InvalidOperationException("Fonts are not configured before Update()"); - } - - EnsureWindowPositionIsValid(); - UpdateWindowPerformance(); - UpdatePerformanceMonitoring((float)delta); - - controller?.Update((float)delta); - config.OnUpdate?.Invoke((float)delta); - Invoker.DoInvokes(); - }; - } - - internal static void SetupWindowRenderHandler(ImGuiAppConfig config) - { - window!.Render += delta => - { - if (!controller?.FontsConfigured ?? true) - { - throw new InvalidOperationException("Fonts are not configured before Render()"); - } - - gl?.ClearColor(Color.FromArgb(255, (int)(.45f * 255), (int)(.55f * 255), (int)(.60f * 255))); - gl?.Clear(ClearBufferMask.ColorBufferBit); - - RenderWithScaling(() => - { - using ScopedAction? frameWrapper = config.FrameWrapperFactory.Invoke(); - RenderAppMenu(config.OnAppMenu); - RenderWindowContents(config.OnRender, (float)delta); - RenderPerformanceMonitor(); - }); - - controller?.Render(); - - // Apply sleep-based frame rate limiting - ApplyFrameRateLimit(); - }; - } - - internal static void ApplyFrameRateLimit() - { - // Reset PID controller if target frame rate has changed - if (Math.Abs(targetFrameTimeMs - previousTargetFrameTimeMs) > 0.1) - { - frameLimiter.Reset(); - previousTargetFrameTimeMs = targetFrameTimeMs; - } - - // Use PID controller for accurate frame rate limiting - frameLimiter.LimitFrameRate(targetFrameTimeMs); - } - - internal static void RenderWithScaling(Action renderAction) - { - FindBestFontForAppearance(FontAppearance.DefaultFontName, FontAppearance.DefaultFontPointSize, out float bestFontSize); - float scaleRatio = bestFontSize / FontAppearance.DefaultFontPointSize; - // Apply both DPI scale and global accessibility scale - float combinedScale = scaleRatio * GlobalScale; - using (new UIScaler(combinedScale)) - { - RenderWithDefaultFont(renderAction); - } - } - - internal static void SetupWindowClosingHandler() - { - window!.Closing += () => - { - CleanupPinnedFontData(); - FontHelper.CleanupCustomFonts(); - CleanupController(); - CleanupInputContext(); - CleanupOpenGL(); - }; - } - - internal static void CleanupPinnedFontData() - { - // Free our font data handles since we own the data - foreach (GCHandle handle in currentPinnedFontData) - { - try - { - if (handle.IsAllocated) - { - handle.Free(); - } - } - catch (InvalidOperationException) - { - // Handle was already freed, ignore - } - } - - currentPinnedFontData.Clear(); - - // Free unmanaged font memory handles - foreach (nint memoryHandle in currentFontMemoryHandles) - { - try - { - Marshal.FreeHGlobal(memoryHandle); - } - catch (ArgumentException) - { - // Handle was already freed or invalid, ignore - } - } - - currentFontMemoryHandles.Clear(); - } - - internal static void CleanupController() - { - controller?.Dispose(); - controller = null; - } - - internal static void CleanupInputContext() - { - inputContext?.Dispose(); - inputContext = null; - } - - internal static void CleanupOpenGL() - { - if (gl != null) - { - gl.Dispose(); - gl = null; - } - - if (glProvider != null) - { - glProvider.Dispose(); - glProvider = null; - } - } - - /// - /// Starts the ImGui application with the specified configuration. - /// - /// The configuration settings for the ImGui application. - public static void Start(ImGuiAppConfig config) - { - DebugLogger.Log("ImGuiApp.Start: Starting application"); - ArgumentNullException.ThrowIfNull(config); - - if (window != null) - { - throw new InvalidOperationException("Application is already running."); - } - - AdjustConfigForStartup(config); - - DebugLogger.Log("ImGuiApp.Start: Creating invoker and setting config"); - Invoker = new(); - Config = config; - - DebugLogger.Log("ImGuiApp.Start: Validating config"); - ValidateConfig(config); - - DebugLogger.Log("ImGuiApp.Start: Setting DPI awareness"); - ForceDpiAware.Windows(); - - DebugLogger.Log("ImGuiApp.Start: Initializing window"); - InitializeWindow(config); - DebugLogger.Log("ImGuiApp.Start: Setting up window handlers"); - SetupWindowLoadHandler(config); - SetupWindowResizeHandler(config); - SetupWindowMoveHandler(config); - SetupWindowUpdateHandler(config); - SetupWindowRenderHandler(config); - SetupWindowClosingHandler(); - - window!.FocusChanged += (focused) => IsFocused = focused; - - if (!config.TestMode) - { - // Temporarily keep console window visible for debugging - // if (OperatingSystem.IsWindows()) - // { - // DebugLogger.Log("ImGuiApp.Start: Hiding console window"); - // nint handle = NativeMethods.GetConsoleWindow(); - // NativeMethods.ShowWindow(handle, SW_HIDE); - // } - - DebugLogger.Log("ImGuiApp.Start: Starting window run loop"); - window.Run(); - DebugLogger.Log("ImGuiApp.Start: Window run loop completed"); - window.Dispose(); - } - } - - internal static void AdjustConfigForStartup(ImGuiAppConfig config) - { - if (config.InitialWindowState.LayoutState == Silk.NET.Windowing.WindowState.Minimized) - { - // Automatically convert minimized state to normal to prevent startup issues - // This commonly happens when restoring persisted window state - config.InitialWindowState.LayoutState = Silk.NET.Windowing.WindowState.Normal; - DebugLogger.Log("ImGuiApp.Start: Initial window state was minimized, automatically converted to normal for proper startup."); - } - } - - internal static void ValidateConfig(ImGuiAppConfig config) - { - if (!string.IsNullOrEmpty(config.IconPath) && !File.Exists(config.IconPath)) - { - throw new FileNotFoundException("Icon file not found.", config.IconPath); - } - - foreach (KeyValuePair font in config.Fonts) - { - if (string.IsNullOrEmpty(font.Key) || font.Value == null) - { - throw new ArgumentException("Font name and data must be specified.", nameof(config)); - } - } - - if (config.DefaultFonts.Count == 0) - { - throw new ArgumentException("At least one default font must be specified in the configuration.", nameof(config)); - } - - foreach (KeyValuePair font in config.DefaultFonts) - { - if (string.IsNullOrEmpty(font.Key) || font.Value == null) - { - throw new ArgumentException("Default font name and data must be specified.", nameof(config)); - } - } - } - - internal static void RenderWithDefaultFont(Action action) - { - using (new FontAppearance(FontAppearance.DefaultFontName, FontAppearance.DefaultFontPointSize)) - { - action(); - } - } - - internal static void CaptureWindowNormalState() - { - if (window?.WindowState == Silk.NET.Windowing.WindowState.Normal) - { - LastNormalWindowState = new() - { - Size = new(window.Size.X, window.Size.Y), - Pos = new(window.Position.X, window.Position.Y), - LayoutState = Silk.NET.Windowing.WindowState.Normal - }; - } - } - - internal static ImFontPtr FindBestFontForAppearance(string name, int sizePoints, out float sizePixels) - { - ImGuiIOPtr io = ImGui.GetIO(); - ImVector fonts = io.Fonts.Fonts; - - // Calculate the pixel size for this point size - sizePixels = CalculateOptimalPixelSize(sizePoints); - - // First, try to find the exact font with the requested size - string exactFontKey = $"{name}_{sizePoints}"; - if (FontIndices.TryGetValue(exactFontKey, out int fontIndex)) - { - return fonts[fontIndex]; - } - - // If exact size not found, try to find the closest size for this font name - int closestSize = -1; - int smallestDifference = int.MaxValue; - - foreach (int size in CommonFontSizes) - { - string fontKey = $"{name}_{size}"; - if (FontIndices.ContainsKey(fontKey)) - { - int difference = Math.Abs(size - sizePoints); - if (difference < smallestDifference) - { - smallestDifference = difference; - closestSize = size; - } - } - } - - // If we found a closest size, use it - if (closestSize != -1) - { - string closestFontKey = $"{name}_{closestSize}"; - fontIndex = FontIndices[closestFontKey]; - return fonts[fontIndex]; - } - - // Try to get font index for the specified name directly (for backwards compatibility) - if (FontIndices.TryGetValue(name, out fontIndex)) - { - return fonts[fontIndex]; - } - - // Fallback to Default font - if (FontIndices.TryGetValue("Default", out fontIndex)) - { - return fonts[fontIndex]; - } - - // If no default font, use the first font - fontIndex = 0; - return fonts[fontIndex]; - } - - // Cache to avoid checking every frame - private static Silk.NET.Maths.Vector2D? lastCheckedWindowPosition; - private static Silk.NET.Maths.Vector2D? lastCheckedWindowSize; - private static bool needsPositionValidation = true; - - /// - /// Ensures the window is positioned on a visible monitor. This method provides improved - /// multi-monitor support, better visibility detection, and performance optimizations. - /// - internal static void EnsureWindowPositionIsValid() - { - // Early exit for invalid states - if (window is null || window.WindowState == Silk.NET.Windowing.WindowState.Minimized) - { - return; - } - - // Performance optimization: only check when position/size changes or forced - if (!needsPositionValidation && - lastCheckedWindowPosition == window.Position && - lastCheckedWindowSize == window.Size) - { - return; - } - - try - { - // Update cache - lastCheckedWindowPosition = window.Position; - lastCheckedWindowSize = window.Size; - needsPositionValidation = false; - - // Get all available monitors for better multi-monitor support - IMonitor[] availableMonitors = GetAvailableMonitors(); - if (availableMonitors.Length == 0) - { - DebugLogger.Log("EnsureWindowPositionIsValid: No monitors available, skipping validation"); - return; - } - - // Check if window has sufficient visibility on any monitor - IMonitor? bestMonitor = FindBestMonitorForWindow(window, availableMonitors); - - if (bestMonitor is null) - { - // Window is not sufficiently visible on any monitor - relocate it - IMonitor targetMonitor = GetPrimaryMonitor(availableMonitors) ?? availableMonitors[0]; - RelocateWindowToMonitor(window, targetMonitor); - DebugLogger.Log($"EnsureWindowPositionIsValid: Relocated window to monitor bounds {targetMonitor.Bounds}"); - } - else if (window.Monitor != bestMonitor) - { - DebugLogger.Log($"EnsureWindowPositionIsValid: Window is visible on monitor {bestMonitor.Bounds}"); - } - } - catch (InvalidOperationException ex) - { - DebugLogger.Log($"EnsureWindowPositionIsValid: Error during validation - {ex.Message}"); - // Don't crash the application, just log the error - } - catch (NullReferenceException ex) - { - DebugLogger.Log($"EnsureWindowPositionIsValid: Error during validation - {ex.Message}"); - // Don't crash the application, just log the error - } - } - - /// - /// Gets all available monitors from the windowing system. - /// - private static IMonitor[] GetAvailableMonitors() - { - try - { - // Try to get monitors from the current window's context first - if (window?.Monitor?.Bounds is not null) - { - // For Silk.NET, we need to work with what's available - // In many cases, we only have access to the current monitor - return [window.Monitor]; - } - - // Fallback: if no monitor available, return empty array - return []; - } - catch (InvalidOperationException) - { - return []; - } - catch (NullReferenceException) - { - return []; - } - } - - /// - /// Finds the monitor where the window has the most visibility. - /// Returns null if the window is not sufficiently visible on any monitor. - /// - private static IMonitor? FindBestMonitorForWindow(IWindow window, IMonitor[] monitors) - { - if (monitors.Length == 0) - { - return null; - } - - IMonitor? bestMonitor = null; - int maxVisibleArea = 0; - - // Window rectangle - Silk.NET.Maths.Rectangle windowRect = new( - window.Position.X, - window.Position.Y, - window.Size.X, - window.Size.Y); - - foreach (IMonitor monitor in monitors) - { - // Calculate intersection area with this monitor - Silk.NET.Maths.Rectangle intersection = CalculateRectangleIntersection(windowRect, monitor.Bounds); - int visibleArea = intersection.Size.X * intersection.Size.Y; - - if (visibleArea > maxVisibleArea) - { - maxVisibleArea = visibleArea; - bestMonitor = monitor; - } - } - - // Require at least 25% of the window to be visible (or minimum 100x100 pixels) - int windowArea = windowRect.Size.X * windowRect.Size.Y; - int minimumVisibleArea = Math.Max(10000, windowArea / 4); // 100x100 or 25% of window - - return maxVisibleArea >= minimumVisibleArea ? bestMonitor : null; - } - - /// - /// Gets the primary monitor from the available monitors. - /// - private static IMonitor? GetPrimaryMonitor(IMonitor[] monitors) => - // In Silk.NET, we typically work with the monitor associated with the window - // For now, we'll use the first monitor as primary - monitors.Length > 0 ? monitors[0] : null; - - /// - /// Relocates the window to the specified monitor, preserving the current window size - /// unless it's too large for the target monitor. - /// - private static void RelocateWindowToMonitor(IWindow window, IMonitor monitor) - { - Silk.NET.Maths.Rectangle monitorBounds = monitor.Bounds; - Silk.NET.Maths.Vector2D currentSize = window.Size; - - // Preserve current size if it fits, otherwise use default size - Silk.NET.Maths.Vector2D newSize; - if (currentSize.X <= monitorBounds.Size.X - 100 && currentSize.Y <= monitorBounds.Size.Y - 100) - { - // Current size fits with some margin - keep it - newSize = currentSize; - } - else - { - // Current size is too large - use default size or fit to monitor - ImGuiAppWindowState defaultState = new(); - int maxWidth = Math.Min((int)defaultState.Size.X, monitorBounds.Size.X - 100); - int maxHeight = Math.Min((int)defaultState.Size.Y, monitorBounds.Size.Y - 100); - newSize = new(Math.Max(640, maxWidth), Math.Max(480, maxHeight)); // Minimum 640x480 - } - - // Center the window on the target monitor - Silk.NET.Maths.Vector2D halfSize = new(newSize.X / 2, newSize.Y / 2); - Silk.NET.Maths.Vector2D centerPosition = monitorBounds.Center - halfSize; - - // Ensure the window is fully within the monitor bounds - int posX = Math.Max(monitorBounds.Origin.X, Math.Min(centerPosition.X, monitorBounds.Origin.X + monitorBounds.Size.X - newSize.X)); - int posY = Math.Max(monitorBounds.Origin.Y, Math.Min(centerPosition.Y, monitorBounds.Origin.Y + monitorBounds.Size.Y - newSize.Y)); - - // Apply the new position and size - window.Size = newSize; - window.Position = new(posX, posY); - window.WindowState = Silk.NET.Windowing.WindowState.Normal; - - DebugLogger.Log($"EnsureWindowPositionIsValid: Repositioned window to ({posX}, {posY}) with size ({newSize.X}, {newSize.Y})"); - } - - /// - /// Calculates the intersection rectangle of two rectangles. - /// - private static Silk.NET.Maths.Rectangle CalculateRectangleIntersection( - Silk.NET.Maths.Rectangle rect1, - Silk.NET.Maths.Rectangle rect2) - { - int left = Math.Max(rect1.Origin.X, rect2.Origin.X); - int top = Math.Max(rect1.Origin.Y, rect2.Origin.Y); - int right = Math.Min(rect1.Origin.X + rect1.Size.X, rect2.Origin.X + rect2.Size.X); - int bottom = Math.Min(rect1.Origin.Y + rect1.Size.Y, rect2.Origin.Y + rect2.Size.Y); - - // If rectangles don't intersect, return empty rectangle - if (left >= right || top >= bottom) - { - return new Silk.NET.Maths.Rectangle(0, 0, 0, 0); - } - - return new Silk.NET.Maths.Rectangle(left, top, right - left, bottom - top); - } - - /// - /// Forces the window position validation to run on the next update cycle. - /// Call this when monitor configuration may have changed. - /// - internal static void ForceWindowPositionValidation() - { - needsPositionValidation = true; - DebugLogger.Log("EnsureWindowPositionIsValid: Forced validation requested"); - } - - /// - /// Renders the application menu using the provided delegate. - /// - /// The delegate to render the menu. - internal static void RenderAppMenu(Action? menuDelegate) - { - if (menuDelegate is not null) - { - if (ImGui.BeginMainMenuBar()) - { - menuDelegate(); - - if (ImGui.BeginMenu("Accessibility")) - { - ImGui.Text("UI Scale:"); - ImGui.Separator(); - - if (ImGui.MenuItem("75%", "", Math.Abs(GlobalScale - 0.75f) < 0.01f)) - { - SetGlobalScale(0.75f); - } - - if (ImGui.MenuItem("100%", "", Math.Abs(GlobalScale - 1.0f) < 0.01f)) - { - SetGlobalScale(1.0f); - } - - if (ImGui.MenuItem("125%", "", Math.Abs(GlobalScale - 1.25f) < 0.01f)) - { - SetGlobalScale(1.25f); - } - - if (ImGui.MenuItem("150%", "", Math.Abs(GlobalScale - 1.5f) < 0.01f)) - { - SetGlobalScale(1.5f); - } - - if (ImGui.MenuItem("175%", "", Math.Abs(GlobalScale - 1.75f) < 0.01f)) - { - SetGlobalScale(1.75f); - } - - if (ImGui.MenuItem("200%", "", Math.Abs(GlobalScale - 2.0f) < 0.01f)) - { - SetGlobalScale(2.0f); - } - - ImGui.EndMenu(); - } - - if (ImGui.BeginMenu("Debug")) - { - if (ImGui.MenuItem("Show ImGui Demo", "", showImGuiDemo)) - { - showImGuiDemo = !showImGuiDemo; - } - - if (ImGui.MenuItem("Show ImGui Metrics", "", showImGuiMetrics)) - { - showImGuiMetrics = !showImGuiMetrics; - } - - if (ImGui.MenuItem("Show Performance Monitor", "", showPerformanceMonitor)) - { - showPerformanceMonitor = !showPerformanceMonitor; - } - - ImGui.EndMenu(); - } - - ImGui.EndMainMenuBar(); - } - } - } - - /// - /// Renders the main window contents and handles ImGui demo and metrics windows. - /// - /// The delegate to render the main window contents. - /// The delta time since the last frame. - internal static void RenderWindowContents(Action? tickDelegate, float dt) - { - bool b = true; - ImGui.SetNextWindowSize(ImGui.GetMainViewport().WorkSize, ImGuiCond.Always); - ImGui.SetNextWindowPos(ImGui.GetMainViewport().WorkPos); - ImGuiStylePtr style = ImGui.GetStyle(); - System.Numerics.Vector4 borderColor = style.Colors[(int)ImGuiCol.Border]; - if (ImGui.Begin("##mainWindow", ref b, ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoSavedSettings)) - { - style.Colors[(int)ImGuiCol.Border] = borderColor; - tickDelegate?.Invoke(dt); - } - - ImGui.End(); - - if (showImGuiDemo) - { - ImGui.ShowDemoWindow(ref showImGuiDemo); - } - - if (showImGuiMetrics) - { - ImGui.ShowMetricsWindow(ref showImGuiMetrics); - } - } - - /// - /// Sets the window icon using the specified icon file path. - /// - /// The file path to the icon image. - public static void SetWindowIcon(string iconPath) - { - using FileStream stream = File.OpenRead(iconPath); - using Image sourceImage = Image.Load(stream); - - int[] iconSizes = [128, 64, 48, 32, 28, 24, 22, 20, 18, 16]; - - Collection icons = []; - - foreach (int size in iconSizes) - { - Image resizeImage = sourceImage.Clone(); - int sourceSize = Math.Min(sourceImage.Width, sourceImage.Height); - resizeImage.Mutate(x => x.Crop(sourceSize, sourceSize).Resize(size, size, KnownResamplers.Welch)); - - UseImageBytes(resizeImage, bytes => - { - // Create a permanent copy since RawImage needs to keep the data - byte[] iconData = new byte[bytes.Length]; - Array.Copy(bytes, iconData, bytes.Length); - icons.Add(new(size, size, new Memory(iconData))); - }); - } - - Invoker.Invoke(() => window?.SetWindowIcon([.. icons])); - } - - internal static readonly ArrayPool _bytePool = ArrayPool.Shared; - - /// - /// Gets or loads a texture from the specified file path with optimized memory usage. - /// - public static ImGuiAppTextureInfo GetOrLoadTexture(AbsoluteFilePath path) - { - // Check if the texture is already loaded - if (Textures.TryGetValue(path, out ImGuiAppTextureInfo? existingTexture)) - { - return existingTexture; - } - - using Image image = Image.Load(path); - - ImGuiAppTextureInfo textureInfo = new() - { - Path = path, - Width = image.Width, - Height = image.Height - }; - - UseImageBytes(image, bytes => - { - textureInfo.TextureId = UploadTextureRGBA(bytes, image.Width, image.Height); - unsafe - { - textureInfo.TextureRef = new ImTextureRef(default, textureInfo.TextureId); - } - }); - - Textures[path] = textureInfo; - return textureInfo; - } - - /// - /// Executes an action with temporary access to image bytes using pooled memory for efficiency. - /// The bytes are returned to the pool after the action completes. - /// - /// The image to process. - /// The action to perform with the image bytes. - public static void UseImageBytes(Image image, Action action) - { - ArgumentNullException.ThrowIfNull(image); - ArgumentNullException.ThrowIfNull(action); - - int bufferSize = image.Width * image.Height * Unsafe.SizeOf(); - - // Rent buffer from pool - byte[] pooledBuffer = _bytePool.Rent(bufferSize); - try - { - // Copy the image data to the pooled buffer - image.CopyPixelDataTo(pooledBuffer.AsSpan(0, bufferSize)); - - // Execute the action with the pooled buffer - action(pooledBuffer); - } - finally - { - // Always return the buffer to the pool - _bytePool.Return(pooledBuffer); - } - } - - /// - /// Tries to get a texture from the texture dictionary without loading it. - /// - /// The path to the texture file. - /// When this method returns, contains the texture information if the texture is found; otherwise, null. - /// true if the texture was found; otherwise, false. - public static bool TryGetTexture(AbsoluteFilePath path, out ImGuiAppTextureInfo? textureInfo) => Textures.TryGetValue(path, out textureInfo); - - /// - /// Tries to get a texture from the texture dictionary without loading it. - /// - /// The path to the texture file as a string. - /// When this method returns, contains the texture information if the texture is found; otherwise, null. - /// true if the texture was found; otherwise, false. - public static bool TryGetTexture(string path, out ImGuiAppTextureInfo? textureInfo) => TryGetTexture(path.As(), out textureInfo); - - /// - /// Uploads a texture to the GPU using the specified RGBA byte array, width, and height. - /// - internal static uint UploadTextureRGBA(byte[] bytes, int width, int height) - { - return Invoker.Invoke(() => - { - if (gl is null) - { - throw new InvalidOperationException("OpenGL context is not initialized."); - } - - // Upload texture to graphics system - gl.GetInteger(GLEnum.TextureBinding2D, out int previousTextureId); - - nint textureHandle = Marshal.AllocHGlobal(bytes.Length); - try - { - Marshal.Copy(bytes, 0, textureHandle, bytes.Length); - Texture texture = new(gl, width, height, textureHandle, pxFormat: PixelFormat.Rgba); - texture.Bind(); - texture.SetMagFilter(TextureMagFilter.Linear); - texture.SetMinFilter(TextureMinFilter.Linear); - - // Restore state - gl.BindTexture(GLEnum.Texture2D, (uint)previousTextureId); - - return texture.GlTexture; - } - finally - { - Marshal.FreeHGlobal(textureHandle); - } - }); - } - - /// - /// Deletes the specified texture from the GPU. - /// - /// The OpenGL texture ID to delete. - /// Thrown if the OpenGL context is not initialized. - public static void DeleteTexture(uint textureId) - { - Invoker.Invoke(() => - { - if (gl is null) - { - throw new InvalidOperationException("OpenGL context is not initialized."); - } - - gl.DeleteTexture(textureId); - Textures.Where(x => x.Value.TextureId == textureId).ToList().ForEach(x => Textures.Remove(x.Key, out ImGuiAppTextureInfo? _)); - }); - } - - /// - /// Deletes the specified texture from the GPU. - /// - /// The texture info containing the texture ID to delete. - /// Thrown if the OpenGL context is not initialized. - /// Thrown if the textureInfo is null. - public static void DeleteTexture(ImGuiAppTextureInfo textureInfo) => DeleteTexture(textureInfo?.TextureId ?? throw new ArgumentNullException(nameof(textureInfo))); - - internal static void UpdateDpiScale() - { - float newScaleFactor = (float)ForceDpiAware.GetWindowScaleFactor(); - - // Only update if the scale factor changed significantly (more than 1% difference) - if (Math.Abs(ScaleFactor - newScaleFactor) > 0.01f) - { - float oldScaleFactor = ScaleFactor; - ScaleFactor = newScaleFactor; - - // Only reload fonts if scale factor changed significantly (more than 5% difference) - // This prevents unnecessary font reloading for minor DPI changes - if (controller?.FontsConfigured == true && Math.Abs(oldScaleFactor - newScaleFactor) > 0.05f) - { - InitFonts(); - } - } - } - - // Using the new ImGui 1.92.0 dynamic font system - // Fonts can now be rendered at any size dynamically - no need to preload multiple sizes! - internal static unsafe void InitFonts() - { - DebugLogger.Log("InitFonts: Starting font initialization"); - - // Only load fonts if they haven't been loaded or if scale factor has changed - if (controller?.FontsConfigured == true && Math.Abs(lastFontScaleFactor - ScaleFactor) < 0.01f) - { - DebugLogger.Log("InitFonts: Skipping font reload - already configured"); - return; // Skip reloading fonts if they're already loaded and scale hasn't changed - } - - lastFontScaleFactor = ScaleFactor; - - ImGuiIOPtr io = ImGui.GetIO(); - ImFontAtlasPtr fontAtlasPtr = io.Fonts; - - // Clear existing font data and indices - fontAtlasPtr.Clear(); - FontIndices.Clear(); - - // Track fonts that need disposal after rebuilding the atlas - List fontPinnedData = []; - - // Load fonts from configuration at multiple sizes - IEnumerable> fontsToLoad = Config.Fonts.Concat(Config.DefaultFonts); - int defaultFontIndex = -1; - - // Pre-allocate emoji font memory outside the loops for reuse - nint emojiHandle = IntPtr.Zero; - int emojiLength = 0; - byte[]? emojiBytes = ImGuiAppConfig.EmojiFont; - if (emojiBytes != null) - { - emojiHandle = Marshal.AllocHGlobal(emojiBytes.Length); - currentFontMemoryHandles.Add(emojiHandle); - Marshal.Copy(emojiBytes, 0, emojiHandle, emojiBytes.Length); - emojiLength = emojiBytes.Length; - } - - foreach ((string name, byte[] fontBytes) in fontsToLoad) - { - // Pre-allocate main font memory outside the size loop for reuse - nint fontHandle = Marshal.AllocHGlobal(fontBytes.Length); - currentFontMemoryHandles.Add(fontHandle); - Marshal.Copy(fontBytes, 0, fontHandle, fontBytes.Length); - - foreach (int size in CommonFontSizes) - { - LoadFontFromMemory($"{name}_{size}", fontHandle, fontBytes.Length, fontAtlasPtr, size); - - // Load and merge emoji font immediately after main font for proper merging - if (emojiHandle != IntPtr.Zero) - { - LoadEmojiFontFromMemory(emojiHandle, emojiLength, fontAtlasPtr, size); - } - - // Prioritize DefaultFonts over custom Fonts for setting the default font - if (size == FontAppearance.DefaultFontPointSize) - { - // If this is from DefaultFonts, use it as the default font - if (Config.DefaultFonts.ContainsKey(name)) - { - defaultFontIndex = FontIndices[$"{name}_{size}"]; - } - // If no DefaultFonts font has been set yet, use the first custom font as fallback - else if (defaultFontIndex == -1) - { - defaultFontIndex = FontIndices[$"{name}_{size}"]; - } - } - } - } - - // Set the font indices for the default font - if (defaultFontIndex != -1) - { - FontIndices["default"] = defaultFontIndex; // Store with "default" key for FontAppearance.DefaultFontName - FontIndices["Default"] = defaultFontIndex; // Store with "Default" key for FindBestFontForAppearance fallback - FontIndices[$"Default_{FontAppearance.DefaultFontPointSize}"] = defaultFontIndex; // Store with "Default_12" key for compatibility - } - - // Add ImGui default font as fallback if no custom fonts were loaded - if (defaultFontIndex == -1) - { - defaultFontIndex = fontAtlasPtr.Fonts.Size; - fontAtlasPtr.AddFontDefault(); - FontIndices[$"Default_{FontAppearance.DefaultFontPointSize}"] = defaultFontIndex; - FontIndices["default"] = defaultFontIndex; - FontIndices["Default"] = defaultFontIndex; - } - - // Build the font atlas to generate the texture - ImGuiP.ImFontAtlasBuildMain(fontAtlasPtr); - - // Set the default font for ImGui rendering - if (defaultFontIndex != -1 && defaultFontIndex < fontAtlasPtr.Fonts.Size) - { - io.FontDefault = fontAtlasPtr.Fonts[defaultFontIndex]; - } - - // Store the pinned font data for later cleanup - StorePinnedFontData(fontPinnedData); - DebugLogger.Log("InitFonts: Font initialization completed"); - } - - /// - /// Loads a font from pre-allocated memory into the font atlas with custom glyph ranges. - /// This method reuses already allocated memory to avoid duplicate allocations for multiple font sizes. - /// - /// The name of the font. - /// The handle to pre-allocated font data. - /// The length of the font data in bytes. - /// The ImGui font atlas. - /// The point size for the font. - /// Custom glyph ranges, or null for default ranges. - internal static unsafe void LoadFontFromMemory(string name, nint fontHandle, int fontLength, ImFontAtlasPtr fontAtlasPtr, int pointSize, uint* glyphRanges = null) - { - // Calculate optimal pixel size for the font - float fontSize = CalculateOptimalPixelSize(pointSize); - - // Create font configuration - ImFontConfigPtr fontConfig = ImGui.ImFontConfig(); - fontConfig.FontDataOwnedByAtlas = false; // We manage the memory ourselves - fontConfig.PixelSnapH = true; - - // Use custom glyph ranges if provided, otherwise use extended Unicode ranges if enabled - uint* ranges = glyphRanges != null ? glyphRanges : (Config.EnableUnicodeSupport ? FontHelper.GetExtendedUnicodeRanges(fontAtlasPtr) : fontAtlasPtr.GetGlyphRangesDefault()); - - // Add font to atlas using pre-allocated memory - int fontIndex = fontAtlasPtr.Fonts.Size; - fontAtlasPtr.AddFontFromMemoryTTF((void*)fontHandle, fontLength, fontSize, fontConfig, ranges); - - // Store the font index for later retrieval - FontIndices[name] = fontIndex; - } - - /// - /// Loads emoji font from pre-allocated memory and merges it with the previously loaded font for emoji support. - /// This method reuses already allocated emoji font memory to avoid duplicate allocations for multiple font sizes. - /// - /// The handle to pre-allocated emoji font data. - /// The length of the emoji font data in bytes. - /// The ImGui font atlas. - /// The font size to load emoji font for. - internal static unsafe void LoadEmojiFontFromMemory(nint emojiHandle, int emojiLength, ImFontAtlasPtr fontAtlasPtr, int size) - { - // Get emoji-specific ranges (separate from main font to avoid conflicts) - uint* emojiRanges = FontHelper.GetEmojiRanges(); - - // Calculate optimal pixel size for the emoji font - float fontSize = CalculateOptimalPixelSize(size); - - // Create font configuration for merging - ImFontConfigPtr emojiConfig = ImGui.ImFontConfig(); - emojiConfig.FontDataOwnedByAtlas = false; // We manage the memory ourselves - emojiConfig.PixelSnapH = true; - emojiConfig.MergeMode = true; // This is the key - merge with previous font - emojiConfig.GlyphMinAdvanceX = fontSize; // Ensure emoji have consistent width - - // Merge emoji font with the previously added font using pre-allocated memory - fontAtlasPtr.AddFontFromMemoryTTF((void*)emojiHandle, emojiLength, fontSize, emojiConfig, emojiRanges); - } - - /// - /// Calculates the optimal pixel size for a given point size based on current scale factor. - /// - /// The desired point size. - /// The optimal pixel size for crisp rendering. - internal static float CalculateOptimalPixelSize(int pointSize) => - // Round to exact pixels for crisp rendering, avoiding fractional sizes that cause blurry text - Math.Max(1.0f, MathF.Round(pointSize * ScaleFactor)); - - internal static void StorePinnedFontData(List newPinnedData) - { - // Free old font data handles before storing new ones to prevent memory leak - foreach (GCHandle handle in currentPinnedFontData) - { - try - { - if (handle.IsAllocated) - { - handle.Free(); - } - } - catch (InvalidOperationException) - { - // Handle was already freed, ignore - } - } - - // Clear the old list and store the new handles - currentPinnedFontData.Clear(); - currentPinnedFontData.AddRange(newPinnedData); - - // Note: currentFontMemoryHandles is managed separately in LoadFont method - // and will be cleaned up by CleanupPinnedFontData when needed - } - - /// - public static void CleanupAllTextures() - { - if (gl == null) - { - return; - } - - // Make a copy of the keys to avoid collection modification issues - List texturesToRemove = [.. Textures.Keys]; - - foreach (AbsoluteFilePath? texturePath in texturesToRemove) - { - if (Textures.TryGetValue(texturePath, out ImGuiAppTextureInfo? info)) - { - DeleteTexture(info.TextureId); - } - } - - Textures.Clear(); - } - - /// - /// Converts a value in ems to pixels based on the current ImGui font size. - /// - /// The value in ems to convert to pixels. - /// The equivalent value in pixels. - public static int EmsToPx(float ems) - { - // if imgui is not initialized, use default font size - return controller is null - ? (int)(ems * FontAppearance.DefaultFontPointSize) - : Invoker.Invoke(() => (int)(ems * ImGui.GetFontSize())); - } - - /// - /// Converts a value in points to pixels based on the current scale factor. - /// - /// The value in points to convert to pixels. - /// The equivalent value in pixels. - public static int PtsToPx(int pts) => (int)(pts * ScaleFactor); - - /// - /// Resets all static state for testing purposes. - /// - internal static void Reset() - { - window = null; - gl = null; - controller = null; - inputContext = null; - glProvider = null; - LastNormalWindowState = new(); - FontIndices.Clear(); - lastFontScaleFactor = 0; - currentPinnedFontData.Clear(); - currentFontMemoryHandles.Clear(); - Invoker = null!; - IsFocused = true; - IsIdle = false; - lastInputTime = DateTime.UtcNow; - targetFrameTimeMs = 1000.0 / 30.0; - showImGuiMetrics = false; - showImGuiDemo = false; - showPerformanceMonitor = false; - performanceFrameTimes.Clear(); - performanceFrameTimeSum = 0; - performanceFpsHistory.Clear(); - performanceLastFpsUpdateTime = 0; - performanceFrameCount = 0; - ScaleFactor = 1; - GlobalScale = 1.0f; - Textures.Clear(); - Config = new(); - } - - /// - /// Checks if the OpenGL context has changed and handles texture reloading if needed - /// - internal static void CheckAndHandleContextChange() - { - if (gl == null) - { - return; - } - - // Get the current context handle - nint newContextHandle; - unsafe - { - newContextHandle = (nint)ImGui.GetCurrentContext().Handle; - } - - // If context has changed, reload all textures - if (newContextHandle != currentGLContextHandle && newContextHandle != nint.Zero) - { - currentGLContextHandle = newContextHandle; - ReloadAllTextures(); - } - } - - /// - /// Reloads all previously loaded textures in the new context - /// - internal static void ReloadAllTextures() - { - if (gl == null) - { - return; - } - - // Make a copy to avoid modification issues during iteration - List> texturesToReload = [.. Textures]; - - foreach (KeyValuePair texture in texturesToReload) - { - try - { - AbsoluteFilePath path = texture.Key; - ImGuiAppTextureInfo oldInfo = texture.Value; - - // Only reload from file if the path exists - if (File.Exists(path)) - { - using Image image = Image.Load(path); - uint oldTextureId = oldInfo.TextureId; - - // Upload new texture - UseImageBytes(image, bytes => - { - oldInfo.TextureId = UploadTextureRGBA(bytes, image.Width, image.Height); - unsafe - { - oldInfo.TextureRef = new ImTextureRef(default, oldInfo.TextureId); - } - }); - - // No need to delete old texture as the context is already gone - } - } - catch (Exception ex) when (ex is IOException or InvalidOperationException or ArgumentException) - { - } - } - } - - /// - /// Updates performance monitoring metrics. - /// - /// The delta time since the last frame. - internal static void UpdatePerformanceMonitoring(float dt) - { - performanceFrameTimes.Enqueue(dt); - performanceFrameTimeSum += dt; - - while (performanceFrameTimes.Count > 60) // Keep last 60 frames - { - performanceFrameTimeSum -= performanceFrameTimes.Dequeue(); - } - - // Track FPS over time (update every 0.5 seconds for smoother graph) - performanceFrameCount++; - performanceLastFpsUpdateTime += dt; - - if (performanceLastFpsUpdateTime >= 0.5f) - { - float currentFps = performanceFrameCount / performanceLastFpsUpdateTime; - performanceFpsHistory.Enqueue(currentFps); - - while (performanceFpsHistory.Count > 120) // Keep last 2 minutes of data (120 * 0.5s = 60s) - { - performanceFpsHistory.Dequeue(); - } - - performanceFrameCount = 0; - performanceLastFpsUpdateTime = 0; - } - } - - /// - /// Renders the performance monitor window. - /// - internal static void RenderPerformanceMonitor() - { - if (!showPerformanceMonitor) - { - return; - } - - if (ImGui.Begin("Performance Monitor", ref showPerformanceMonitor)) - { - ImGui.TextWrapped("This window shows the current performance state and throttling behavior."); - ImGui.Separator(); - - ImGui.Text($"Window Focused: {IsFocused}"); - ImGui.Text($"Application Idle: {IsIdle}"); - ImGui.Text($"Window Visible: {IsVisible}"); - - ImGui.Separator(); - ImGui.TextWrapped("Throttling uses sleep-based timing to control frame rate and save resources. It evaluates all conditions and uses the lowest frame rate. VSync is disabled to allow proper frame rate control below monitor refresh rate."); - ImGui.Text("Rates: Focused=30 FPS, Unfocused=5 FPS, Idle=10 FPS, Not Visible=2 FPS (0.5s per frame)"); - ImGui.TextWrapped("The system automatically selects the lowest applicable rate using Thread.Sleep for precise timing control. Try combining conditions (e.g., unfocused + idle, or minimized) to see the effect."); - - // Real-time FPS graph - ImGui.Separator(); - ImGui.Text("Real-Time Frame Rate Graph:"); - - if (performanceFpsHistory.Count > 1) - { - float[] fpsArray = [.. performanceFpsHistory]; - float currentFps = fpsArray[^1]; - float avgFps = performanceFrameTimes.Count > 0 ? performanceFrameTimes.Count / performanceFrameTimeSum : 0; - - ImGui.Text($"Current FPS: {currentFps:F1} | Average FPS: {avgFps:F1}"); - - // Show PID controller diagnostics - ImGui.Separator(); - ImGui.Text("PID Frame Limiter Diagnostics:"); - double currentTargetFps = 1000.0 / targetFrameTimeMs; - ImGui.Text($"Target: {currentTargetFps:F1} FPS ({targetFrameTimeMs:F1}ms)"); - ImGui.Text(frameLimiter.GetDiagnosticInfo()); - (double currentKp, double currentKi, double currentKd) = frameLimiter.GetCurrentParameters(); - ImGui.Text($"PID Gains: Kp={currentKp:F3}, Ki={currentKi:F3}, Kd={currentKd:F3}"); - ImGui.TextWrapped("The PID controller uses high-precision timing (Thread.Sleep + Stopwatch spin-wait) for accurate frame rate control, replacing simple Thread.Sleep limitations for better precision at higher frame rates. VSync is disabled to prevent interference with frame limiting."); - - // PID Auto-Tuning Section - ImGui.Separator(); - ImGui.Text("PID Auto-Tuning:"); - - (bool isTuningActive, int currentStep, int totalSteps, double progressPercent, PidFrameLimiter.TuningResult? bestResult, string phase) = frameLimiter.GetTuningStatusDetailed(); - - if (isTuningActive) - { - ImGui.Text($"Phase: {phase}"); - ImGui.Text($"Progress: Step {currentStep}/{totalSteps} ({progressPercent:F1}%)"); - ImGui.ProgressBar((float)(progressPercent / 100.0), new System.Numerics.Vector2(300, 0)); - ImGui.TextColored(new System.Numerics.Vector4(1.0f, 0.8f, 0.4f, 1.0f), "⚠️ Throttling disabled during tuning for consistent results"); - ImGui.TextWrapped("Comprehensive tuning: Coarse (8s/test) → Fine (12s/test) → Precision (15s/test)"); - - if (ImGui.Button("Stop Auto-Tuning")) - { - frameLimiter.StopAutoTuning(); - } - } - else - { - ImGui.TextWrapped("Comprehensive auto-tuning tests different PID parameter combinations across multiple phases to find optimal settings for maximum accuracy. Throttling is automatically disabled during tuning for consistent results."); - ImGui.TextWrapped("• Phase 1: Coarse tuning (8s per test, 24 parameters)"); - ImGui.TextWrapped("• Phase 2: Fine tuning (12s per test, 25 parameters around best result)"); - ImGui.TextWrapped("• Phase 3: Precision tuning (15s per test, 9 parameters for final optimization)"); - ImGui.TextColored(new System.Numerics.Vector4(1.0f, 0.6f, 0.6f, 1.0f), "⏱️ Total time: ~12-15 minutes for maximum accuracy"); - - if (ImGui.Button("Start Comprehensive Auto-Tuning")) - { - frameLimiter.StartAutoTuning(); - } - - if (bestResult.HasValue) - { - ImGui.Text("Best tuned parameters:"); - ImGui.Text($" Kp: {bestResult.Value.Kp:F3}, Ki: {bestResult.Value.Ki:F3}, Kd: {bestResult.Value.Kd:F3}"); - ImGui.Text($" Score: {bestResult.Value.Score:F3} (Avg Error: {bestResult.Value.AverageError:F2}ms)"); - } - } - - // Show current throttling state - string currentState = "Unknown"; - if (isTuningActive) - { - currentState = "Throttling Disabled (PID Tuning Active)"; - } - else if (!IsVisible) - { - currentState = "Not Visible (2 FPS target)"; - } - else if (!IsFocused && IsIdle) - { - currentState = "Unfocused + Idle (5 FPS target)"; - } - else if (!IsFocused) - { - currentState = "Unfocused (5 FPS target)"; - } - else if (IsIdle) - { - currentState = "Idle (10 FPS target)"; - } - else - { - currentState = "Focused (30 FPS target)"; - } - - ImGui.Text($"Current State: {currentState}"); - - // Create the plot - ImGui.PlotLines("##FPS", ref fpsArray[0], fpsArray.Length, 0, - $"FPS Over Time (Last {performanceFpsHistory.Count * 0.5f:F0}s)", 0.0f, 35.0f, - new System.Numerics.Vector2(400, 100)); - - ImGui.TextWrapped("Graph shows FPS over the last 60 seconds. Watch it change as you focus/unfocus the window or minimize it!"); - ImGui.Separator(); - ImGui.TextColored(new System.Numerics.Vector4(0.7f, 0.9f, 0.7f, 1.0f), "💡 Testing Tips:"); - ImGui.BulletText("Click on another window to see unfocused throttling (5 FPS)"); - ImGui.BulletText("Stop moving the mouse for 5+ seconds to see idle throttling (10 FPS)"); - ImGui.BulletText("Minimize this window to see not visible throttling (2 FPS)"); - ImGui.BulletText("The lowest applicable rate always wins!"); - } - else - { - ImGui.Text("Collecting data for graph..."); - } - } - - ImGui.End(); - } -} diff --git a/ImGui.App/ImGuiAppConfig.cs b/ImGui.App/ImGuiAppConfig.cs deleted file mode 100644 index bf1c602..0000000 --- a/ImGui.App/ImGuiAppConfig.cs +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -using System.Resources; -using ktsu.ScopedAction; -using Silk.NET.Windowing; - -/// -/// Represents the configuration settings for the ImGui application. -/// -public class ImGuiAppConfig -{ - /// - /// Gets or sets a value indicating whether the application is running in test mode. - /// When true, the window will be invisible and optimized for testing. - /// - public bool TestMode { get; init; } - - /// - /// Gets or sets the test window to use when TestMode is true. - /// This must be set when TestMode is true. - /// - internal IWindow? TestWindow { get; init; } - - /// - /// Gets or sets the title of the application window. - /// - public string Title { get; init; } = nameof(ImGuiApp); - - /// - /// Gets or sets the file path to the application window icon. - /// - public string IconPath { get; init; } = string.Empty; - - /// - /// Gets or sets the initial state of the application window. - /// - public ImGuiAppWindowState InitialWindowState { get; init; } = new(); - - /// - /// Gets or sets the action to be performed when the application starts. - /// - public Action OnStart { get; init; } = () => { }; - - /// - /// Gets or sets a scoped action to enclose the frame rendering. - /// - public Func FrameWrapperFactory { get; init; } = () => null; - - /// - /// Gets or sets the action to be performed on each update tick. - /// - public Action OnUpdate { get; init; } = (delta) => { }; - - /// - /// Gets or sets the action to be performed on each render tick. - /// - public Action OnRender { get; init; } = (delta) => { }; - - /// - /// Gets or sets the action to be performed when rendering the application menu. - /// - public Action OnAppMenu { get; init; } = () => { }; - - /// - /// Gets or sets the action to be performed when the application window is moved or resized. - /// - public Action OnMoveOrResize { get; init; } = () => { }; - - /// - /// Gets or sets the action to be performed when the global UI scale changes. - /// The parameter is the new scale factor (e.g., 1.0 for 100%, 1.5 for 150%). - /// This can be used to persist the scale preference. - /// - public Action OnGlobalScaleChanged { get; init; } = (scale) => { }; - - /// - /// Gets or sets the fonts to be used in the application. - /// - /// - /// A dictionary where the key is the font name and the value is the byte array representing the font data. - /// - public Dictionary Fonts { get; init; } = []; - - /// - /// Gets or sets a value indicating whether to enable extended Unicode support for fonts. - /// When true, fonts will include extended character ranges for accented characters, - /// mathematical symbols, currency symbols, emojis, and other Unicode blocks. - /// When false, only basic ASCII characters (0-127) will be available. - /// Default is true. - /// - public bool EnableUnicodeSupport { get; init; } = true; - - /// - /// Gets or sets a value indicating whether ImGui should save window settings to imgui.ini. - /// When false, window positions and sizes will not be persisted between sessions. - /// - public bool SaveIniSettings { get; init; } = true; - - /// - /// Gets or sets the performance settings for throttled rendering. - /// - public ImGuiAppPerformanceSettings PerformanceSettings { get; init; } = new(); - - internal Dictionary DefaultFonts { get; init; } = new Dictionary - { - { "default", Resources.Resources.NerdFont} - }; - - /// - /// Gets the emoji font data if available, null otherwise. - /// - internal static byte[]? EmojiFont - { - get - { - try - { - return Resources.Resources.NotoEmoji; - } - catch (MissingManifestResourceException) - { - // NotoEmoji.ttf not available in resources - return null; - } - catch (InvalidOperationException) - { - // Resource manager not available - return null; - } - } - } -} diff --git a/ImGui.App/ImGuiAppPerformanceSettings.cs b/ImGui.App/ImGuiAppPerformanceSettings.cs deleted file mode 100644 index ec0918c..0000000 --- a/ImGui.App/ImGuiAppPerformanceSettings.cs +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -/// -/// Represents performance settings for throttled rendering to save system resources. -/// -public class ImGuiAppPerformanceSettings -{ - /// - /// Gets or sets a value indicating whether throttled rendering is enabled. - /// When true, the application will reduce frame rate when unfocused or idle. - /// - public bool EnableThrottledRendering { get; init; } = true; - - /// - /// Gets or sets the target frame rate (FPS) when the application window is focused and active. - /// - public double FocusedFps { get; init; } = 30.0; - - /// - /// Gets or sets the target frame rate (FPS) when the application window is unfocused. - /// - public double UnfocusedFps { get; init; } = 5.0; - - /// - /// Gets or sets the target frame rate (FPS) when the application is idle (no user input). - /// - public double IdleFps { get; init; } = 10.0; - - /// - /// Gets or sets the target frame rate (FPS) when the application window is not visible (minimized or hidden). - /// - public double NotVisibleFps { get; init; } = 2.0; - - /// - /// Gets or sets a value indicating whether idle detection is enabled. - /// When true, the application will detect when there's no user input and reduce frame rate further. - /// - public bool EnableIdleDetection { get; init; } = true; - - /// - /// Gets or sets the time (in seconds) of no user input before the application is considered idle. - /// - public double IdleTimeoutSeconds { get; init; } = 30.0; -} diff --git a/ImGui.App/ImGuiAppTextureInfo.cs b/ImGui.App/ImGuiAppTextureInfo.cs deleted file mode 100644 index 33b26b9..0000000 --- a/ImGui.App/ImGuiAppTextureInfo.cs +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; -using Hexa.NET.ImGui; -using ktsu.Semantics.Paths; - -/// -/// Represents information about a texture, including its file path, texture ID, width, and height. -/// -public class ImGuiAppTextureInfo -{ - /// - /// Gets or sets the file path of the texture. - /// - public AbsoluteFilePath Path { get; set; } = new(); - - /// - /// Gets or sets the OpenGL texture ID. - /// - public uint TextureId { get; set; } - - /// - /// Gets or sets the ImGui texture reference for ImGui 1.92+ texture system. - /// - public ImTextureRef TextureRef { get; set; } - - /// - /// Gets or sets the width of the texture. - /// - public int Width { get; set; } - - /// - /// Gets or sets the height of the texture. - /// - public int Height { get; set; } -} diff --git a/ImGui.App/ImGuiAppWindowState.cs b/ImGui.App/ImGuiAppWindowState.cs deleted file mode 100644 index 920a894..0000000 --- a/ImGui.App/ImGuiAppWindowState.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; -using System.Numerics; - -using Silk.NET.Windowing; - -/// -/// Represents the state of the ImGui application window, including size, position, and layout state. -/// -public class ImGuiAppWindowState -{ - /// - /// Gets or sets the size of the window. - /// - public Vector2 Size { get; set; } = new(1280, 720); - - /// - /// Gets or sets the position of the window. - /// - public Vector2 Pos { get; set; } = new(-short.MinValue, -short.MinValue); - - /// - /// Gets or sets the layout state of the window. - /// - public WindowState LayoutState { get; set; } -} diff --git a/ImGui.App/ImGuiController/GLWrapper.cs b/ImGui.App/ImGuiController/GLWrapper.cs deleted file mode 100644 index 7d69bbe..0000000 --- a/ImGui.App/ImGuiController/GLWrapper.cs +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using Silk.NET.Maths; -using Silk.NET.OpenGL; -using Color = System.Drawing.Color; - -/// -/// Wrapper class that implements IGL by delegating to a real GL instance. -/// -public sealed class GLWrapper(GL gl) : IGL -{ - internal bool _disposed; - - /// - /// Gets the underlying GL instance. - /// - public GL UnderlyingGL { get; } = gl ?? throw new ArgumentNullException(nameof(gl)); - - /// - public void GetInteger(GLEnum pname, out int data) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.GetInteger(pname, out data); - } - - /// - public float GetFloat(GLEnum pname) - { - ObjectDisposedException.ThrowIf(_disposed, this); - return UnderlyingGL.GetFloat(pname); - } - - /// - public void Enable(GLEnum cap) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.Enable(cap); - } - - /// - public void Disable(GLEnum cap) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.Disable(cap); - } - - /// - public void BlendEquation(GLEnum mode) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.BlendEquation(mode); - } - - /// - public void BlendFuncSeparate(GLEnum srcRGB, GLEnum dstRGB, GLEnum srcAlpha, GLEnum dstAlpha) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.BlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); - } - - /// - public void Viewport(Vector2D size) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.Viewport(size); - } - - /// - public void ClearColor(Color color) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.ClearColor(color.R / 255f, color.G / 255f, color.B / 255f, color.A / 255f); - } - - /// - public void Clear(uint mask) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.Clear(mask); - } - - /// - public void BindTexture(GLEnum target, uint texture) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.BindTexture(target, texture); - } - - /// - public void DeleteTexture(uint texture) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.DeleteTexture(texture); - } - - /// - public uint GenTexture() - { - ObjectDisposedException.ThrowIf(_disposed, this); - return UnderlyingGL.GenTexture(); - } - - /// - public void TexParameter(GLEnum target, GLEnum pname, int param) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.TexParameter(target, pname, param); - } - - /// - public unsafe void TexImage2D(GLEnum target, int level, int internalformat, uint width, uint height, int border, GLEnum format, GLEnum type, void* pixels) - { - ObjectDisposedException.ThrowIf(_disposed, this); - UnderlyingGL.TexImage2D(target, level, internalformat, width, height, border, format, type, pixels); - } - - /// - public void Dispose() - { - if (!_disposed) - { - UnderlyingGL.Dispose(); - _disposed = true; - } - } -} diff --git a/ImGui.App/ImGuiController/IGL.cs b/ImGui.App/ImGuiController/IGL.cs deleted file mode 100644 index 105d9d0..0000000 --- a/ImGui.App/ImGuiController/IGL.cs +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using Silk.NET.Maths; -using Silk.NET.OpenGL; -using Color = System.Drawing.Color; - -/// -/// Interface that abstracts OpenGL functionality for testing purposes. -/// -public interface IGL : IDisposable -{ - /// - /// Gets an integer parameter value. - /// - /// The parameter name. - /// The output parameter value. - public void GetInteger(GLEnum pname, out int data); - - /// - /// Gets a float parameter value. - /// - /// The parameter name. - /// The parameter value. - public float GetFloat(GLEnum pname); - - /// - /// Enables a GL capability. - /// - /// The capability to enable. - public void Enable(GLEnum cap); - - /// - /// Disables a GL capability. - /// - /// The capability to disable. - public void Disable(GLEnum cap); - - /// - /// Sets the blend equation. - /// - /// The blend equation mode. - public void BlendEquation(GLEnum mode); - - /// - /// Sets the blend function parameters. - /// - public void BlendFuncSeparate(GLEnum srcRGB, GLEnum dstRGB, GLEnum srcAlpha, GLEnum dstAlpha); - - /// - /// Sets the viewport dimensions. - /// - public void Viewport(Vector2D size); - - /// - /// Sets the clear color. - /// - public void ClearColor(Color color); - - /// - /// Clears the specified buffer bits. - /// - public void Clear(uint mask); - - /// - /// Binds a texture to the specified target. - /// - public void BindTexture(GLEnum target, uint texture); - - /// - /// Deletes a texture. - /// - public void DeleteTexture(uint texture); - - /// - /// Generates a new texture. - /// - public uint GenTexture(); - - /// - /// Sets a texture parameter. - /// - public void TexParameter(GLEnum target, GLEnum pname, int param); - - /// - /// Specifies a two-dimensional texture image. - /// - public unsafe void TexImage2D(GLEnum target, int level, int internalformat, uint width, uint height, int border, GLEnum format, GLEnum type, void* pixels); -} diff --git a/ImGui.App/ImGuiController/IOpenGLFactory.cs b/ImGui.App/ImGuiController/IOpenGLFactory.cs deleted file mode 100644 index 97235ef..0000000 --- a/ImGui.App/ImGuiController/IOpenGLFactory.cs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using Silk.NET.OpenGL; - -/// -/// Interface for creating OpenGL contexts. -/// -public interface IOpenGLFactory -{ - /// - /// Creates an OpenGL context. - /// - /// The created OpenGL context. - public GL CreateGL(); -} diff --git a/ImGui.App/ImGuiController/IOpenGLProvider.cs b/ImGui.App/ImGuiController/IOpenGLProvider.cs deleted file mode 100644 index 839cfe6..0000000 --- a/ImGui.App/ImGuiController/IOpenGLProvider.cs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using Silk.NET.OpenGL; - -/// -/// Provides an interface for accessing an OpenGL context. -/// -public interface IOpenGLProvider : IDisposable -{ - /// - /// Retrieves the OpenGL context. - /// - /// An instance of the class representing the OpenGL context. - public GL GetGL(); -} diff --git a/ImGui.App/ImGuiController/ImGuiController.cs b/ImGui.App/ImGuiController/ImGuiController.cs deleted file mode 100644 index 5b3e013..0000000 --- a/ImGui.App/ImGuiController/ImGuiController.cs +++ /dev/null @@ -1,945 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using System; -using System.Collections.Generic; -using System.Numerics; - -using Hexa.NET.ImGui; - -using Silk.NET.Input; -using Silk.NET.Maths; -using Silk.NET.OpenGL; -using Silk.NET.Windowing; - -using ktsu.ImGui.App; - -internal sealed class ImGuiController : IDisposable -{ - - internal GL? _gl; - internal IView? _view; - internal IInputContext? _input; - internal bool _frameBegun; - internal readonly List _pressedChars = []; - internal IKeyboard? _keyboard; - internal IMouse? _mouse; - - internal int _attribLocationTex; - internal int _attribLocationProjMtx; - internal int _attribLocationVtxPos; - internal int _attribLocationVtxUV; - internal int _attribLocationVtxColor; - internal uint _vboHandle; - internal uint _elementsHandle; - internal uint _vertexArrayObject; - - internal Texture? _fontTexture; - internal Shader? _shader; - - internal int _windowWidth; - internal int _windowHeight; - - internal bool FontsConfigured { get; private set; } - - internal bool _disposed; - - /// - /// Constructs a new ImGuiController. - /// - public ImGuiController(GL gl, IView view, IInputContext input) : this(gl, view, input, null, null) - { - } - - /// - /// Constructs a new ImGuiController with font configuration. - /// - public ImGuiController(GL gl, IView view, IInputContext input, ImGuiFontConfig imGuiFontConfig) : this(gl, view, input, imGuiFontConfig, null) - { - } - - /// - /// Constructs a new ImGuiController with an onConfigureIO Action. - /// - public ImGuiController(GL gl, IView view, IInputContext input, Action onConfigureIO) : this(gl, view, input, null, onConfigureIO) - { - } - - /// - /// Constructs a new ImGuiController with font configuration and onConfigure Action. - /// - public ImGuiController(GL gl, IView view, IInputContext input, ImGuiFontConfig? imGuiFontConfig = null, Action? onConfigureIO = null) - { - DebugLogger.Log("ImGuiController: Starting initialization"); - Init(gl, view, input); - DebugLogger.Log("ImGuiController: Init completed"); - - ImGuiIOPtr io = ImGui.GetIO(); - if (imGuiFontConfig is not null) - { - DebugLogger.Log("ImGuiController: Adding font from config"); - nint glyphRange = imGuiFontConfig.Value.GetGlyphRange?.Invoke(io) ?? default; - - unsafe - { - fixed (byte* fontPathPtr = System.Text.Encoding.UTF8.GetBytes(imGuiFontConfig.Value.FontPath + "\0")) - { - io.Fonts.AddFontFromFileTTF(fontPathPtr, imGuiFontConfig.Value.FontSize, null, (uint*)glyphRange); - } - } - } - - DebugLogger.Log("ImGuiController: Calling onConfigureIO"); - onConfigureIO?.Invoke(); - DebugLogger.Log("ImGuiController: onConfigureIO completed"); - - io.BackendFlags |= ImGuiBackendFlags.RendererHasVtxOffset; - - DebugLogger.Log("ImGuiController: Creating device resources"); - CreateDeviceResources(); - DebugLogger.Log("ImGuiController: Device resources created"); - - SetPerFrameImGuiData(1f / 60f); - - DebugLogger.Log("ImGuiController: Beginning frame"); - BeginFrame(); - DebugLogger.Log("ImGuiController: Initialization completed"); - } - - internal void Init(GL gl, IView view, IInputContext input) - { - _gl = gl; - _view = view; - _input = input; - _windowWidth = view.Size.X; - _windowHeight = view.Size.Y; - - ImGui.CreateContext(); - - ImGui.StyleColorsDark(); - } - - internal void BeginFrame() - { - ImGui.NewFrame(); - _frameBegun = true; - _keyboard = _input?.Keyboards[0]; - _mouse = _input?.Mice[0]; - if (_view is not null) - { - _view.Resize += WindowResized; - } - - if (_keyboard is not null) - { - _keyboard.KeyDown += OnKeyDown; - _keyboard.KeyUp += OnKeyUp; - _keyboard.KeyChar += OnKeyChar; - } - - if (_mouse is not null) - { - _mouse.MouseDown += OnMouseDown; - _mouse.MouseUp += OnMouseUp; - _mouse.MouseMove += OnMouseMove; - _mouse.Scroll += OnMouseScroll; - } - } - - /// - /// Delegate to receive keyboard key down events. - /// - /// The keyboard context generating the event. - /// The native keycode of the pressed key. - /// The native scancode of the pressed key. - internal static void OnKeyDown(IKeyboard keyboard, Key keycode, int scancode) - { - ImGuiApp.OnUserInput(); - OnKeyEvent(keyboard, keycode, scancode, down: true); - } - - /// - /// Delegate to receive keyboard key up events. - /// - /// The keyboard context generating the event. - /// The native keycode of the released key. - /// The native scancode of the released key. - internal static void OnKeyUp(IKeyboard keyboard, Key keycode, int scancode) - { - ImGuiApp.OnUserInput(); - OnKeyEvent(keyboard, keycode, scancode, down: false); - } - - internal static void OnMouseScroll(IMouse mouse, ScrollWheel scroll) - { - ImGuiApp.OnUserInput(); - ImGuiIOPtr io = ImGui.GetIO(); - io.AddMouseWheelEvent(scroll.X, scroll.Y); - } - - internal static void OnMouseDown(IMouse mouse, MouseButton button) - { - ImGuiApp.OnUserInput(); - OnMouseButton(mouse, button, down: true); - } - - internal static void OnMouseUp(IMouse mouse, MouseButton button) - { - ImGuiApp.OnUserInput(); - OnMouseButton(mouse, button, down: false); - } - - internal static void OnMouseButton(IMouse _, MouseButton button, bool down) - { - // Only process supported mouse buttons (Left, Right, Middle) - if (button is MouseButton.Left or MouseButton.Right or MouseButton.Middle) - { - ImGuiMouseButton imguiMouseButton = TranslateMouseButtonToImGuiMouseButton(button); - ImGuiIOPtr io = ImGui.GetIO(); - io.AddMouseButtonEvent((int)imguiMouseButton, down); - } - // Auxiliary buttons (Button4-Button12, Unknown) are ignored - } - - internal void OnMouseMove(IMouse _, Vector2 position) - { - ImGuiApp.OnUserInput(); - ImGuiIOPtr io = ImGui.GetIO(); - io.AddMousePosEvent(position.X, position.Y); - } - - /// - /// Delegate to receive keyboard key events. - /// - /// The keyboard context generating the event. - /// The native keycode of the key generating the event. - /// The native scancode of the key generating the event. - /// True if the event is a key down event, otherwise False - internal static void OnKeyEvent(IKeyboard _, Key keycode, int scancode, bool down) - { - ImGuiIOPtr io = ImGui.GetIO(); - ImGuiKey imGuiKey = TranslateInputKeyToImGuiKey(keycode); - io.AddKeyEvent(imGuiKey, down); - io.SetKeyEventNativeData(imGuiKey, (int)keycode, scancode); - - ImGuiKey imguiModKey = TranslateImGuiKeyToImGuiModKey(imGuiKey); - if (imguiModKey != ImGuiKey.None) - { - io.AddKeyEvent(imguiModKey, down); - } - } - - internal void OnKeyChar(IKeyboard arg1, char arg2) - { - ImGuiApp.OnUserInput(); - _pressedChars.Add(arg2); - } - - internal void WindowResized(Vector2D size) - { - _windowWidth = size.X; - _windowHeight = size.Y; - } - - internal void Render() - { - if (_frameBegun) - { - _frameBegun = false; - ImGui.Render(); - RenderImDrawData(ImGui.GetDrawData()); - } - } - - /// - /// Updates ImGui input and IO configuration state. - /// - internal void Update(float deltaSeconds) - { - if (_frameBegun) - { - ImGui.Render(); - } - - SetPerFrameImGuiData(deltaSeconds); - UpdateImGuiInput(); - - _frameBegun = true; - ImGui.NewFrame(); - } - - /// - /// Sets per-frame data based on the associated window. - /// This is called by Update(float). - /// - internal void SetPerFrameImGuiData(float deltaSeconds) - { - ImGuiIOPtr io = ImGui.GetIO(); - io.DisplaySize = new Vector2(_windowWidth, _windowHeight); - - if (_windowWidth > 0 && _windowHeight > 0 && _view is not null) - { - // Force framebuffer scale to 1.0 on Linux to prevent blurry text rendering - // WSL and Linux often have framebuffer scaling issues that cause blur - if (OperatingSystem.IsLinux()) - { - io.DisplayFramebufferScale = Vector2.One; - } - else - { - io.DisplayFramebufferScale = new Vector2(_view.FramebufferSize.X / _windowWidth, - _view.FramebufferSize.Y / _windowHeight); - } - } - - io.DeltaTime = deltaSeconds; // DeltaTime is in seconds. - } - - internal void UpdateImGuiInput() - { - ImGuiIOPtr io = ImGui.GetIO(); - - if (_input is null || _keyboard is null) - { - return; - } - - foreach (char c in _pressedChars) - { - io.AddInputCharacter(c); - } - - _pressedChars.Clear(); - } - - internal void PressChar(char keyChar) => _pressedChars.Add(keyChar); - - /// - /// Translates a Silk.NET.Input.Key to an ImGuiKey. - /// - /// The Silk.NET.Input.Key to translate. - /// The corresponding ImGuiKey. - /// When the key has not been implemented yet. - internal static ImGuiKey TranslateInputKeyToImGuiKey(Key key) - { - return key switch - { - Key.Tab => ImGuiKey.Tab, - Key.Left => ImGuiKey.LeftArrow, - Key.Right => ImGuiKey.RightArrow, - Key.Up => ImGuiKey.UpArrow, - Key.Down => ImGuiKey.DownArrow, - Key.PageUp => ImGuiKey.PageUp, - Key.PageDown => ImGuiKey.PageDown, - Key.Home => ImGuiKey.Home, - Key.End => ImGuiKey.End, - Key.Insert => ImGuiKey.Insert, - Key.Delete => ImGuiKey.Delete, - Key.Backspace => ImGuiKey.Backspace, - Key.Space => ImGuiKey.Space, - Key.Enter => ImGuiKey.Enter, - Key.Escape => ImGuiKey.Escape, - Key.Apostrophe => ImGuiKey.Apostrophe, - Key.Comma => ImGuiKey.Comma, - Key.Minus => ImGuiKey.Minus, - Key.Period => ImGuiKey.Period, - Key.Slash => ImGuiKey.Slash, - Key.Semicolon => ImGuiKey.Semicolon, - Key.Equal => ImGuiKey.Equal, - Key.LeftBracket => ImGuiKey.LeftBracket, - Key.BackSlash => ImGuiKey.Backslash, - Key.RightBracket => ImGuiKey.RightBracket, - Key.GraveAccent => ImGuiKey.GraveAccent, - Key.CapsLock => ImGuiKey.CapsLock, - Key.ScrollLock => ImGuiKey.ScrollLock, - Key.NumLock => ImGuiKey.NumLock, - Key.PrintScreen => ImGuiKey.PrintScreen, - Key.Pause => ImGuiKey.Pause, - Key.Keypad0 => ImGuiKey.Keypad0, - Key.Keypad1 => ImGuiKey.Keypad1, - Key.Keypad2 => ImGuiKey.Keypad2, - Key.Keypad3 => ImGuiKey.Keypad3, - Key.Keypad4 => ImGuiKey.Keypad4, - Key.Keypad5 => ImGuiKey.Keypad5, - Key.Keypad6 => ImGuiKey.Keypad6, - Key.Keypad7 => ImGuiKey.Keypad7, - Key.Keypad8 => ImGuiKey.Keypad8, - Key.Keypad9 => ImGuiKey.Keypad9, - Key.KeypadDecimal => ImGuiKey.KeypadDecimal, - Key.KeypadDivide => ImGuiKey.KeypadDivide, - Key.KeypadMultiply => ImGuiKey.KeypadMultiply, - Key.KeypadSubtract => ImGuiKey.KeypadSubtract, - Key.KeypadAdd => ImGuiKey.KeypadAdd, - Key.KeypadEnter => ImGuiKey.KeypadEnter, - Key.KeypadEqual => ImGuiKey.KeypadEqual, - Key.ShiftLeft => ImGuiKey.LeftShift, - Key.ControlLeft => ImGuiKey.LeftCtrl, - Key.AltLeft => ImGuiKey.LeftAlt, - Key.SuperLeft => ImGuiKey.LeftSuper, - Key.ShiftRight => ImGuiKey.RightShift, - Key.ControlRight => ImGuiKey.RightCtrl, - Key.AltRight => ImGuiKey.RightAlt, - Key.SuperRight => ImGuiKey.RightSuper, - Key.Menu => ImGuiKey.Menu, - Key.Number0 => ImGuiKey.Key0, - Key.Number1 => ImGuiKey.Key1, - Key.Number2 => ImGuiKey.Key2, - Key.Number3 => ImGuiKey.Key3, - Key.Number4 => ImGuiKey.Key4, - Key.Number5 => ImGuiKey.Key5, - Key.Number6 => ImGuiKey.Key6, - Key.Number7 => ImGuiKey.Key7, - Key.Number8 => ImGuiKey.Key8, - Key.Number9 => ImGuiKey.Key9, - Key.A => ImGuiKey.A, - Key.B => ImGuiKey.B, - Key.C => ImGuiKey.C, - Key.D => ImGuiKey.D, - Key.E => ImGuiKey.E, - Key.F => ImGuiKey.F, - Key.G => ImGuiKey.G, - Key.H => ImGuiKey.H, - Key.I => ImGuiKey.I, - Key.J => ImGuiKey.J, - Key.K => ImGuiKey.K, - Key.L => ImGuiKey.L, - Key.M => ImGuiKey.M, - Key.N => ImGuiKey.N, - Key.O => ImGuiKey.O, - Key.P => ImGuiKey.P, - Key.Q => ImGuiKey.Q, - Key.R => ImGuiKey.R, - Key.S => ImGuiKey.S, - Key.T => ImGuiKey.T, - Key.U => ImGuiKey.U, - Key.V => ImGuiKey.V, - Key.W => ImGuiKey.W, - Key.X => ImGuiKey.X, - Key.Y => ImGuiKey.Y, - Key.Z => ImGuiKey.Z, - Key.F1 => ImGuiKey.F1, - Key.F2 => ImGuiKey.F2, - Key.F3 => ImGuiKey.F3, - Key.F4 => ImGuiKey.F4, - Key.F5 => ImGuiKey.F5, - Key.F6 => ImGuiKey.F6, - Key.F7 => ImGuiKey.F7, - Key.F8 => ImGuiKey.F8, - Key.F9 => ImGuiKey.F9, - Key.F10 => ImGuiKey.F10, - Key.F11 => ImGuiKey.F11, - Key.F12 => ImGuiKey.F12, - Key.F13 => ImGuiKey.F13, - Key.F14 => ImGuiKey.F14, - Key.F15 => ImGuiKey.F15, - Key.F16 => ImGuiKey.F16, - Key.F17 => ImGuiKey.F17, - Key.F18 => ImGuiKey.F18, - Key.F19 => ImGuiKey.F19, - Key.F20 => ImGuiKey.F20, - Key.F21 => ImGuiKey.F21, - Key.F22 => ImGuiKey.F22, - Key.F23 => ImGuiKey.F23, - Key.F24 => ImGuiKey.F24, - Key.F25 => ImGuiKey.None, - Key.Unknown => ImGuiKey.None, - Key.World1 => ImGuiKey.None, - Key.World2 => ImGuiKey.None, - _ => ImGuiKey.None, - }; - } - - internal static ImGuiMouseButton TranslateMouseButtonToImGuiMouseButton(MouseButton mouseButton) - { - return mouseButton switch - { - MouseButton.Left => ImGuiMouseButton.Left, - MouseButton.Right => ImGuiMouseButton.Right, - MouseButton.Middle => ImGuiMouseButton.Middle, - _ => ImGuiMouseButton.Middle, - }; - } - - /// - /// Translate an ImGuiKey to the matching ImGuiKey.Mod*. - /// - /// The ImGuiKey to translate. - /// The matching ImGuiKey.Mod*. - [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0072:Add missing cases", Justification = "We're only translating mod keys here.")] - internal static ImGuiKey TranslateImGuiKeyToImGuiModKey(ImGuiKey key) - { - return key switch - { - ImGuiKey.LeftShift => ImGuiKey.ModShift, - ImGuiKey.RightShift => ImGuiKey.ModShift, - ImGuiKey.LeftCtrl => ImGuiKey.ModCtrl, - ImGuiKey.RightCtrl => ImGuiKey.ModCtrl, - ImGuiKey.LeftAlt => ImGuiKey.ModAlt, - ImGuiKey.RightAlt => ImGuiKey.ModAlt, - ImGuiKey.LeftSuper => ImGuiKey.ModSuper, - ImGuiKey.RightSuper => ImGuiKey.ModSuper, - _ => ImGuiKey.None - }; - } - - internal unsafe void SetupRenderState(ImDrawDataPtr drawDataPtr, int framebufferWidth, int framebufferHeight) - { - if (_gl is null || _shader is null) - { - return; - } - - // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, polygon fill - _gl.Enable(GLEnum.Blend); - _gl.BlendEquation(GLEnum.FuncAdd); - _gl.BlendFuncSeparate(GLEnum.SrcAlpha, GLEnum.OneMinusSrcAlpha, GLEnum.One, GLEnum.OneMinusSrcAlpha); - _gl.Disable(GLEnum.CullFace); - _gl.Disable(GLEnum.DepthTest); - _gl.Disable(GLEnum.StencilTest); - _gl.Enable(GLEnum.ScissorTest); -#if !GLES && !LEGACY - _gl.Disable(GLEnum.PrimitiveRestart); - _gl.PolygonMode(GLEnum.FrontAndBack, GLEnum.Fill); - // Disable multisampling for pixel-perfect rendering - _gl.Disable(GLEnum.Multisample); -#endif - - float L = drawDataPtr.DisplayPos.X; - float R = drawDataPtr.DisplayPos.X + drawDataPtr.DisplaySize.X; - float T = drawDataPtr.DisplayPos.Y; - float B = drawDataPtr.DisplayPos.Y + drawDataPtr.DisplaySize.Y; - - // Use double precision for more accurate orthographic projection - double dL = L, dR = R, dT = T, dB = B; - - Span orthoProjection = [ - (float)(2.0 / (dR - dL)), 0.0f, 0.0f, 0.0f, - 0.0f, (float)(2.0 / (dT - dB)), 0.0f, 0.0f, - 0.0f, 0.0f, -1.0f, 0.0f, - (float)((dR + dL) / (dL - dR)), (float)((dT + dB) / (dB - dT)), 0.0f, 1.0f, - ]; - - _shader.UseShader(); - _gl.Uniform1(_attribLocationTex, 0); - _gl.UniformMatrix4(_attribLocationProjMtx, 1, false, orthoProjection); - _gl.CheckGlError("Projection"); - - _gl.BindSampler(0, 0); - - // Setup desired GL state - // Recreate the VAO every time (this is to easily allow multiple GL contexts to be rendered to. VAO are not shared among GL contexts) - // The renderer would actually work without any VAO bound, but then our VertexAttrib calls would overwrite the default one currently bound. - _vertexArrayObject = _gl.GenVertexArray(); - _gl.BindVertexArray(_vertexArrayObject); - _gl.CheckGlError("VAO"); - - // Bind vertex/index buffers and setup attributes for ImDrawVert - _gl.BindBuffer(GLEnum.ArrayBuffer, _vboHandle); - _gl.BindBuffer(GLEnum.ElementArrayBuffer, _elementsHandle); - _gl.EnableVertexAttribArray((uint)_attribLocationVtxPos); - _gl.EnableVertexAttribArray((uint)_attribLocationVtxUV); - _gl.EnableVertexAttribArray((uint)_attribLocationVtxColor); - _gl.VertexAttribPointer((uint)_attribLocationVtxPos, 2, GLEnum.Float, false, (uint)sizeof(ImDrawVert), (void*)0); - _gl.VertexAttribPointer((uint)_attribLocationVtxUV, 2, GLEnum.Float, false, (uint)sizeof(ImDrawVert), (void*)8); - _gl.VertexAttribPointer((uint)_attribLocationVtxColor, 4, GLEnum.UnsignedByte, true, (uint)sizeof(ImDrawVert), (void*)16); - } - - internal unsafe void RenderImDrawData(ImDrawDataPtr drawDataPtr) - { - if (_gl is null) - { - return; - } - - int framebufferWidth = (int)(drawDataPtr.DisplaySize.X * drawDataPtr.FramebufferScale.X); - int framebufferHeight = (int)(drawDataPtr.DisplaySize.Y * drawDataPtr.FramebufferScale.Y); - if (framebufferWidth <= 0 || framebufferHeight <= 0) - { - return; - } - - // Backup GL state - _gl.GetInteger(GLEnum.ActiveTexture, out int lastActiveTexture); - _gl.ActiveTexture(GLEnum.Texture0); - - _gl.GetInteger(GLEnum.CurrentProgram, out int lastProgram); - _gl.GetInteger(GLEnum.TextureBinding2D, out int lastTexture); - - _gl.GetInteger(GLEnum.SamplerBinding, out int lastSampler); - - _gl.GetInteger(GLEnum.ArrayBufferBinding, out int lastArrayBuffer); - _gl.GetInteger(GLEnum.VertexArrayBinding, out int lastVertexArrayObject); - -#if !GLES - Span lastPolygonMode = stackalloc int[2]; - _gl.GetInteger(GLEnum.PolygonMode, lastPolygonMode); -#endif - - Span lastScissorBox = stackalloc int[4]; - _gl.GetInteger(GLEnum.ScissorBox, lastScissorBox); - - _gl.GetInteger(GLEnum.BlendSrcRgb, out int lastBlendSrcRgb); - _gl.GetInteger(GLEnum.BlendDstRgb, out int lastBlendDstRgb); - - _gl.GetInteger(GLEnum.BlendSrcAlpha, out int lastBlendSrcAlpha); - _gl.GetInteger(GLEnum.BlendDstAlpha, out int lastBlendDstAlpha); - - _gl.GetInteger(GLEnum.BlendEquationRgb, out int lastBlendEquationRgb); - _gl.GetInteger(GLEnum.BlendEquationAlpha, out int lastBlendEquationAlpha); - - bool lastEnableBlend = _gl.IsEnabled(GLEnum.Blend); - bool lastEnableCullFace = _gl.IsEnabled(GLEnum.CullFace); - bool lastEnableDepthTest = _gl.IsEnabled(GLEnum.DepthTest); - bool lastEnableStencilTest = _gl.IsEnabled(GLEnum.StencilTest); - bool lastEnableScissorTest = _gl.IsEnabled(GLEnum.ScissorTest); - -#if !GLES && !LEGACY - bool lastEnablePrimitiveRestart = _gl.IsEnabled(GLEnum.PrimitiveRestart); -#endif - - SetupRenderState(drawDataPtr, framebufferWidth, framebufferHeight); - - // Will project scissor/clipping rectangles into framebuffer space - Vector2 clipOff = drawDataPtr.DisplayPos; // (0,0) unless using multi-viewports - Vector2 clipScale = drawDataPtr.FramebufferScale; // (1,1) unless using retina display which are often (2,2) - - // Render command lists - for (int n = 0; n < drawDataPtr.CmdListsCount; n++) - { - ImDrawListPtr cmdListPtr = drawDataPtr.CmdLists[n]; - - // Upload vertex/index buffers - - _gl.BufferData(GLEnum.ArrayBuffer, (nuint)(cmdListPtr.VtxBuffer.Size * sizeof(ImDrawVert)), cmdListPtr.VtxBuffer.Data, GLEnum.StreamDraw); - _gl.CheckGlError($"Data Vert {n}"); - _gl.BufferData(GLEnum.ElementArrayBuffer, (nuint)(cmdListPtr.IdxBuffer.Size * sizeof(ushort)), cmdListPtr.IdxBuffer.Data, GLEnum.StreamDraw); - _gl.CheckGlError($"Data Idx {n}"); - - for (int cmd_i = 0; cmd_i < cmdListPtr.CmdBuffer.Size; cmd_i++) - { - ImDrawCmd cmdPtr = cmdListPtr.CmdBuffer[cmd_i]; - - unsafe - { - if (cmdPtr.UserCallback != null) - { - throw new NotImplementedException(); - } - else - { - Vector4 clipRect; - clipRect.X = (cmdPtr.ClipRect.X - clipOff.X) * clipScale.X; - clipRect.Y = (cmdPtr.ClipRect.Y - clipOff.Y) * clipScale.Y; - clipRect.Z = (cmdPtr.ClipRect.Z - clipOff.X) * clipScale.X; - clipRect.W = (cmdPtr.ClipRect.W - clipOff.Y) * clipScale.Y; - - if (clipRect.X < framebufferWidth && clipRect.Y < framebufferHeight && clipRect.Z >= 0.0f && clipRect.W >= 0.0f) - { - // Round scissor rectangle to pixel boundaries to avoid sub-pixel rendering issues - int scissorX = (int)Math.Floor(clipRect.X); - int scissorY = (int)Math.Floor(framebufferHeight - clipRect.W); - uint scissorWidth = (uint)Math.Max(0, Math.Ceiling(clipRect.Z - clipRect.X)); - uint scissorHeight = (uint)Math.Max(0, Math.Ceiling(clipRect.W - clipRect.Y)); - - // Apply scissor/clipping rectangle - _gl.Scissor(scissorX, scissorY, scissorWidth, scissorHeight); - _gl.CheckGlError("Scissor"); - - // Bind texture, Draw - // In ImGui 1.92.0+, use GetTexID() method to get texture ID - // This method returns the texture ID compatible with OpenGL - uint textureId = (uint)cmdPtr.GetTexID(); - _gl.BindTexture(GLEnum.Texture2D, textureId); - _gl.CheckGlError("Texture"); - - _gl.DrawElementsBaseVertex(GLEnum.Triangles, cmdPtr.ElemCount, GLEnum.UnsignedShort, (void*)(cmdPtr.IdxOffset * sizeof(ushort)), (int)cmdPtr.VtxOffset); - _gl.CheckGlError("Draw"); - } - } - } - } - } - - // Destroy the temporary VAO - _gl.DeleteVertexArray(_vertexArrayObject); - _vertexArrayObject = 0; - - // Restore modified GL state - _gl.UseProgram((uint)lastProgram); - _gl.BindTexture(GLEnum.Texture2D, (uint)lastTexture); - - _gl.BindSampler(0, (uint)lastSampler); - - _gl.ActiveTexture((GLEnum)lastActiveTexture); - - _gl.BindVertexArray((uint)lastVertexArrayObject); - - _gl.BindBuffer(GLEnum.ArrayBuffer, (uint)lastArrayBuffer); - _gl.BlendEquationSeparate((GLEnum)lastBlendEquationRgb, (GLEnum)lastBlendEquationAlpha); - _gl.BlendFuncSeparate((GLEnum)lastBlendSrcRgb, (GLEnum)lastBlendDstRgb, (GLEnum)lastBlendSrcAlpha, (GLEnum)lastBlendDstAlpha); - - if (lastEnableBlend) - { - _gl.Enable(GLEnum.Blend); - } - else - { - _gl.Disable(GLEnum.Blend); - } - - if (lastEnableCullFace) - { - _gl.Enable(GLEnum.CullFace); - } - else - { - _gl.Disable(GLEnum.CullFace); - } - - if (lastEnableDepthTest) - { - _gl.Enable(GLEnum.DepthTest); - } - else - { - _gl.Disable(GLEnum.DepthTest); - } - - if (lastEnableStencilTest) - { - _gl.Enable(GLEnum.StencilTest); - } - else - { - _gl.Disable(GLEnum.StencilTest); - } - - if (lastEnableScissorTest) - { - _gl.Enable(GLEnum.ScissorTest); - } - else - { - _gl.Disable(GLEnum.ScissorTest); - } - -#if !GLES && !LEGACY - if (lastEnablePrimitiveRestart) - { - _gl.Enable(GLEnum.PrimitiveRestart); - } - else - { - _gl.Disable(GLEnum.PrimitiveRestart); - } - - _gl.PolygonMode(GLEnum.FrontAndBack, (GLEnum)lastPolygonMode[0]); -#endif - - _gl.Scissor(lastScissorBox[0], lastScissorBox[1], (uint)lastScissorBox[2], (uint)lastScissorBox[3]); - } - - internal void CreateDeviceResources() - { - if (_gl is null) - { - return; - } - - // Backup GL state - - _gl.GetInteger(GLEnum.TextureBinding2D, out int lastTexture); - _gl.GetInteger(GLEnum.ArrayBufferBinding, out int lastArrayBuffer); - _gl.GetInteger(GLEnum.VertexArrayBinding, out int lastVertexArray); - - string vertexSource = - @"#version 330 - layout (location = 0) in vec2 Position; - layout (location = 1) in vec2 UV; - layout (location = 2) in vec4 Color; - uniform mat4 ProjMtx; - out vec2 Frag_UV; - out vec4 Frag_Color; - void main() - { - Frag_UV = UV; - Frag_Color = Color; - // Round position to nearest pixel to improve line alignment - vec2 roundedPos = floor(Position.xy + 0.5); - gl_Position = ProjMtx * vec4(roundedPos, 0, 1); - }"; - - string fragmentSource = - @"#version 330 - in vec2 Frag_UV; - in vec4 Frag_Color; - uniform sampler2D Texture; - layout (location = 0) out vec4 Out_Color; - void main() - { - // Use precise texture sampling to avoid floating point errors - vec2 texelSize = 1.0 / textureSize(Texture, 0); - vec2 adjustedUV = clamp(Frag_UV, texelSize * 0.5, 1.0 - texelSize * 0.5); - Out_Color = Frag_Color * texture(Texture, adjustedUV); - }"; - - _shader = new Shader(_gl, vertexSource, fragmentSource); - - _attribLocationTex = _shader.GetUniformLocation("Texture"); - _attribLocationProjMtx = _shader.GetUniformLocation("ProjMtx"); - _attribLocationVtxPos = _shader.GetAttribLocation("Position"); - _attribLocationVtxUV = _shader.GetAttribLocation("UV"); - _attribLocationVtxColor = _shader.GetAttribLocation("Color"); - - _vboHandle = _gl.GenBuffer(); - _elementsHandle = _gl.GenBuffer(); - - RecreateFontDeviceTexture(); - - // Restore modified GL state - _gl.BindTexture(GLEnum.Texture2D, (uint)lastTexture); - _gl.BindBuffer(GLEnum.ArrayBuffer, (uint)lastArrayBuffer); - - _gl.BindVertexArray((uint)lastVertexArray); - - _gl.CheckGlError("End of ImGui setup"); - } - - /// - /// Creates the texture used to render text. - /// - internal unsafe void RecreateFontDeviceTexture() - { - DebugLogger.Log("RecreateFontDeviceTexture: Starting"); - if (_gl is null) - { - DebugLogger.Log("RecreateFontDeviceTexture: OpenGL is null, returning"); - return; - } - - // Build texture atlas - ImGuiIOPtr io = ImGui.GetIO(); - DebugLogger.Log("RecreateFontDeviceTexture: Got ImGui IO"); - unsafe - { - // Build font atlas if it's not already built - if (!io.Fonts.TexIsBuilt) - { - DebugLogger.Log("RecreateFontDeviceTexture: Font atlas not built yet, building now"); - - // Build the font atlas using ImFontAtlasBuildMain - // This is required when the backend doesn't support ImGuiBackendFlags_RendererHasTextures - ImGuiP.ImFontAtlasBuildMain(io.Fonts); - - DebugLogger.Log("RecreateFontDeviceTexture: Font atlas built successfully"); - } - else - { - DebugLogger.Log("RecreateFontDeviceTexture: Font atlas already built"); - } - - // Get texture data using the correct API for Hexa.NET.ImGui 2.2.8 - ImTextureDataPtr texData = io.Fonts.TexData; - DebugLogger.Log($"RecreateFontDeviceTexture: Got texture data - Width: {texData.Width}, Height: {texData.Height}"); - - // Only proceed if we have valid texture data - if (texData.Pixels != null && texData.Width > 0 && texData.Height > 0) - { - DebugLogger.Log("RecreateFontDeviceTexture: Texture data is valid, creating OpenGL texture"); - - // Create OpenGL texture from font atlas data - _gl.GetInteger(GLEnum.TextureBinding2D, out int lastTexture); - DebugLogger.Log("RecreateFontDeviceTexture: Got last texture binding"); - - // Create texture with the font atlas data - DebugLogger.Log("RecreateFontDeviceTexture: Creating Texture object"); - _fontTexture = new Texture(_gl, texData.Width, texData.Height, - (nint)texData.Pixels, false, false, PixelFormat.Rgba); - DebugLogger.Log("RecreateFontDeviceTexture: Texture object created"); - - // Store texture ID in ImGui's font atlas - DebugLogger.Log("RecreateFontDeviceTexture: Setting texture ID"); - texData.SetTexID((nint)_fontTexture.GlTexture); - DebugLogger.Log("RecreateFontDeviceTexture: Texture ID set"); - - // Set texture filtering - DebugLogger.Log("RecreateFontDeviceTexture: Setting texture filtering"); - _fontTexture.Bind(); - _fontTexture.SetMagFilter(TextureMagFilter.Nearest); - _fontTexture.SetMinFilter(TextureMinFilter.Nearest); - _fontTexture.SetWrap(TextureCoordinate.S, TextureWrapMode.ClampToEdge); - _fontTexture.SetWrap(TextureCoordinate.T, TextureWrapMode.ClampToEdge); - DebugLogger.Log("RecreateFontDeviceTexture: Texture filtering set"); - - // Restore previous texture binding - _gl.BindTexture(GLEnum.Texture2D, (uint)lastTexture); - DebugLogger.Log("RecreateFontDeviceTexture: Restored previous texture binding"); - - // Clear font atlas texture data to save memory - io.Fonts.ClearTexData(); - DebugLogger.Log("RecreateFontDeviceTexture: Cleared font atlas texture data"); - - // Mark fonts as configured - FontsConfigured = true; - DebugLogger.Log("RecreateFontDeviceTexture: Marked fonts as configured"); - } - else - { - DebugLogger.Log("RecreateFontDeviceTexture: Invalid texture data - skipping"); - } - } - DebugLogger.Log("RecreateFontDeviceTexture: Completed"); - } - - /// - /// Frees all graphics resources used by the renderer. - /// - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// - /// Protected implementation of Dispose pattern. - /// - /// true if disposing managed resources, false if called from finalizer - private void Dispose(bool disposing) - { - if (_disposed) - { - return; - } - - if (disposing) - { - // Dispose managed resources - if (_gl is not null && _view is not null && _keyboard is not null && _mouse is not null && _fontTexture is not null && _shader is not null) - { - _view.Resize -= WindowResized; - _keyboard.KeyDown -= OnKeyDown; - _keyboard.KeyUp -= OnKeyUp; - _keyboard.KeyChar -= OnKeyChar; - _mouse.MouseDown -= OnMouseDown; - _mouse.MouseUp -= OnMouseUp; - _mouse.MouseMove -= OnMouseMove; - _mouse.Scroll -= OnMouseScroll; - - _gl.DeleteBuffer(_vboHandle); - _gl.DeleteBuffer(_elementsHandle); - _gl.DeleteVertexArray(_vertexArrayObject); - - _fontTexture.Dispose(); - _shader.Dispose(); - - ImGui.DestroyContext(); - } - } - - // Mark as disposed - _disposed = true; - } -} diff --git a/ImGui.App/ImGuiController/ImGuiFontConfig.cs b/ImGui.App/ImGuiController/ImGuiFontConfig.cs deleted file mode 100644 index d694175..0000000 --- a/ImGui.App/ImGuiController/ImGuiFontConfig.cs +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using System; - -using Hexa.NET.ImGui; - -/// -/// Represents the configuration for an ImGui font. -/// -public readonly struct ImGuiFontConfig : IEquatable -{ - /// - /// Initializes a new instance of the struct. - /// - /// The path to the font file. - /// The size of the font. - /// A function to get the glyph range for the font. - /// Thrown when is less than or equal to zero. - /// Thrown when is null. - [System.Diagnostics.CodeAnalysis.SuppressMessage("Maintainability", "CA1512:Use ArgumentOutOfRangeException throw helper", Justification = "")] - public ImGuiFontConfig(string fontPath, int fontSize, Func? getGlyphRange = null) - { - if (fontSize <= 0) - { - throw new ArgumentOutOfRangeException(nameof(fontSize)); - } - - FontPath = fontPath ?? throw new ArgumentNullException(nameof(fontPath)); - FontSize = fontSize; - GetGlyphRange = getGlyphRange; - } - - /// - /// Gets the path to the font file. - /// - public string FontPath { get; } - - /// - /// Gets the size of the font. - /// - public int FontSize { get; } - - /// - /// Gets the function to retrieve the glyph range for the font. - /// - public Func? GetGlyphRange { get; } - - /// - /// Determines whether the specified object is equal to the current object. - /// - /// The object to compare with the current object. - /// true if the specified object is equal to the current object; otherwise, false. - public override bool Equals(object? obj) => obj is ImGuiFontConfig config && Equals(config); - - /// - /// Serves as the default hash function. - /// - /// A hash code for the current object. - public override int GetHashCode() => HashCode.Combine(FontPath, FontSize, GetGlyphRange); - - /// - /// Determines whether two specified instances of are equal. - /// - /// The first to compare. - /// The second to compare. - /// true if the two instances are equal; otherwise, false. - public static bool operator ==(ImGuiFontConfig left, ImGuiFontConfig right) => left.Equals(right); - - /// - /// Determines whether two specified instances of are not equal. - /// - /// The first to compare. - /// The second to compare. - /// true if the two instances are not equal; otherwise, false. - public static bool operator !=(ImGuiFontConfig left, ImGuiFontConfig right) => !(left == right); - - /// - /// Indicates whether the current object is equal to another object of the same type. - /// - /// An object to compare with this object. - /// true if the current object is equal to the other parameter; otherwise, false. - public bool Equals(ImGuiFontConfig other) - { - return FontPath == other.FontPath - && FontSize == other.FontSize - && GetGlyphRange == other.GetGlyphRange; - } -} diff --git a/ImGui.App/ImGuiController/OpenGLProvider.cs b/ImGui.App/ImGuiController/OpenGLProvider.cs deleted file mode 100644 index 622b0cd..0000000 --- a/ImGui.App/ImGuiController/OpenGLProvider.cs +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -/// -/// Provides access to OpenGL functionality. -/// -public sealed class OpenGLProvider(IOpenGLFactory factory) : IDisposable -{ - internal readonly IOpenGLFactory _factory = factory ?? throw new ArgumentNullException(nameof(factory)); - internal GLWrapper? _gl; - internal bool _disposed; - - /// - /// Gets the OpenGL instance, creating it if necessary. - /// - /// The OpenGL instance. - /// Thrown when the provider has been disposed. - public IGL GetGL() - { - ObjectDisposedException.ThrowIf(_disposed, this); - - if (_gl == null) - { - Silk.NET.OpenGL.GL gl = _factory.CreateGL(); - _gl = new GLWrapper(gl); - } - - return _gl; - } - - /// - public void Dispose() - { - if (!_disposed) - { - _gl?.Dispose(); - _gl = null; - _disposed = true; - } - } -} diff --git a/ImGui.App/ImGuiController/Shader.cs b/ImGui.App/ImGuiController/Shader.cs deleted file mode 100644 index 8bc5e91..0000000 --- a/ImGui.App/ImGuiController/Shader.cs +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Runtime.CompilerServices; - -using Silk.NET.OpenGL; - -internal struct UniformFieldInfo -{ - public int Location; - public string Name; - public int Size; - public UniformType Type; -} - -internal sealed class Shader : IDisposable -{ - public uint Program { get; private set; } - internal readonly Dictionary _uniformToLocation = []; - internal readonly Dictionary _attribLocation = []; - internal bool _initialized; - internal readonly GL _gl; - internal readonly (ShaderType Type, string Path)[] _files; - internal bool _disposed; - - public Shader(GL gl, string vertexShader, string fragmentShader) - { - _gl = gl; - _files = - [ - (ShaderType.VertexShader, vertexShader), - (ShaderType.FragmentShader, fragmentShader), - ]; - Program = CreateProgram(_files); - } - public void UseShader() => _gl.UseProgram(Program); - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// - /// Protected implementation of Dispose pattern. - /// - /// true if disposing managed resources, false if called from finalizer - private void Dispose(bool disposing) - { - if (_disposed) - { - return; - } - - if (disposing) - { - // Dispose managed resources - if (_initialized) - { - _gl.DeleteProgram(Program); - _initialized = false; - } - } - - // Mark as disposed - _disposed = true; - } - - public UniformFieldInfo[] GetUniforms() - { - _gl.GetProgram(Program, GLEnum.ActiveUniforms, out int uniformCount); - - UniformFieldInfo[] uniforms = new UniformFieldInfo[uniformCount]; - - for (int i = 0; i < uniformCount; i++) - { - string name = _gl.GetActiveUniform(Program, (uint)i, out int size, out UniformType type); - - UniformFieldInfo fieldInfo; - fieldInfo.Location = GetUniformLocation(name); - fieldInfo.Name = name; - fieldInfo.Size = size; - fieldInfo.Type = type; - - uniforms[i] = fieldInfo; - } - - return uniforms; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public int GetUniformLocation(string uniform) - { - if (!_uniformToLocation.TryGetValue(uniform, out int location)) - { - location = _gl.GetUniformLocation(Program, uniform); - _uniformToLocation.Add(uniform, location); - - if (location == -1) - { - Debug.Print($"The uniform '{uniform}' does not exist in the shader!"); - } - } - - return location; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public int GetAttribLocation(string attrib) - { - if (!_attribLocation.TryGetValue(attrib, out int location)) - { - location = _gl.GetAttribLocation(Program, attrib); - _attribLocation.Add(attrib, location); - - if (location == -1) - { - Debug.Print($"The attrib '{attrib}' does not exist in the shader!"); - } - } - - return location; - } - - internal uint CreateProgram(params (ShaderType Type, string source)[] shaderPaths) - { - uint program = _gl.CreateProgram(); - - Span shaders = stackalloc uint[shaderPaths.Length]; - for (int i = 0; i < shaderPaths.Length; i++) - { - shaders[i] = CompileShader(shaderPaths[i].Type, shaderPaths[i].source); - } - - foreach (uint shader in shaders) - { - _gl.AttachShader(program, shader); - } - - _gl.LinkProgram(program); - - _gl.GetProgram(program, GLEnum.LinkStatus, out int success); - if (success == 0) - { - string info = _gl.GetProgramInfoLog(program); - Debug.WriteLine($"GL.LinkProgram had info log:\n{info}"); - } - - foreach (uint shader in shaders) - { - _gl.DetachShader(program, shader); - _gl.DeleteShader(shader); - } - - _initialized = true; - - return program; - } - - internal uint CompileShader(ShaderType type, string source) - { - uint shader = _gl.CreateShader(type); - _gl.ShaderSource(shader, source); - _gl.CompileShader(shader); - - _gl.GetShader(shader, ShaderParameterName.CompileStatus, out int success); - if (success == 0) - { - string info = _gl.GetShaderInfoLog(shader); - Debug.WriteLine($"GL.CompileShader for shader [{type}] had info log:\n{info}"); - } - - return shader; - } -} diff --git a/ImGui.App/ImGuiController/Texture.cs b/ImGui.App/ImGuiController/Texture.cs deleted file mode 100644 index 7af3be1..0000000 --- a/ImGui.App/ImGuiController/Texture.cs +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using System; - -using Silk.NET.OpenGL; - -/// -/// Specifies the texture coordinate axes for texture wrapping. -/// -public enum TextureCoordinate -{ - /// - /// No texture coordinate. - /// - None = 0, - - /// - /// The S coordinate (corresponds to the x-axis in texture space). - /// - S = TextureParameterName.TextureWrapS, - - /// - /// The T coordinate (corresponds to the y-axis in texture space). - /// - T = TextureParameterName.TextureWrapT, - - /// - /// The R coordinate (corresponds to the z-axis in texture space). - /// - R = TextureParameterName.TextureWrapR -} - -internal sealed class Texture : IDisposable -{ - public const SizedInternalFormat Srgb8Alpha8 = (SizedInternalFormat)GLEnum.Srgb8Alpha8; - public const SizedInternalFormat Rgb32F = (SizedInternalFormat)GLEnum.Rgb32f; - - public const GLEnum MaxTextureMaxAnisotropy = (GLEnum)0x84FF; - - public static float? MaxAniso; - internal readonly GL _gl; - public readonly uint GlTexture; - public readonly uint Width, Height; - public readonly uint MipmapLevels; - public readonly SizedInternalFormat InternalFormat; - internal bool _disposed; - - public unsafe Texture(GL gl, int width, int height, IntPtr data, bool generateMipmaps = false, bool srgb = false, PixelFormat pxFormat = PixelFormat.Bgra) - { - _gl = gl; - MaxAniso ??= gl.GetFloat(MaxTextureMaxAnisotropy); - Width = (uint)width; - Height = (uint)height; - InternalFormat = srgb ? Srgb8Alpha8 : SizedInternalFormat.Rgba8; - MipmapLevels = (uint)(!generateMipmaps ? 1 : (int)Math.Floor(Math.Log(Math.Max(Width, Height), 2))); - - GlTexture = _gl.GenTexture(); - Bind(); - - _gl.TexStorage2D(GLEnum.Texture2D, MipmapLevels, InternalFormat, Width, Height); - _gl.TexSubImage2D(GLEnum.Texture2D, 0, 0, 0, Width, Height, pxFormat, PixelType.UnsignedByte, (void*)data); - - if (generateMipmaps) - { - _gl.GenerateTextureMipmap(GlTexture); - } - - SetWrap(TextureCoordinate.S, TextureWrapMode.ClampToEdge); - SetWrap(TextureCoordinate.T, TextureWrapMode.ClampToEdge); - - // Set default filtering to prevent sampling artifacts - if (generateMipmaps) - { - SetMinFilter(TextureMinFilter.LinearMipmapLinear); - SetMagFilter(TextureMagFilter.Linear); - } - else - { - SetMinFilter(TextureMinFilter.Nearest); - SetMagFilter(TextureMagFilter.Nearest); - } - - uint mip = MipmapLevels - 1; - _gl.TexParameterI(GLEnum.Texture2D, TextureParameterName.TextureMaxLevel, ref mip); - } - - public void Bind() => _gl.BindTexture(GLEnum.Texture2D, GlTexture); - - public void SetMinFilter(TextureMinFilter filter) - { - int intFilter = (int)filter; - _gl.TexParameterI(GLEnum.Texture2D, TextureParameterName.TextureMinFilter, ref intFilter); - } - - public void SetMagFilter(TextureMagFilter filter) - { - int intFilter = (int)filter; - _gl.TexParameterI(GLEnum.Texture2D, TextureParameterName.TextureMagFilter, ref intFilter); - } - - public void SetAnisotropy(float level) - { - const TextureParameterName textureMaxAnisotropy = (TextureParameterName)0x84FE; - _gl.TexParameter(GLEnum.Texture2D, (GLEnum)textureMaxAnisotropy, Util.Clamp(level, 1, MaxAniso.GetValueOrDefault())); - } - - public void SetLod(int @base, int min, int max) - { - _gl.TexParameterI(GLEnum.Texture2D, TextureParameterName.TextureLodBias, ref @base); - _gl.TexParameterI(GLEnum.Texture2D, TextureParameterName.TextureMinLod, ref min); - _gl.TexParameterI(GLEnum.Texture2D, TextureParameterName.TextureMaxLod, ref max); - } - - public void SetWrap(TextureCoordinate coord, TextureWrapMode mode) - { - int intMode = (int)mode; - _gl.TexParameterI(GLEnum.Texture2D, (TextureParameterName)coord, ref intMode); - } - - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// - /// Protected implementation of Dispose pattern. - /// - /// true if disposing managed resources, false if called from finalizer - private void Dispose(bool disposing) - { - if (_disposed) - { - return; - } - - if (disposing) - { - // Dispose managed resources - _gl.DeleteTexture(GlTexture); - } - - // Mark as disposed - _disposed = true; - } -} diff --git a/ImGui.App/ImGuiController/Util.cs b/ImGui.App/ImGuiController/Util.cs deleted file mode 100644 index b8bc1cc..0000000 --- a/ImGui.App/ImGuiController/Util.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using System.Diagnostics; -using System.Diagnostics.Contracts; - -using Silk.NET.OpenGL; - -internal static class Util -{ - [Pure] - public static float Clamp(float value, float min, float max) => value < min ? min : value > max ? max : value; - - [Conditional("DEBUG")] - public static void CheckGlError(this GL gl, string title) - { - GLEnum error = gl.GetError(); - if (error != GLEnum.NoError) - { - Debug.Print($"{title}: {error}"); - } - } -} diff --git a/ImGui.App/ImGuiController/WindowOpenGLFactory.cs b/ImGui.App/ImGuiController/WindowOpenGLFactory.cs deleted file mode 100644 index 11f2ccb..0000000 --- a/ImGui.App/ImGuiController/WindowOpenGLFactory.cs +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.ImGuiController; - -using Silk.NET.OpenGL; -using Silk.NET.Windowing; - -/// -/// Implementation of that creates OpenGL contexts from a window. -/// -/// The window to create OpenGL contexts from. -/// Thrown when window is null. -public class WindowOpenGLFactory(IWindow window) : IOpenGLFactory -{ - internal readonly IWindow _window = window ?? throw new ArgumentNullException(nameof(window)); - - /// - public GL CreateGL() => GL.GetApi(_window); -} diff --git a/ImGui.App/NativeMethods.cs b/ImGui.App/NativeMethods.cs deleted file mode 100644 index 6d1ec77..0000000 --- a/ImGui.App/NativeMethods.cs +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; -using System.Runtime.InteropServices; - -internal static partial class NativeMethods -{ - [LibraryImport("kernel32.dll")] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial nint GetConsoleWindow(); - - [LibraryImport("user32.dll")] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static partial bool ShowWindow(nint hWnd, int nCmdShow); - - /// - /// Sets the process as DPI-Aware on Windows. - /// - /// True if the operation was successful; otherwise, false. - [LibraryImport("user32.dll")] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - [return: MarshalAs(UnmanagedType.Bool)] - internal static partial bool SetProcessDPIAware(); - - /// - /// Sets the DPI awareness context for the process (Windows 10 version 1607 and later). - /// - /// The DPI awareness context to set. - /// The previous DPI awareness context, or null if the function failed. - [LibraryImport("user32.dll")] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial nint SetProcessDpiAwarenessContext(nint dpiContext); - - /// - /// Sets the DPI awareness for the process (Windows 8.1 and later). - /// - /// The DPI awareness value to set. - /// HRESULT indicating success or failure. - [LibraryImport("Shcore.dll")] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial int SetProcessDpiAwareness(ProcessDpiAwareness value); - - /// - /// DPI awareness values for SetProcessDpiAwareness. - /// - internal enum ProcessDpiAwareness - { - /// - /// DPI unaware. This app does not scale for DPI changes and is always assumed to have a scale factor of 100% (96 DPI). - /// - ProcessDpiUnaware = 0, - - /// - /// System DPI aware. This app does not scale for DPI changes. - /// - ProcessSystemDpiAware = 1, - - /// - /// Per monitor DPI aware. This app checks for the DPI when it is created and adjusts the scale factor whenever the DPI changes. - /// - ProcessPerMonitorDpiAware = 2 - } - - // DPI Awareness Context constants - internal static readonly nint DPI_AWARENESS_CONTEXT_UNAWARE = new(-1); - internal static readonly nint DPI_AWARENESS_CONTEXT_SYSTEM_AWARE = new(-2); - internal static readonly nint DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE = new(-3); - internal static readonly nint DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 = new(-4); - internal static readonly nint DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED = new(-5); - - internal const string X11LibraryName = "libX11.so.6"; - - /// - /// Opens a connection to the X server that controls a display. - /// - /// The name of the display. - /// A handle to the display structure. - [LibraryImport(X11LibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial IntPtr XOpenDisplay([MarshalAs(UnmanagedType.LPStr)] string display); - - /// - /// Returns the value of a default setting. - /// - /// A handle to the display structure. - /// The program name. - /// The option name. - /// The value of the default setting. - [LibraryImport(X11LibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial IntPtr XGetDefault(IntPtr display, [MarshalAs(UnmanagedType.LPStr)] string program, [MarshalAs(UnmanagedType.LPStr)] string option); - - /// - /// Returns the width of the screen in pixels. - /// - /// A handle to the display structure. - /// The screen number. - /// The width of the screen in pixels. - [LibraryImport(X11LibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial int XDisplayWidth(IntPtr display, int screenNumber); - - /// - /// Returns the width of the screen in millimeters. - /// - /// A handle to the display structure. - /// The screen number. - /// The width of the screen in millimeters. - [LibraryImport(X11LibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial int XDisplayWidthMM(IntPtr display, int screenNumber); - - /// - /// Closes the connection to the X server. - /// - /// A handle to the display structure. - /// Zero if the operation was successful; otherwise, a non-zero value. - [LibraryImport(X11LibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial int XCloseDisplay(IntPtr display); - - /// - /// Structure containing startup input parameters for GDI+. - /// - internal struct StartupInputEx - { - public int GdiplusVersion; - - public IntPtr DebugEventCallback; - public int SuppressBackgroundThread; - public int SuppressExternalCodecs; - public int StartupParameters; - - /// - /// Gets the default startup input parameters. - /// - public static StartupInputEx Default => new() - { - // We assume Windows 8 and upper - GdiplusVersion = 2, - DebugEventCallback = IntPtr.Zero, - SuppressBackgroundThread = 0, - SuppressExternalCodecs = 0, - StartupParameters = 0, - }; - } - - /// - /// Structure containing startup output parameters for GDI+. - /// - internal struct StartupOutput - { - public IntPtr NotificationHook; - public IntPtr NotificationUnhook; - } - - private const string GDILibraryName = "gdiplus.dll"; - - [LibraryImport(GDILibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial int GdiplusStartup(out IntPtr token, in StartupInputEx input, out StartupOutput output); - - [LibraryImport(GDILibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial int GdipCreateFromHWND(IntPtr hwnd, out IntPtr graphics); - - [LibraryImport(GDILibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial int GdipDeleteGraphics(IntPtr graphics); - - [LibraryImport(GDILibraryName)] - [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static partial int GdipGetDpiX(IntPtr graphics, out float dpi); -} diff --git a/ImGui.App/PidFrameLimiter.cs b/ImGui.App/PidFrameLimiter.cs deleted file mode 100644 index 1adb85d..0000000 --- a/ImGui.App/PidFrameLimiter.cs +++ /dev/null @@ -1,645 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -using System.Diagnostics; -using System.Threading; - -/// -/// A PID controller-based frame limiter that provides accurate frame rate control -/// by learning from past errors and dynamically adjusting sleep times. -/// -internal sealed class PidFrameLimiter -{ - internal readonly double kp; // Proportional gain - internal readonly double ki; // Integral gain - internal readonly double kd; // Derivative gain - - internal double previousError; - internal double integral; - internal DateTime lastFrameTime; - internal double baseSleepMs; - internal bool isInitialized; - - // Smoothing for frame time measurements - internal readonly Queue recentFrameTimes = new(); - internal double frameTimeSum; - internal const int FrameHistorySize = 10; - - // Auto-tuning state - internal bool isTuning; - internal int currentTuningStep; - internal DateTime tuningStartTime; - internal readonly List tuningResults = []; - internal TuningResult? bestTuningResult; - - internal readonly struct TuningResult - { - public double Kp { get; init; } - public double Ki { get; init; } - public double Kd { get; init; } - public double AverageError { get; init; } - public double MaxError { get; init; } - public double Stability { get; init; } // Lower is better - public double Score { get; init; } // Higher is better - } - - // Predefined parameter sets to test during auto-tuning - internal static readonly (double kp, double ki, double kd)[] CoarseTuningParameterSets = - [ - // Phase 1: Coarse tuning - wider range, longer tests - // Conservative settings - (0.1, 0.02, 0.005), - (0.2, 0.05, 0.01), - (0.3, 0.07, 0.015), - (0.4, 0.08, 0.02), - (0.5, 0.09, 0.025), - (0.6, 0.10, 0.03), - - // Balanced settings - (0.7, 0.09, 0.04), - (0.8, 0.10, 0.05), // Previous default - (0.9, 0.11, 0.06), - (1.0, 0.12, 0.07), - (1.1, 0.13, 0.08), - (1.2, 0.15, 0.09), - - // Aggressive settings (including new optimal default) - (1.3, 0.16, 0.10), - (1.4, 0.18, 0.11), - (1.5, 0.20, 0.12), - (1.7, 0.22, 0.14), - (1.8, 0.048, 0.237), // New optimal default - (2.0, 0.25, 0.15), - (2.3, 0.28, 0.17), - - // Specialized configurations - (0.6, 0.30, 0.02), // High integral for steady-state accuracy - (0.4, 0.35, 0.01), // Very high integral - (1.8, 0.05, 0.25), // High derivative for fast response - (2.2, 0.03, 0.30), // Very high derivative - (0.9, 0.08, 0.01), // Low derivative for stability - (1.1, 0.06, 0.005), // Very low derivative - ]; - - // Fine tuning around best coarse result - internal (double kp, double ki, double kd)[] currentFineTuningParameters = []; - internal (double kp, double ki, double kd)[] currentPrecisionTuningParameters = []; - - internal enum TuningPhase - { - Coarse, - Fine, - Precision, - Complete - } - - internal TuningPhase currentTuningPhase = TuningPhase.Coarse; - internal const double CoarseTuningDurationSeconds = 8.0; // Longer tests for coarse tuning - internal const double FineTuningDurationSeconds = 12.0; // Even longer for fine tuning - internal const double PrecisionTuningDurationSeconds = 15.0; // Longest for precision tuning - - /// - /// Initializes a new instance of the PidFrameLimiter class. - /// - /// Proportional gain (Kp) - how strongly to react to current error - /// Integral gain (Ki) - how strongly to react to accumulated error over time - /// Derivative gain (Kd) - how strongly to react to rate of change of error - public PidFrameLimiter(double proportionalGain = 1.8, double integralGain = 0.048, double derivativeGain = 0.237) - { - kp = proportionalGain; - ki = integralGain; - kd = derivativeGain; - Reset(); - } - - /// - /// Starts the comprehensive PID auto-tuning procedure with multiple phases. - /// Phase 1: Coarse tuning (8s per test, 24 parameters) - /// Phase 2: Fine tuning (12s per test, 25 parameters around best result) - /// Phase 3: Precision tuning (15s per test, 9 parameters for final optimization) - /// Total time: ~12-15 minutes for maximum accuracy - /// Defaults: Kp=1.8, Ki=0.048, Kd=0.237 (from comprehensive tuning results) - /// - public void StartAutoTuning() - { - isTuning = true; - currentTuningStep = 0; - currentTuningPhase = TuningPhase.Coarse; - tuningStartTime = DateTime.UtcNow; - tuningResults.Clear(); - bestTuningResult = null; - tuningErrors.Clear(); - - // Reset phase-specific arrays - currentFineTuningParameters = []; - currentPrecisionTuningParameters = []; - - // Start with first coarse parameter set - if (CoarseTuningParameterSets.Length > 0) - { - (double newKp, double newKi, double newKd) = CoarseTuningParameterSets[0]; - SetTuningParameters(newKp, newKi, newKd); - } - } - - /// - /// Stops the auto-tuning procedure and applies the best found parameters. - /// - public void StopAutoTuning() - { - if (isTuning && bestTuningResult.HasValue) - { - TuningResult best = bestTuningResult.Value; - SetTuningParameters(best.Kp, best.Ki, best.Kd); - } - - isTuning = false; - currentTuningStep = 0; - } - - /// - /// Gets the current auto-tuning progress and status with phase information. - /// - /// Tuning progress information - public (bool isActive, int currentStep, int totalSteps, double progressPercent, TuningResult? bestResult, string phase) GetTuningStatusDetailed() - { - if (!isTuning) - { - return (false, 0, 0, 0.0, bestTuningResult, "Complete"); - } - - (int currentSteps, int totalSteps, string phaseName) = currentTuningPhase switch - { - TuningPhase.Coarse => (currentTuningStep, CoarseTuningParameterSets.Length, "Coarse Tuning"), - TuningPhase.Fine => (currentTuningStep, currentFineTuningParameters.Length, "Fine Tuning"), - TuningPhase.Precision => (currentTuningStep, currentPrecisionTuningParameters.Length, "Precision Tuning"), - _ => (0, 1, "Complete") - }; - - double progress = totalSteps > 0 ? currentSteps / (double)totalSteps * 100.0 : 100.0; - return (isTuning, currentSteps + 1, totalSteps, progress, bestTuningResult, phaseName); - } - - // Keep the old method for compatibility - public (bool isActive, int currentStep, int totalSteps, double progressPercent, TuningResult? bestResult) GetTuningStatus() - { - (bool isActive, int currentStep, int totalSteps, double progressPercent, TuningResult? bestResult, string _) = GetTuningStatusDetailed(); - return (isActive, currentStep, totalSteps, progressPercent, bestResult); - } - - internal double GetCurrentTuningDuration() => currentTuningPhase switch - { - TuningPhase.Coarse => CoarseTuningDurationSeconds, - TuningPhase.Fine => FineTuningDurationSeconds, - TuningPhase.Precision => PrecisionTuningDurationSeconds, - _ => CoarseTuningDurationSeconds - }; - - internal void GenerateFineTuningParameters(TuningResult bestResult) - { - // Generate 25 parameter combinations around the best coarse result - List<(double kp, double ki, double kd)> fineParams = []; - - double baseKp = bestResult.Kp; - double baseKi = bestResult.Ki; - double baseKd = bestResult.Kd; - - // Create a 5x5 grid around the best parameters (25 combinations) - double[] kpMultipliers = [0.8, 0.9, 1.0, 1.1, 1.2]; - double[] kiMultipliers = [0.7, 0.85, 1.0, 1.15, 1.3]; - - foreach (double kpMult in kpMultipliers) - { - foreach (double kiMult in kiMultipliers) - { - double newKp = Math.Max(0.05, baseKp * kpMult); - double newKi = Math.Max(0.01, baseKi * kiMult); - double newKd = baseKd; // Keep Kd constant for fine tuning - fineParams.Add((newKp, newKi, newKd)); - } - } - - currentFineTuningParameters = [.. fineParams]; - } - - internal void GeneratePrecisionTuningParameters(TuningResult bestResult) - { - // Generate 9 parameter combinations for final precision tuning - List<(double kp, double ki, double kd)> precisionParams = []; - - double baseKp = bestResult.Kp; - double baseKi = bestResult.Ki; - double baseKd = bestResult.Kd; - - // Create a tight 3x3 grid for precision (9 combinations) - double[] multipliers = [0.95, 1.0, 1.05]; - - foreach (double kpMult in multipliers) - { - foreach (double kiMult in multipliers) - { - double newKp = Math.Max(0.05, baseKp * kpMult); - double newKi = Math.Max(0.01, baseKi * kiMult); - double newKd = Math.Max(0.001, baseKd * kiMult); // Fine-tune derivative too - precisionParams.Add((newKp, newKi, newKd)); - } - } - - currentPrecisionTuningParameters = [.. precisionParams]; - } - - internal void HandleAutoTuningProgression(double error) - { - tuningErrors.Add(Math.Abs(error)); - - // Check if we've tested current parameter set long enough - double testDuration = (DateTime.UtcNow - tuningStartTime).TotalSeconds; - if (testDuration >= GetCurrentTuningDuration() && tuningErrors.Count > 10) // Ensure we have enough data - { - // Verify we have valid arrays and indices before proceeding - if (!ValidateCurrentTuningState()) - { - StopAutoTuning(); - return; - } - - // Process current test results - ProcessCurrentTuningResults(); - - // Advance to next parameter or phase - AdvanceToNextTuningStep(); - } - } - - internal bool ValidateCurrentTuningState() - { - return currentTuningPhase switch - { - TuningPhase.Coarse => currentTuningStep >= 0 && currentTuningStep < CoarseTuningParameterSets.Length, - TuningPhase.Fine => currentFineTuningParameters.Length > 0 && currentTuningStep >= 0 && currentTuningStep < currentFineTuningParameters.Length, - TuningPhase.Precision => currentPrecisionTuningParameters.Length > 0 && currentTuningStep >= 0 && currentTuningStep < currentPrecisionTuningParameters.Length, - _ => false - }; - } - - internal void ProcessCurrentTuningResults() - { - // Calculate performance metrics for current parameter set - double avgError = tuningErrors.Average(); - double maxError = tuningErrors.Max(); - double stability = CalculateStability(tuningErrors); - double score = CalculateScore(avgError, maxError, stability); - - // Store result - get parameters based on current phase - (double currentKp, double currentKi, double currentKd) = GetCurrentTuningParameters(); - - TuningResult result = new() - { - Kp = currentKp, - Ki = currentKi, - Kd = currentKd, - AverageError = avgError, - MaxError = maxError, - Stability = stability, - Score = score - }; - - tuningResults.Add(result); - - // Update best result if this one is better - if (!bestTuningResult.HasValue || score > bestTuningResult.Value.Score) - { - bestTuningResult = result; - } - } - - internal (double kp, double ki, double kd) GetCurrentTuningParameters() - { - return currentTuningPhase switch - { - TuningPhase.Coarse => CoarseTuningParameterSets[currentTuningStep], - TuningPhase.Fine => currentFineTuningParameters[currentTuningStep], - TuningPhase.Precision => currentPrecisionTuningParameters[currentTuningStep], - _ => (CurrentKp, CurrentKi, CurrentKd) // Fallback to current values - }; - } - - internal void AdvanceToNextTuningStep() - { - currentTuningStep++; - bool advanceToNextPhase = CheckAndHandlePhaseTransition(); - - // Start next parameter test - (double nextKp, double nextKi, double nextKd) = GetNextTuningParameters(advanceToNextPhase); - SetTuningParameters(nextKp, nextKi, nextKd); - - tuningStartTime = DateTime.UtcNow; - tuningErrors.Clear(); - } - - internal bool CheckAndHandlePhaseTransition() - { - switch (currentTuningPhase) - { - case TuningPhase.Coarse: - if (currentTuningStep >= CoarseTuningParameterSets.Length) - { - if (bestTuningResult.HasValue) - { - GenerateFineTuningParameters(bestTuningResult.Value); - currentTuningPhase = TuningPhase.Fine; - currentTuningStep = 0; - return true; - } - else - { - StopAutoTuning(); - return false; - } - } - break; - - case TuningPhase.Fine: - if (currentTuningStep >= currentFineTuningParameters.Length) - { - if (bestTuningResult.HasValue) - { - GeneratePrecisionTuningParameters(bestTuningResult.Value); - currentTuningPhase = TuningPhase.Precision; - currentTuningStep = 0; - return true; - } - else - { - StopAutoTuning(); - return false; - } - } - break; - - case TuningPhase.Precision: - if (currentTuningStep >= currentPrecisionTuningParameters.Length) - { - StopAutoTuning(); - return false; - } - break; - } - return false; - } - - internal (double kp, double ki, double kd) GetNextTuningParameters(bool isNewPhase) - { - if (isNewPhase) - { - // Starting new phase - get first parameter of new phase - return currentTuningPhase switch - { - TuningPhase.Fine when currentFineTuningParameters.Length > 0 - => currentFineTuningParameters[0], - TuningPhase.Precision when currentPrecisionTuningParameters.Length > 0 - => currentPrecisionTuningParameters[0], - _ => (CurrentKp, CurrentKi, CurrentKd) // Safe fallback - }; - } - else - { - // Continue with current phase - return currentTuningPhase switch - { - TuningPhase.Coarse when currentTuningStep < CoarseTuningParameterSets.Length - => CoarseTuningParameterSets[currentTuningStep], - TuningPhase.Fine when currentFineTuningParameters.Length > 0 && currentTuningStep < currentFineTuningParameters.Length - => currentFineTuningParameters[currentTuningStep], - TuningPhase.Precision when currentPrecisionTuningParameters.Length > 0 && currentTuningStep < currentPrecisionTuningParameters.Length - => currentPrecisionTuningParameters[currentTuningStep], - _ => (CurrentKp, CurrentKi, CurrentKd) // Safe fallback - }; - } - } - - internal void SetTuningParameters(double newKp, double newKi, double newKd) - { - // Use reflection or create new fields to temporarily override the readonly kp, ki, kd - // For now, we'll store them in temporary fields and use them during tuning - tuningKp = newKp; - tuningKi = newKi; - tuningKd = newKd; - Reset(); // Reset PID state when changing parameters - } - - // Temporary fields for tuning (will override readonly values during tuning) - internal double tuningKp; - internal double tuningKi; - internal double tuningKd; - internal readonly List tuningErrors = []; - - // Get current PID gains (accounting for tuning mode) - internal double CurrentKp => isTuning ? tuningKp : kp; - internal double CurrentKi => isTuning ? tuningKi : ki; - internal double CurrentKd => isTuning ? tuningKd : kd; - - /// - /// Manually sets PID parameters for custom tuning. - /// - /// Proportional gain (Kp) - /// Integral gain (Ki) - /// Derivative gain (Kd) - public void SetManualPidParameters(double proportionalGain, double integralGain, double derivativeGain) - { - tuningKp = proportionalGain; - tuningKi = integralGain; - tuningKd = derivativeGain; - isTuning = false; // Use manual parameters - Reset(); // Reset PID state when changing parameters - } - - /// - /// Gets the current PID parameters being used. - /// - /// Current Kp, Ki, Kd values - public (double kp, double ki, double kd) GetCurrentParameters() => (CurrentKp, CurrentKi, CurrentKd); - - /// - /// Resets the PID controller state. Call this when changing target frame rates. - /// - public void Reset() - { - previousError = 0; - integral = 0; - lastFrameTime = DateTime.UtcNow; - baseSleepMs = 0; - isInitialized = false; - recentFrameTimes.Clear(); - frameTimeSum = 0; - } - - /// - /// Applies frame rate limiting using PID control to achieve the target frame time. - /// - /// Target time per frame in milliseconds - public void LimitFrameRate(double targetFrameTimeMs) - { - DateTime currentTime = DateTime.UtcNow; - - if (!isInitialized) - { - lastFrameTime = currentTime; - baseSleepMs = Math.Max(0, targetFrameTimeMs - 1); // Less conservative estimate for faster start - isInitialized = true; - return; - } - - // Measure actual frame time (includes previous sleep + rendering time) - double actualFrameTimeMs = (currentTime - lastFrameTime).TotalMilliseconds; - - // Update lastFrameTime for next frame measurement - lastFrameTime = currentTime; - - // Smooth the frame time measurement to reduce noise - UpdateFrameTimeHistory(actualFrameTimeMs); - double smoothedFrameTime = GetSmoothedFrameTime(); - - // Calculate error (positive = running too fast, negative = running too slow) - double error = targetFrameTimeMs - smoothedFrameTime; - - // PID calculations - integral += error; - - // Prevent integral windup - clamp integral term to reasonable bounds - double maxIntegral = targetFrameTimeMs * 2; - integral = Math.Clamp(integral, -maxIntegral, maxIntegral); - - double derivative = error - previousError; - - // Calculate PID output (adjustment to sleep time) - double pidOutput = (CurrentKp * error) + (CurrentKi * integral) + (CurrentKd * derivative); - - // Update base sleep time with PID adjustment - use moderate scaling - baseSleepMs += pidOutput * 0.2; // Reduced from 0.5 for more stable control - - // Clamp sleep time to reasonable bounds - baseSleepMs = Math.Clamp(baseSleepMs, 0, targetFrameTimeMs * 1.2); // Reduced upper bound to prevent excessive sleep - - // Apply sleep if needed - lowered threshold for better precision - if (baseSleepMs > 0.1) // Reduced from 0.5ms to allow finer control - { - ApplyHighPrecisionSleep(baseSleepMs); - } - - // Store values for next iteration - previousError = error; - - // Handle auto-tuning progression - if (isTuning) - { - HandleAutoTuningProgression(error); - } - - // Optional: Log PID state for debugging (remove in production) -#if DEBUG - if (DateTime.UtcNow.Millisecond % 100 < 16) // Log roughly every 100ms - { - Debug.WriteLine( - $"PID Frame Limiter - Target: {targetFrameTimeMs:F1}ms, " + - $"Actual: {smoothedFrameTime:F1}ms, Error: {error:F1}ms, " + - $"Sleep: {baseSleepMs:F1}ms, P: {CurrentKp * error:F2}, I: {CurrentKi * integral:F2}, D: {CurrentKd * derivative:F2}"); - } -#endif - } - - internal static double CalculateStability(List errors) - { - if (errors.Count < 2) - { - return 0; - } - - double mean = errors.Average(); - double variance = errors.Sum(x => Math.Pow(x - mean, 2)) / errors.Count; - return Math.Sqrt(variance); // Standard deviation - lower is more stable - } - - internal static double CalculateScore(double avgError, double maxError, double stability) - { - // Higher score is better - // Prioritize low average error, penalize high max error and instability - double accuracyScore = 1.0 / (1.0 + avgError); // Higher when avgError is low - double maxErrorPenalty = 1.0 / (1.0 + (maxError * 0.5)); // Penalize high max errors - double stabilityScore = 1.0 / (1.0 + stability); // Higher when stability is low (more stable) - - return accuracyScore * maxErrorPenalty * stabilityScore; - } - - /// - /// Applies high-precision sleep using a hybrid approach: - /// Thread.Sleep for coarse timing + Stopwatch spin-waiting for fine precision. - /// - /// Target sleep time in milliseconds - internal static void ApplyHighPrecisionSleep(double sleepTimeMs) - { - if (sleepTimeMs <= 0) - { - return; - } - - const double CoarseSleepThreshold = 5.0; // Reduced from 10ms for better precision - const double SpinWaitThreshold = 0.5; // Reduced from 1ms for finer control - - Stopwatch sw = Stopwatch.StartNew(); - double targetMs = sleepTimeMs; - - // Phase 1: Coarse sleep using Thread.Sleep for bulk of time - if (sleepTimeMs > CoarseSleepThreshold) - { - double coarseSleepMs = sleepTimeMs - SpinWaitThreshold; - int coarseSleepInt = (int)Math.Floor(coarseSleepMs); - - if (coarseSleepInt > 0) - { - Thread.Sleep(coarseSleepInt); - } - } - - // Phase 2: Fine-grained spin-waiting for remaining time - while (sw.Elapsed.TotalMilliseconds < targetMs) - { - // Yield to other threads occasionally to prevent 100% CPU usage - if (sw.Elapsed.TotalMilliseconds < targetMs - 0.05) // Reduced threshold for tighter control - { - Thread.Yield(); // More cooperative than Thread.Sleep(0) - } - // Final microsecond precision with tight spin - } - - sw.Stop(); - } - - internal void UpdateFrameTimeHistory(double frameTimeMs) - { - recentFrameTimes.Enqueue(frameTimeMs); - frameTimeSum += frameTimeMs; - - while (recentFrameTimes.Count > FrameHistorySize) - { - frameTimeSum -= recentFrameTimes.Dequeue(); - } - } - - internal double GetSmoothedFrameTime() => - recentFrameTimes.Count > 0 ? frameTimeSum / recentFrameTimes.Count : 0; - - /// - /// Gets diagnostic information about the PID controller state. - /// - /// A formatted string with PID state information - public string GetDiagnosticInfo() - { - double smoothedFrameTime = GetSmoothedFrameTime(); - double actualFps = smoothedFrameTime > 0 ? 1000.0 / smoothedFrameTime : 0; - return $"PID State - Sleep: {baseSleepMs:F2}ms (High-Precision), Error: {previousError:F2}ms, Integral: {integral:F2}, Frame Time: {smoothedFrameTime:F2}ms, Actual FPS: {actualFps:F1}"; - } -} diff --git a/ImGui.App/README.md b/ImGui.App/README.md deleted file mode 100644 index 607e49c..0000000 --- a/ImGui.App/README.md +++ /dev/null @@ -1,573 +0,0 @@ -# ktsu.ImGuiApp - -> A .NET library that provides application scaffolding for Dear ImGui, using Silk.NET and Hexa.NET.ImGui. - -[![NuGet](https://img.shields.io/nuget/v/ktsu.ImGuiApp.svg)](https://www.nuget.org/packages/ktsu.ImGuiApp/) -[![License](https://img.shields.io/github/license/ktsu-dev/ImGuiApp.svg)](LICENSE.md) -[![NuGet Downloads](https://img.shields.io/nuget/dt/ktsu.ImGuiApp.svg)](https://www.nuget.org/packages/ktsu.ImGuiApp/) -[![GitHub Stars](https://img.shields.io/github/stars/ktsu-dev/ImGuiApp?style=social)](https://github.com/ktsu-dev/ImGuiApp/stargazers) - -## Introduction - -ImGuiApp is a .NET library that provides application scaffolding for [Dear ImGui](https://github.com/ocornut/imgui), using [Silk.NET](https://github.com/dotnet/Silk.NET) for OpenGL and window management and [Hexa.NET.ImGui](https://github.com/HexaEngine/Hexa.NET.ImGui) for the ImGui bindings. It simplifies the creation of ImGui-based applications by abstracting away the complexities of window management, rendering, and input handling. - -## Features - -- **Simple API**: Create ImGui applications with minimal boilerplate code -- **Full Integration**: Seamless integration with Silk.NET for OpenGL and input handling -- **Window Management**: Automatic window state, rendering, and input handling -- **Performance Optimization**: Sleep-based throttled rendering with lowest-selection logic when unfocused, idle, or not visible to maximize resource savings -- **PID Frame Limiting**: Precision frame rate control using a PID controller with comprehensive auto-tuning capabilities for highly accurate target FPS achievement -- **DPI Awareness**: Built-in support for high-DPI displays and scaling -- **Font Management**: Flexible font loading system with customization options and dynamic scaling -- **Unicode & Emoji Support**: Built-in support for Unicode characters and emojis (enabled by default) -- **Texture Support**: Built-in texture management with caching and automatic cleanup for ImGui -- **Debug Logging**: Comprehensive debug logging system for troubleshooting crashes and performance issues -- **Context Handling**: Automatic OpenGL context change detection and texture reloading -- **Lifecycle Callbacks**: Customizable delegate callbacks for application events -- **Menu System**: Easy-to-use API for creating application menus -- **Positioning Guards**: Offscreen positioning checks to keep windows visible -- **Modern .NET**: Supports .NET 9 and newer -- **Active Development**: Open-source and actively maintained - -## Getting Started - -### Prerequisites - -- .NET 9.0 or later - -## Installation - -### Package Manager Console - -```powershell -Install-Package ktsu.ImGuiApp -``` - -### .NET CLI - -```bash -dotnet add package ktsu.ImGuiApp -``` - -### Package Reference - -```xml - -``` - -## Usage Examples - -### Basic Application - -Create a new class and call `ImGuiApp.Start()` with your application config: - -```csharp -using ktsu.ImGuiApp; -using Hexa.NET.ImGui; - -static class Program -{ - static void Main() - { - ImGuiApp.Start(new ImGuiAppConfig() - { - Title = "ImGuiApp Demo", - OnStart = () => { /* Initialization code */ }, - OnUpdate = delta => { /* Logic updates */ }, - OnRender = delta => { ImGui.Text("Hello, ImGuiApp!"); }, - OnAppMenu = () => - { - if (ImGui.BeginMenu("File")) - { - // Menu items - if (ImGui.MenuItem("Exit")) - { - ImGuiApp.Stop(); - } - ImGui.EndMenu(); - } - } - }); - } -} -``` - -### Custom Font Management - -Use the resource designer to add font files to your project, then load the fonts: - -```csharp -ImGuiApp.Start(new() -{ - Title = "ImGuiApp Demo", - OnRender = OnRender, - Fonts = new Dictionary - { - { nameof(Resources.MY_FONT), Resources.MY_FONT } - }, -}); -``` - -Or load the font data manually: - -```csharp -var fontData = File.ReadAllBytes("path/to/font.ttf"); -ImGuiApp.Start(new() -{ - Title = "ImGuiApp Demo", - OnRender = OnRender, - Fonts = new Dictionary - { - { "MyFont", fontData } - }, -}); -``` - -Then apply the font to ImGui using the `FontAppearance` class: - -```csharp -private static void OnRender(float deltaTime) -{ - ImGui.Text("Hello, I am normal text!"); - - using (new FontAppearance("MyFont", 24)) - { - ImGui.Text("Hello, I am BIG fancy text!"); - } - - using (new FontAppearance(32)) - { - ImGui.Text("Hello, I am just huge text!"); - } - - using (new FontAppearance("MyFont")) - { - ImGui.Text("Hello, I am somewhat fancy!"); - } -} -``` - -### Unicode and Emoji Support - -ImGuiApp automatically includes support for Unicode characters and emojis. This feature is **enabled by default**, so you can use extended characters without any configuration: - -```csharp -private static void OnRender(float deltaTime) -{ - ImGui.Text("Basic ASCII: Hello World!"); - ImGui.Text("Accented characters: café, naïve, résumé"); - ImGui.Text("Mathematical symbols: ∞ ≠ ≈ ≤ ≥ ± × ÷ ∂ ∑"); - ImGui.Text("Currency symbols: $ € £ ¥ ₹ ₿"); - ImGui.Text("Arrows: ← → ↑ ↓ ↔ ↕"); - ImGui.Text("Emojis (if font supports): 😀 🚀 🌟 💻 🎨 🌈"); -} -``` - -**Note**: Character display depends on your font's Unicode support. Most modern fonts include extended Latin characters and symbols, but emojis require specialized fonts. - -To disable Unicode support (ASCII only), set `EnableUnicodeSupport = false`: - -```csharp -ImGuiApp.Start(new() -{ - Title = "ASCII Only App", - EnableUnicodeSupport = false, // Disables Unicode support - // ... other settings -}); -``` - -### Texture Management - -Load and manage textures with the built-in texture management system: - -```csharp -private static void OnRender(float deltaTime) -{ - // Load texture from file path - var textureInfo = ImGuiApp.GetOrLoadTexture("path/to/texture.png"); - - // Use the texture in ImGui (using the new TextureRef API for Hexa.NET.ImGui) - ImGui.Image(textureInfo.TextureRef, new Vector2(128, 128)); - - // Clean up when done (optional - textures are cached and managed automatically) - ImGuiApp.DeleteTexture(textureInfo); -} -``` - -### PID Frame Limiting - -ImGuiApp features a sophisticated **PID (Proportional-Integral-Derivative) controller** for precise frame rate limiting. This system provides highly accurate target FPS control that learns and adapts to your system's characteristics. - -#### Key Features - -- **High-Precision Timing**: Hybrid sleep system combining `Thread.Sleep()` for coarse delays with spin-waiting for sub-millisecond accuracy -- **PID Controller**: Advanced control algorithm that learns from frame timing errors and dynamically adjusts sleep times -- **Comprehensive Auto-Tuning**: Multi-phase tuning procedure that automatically finds optimal PID parameters for your system -- **VSync Independence**: Works independently of monitor refresh rates for any target FPS -- **Real-Time Diagnostics**: Built-in performance monitoring and tuning visualization - -#### Optimized Defaults - -ImGuiApp comes pre-configured with optimal PID parameters derived from comprehensive auto-tuning: - -- **Kp: 1.800** - Proportional gain for current error response -- **Ki: 0.048** - Integral gain for accumulated error correction -- **Kd: 0.237** - Derivative gain for predictive adjustment - -These defaults provide excellent frame timing accuracy out-of-the-box for most systems. - -#### Configuration - -Configure frame limiting through `ImGuiAppPerformanceSettings`: - -```csharp -ImGuiApp.Start(new ImGuiAppConfig -{ - Title = "PID Frame Limited App", - OnRender = OnRender, - PerformanceSettings = new ImGuiAppPerformanceSettings - { - EnableThrottledRendering = true, - FocusedFps = 30.0, // Target 30 FPS when focused - UnfocusedFps = 5.0, // Target 5 FPS when unfocused - IdleFps = 10.0, // Target 10 FPS when idle - NotVisibleFps = 2.0, // Target 2 FPS when minimized - EnableIdleDetection = true, - IdleTimeoutSeconds = 30.0 // Idle after 30 seconds - } -}); -``` - -#### Auto-Tuning Procedure - -For maximum accuracy, ImGuiApp includes a comprehensive **3-phase auto-tuning system**: - -1. **Coarse Phase** (8s per test): Tests 24 parameter combinations to find the general optimal range -2. **Fine Phase** (12s per test): Tests 25 refined parameters around the best coarse result -3. **Precision Phase** (15s per test): Final optimization with 9 precision-focused parameters - -**Total tuning time**: ~12-15 minutes for maximum accuracy - -Access auto-tuning through the **Debug > Show Performance Monitor** menu, which provides: -- Real-time tuning progress visualization -- Performance metrics (Average Error, Max Error, Stability, Score) -- Interactive tuning controls and results display -- Live FPS graphs showing PID controller performance - -#### Technical Details - -The PID controller works by: -- **Measuring** actual frame times vs. target frame times -- **Calculating** error using smoothed measurements to reduce noise -- **Adjusting** sleep duration using PID mathematics: `output = Kp×error + Ki×∫error + Kd×Δerror` -- **Learning** from past performance to minimize future timing errors - -The system automatically: -- Disables VSync to prevent interference with custom frame limiting -- Pauses throttling during auto-tuning for accurate measurements -- Uses integral windup prevention to maintain stability -- Applies high-precision sleep for sub-millisecond timing accuracy - -### Full Application with Multiple Windows - -```csharp -using ktsu.ImGuiApp; -using Hexa.NET.ImGui; -using System.Numerics; - -class Program -{ - private static bool _showDemoWindow = true; - private static bool _showCustomWindow = true; - - static void Main() - { - ImGuiApp.Start(new ImGuiAppConfig - { - Title = "Advanced ImGuiApp Demo", - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(1280, 720), - Pos = new Vector2(100, 100) - }, - OnStart = OnStart, - OnUpdate = OnUpdate, - OnRender = OnRender, - OnAppMenu = OnAppMenu, - }); - } - - private static void OnStart() - { - // Initialize your application state - Console.WriteLine("Application started"); - } - - private static void OnUpdate(float deltaTime) - { - // Update your application state - // This runs before rendering each frame - } - - private static void OnRender(float deltaTime) - { - // ImGui demo window - if (_showDemoWindow) - ImGui.ShowDemoWindow(ref _showDemoWindow); - - // Custom window - if (_showCustomWindow) - { - ImGui.Begin("Custom Window", ref _showCustomWindow); - - ImGui.Text($"Frame time: {deltaTime * 1000:F2} ms"); - ImGui.Text($"FPS: {1.0f / deltaTime:F1}"); - - if (ImGui.Button("Click Me")) - Console.WriteLine("Button clicked!"); - - ImGui.ColorEdit3("Background Color", ref _backgroundColor); - - ImGui.End(); - } - } - - private static void OnAppMenu() - { - if (ImGui.BeginMenu("File")) - { - if (ImGui.MenuItem("Exit")) - ImGuiApp.Stop(); - - ImGui.EndMenu(); - } - - if (ImGui.BeginMenu("Windows")) - { - ImGui.MenuItem("Demo Window", string.Empty, ref _showDemoWindow); - ImGui.MenuItem("Custom Window", string.Empty, ref _showCustomWindow); - ImGui.EndMenu(); - } - } - - private static Vector3 _backgroundColor = new Vector3(0.45f, 0.55f, 0.60f); -} -``` - -## API Reference - -### `ImGuiApp` Static Class - -The main entry point for creating and managing ImGui applications. - -#### Properties - -| Name | Type | Description | -|------|------|-------------| -| `WindowState` | `ImGuiAppWindowState` | Gets the current state of the application window | -| `Invoker` | `Invoker` | Gets an instance to delegate tasks to the window thread | -| `IsFocused` | `bool` | Gets whether the application window is focused | -| `IsVisible` | `bool` | Gets whether the application window is visible | -| `IsIdle` | `bool` | Gets whether the application is currently idle | -| `ScaleFactor` | `float` | Gets the current DPI scale factor | - -#### Methods - -| Name | Parameters | Return Type | Description | -|------|------------|-------------|-------------| -| `Start` | `ImGuiAppConfig config` | `void` | Starts the ImGui application with the provided configuration | -| `Stop` | | `void` | Stops the running application | -| `GetOrLoadTexture` | `AbsoluteFilePath path` | `ImGuiAppTextureInfo` | Loads a texture from file or returns cached texture info if already loaded | -| `TryGetTexture` | `AbsoluteFilePath path, out ImGuiAppTextureInfo textureInfo` | `bool` | Attempts to get a cached texture by path | -| `DeleteTexture` | `uint textureId` | `void` | Deletes a texture and frees its resources | -| `DeleteTexture` | `ImGuiAppTextureInfo textureInfo` | `void` | Deletes a texture and frees its resources (convenience overload) | -| `CleanupAllTextures` | | `void` | Cleans up all loaded textures | -| `SetWindowIcon` | `string iconPath` | `void` | Sets the window icon using the specified icon file path | -| `EmsToPx` | `float ems` | `int` | Converts a value in ems to pixels based on current font size | -| `PtsToPx` | `int pts` | `int` | Converts a value in points to pixels based on current scale factor | -| `UseImageBytes` | `Image image, Action action` | `void` | Executes an action with temporary access to image bytes using pooled memory | - -### `ImGuiAppConfig` Class - -Configuration for the ImGui application. - -#### Properties - -| Name | Type | Default | Description | -|------|------|---------|-------------| -| `TestMode` | `bool` | `false` | Whether the application is running in test mode | -| `Title` | `string` | `"ImGuiApp"` | The window title | -| `IconPath` | `string` | `""` | The file path to the application window icon | -| `InitialWindowState` | `ImGuiAppWindowState` | `new()` | The initial state of the application window | -| `Fonts` | `Dictionary` | `[]` | Font name to font data mapping | -| `EnableUnicodeSupport` | `bool` | `true` | Whether to enable Unicode and emoji support | -| `SaveIniSettings` | `bool` | `true` | Whether ImGui should save window settings to imgui.ini | -| `PerformanceSettings` | `ImGuiAppPerformanceSettings` | `new()` | Performance settings for throttled rendering | -| `OnStart` | `Action` | `() => { }` | Called when the application starts | -| `FrameWrapperFactory` | `Func` | `() => null` | Factory for creating frame wrappers | -| `OnUpdate` | `Action` | `(delta) => { }` | Called each frame before rendering (param: delta time) | -| `OnRender` | `Action` | `(delta) => { }` | Called each frame for rendering (param: delta time) | -| `OnAppMenu` | `Action` | `() => { }` | Called each frame for rendering the application menu | -| `OnMoveOrResize` | `Action` | `() => { }` | Called when the application window is moved or resized | - -### `ImGuiAppPerformanceSettings` Class - -Configuration for performance optimization and throttled rendering. Uses a sophisticated **PID controller with high-precision timing** to achieve accurate target frame rates while maintaining system resource efficiency. The system combines Thread.Sleep for coarse delays with spin-waiting for sub-millisecond precision, and automatically disables VSync to prevent interference with custom frame limiting. - -#### Properties - -| Name | Type | Default | Description | -|------|------|---------|-------------| -| `EnableThrottledRendering` | `bool` | `true` | Enables/disables throttled rendering feature | -| `FocusedFps` | `double` | `30.0` | Target frame rate when the window is focused and active | -| `UnfocusedFps` | `double` | `5.0` | Target frame rate when the window is unfocused | -| `IdleFps` | `double` | `10.0` | Target frame rate when the application is idle (no user input) | -| `NotVisibleFps` | `double` | `2.0` | Target frame rate when the window is not visible (minimized or hidden) | -| `EnableIdleDetection` | `bool` | `true` | Enables/disables idle detection based on user input | -| `IdleTimeoutSeconds` | `double` | `30.0` | Time in seconds without user input before considering the app idle | - -#### Example Usage - -```csharp -ImGuiApp.Start(new ImGuiAppConfig -{ - Title = "My Application", - OnRender = OnRender, - PerformanceSettings = new ImGuiAppPerformanceSettings - { - EnableThrottledRendering = true, - FocusedFps = 60.0, // Custom higher rate when focused - UnfocusedFps = 15.0, // Custom rate when unfocused - IdleFps = 2.0, // Custom very low rate when idle - NotVisibleFps = 1.0, // Custom ultra-low rate when minimized - EnableIdleDetection = true, - IdleTimeoutSeconds = 10.0 // Custom idle timeout - } - // PID controller uses optimized defaults: Kp=1.8, Ki=0.048, Kd=0.237 - // For fine-tuning, use Debug > Show Performance Monitor > Start Auto-Tuning -}); -``` - -This feature automatically: -- Uses a **PID controller** with optimized defaults for highly accurate frame rate targeting -- Combines **Thread.Sleep** with **spin-waiting** for sub-millisecond timing precision -- Disables **VSync** automatically to prevent interference with custom frame limiting -- Detects when the window loses/gains focus and visibility state (minimized/hidden) -- Tracks user input (keyboard, mouse movement, clicks, scrolling) for idle detection -- Evaluates all applicable throttling conditions and selects the lowest frame rate -- Saves significant CPU and GPU resources without affecting user experience -- Provides instant transitions between different performance states -- Uses conservative defaults: 30 FPS focused, 5 FPS unfocused, 10 FPS idle, 2 FPS not visible - -The **PID controller** learns from timing errors and adapts to your system's characteristics, providing much more accurate frame rate control than simple sleep-based methods. The throttling system uses a "lowest wins" approach - if multiple conditions apply (e.g., unfocused + idle), the lowest frame rate is automatically selected for maximum resource savings. - -### `FontAppearance` Class - -A utility class for applying font styles using a using statement. - -#### Constructors - -| Constructor | Parameters | Description | -|-------------|------------|-------------| -| `FontAppearance` | `string fontName` | Creates a font appearance with the named font at default size | -| `FontAppearance` | `float fontSize` | Creates a font appearance with the default font at the specified size | -| `FontAppearance` | `string fontName, float fontSize` | Creates a font appearance with the named font at the specified size | - -### `ImGuiAppWindowState` Class - -Represents the state of the application window. - -#### Properties - -| Name | Type | Description | -|------|------|-------------| -| `Size` | `Vector2` | The size of the window | -| `Pos` | `Vector2` | The position of the window | -| `LayoutState` | `WindowState` | The layout state of the window (Normal, Maximized, etc.) | - -## Debug Features - -ImGuiApp includes comprehensive debug logging capabilities to help troubleshoot crashes and performance issues: - -### Debug Logging - -The application automatically creates debug logs on the desktop (`ImGuiApp_Debug.log`) when issues occur. These logs include: -- Window initialization steps -- OpenGL context creation -- Font loading progress -- Error conditions and exceptions - -### Debug Menu - -When using the `OnAppMenu` callback, ImGuiApp automatically adds a Debug menu with options to: -- Show ImGui Demo Window -- Show ImGui Metrics Window -- Show Performance Monitor (real-time FPS graphs and throttling visualization) - -### Performance Monitoring - -The core library includes a built-in performance monitor accessible via the debug menu. It provides: -- Real-time FPS tracking and visualization -- Throttling state monitoring (focused/unfocused/idle/not visible) -- Performance testing tips and interactive guidance -- Historical performance data graphing - -Access it through: **Debug > Show Performance Monitor** - -## Demo Application - -Check out the included demo project to see a comprehensive working example: - -1. Clone or download the repository -2. Open the solution in Visual Studio (or run dotnet build) -3. Start the ImGuiAppDemo project to see a feature-rich ImGui application -4. Explore the different tabs: - - **Unicode & Emojis**: Test character rendering with extended Unicode support - - **Widgets & Layout**: Comprehensive ImGui widget demonstrations - - **Graphics & Plotting**: Custom drawing and data visualization examples - - **Nerd Font Icons**: Browse and test various icon sets and glyphs -5. Use the debug menu to access additional features: - - **Debug > Show Performance Monitor**: Real-time FPS graph showing PID controller performance with comprehensive auto-tuning capabilities - - **Debug > Show ImGui Demo**: Official ImGui demo window - - **Debug > Show ImGui Metrics**: ImGui internal metrics and debugging info - -The **Performance Monitor** includes: -- **Live FPS graphs** that visualize frame rate changes as you focus/unfocus the window, let it go idle, or minimize it -- **PID Controller diagnostics** showing real-time proportional, integral, and derivative values -- **Comprehensive Auto-Tuning** with 3-phase optimization (Coarse, Fine, Precision phases) -- **Performance metrics** including Average Error, Max Error, Stability, and composite Score -- **Interactive tuning controls** to start/stop optimization and view detailed results - -Perfect for seeing both the throttling system and PID controller work in real-time! - -## Contributing - -Contributions are welcome! Here's how you can help: - -1. Fork the repository -2. Create your feature branch (`git checkout -b feature/amazing-feature`) -3. Commit your changes (`git commit -m 'Add some amazing feature'`) -4. Push to the branch (`git push origin feature/amazing-feature`) -5. Open a Pull Request - -Please make sure to update tests as appropriate and adhere to the existing coding style. - -## License - -This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details. - -## Versioning - -Check the [CHANGELOG.md](CHANGELOG.md) for detailed release notes and version changes. - -## Acknowledgements - -- [Dear ImGui](https://github.com/ocornut/imgui) - The immediate mode GUI library -- [Hexa.NET.ImGui](https://github.com/HexaEngine/Hexa.NET.ImGui) - .NET bindings for Dear ImGui -- [Silk.NET](https://github.com/dotnet/Silk.NET) - .NET bindings for OpenGL and windowing -- All contributors and the .NET community for their support - -## Support - -If you encounter any issues or have questions, please [open an issue](https://github.com/ktsu-dev/ImGuiApp/issues). diff --git a/ImGui.App/Resources/NerdFont.ttf b/ImGui.App/Resources/NerdFont.ttf deleted file mode 100644 index 79a4b1f4d888185d28cd7b39345ddda5b47477da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2468976 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 z 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

    !<2JsdS?(>yG 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󥋠HAE^|Tah@KFNib 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

  • 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�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

    3e_-k> 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

    )jm!W8{YrtCYFjfV!xQZCx(#}j~I*j=Q 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

    ET=j8W2L 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

    +DeNe2ZiDtLZ$tq(f%}Y!mnS|`Sm6-S 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

    IbF00E~6^} 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 )90g|5^ISR-( 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

    F?34;yluaG_i8{q5?EZslGcUH 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≠eALY5TuPtvG%lyR|f9~_lgz}@D|9f)>W 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

    R*}vcp3RKBhjMh%U2s)OrEBAh2#q#z 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

    j}p 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

    A;q@JI?={D(I(zsl$lqYnU;%h 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

    @U#^mXs1Qkl@y&^fWCuJ~$YR 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

    ^u*X%ixPlawwap1tDJ| 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 z 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�o+4xa&L)lljk_ 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 -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace ktsu.ImGui.App.Resources -{ - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources - { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() - { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager - { - get - { - if (object.ReferenceEquals(resourceMan, null)) - { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ktsu.ImGui.App.Resources.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture - { - get - { - return resourceCulture; - } - set - { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] NerdFont - { - get - { - object obj = ResourceManager.GetObject("NerdFont", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] NotoEmoji - { - get - { - object obj = ResourceManager.GetObject("NotoEmoji", resourceCulture); - return ((byte[])(obj)); - } - } - } -} diff --git a/ImGui.App/Resources/Resources.resx b/ImGui.App/Resources/Resources.resx deleted file mode 100644 index efcfc8c..0000000 --- a/ImGui.App/Resources/Resources.resx +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - NerdFont.ttf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - - NotoEmoji.ttf;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 - - diff --git a/ImGui.App/UIScaler.cs b/ImGui.App/UIScaler.cs deleted file mode 100644 index 313b634..0000000 --- a/ImGui.App/UIScaler.cs +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App; - -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ScopedAction; - -/// -/// Class responsible for scaling UI elements in ImGui. -/// -public class UIScaler : ScopedAction -{ - /// - /// Initializes a new instance of the class. - /// Scales various ImGui style variables by the specified scale factor. - /// - /// The scale factor to apply to the UI elements. - public UIScaler(float scale) - { - ImGuiStylePtr style = ImGui.GetStyle(); - int numStyles = 0; - PushStyleAndCount(ImGuiStyleVar.CellPadding, style.CellPadding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.ChildBorderSize, style.ChildBorderSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.ChildRounding, style.ChildRounding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.DockingSeparatorSize, style.DockingSeparatorSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.FrameBorderSize, style.FrameBorderSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.FramePadding, style.FramePadding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.FrameRounding, style.FrameRounding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.GrabMinSize, style.GrabMinSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.GrabRounding, style.GrabRounding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.IndentSpacing, style.IndentSpacing * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.ItemInnerSpacing, style.ItemInnerSpacing * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.ItemSpacing, style.ItemSpacing * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.PopupBorderSize, style.PopupBorderSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.PopupRounding, style.PopupRounding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.ScrollbarRounding, style.ScrollbarRounding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.ScrollbarSize, style.ScrollbarSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.SeparatorTextBorderSize, style.SeparatorTextBorderSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.SeparatorTextPadding, style.SeparatorTextPadding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.TabRounding, style.TabRounding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.WindowBorderSize, style.WindowBorderSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.WindowMinSize, style.WindowMinSize * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.WindowPadding, style.WindowPadding * scale, ref numStyles); - PushStyleAndCount(ImGuiStyleVar.WindowRounding, style.WindowRounding * scale, ref numStyles); - - OnClose = () => ImGuiApp.Invoker.Invoke(() => ImGui.PopStyleVar(numStyles)); - } - - /// - /// Pushes a style variable and increments the style count. - /// - /// The style variable to push. - /// The value to set for the style variable. - /// The reference to the style count. - internal static void PushStyleAndCount(ImGuiStyleVar style, float value, ref int numStyles) - { - ImGuiApp.Invoker.Invoke(() => ImGui.PushStyleVar(style, value)); - ++numStyles; - } - - /// - /// Pushes a style variable and increments the style count. - /// - /// The style variable to push. - /// The value to set for the style variable. - /// The reference to the style count. - internal static void PushStyleAndCount(ImGuiStyleVar style, Vector2 value, ref int numStyles) - { - ImGuiApp.Invoker.Invoke(() => ImGui.PushStyleVar(style, value)); - ++numStyles; - } -} diff --git a/ImGui.Popups/CompatibilitySuppressions.xml b/ImGui.Popups/CompatibilitySuppressions.xml deleted file mode 100644 index 9bd50a2..0000000 --- a/ImGui.Popups/CompatibilitySuppressions.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - CP0001 - T:System.Diagnostics.CodeAnalysis.FeatureGuardAttribute - lib/net8.0/ktsu.ImGui.Popups.dll - lib/net9.0/ktsu.ImGui.Popups.dll - - - CP0001 - T:System.Diagnostics.CodeAnalysis.FeatureSwitchDefinitionAttribute - lib/net8.0/ktsu.ImGui.Popups.dll - lib/net9.0/ktsu.ImGui.Popups.dll - - - CP0001 - T:System.Diagnostics.DebuggerDisableUserUnhandledExceptionsAttribute - lib/net8.0/ktsu.ImGui.Popups.dll - lib/net9.0/ktsu.ImGui.Popups.dll - - - CP0001 - T:System.Runtime.CompilerServices.OverloadResolutionPriorityAttribute - lib/net8.0/ktsu.ImGui.Popups.dll - lib/net9.0/ktsu.ImGui.Popups.dll - - - CP0001 - T:System.Runtime.CompilerServices.ParamCollectionAttribute - lib/net8.0/ktsu.ImGui.Popups.dll - lib/net9.0/ktsu.ImGui.Popups.dll - - - CP0001 - T:System.Threading.Lock - lib/net8.0/ktsu.ImGui.Popups.dll - lib/net9.0/ktsu.ImGui.Popups.dll - - - CP0014 - M:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.get_UrlFormat:[T:System.Runtime.CompilerServices.CompilerGeneratedAttribute] - lib/net8.0/ktsu.ImGui.Popups.dll - lib/net9.0/ktsu.ImGui.Popups.dll - - - CP0014 - M:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.set_UrlFormat(System.String):[T:System.Runtime.CompilerServices.CompilerGeneratedAttribute] - lib/net8.0/ktsu.ImGui.Popups.dll - lib/net9.0/ktsu.ImGui.Popups.dll - - \ No newline at end of file diff --git a/ImGui.Popups/DESCRIPTION.md b/ImGui.Popups/DESCRIPTION.md deleted file mode 100644 index 93ac7bd..0000000 --- a/ImGui.Popups/DESCRIPTION.md +++ /dev/null @@ -1 +0,0 @@ -A library for custom popups using ImGui.NET. diff --git a/ImGui.Popups/FilesystemBrowser.cs b/ImGui.Popups/FilesystemBrowser.cs deleted file mode 100644 index e3ce9e4..0000000 --- a/ImGui.Popups/FilesystemBrowser.cs +++ /dev/null @@ -1,393 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Popups; - -using System; -using System.Collections.ObjectModel; -using System.IO; -using System.Linq; -using System.Numerics; -using System.Text.Json.Serialization; - -using Hexa.NET.ImGui; - -using ktsu.Semantics.Paths; -using ktsu.Semantics.Strings; -using ktsu.Extensions; -using Microsoft.Extensions.FileSystemGlobbing; -using System.Text; - -/// -/// Partial class containing various ImGui popup implementations. -/// -public partial class ImGuiPopups -{ - /// - /// Defines the mode of operation for the filesystem browser. - /// - public enum FilesystemBrowserMode - { - /// - /// Browser operates in file/directory open mode, allowing selection of existing items. - /// - Open, - - /// - /// Browser operates in save mode, allowing selection of existing items or input of new filenames. - /// - Save - } - - /// - /// Defines the target type for the filesystem browser. - /// - public enum FilesystemBrowserTarget - { - /// - /// Target is a file. - /// - File, - - /// - /// Target is a directory. - /// - Directory - } - - /// - /// A class for displaying a filesystem browser popup window. - /// - public class FilesystemBrowser - { - /// - /// Gets or sets the mode of the browser (Open or Save). - /// - private FilesystemBrowserMode BrowserMode { get; set; } - - /// - /// Gets or sets the target type of the browser (File or Directory). - /// - private FilesystemBrowserTarget BrowserTarget { get; set; } - - /// - /// Action to invoke when a file is chosen. - /// - private Action OnChooseFile { get; set; } = (f) => { }; - - /// - /// Action to invoke when a directory is chosen. - /// - private Action OnChooseDirectory { get; set; } = (d) => { }; - - /// - /// Gets or sets the current directory being displayed. - /// - [JsonInclude] - private AbsoluteDirectoryPath CurrentDirectory { get; set; } = Environment.CurrentDirectory.As(); - - /// - /// Collection of current contents (files and directories) in the current directory. - /// - private Collection CurrentContents { get; set; } = []; - - /// - /// The currently selected item. - /// - private IAbsolutePath ChosenItem { get; set; } = AbsolutePath.Create(""); - - /// - /// Collection of logical drives available. - /// - private Collection Drives { get; set; } = []; - - /// - /// The glob pattern used for filtering files. - /// - private string Glob { get; set; } = "*"; - - /// - /// Matcher used for file globbing. - /// - private Matcher Matcher { get; set; } = new(); - - /// - /// The filename entered by the user. - /// - private FileName FileName { get; set; } = new(); - - /// - /// The modal instance for displaying the browser popup. - /// - private Modal Modal { get; } = new(); - - /// - /// The popup message for displaying alerts. - /// - private MessageOK PopupMessageOK { get; } = new(); - - /// - /// Opens the file open dialog with the specified title and callback. - /// - /// The title of the dialog. - /// Callback invoked when a file is chosen. - /// Glob pattern for filtering files. - public void FileOpen(string title, Action onChooseFile, string glob = "*") => FileOpen(title, onChooseFile, customSize: Vector2.Zero, glob); - - /// - /// Opens the file open dialog with the specified title, callback, and custom size. - /// - /// The title of the dialog. - /// Callback invoked when a file is chosen. - /// Custom size of the dialog. - /// Glob pattern for filtering files. - public void FileOpen(string title, Action onChooseFile, Vector2 customSize, string glob = "*") => File(title, FilesystemBrowserMode.Open, onChooseFile, customSize, glob); - - /// - /// Opens the file save dialog with the specified title and callback. - /// - /// The title of the dialog. - /// Callback invoked when a file is chosen. - /// Glob pattern for filtering files. - public void FileSave(string title, Action onChooseFile, string glob = "*") => FileSave(title, onChooseFile, customSize: Vector2.Zero, glob); - - /// - /// Opens the file save dialog with the specified title, callback, and custom size. - /// - /// The title of the dialog. - /// Callback invoked when a file is chosen. - /// Custom size of the dialog. - /// Glob pattern for filtering files. - public void FileSave(string title, Action onChooseFile, Vector2 customSize, string glob = "*") => File(title, FilesystemBrowserMode.Save, onChooseFile, customSize, glob); - - /// - /// Opens the filesystem browser popup with the specified parameters. - /// - /// The title of the popup. - /// The mode of the browser (Open or Save). - /// Callback for when a file is chosen. - /// Custom size of the popup. - /// Glob pattern for filtering files. - private void File(string title, FilesystemBrowserMode mode, Action onChooseFile, Vector2 customSize, string glob) => OpenPopup(title, mode, FilesystemBrowserTarget.File, onChooseFile, (d) => { }, customSize, glob); - - /// - /// Opens the directory chooser dialog with the specified title and callback. - /// - /// The title of the dialog. - /// Callback invoked when a directory is chosen. - public void ChooseDirectory(string title, Action onChooseDirectory) => ChooseDirectory(title, onChooseDirectory, customSize: Vector2.Zero); - - /// - /// Opens the directory chooser dialog with the specified title, callback, and custom size. - /// - /// The title of the dialog. - /// Callback invoked when a directory is chosen. - /// Custom size of the dialog. - public void ChooseDirectory(string title, Action onChooseDirectory, Vector2 customSize) => OpenPopup(title, FilesystemBrowserMode.Open, FilesystemBrowserTarget.Directory, (d) => { }, onChooseDirectory, customSize, "*"); - - /// - /// Opens the filesystem browser popup with the specified parameters. - /// - /// The title of the popup. - /// The mode of the browser (Open or Save). - /// The target type (File or Directory). - /// Callback for when a file is chosen. - /// Callback for when a directory is chosen. - /// Custom size of the popup. - /// Glob pattern for filtering files. - private void OpenPopup(string title, FilesystemBrowserMode mode, FilesystemBrowserTarget target, Action onChooseFile, Action onChooseDirectory, Vector2 customSize, string glob) - { - FileName = new(); - BrowserMode = mode; - BrowserTarget = target; - OnChooseFile = onChooseFile; - OnChooseDirectory = onChooseDirectory; - Glob = glob; - Matcher = new(); - Matcher.AddInclude(Glob); - Drives.Clear(); - Environment.GetLogicalDrives().ForEach(Drives.Add); - RefreshContents(); - Modal.Open(title, ShowContent, customSize); - } - - /// - /// Displays the content of the filesystem browser popup. - /// - private void ShowContent() - { - if (Drives.Count != 0) - { - if (ImGui.BeginCombo("##Drives", Drives[0])) - { - StringBuilder currentDriveStringBuilder = new(); - currentDriveStringBuilder.Append(CurrentDirectory.Split(Path.VolumeSeparatorChar).Current); - currentDriveStringBuilder.Append(Path.VolumeSeparatorChar); - currentDriveStringBuilder.Append(Path.DirectorySeparatorChar); - string currentDrive = currentDriveStringBuilder.ToString(); - - foreach (string drive in Drives) - { - if (ImGui.Selectable(drive, drive == currentDrive)) - { - CurrentDirectory = drive.As(); - RefreshContents(); - } - } - - ImGui.EndCombo(); - } - } - - ImGui.TextUnformatted($"{CurrentDirectory}{Path.DirectorySeparatorChar}{Glob}"); - if (ImGui.BeginChild("FilesystemBrowser", new(500, 400), ImGuiChildFlags.None)) - { - if (ImGui.BeginTable(nameof(FilesystemBrowser), 1, ImGuiTableFlags.Borders)) - { - ImGui.TableSetupColumn("Path", ImGuiTableColumnFlags.WidthStretch, 40); - //ImGui.TableSetupColumn("Size", ImGuiTableColumnFlags.None, 3); - //ImGui.TableSetupColumn("Modified", ImGuiTableColumnFlags.None, 3); - ImGui.TableHeadersRow(); - - ImGuiSelectableFlags flags = ImGuiSelectableFlags.SpanAllColumns | ImGuiSelectableFlags.AllowDoubleClick | ImGuiSelectableFlags.NoAutoClosePopups; - ImGui.TableNextRow(); - ImGui.TableNextColumn(); - if (ImGui.Selectable("..", false, flags)) - { - if (ImGui.IsMouseDoubleClicked(0)) - { - string? newPath = Path.GetDirectoryName(CurrentDirectory.WeakString.Trim(Path.DirectorySeparatorChar)); - if (newPath is not null) - { - CurrentDirectory = newPath.As(); - RefreshContents(); - } - } - } - - foreach (IAbsolutePath? path in CurrentContents.OrderBy(p => p is not AbsoluteDirectoryPath).ThenBy(p => p).ToCollection()) - { - ImGui.TableNextRow(); - ImGui.TableNextColumn(); - AbsoluteDirectoryPath? directory = path as AbsoluteDirectoryPath; - AbsoluteFilePath? file = path as AbsoluteFilePath; - string displayPath = directory?.WeakString ?? file?.WeakString ?? string.Empty; - displayPath = displayPath.RemovePrefix(CurrentDirectory.WeakString).Trim(Path.DirectorySeparatorChar); - - if (directory is not null) - { - displayPath += Path.DirectorySeparatorChar; - } - - if (ImGui.Selectable(displayPath, ChosenItem == path, flags)) - { - if (directory is not null) - { - ChosenItem = directory; - if (ImGui.IsMouseDoubleClicked(0)) - { - CurrentDirectory = directory; - RefreshContents(); - } - } - else if (file is not null) - { - ChosenItem = file; - FileName = file.FileName; - if (ImGui.IsMouseDoubleClicked(0)) - { - ChooseItem(); - } - } - } - } - - ImGui.EndTable(); - } - } - - ImGui.EndChild(); - - if (BrowserMode == FilesystemBrowserMode.Save) - { - string fileName = FileName; - ImGui.InputText("##SaveAs", ref fileName, 256); - FileName = fileName.As(); - } - - string confirmText = BrowserMode switch - { - FilesystemBrowserMode.Open => "Open", - FilesystemBrowserMode.Save => "Save", - _ => "Choose" - }; - if (ImGui.Button(confirmText)) - { - ChooseItem(); - } - - ImGui.SameLine(); - if (ImGui.Button("Cancel")) - { - ImGui.CloseCurrentPopup(); - } - - PopupMessageOK.ShowIfOpen(); - } - - /// - /// Handles the selection of an item (file or directory) based on the current target. - /// - private void ChooseItem() - { - if (BrowserTarget == FilesystemBrowserTarget.File) - { - AbsoluteFilePath chosenFile = CurrentDirectory / FileName; - if (!Matcher.Match(FileName).HasMatches) - { - PopupMessageOK.Open("Invalid File Name", "The file name does not match the glob pattern."); - return; - } - - OnChooseFile(Path.GetFullPath(chosenFile).As()); - } - else if (BrowserTarget == FilesystemBrowserTarget.Directory && ChosenItem is AbsoluteDirectoryPath directory) - { - OnChooseDirectory(Path.GetFullPath(directory).As()); - } - - ImGui.CloseCurrentPopup(); - } - - /// - /// Refreshes the contents of the current directory based on the target and glob pattern. - /// - private void RefreshContents() - { - ChosenItem = AbsolutePath.Create(""); - CurrentContents.Clear(); - CurrentDirectory.GetContents().ForEach(p => - { - if (BrowserTarget == FilesystemBrowserTarget.File || (BrowserTarget == FilesystemBrowserTarget.Directory && p is AbsoluteDirectoryPath)) - { - if (p is not AbsolutePath absolutePath) - { - throw new InvalidOperationException("Path is not an absolute path."); - } - - if (absolutePath.IsDirectory || Matcher.Match(Path.GetFileName(absolutePath.WeakString)).HasMatches) - { - CurrentContents.Add(absolutePath); - } - } - }); - } - - /// - /// Shows the modal popup if it is open. - /// - /// True if the modal is open; otherwise, false. - public bool ShowIfOpen() => Modal.ShowIfOpen(); - } -} diff --git a/ImGui.Popups/ImGui.Popups.csproj b/ImGui.Popups/ImGui.Popups.csproj deleted file mode 100644 index 7b521c9..0000000 --- a/ImGui.Popups/ImGui.Popups.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - net8.0;net9.0 - - - - - - - - - - - - diff --git a/ImGui.Popups/Input.cs b/ImGui.Popups/Input.cs deleted file mode 100644 index f75a769..0000000 --- a/ImGui.Popups/Input.cs +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Popups; - -using System.Numerics; - -using Hexa.NET.ImGui; -using ktsu.CaseConverter; - -public partial class ImGuiPopups -{ - /// - /// Base class for a popup input window. - /// - /// The type of the input value. - /// The type of the derived class for CRTP. - public abstract class Input where TDerived : Input, new() - { - private TInput? cachedValue; - private Action OnConfirm { get; set; } = null!; - private string Label { get; set; } = string.Empty; - /// - /// Gets the modal instance used to display the popup input window. - /// - protected Modal Modal { get; } = new(); - - /// - /// Open the popup and set the title, label, and default value. - /// - /// The title of the popup window. - /// The label of the input field. - /// The default value of the input field. - /// A callback to handle the new input value. - public void Open(string title, string label, TInput defaultValue, Action onConfirm) => Open(title, label, defaultValue, onConfirm, customSize: Vector2.Zero); - - /// - /// Open the popup and set the title, label, and default value. - /// - /// The title of the popup window. - /// The label of the input field. - /// The default value of the input field. - /// A callback to handle the new input value. - /// Custom size of the popup. - public void Open(string title, string label, TInput defaultValue, Action onConfirm, Vector2 customSize) - { - Label = label; - OnConfirm = onConfirm; - cachedValue = defaultValue; - Modal.Open(title, ShowContent, customSize); - } - - /// - /// Show the content of the popup. - /// - private void ShowContent() - { - if (cachedValue is not null) - { - ImGui.TextUnformatted(Label); - ImGui.NewLine(); - - if (!Modal.WasOpen && !ImGui.IsItemFocused()) - { - ImGui.SetKeyboardFocusHere(); - } - - if (ShowEdit(ref cachedValue)) - { - OnConfirm(cachedValue); - ImGui.CloseCurrentPopup(); - } - - ImGui.SameLine(); - if (ImGui.Button($"OK###{Modal.Title.ToSnakeCase()}_OK")) - { - OnConfirm(cachedValue); - ImGui.CloseCurrentPopup(); - } - } - } - - /// - /// Show the input field for the derived class. - /// - /// The input value. - /// True if the input field is changed. - protected abstract bool ShowEdit(ref TInput value); - - /// - /// Show the modal if it is open. - /// - /// True if the modal is open. - public bool ShowIfOpen() => Modal.ShowIfOpen(); - } - - /// - /// A popup input window for strings. - /// - public class InputString : Input - { - /// - /// Show the input field for strings. - /// - /// The input value. - /// True if Enter is pressed. - protected override bool ShowEdit(ref string value) => ImGui.InputText($"###{Modal.Title.ToSnakeCase()}_INPUT", ref value, 100, ImGuiInputTextFlags.EnterReturnsTrue); - } - - /// - /// A popup input window for integers. - /// - public class InputInt : Input - { - /// - /// Show the input field for integers. - /// - /// The input value. - /// False - protected override bool ShowEdit(ref int value) - { - ImGui.InputInt($"###{Modal.Title.ToSnakeCase()}_INPUT", ref value); - return false; - } - } - - /// - /// A popup input window for floats. - /// - public class InputFloat : Input - { - /// - /// Show the input field for floats. - /// - /// The input value. - /// False - protected override bool ShowEdit(ref float value) - { - ImGui.InputFloat($"###{Modal.Title.ToSnakeCase()}_INPUT", ref value); - return false; - } - } -} diff --git a/ImGui.Popups/MessageOK.cs b/ImGui.Popups/MessageOK.cs deleted file mode 100644 index 87949fa..0000000 --- a/ImGui.Popups/MessageOK.cs +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Popups; - -using System.Numerics; - -public partial class ImGuiPopups -{ - /// - /// A class for displaying a prompt popup window. - /// - public class MessageOK : Prompt - { - /// - /// Open the popup and set the title and message. - /// - /// The title of the popup window. - /// The message to show. - public void Open(string title, string message) => Open(title, message, customSize: Vector2.Zero); - /// - /// Open the popup and set the title and message. - /// - /// The title of the popup window. - /// The message to show. - /// Custom size of the popup. - public void Open(string title, string message, Vector2 customSize) => Open(title, message, PromptTextLayoutType.Unformatted, customSize); - /// - /// Open the popup and set the title and message. - /// - /// The title of the popup window. - /// The message to show. - /// Which text layout method should be used. - /// Custom size of the popup. - public void Open(string title, string message, PromptTextLayoutType textLayoutType, Vector2 size) => Open(title, message, new() { { "OK", null } }, textLayoutType, size); - } -} diff --git a/ImGui.Popups/Modal.cs b/ImGui.Popups/Modal.cs deleted file mode 100644 index 8b03a64..0000000 --- a/ImGui.Popups/Modal.cs +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Popups; - -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.CaseConverter; - -public static partial class ImGuiPopups -{ - /// - /// Base class for a modal window. - /// - public class Modal - { - /// - /// Gets or sets the title of the modal window. - /// - internal string Title { get; set; } = string.Empty; - - /// - /// Determines whether the modal should open. - /// - private bool ShouldOpen { get; set; } - - /// - /// The delegate to invoke to show the content of the modal. - /// - private Action OnShowContent { get; set; } = () => { }; - - /// - /// Gets or sets the custom size of the popup. - /// - private Vector2 CustomSize { get; set; } = Vector2.Zero; - - /// - /// Gets a value indicating whether the modal was open. - /// - public bool WasOpen { get; private set; } - - /// - /// Gets the id of the modal window. - /// - /// The id of the modal window. - private string Name => $"{Title}###Modal_{Title.ToSnakeCase()}"; - - /// - /// Opens the modal and sets the title. - /// - /// The title of the modal window. - /// The delegate to invoke to show the content of the modal. - public void Open(string title, Action onShowContent) => Open(title, onShowContent, customSize: Vector2.Zero); - - /// - /// Opens the modal and sets the title with a custom size. - /// - /// The title of the modal window. - /// The delegate to invoke to show the content of the modal. - /// Custom size of the popup. - public void Open(string title, Action onShowContent, Vector2 customSize) - { - Title = title; - OnShowContent = onShowContent; - ShouldOpen = true; - CustomSize = customSize; - } - - /// - /// Shows the modal if it is open. - /// - /// True if the modal is open. - public bool ShowIfOpen() - { - if (ShouldOpen) - { - ShouldOpen = false; - ImGui.OpenPopup(Name); - } - - bool result = ImGui.IsPopupOpen(Name); - if (CustomSize != Vector2.Zero) - { - ImGui.SetNextWindowSize(CustomSize); - } - - if (ImGui.BeginPopupModal(Name, ref result, ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoSavedSettings)) - { - OnShowContent(); - - if (ImGui.IsKeyPressed(ImGuiKey.Escape)) - { - ImGui.CloseCurrentPopup(); - } - - ImGui.EndPopup(); - } - - WasOpen = result; - return result; - } - } -} diff --git a/ImGui.Popups/Prompt.cs b/ImGui.Popups/Prompt.cs deleted file mode 100644 index 35c2aa9..0000000 --- a/ImGui.Popups/Prompt.cs +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Popups; - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Numerics; - -using Hexa.NET.ImGui; - -/// -/// Contains classes for displaying various popup windows using ImGui. -/// -public static partial class ImGuiPopups -{ - /// - /// Defines the layout type for prompt text. - /// - public enum PromptTextLayoutType - { - /// - /// The text is displayed without any formatting. - /// - Unformatted, - - /// - /// The text is wrapped based on the popup's size. - /// - Wrapped - } - - /// - /// A class for displaying a prompt popup window. - /// - public class Prompt - { - /// - /// Gets the underlying modal instance. - /// - private Modal Modal { get; } = new(); - - /// - /// Gets or sets the label of the prompt. - /// - private string Label { get; set; } = string.Empty; - - /// - /// Gets or sets the dictionary of button labels and their corresponding actions. - /// - private Dictionary Buttons { get; set; } = []; - - /// - /// Gets or sets the text layout type for the prompt. - /// - private PromptTextLayoutType TextLayoutType { get; set; } - - /// - /// Opens the prompt popup with the specified title, label, and buttons. - /// - /// The title of the popup window. - /// The label of the input field. - /// The names and actions of the buttons. - public virtual void Open(string title, string label, Dictionary buttons) - => Open(title, label, buttons, customSize: Vector2.Zero); - - /// - /// Opens the prompt popup with the specified title, label, buttons, and custom size. - /// - /// The title of the popup window. - /// The label of the input field. - /// The names and actions of the buttons. - /// Custom size of the popup. - public virtual void Open(string title, string label, Dictionary buttons, Vector2 customSize) - => Open(title, label, buttons, textLayoutType: PromptTextLayoutType.Unformatted, customSize); - - /// - /// Opens the prompt popup with the specified parameters. - /// - /// The title of the popup window. - /// The label of the input field. - /// The names and actions of the buttons. - /// The layout type for the prompt text. - /// Custom size of the popup. - public void Open(string title, string label, Dictionary buttons, PromptTextLayoutType textLayoutType, Vector2 size) - { - // Wrapping text without a custom size will result in an incorrectly sized - // popup as the text will wrap based on the popup and the popup will size - // based on the text. - Debug.Assert((textLayoutType == PromptTextLayoutType.Unformatted) || (size != Vector2.Zero)); - - Label = label; - Buttons = buttons; - TextLayoutType = textLayoutType; - Modal.Open(title, ShowContent, size); - } - - /// - /// Displays the content of the prompt popup based on the text layout type. - /// - private void ShowContent() - { - switch (TextLayoutType) - { - case PromptTextLayoutType.Unformatted: - ImGui.TextUnformatted(Label); - break; - - case PromptTextLayoutType.Wrapped: - ImGui.TextWrapped(Label); - break; - - default: - throw new NotImplementedException(); - } - - ImGui.NewLine(); - - foreach ((string text, Action? action) in Buttons) - { - if (ImGui.Button(text)) - { - action?.Invoke(); - ImGui.CloseCurrentPopup(); - } - - ImGui.SameLine(); - } - } - - /// - /// Displays the modal if it is open. - /// - /// True if the modal is open; otherwise, false. - public bool ShowIfOpen() => Modal.ShowIfOpen(); - } -} diff --git a/ImGui.Popups/README.md b/ImGui.Popups/README.md deleted file mode 100644 index 2cfb5cd..0000000 --- a/ImGui.Popups/README.md +++ /dev/null @@ -1,251 +0,0 @@ -# ImGuiPopups - -[![Version](https://img.shields.io/badge/version-1.3.5-blue.svg)](VERSION.md) -[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE.md) - -A comprehensive library for custom popup windows and modal dialogs using ImGui.NET, providing a rich set of UI components for interactive applications. - -## Features - -### 🪟 Modal Windows -- **Modal**: Base modal window with customizable content and size -- **MessageOK**: Simple message dialog with OK button -- **Prompt**: Customizable prompt with multiple button options - -### 📝 Input Components -- **InputString**: Text input popup with validation -- **InputInt**: Integer input popup with numeric validation -- **InputFloat**: Floating-point input popup with numeric validation - -### 🔍 Selection Components -- **SearchableList**: Searchable dropdown list with filtering capabilities -- **FilesystemBrowser**: Advanced file/directory browser with: - - Open and Save modes - - File and Directory targeting - - Pattern filtering support - - Navigation breadcrumbs - -### ✨ Key Features -- **Responsive Design**: All popups adapt to content and custom sizing -- **Keyboard Navigation**: Full keyboard support with proper focus management -- **Validation**: Built-in input validation and error handling -- **Customizable**: Flexible styling and layout options -- **Type-Safe**: Generic components with strong typing - -## Installation - -### Package Manager Console -```powershell -Install-Package ktsu.ImGuiPopups -``` - -### .NET CLI -```bash -dotnet add package ktsu.ImGuiPopups -``` - -### PackageReference -```xml - -``` - -## Quick Start - -```csharp -using ktsu.ImGuiPopups; - -// Create popup instances (typically as class members) -private static readonly ImGuiPopups.MessageOK messageOK = new(); -private static readonly ImGuiPopups.InputString inputString = new(); -private static readonly ImGuiPopups.SearchableList searchableList = new(); - -// In your ImGui render loop -private void OnRender() -{ - // Show a simple message - if (ImGui.Button("Show Message")) - { - messageOK.Open("Information", "Hello, World!"); - } - - // Get text input from user - if (ImGui.Button("Get Input")) - { - inputString.Open("Enter Name", "Name:", "Default Name", - result => Console.WriteLine($"User entered: {result}")); - } - - // Show searchable selection - if (ImGui.Button("Select Item")) - { - var items = new[] { "Apple", "Banana", "Cherry", "Date" }; - searchableList.Open("Select Fruit", "Choose:", items, null, - item => item, // Text converter - selected => Console.WriteLine($"Selected: {selected}"), - Vector2.Zero); - } - - // Render all popups (call this once per frame) - messageOK.ShowIfOpen(); - inputString.ShowIfOpen(); - searchableList.ShowIfOpen(); -} -``` - -## Component Documentation - -### MessageOK -Simple message dialog with an OK button. - -```csharp -var messageOK = new ImGuiPopups.MessageOK(); -messageOK.Open("Title", "Your message here"); -``` - -### Input Components -Get validated input from users: - -```csharp -// String input -var inputString = new ImGuiPopups.InputString(); -inputString.Open("Enter Text", "Label:", "default", result => HandleString(result)); - -// Integer input -var inputInt = new ImGuiPopups.InputInt(); -inputInt.Open("Enter Number", "Value:", 42, result => HandleInt(result)); - -// Float input -var inputFloat = new ImGuiPopups.InputFloat(); -inputFloat.Open("Enter Float", "Value:", 3.14f, result => HandleFloat(result)); -``` - -### SearchableList -Searchable selection from a list of items: - -```csharp -var searchableList = new ImGuiPopups.SearchableList(); -searchableList.Open( - title: "Select Item", - label: "Choose an item:", - items: myItemList, - defaultItem: null, - getText: item => item.DisplayName, // How to display items - onConfirm: selected => HandleSelection(selected), - customSize: new Vector2(400, 300) -); -``` - -### FilesystemBrowser -Advanced file and directory browser: - -```csharp -var browser = new ImGuiPopups.FilesystemBrowser(); - -// Open file -browser.Open( - title: "Open File", - mode: FilesystemBrowserMode.Open, - target: FilesystemBrowserTarget.File, - startPath: Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), - onConfirm: path => OpenFile(path), - patterns: new[] { "*.txt", "*.md" } // Optional file filters -); - -// Save file -browser.Open( - title: "Save File", - mode: FilesystemBrowserMode.Save, - target: FilesystemBrowserTarget.File, - startPath: currentDirectory, - onConfirm: path => SaveFile(path) -); -``` - -### Custom Modal -Create custom modal dialogs: - -```csharp -var customModal = new ImGuiPopups.Modal(); -customModal.Open("Custom Dialog", () => { - ImGui.Text("Custom content here"); - if (ImGui.Button("Close")) - { - ImGui.CloseCurrentPopup(); - } -}, new Vector2(300, 200)); -``` - -## Advanced Usage - -### Custom Sizing -All popups support custom sizing: - -```csharp -// Fixed size -popup.Open("Title", "Content", new Vector2(400, 300)); - -// Auto-size (Vector2.Zero) -popup.Open("Title", "Content", Vector2.Zero); -``` - -### Text Layout Options -Prompts support different text layout modes: - -```csharp -var prompt = new ImGuiPopups.Prompt(); -prompt.Open("Title", "Long message text here...", - buttons: new() { { "OK", null }, { "Cancel", null } }, - textLayoutType: PromptTextLayoutType.Wrapped, // or Unformatted - size: new Vector2(400, 200) -); -``` - -### Validation and Error Handling -Input components provide built-in validation: - -```csharp -inputInt.Open("Enter Age", "Age (1-120):", 25, result => { - if (result < 1 || result > 120) - { - messageOK.Open("Error", "Age must be between 1 and 120"); - return; - } - ProcessAge(result); -}); -``` - -## Demo Application - -The repository includes a comprehensive demo application showcasing all components: - -```bash -git clone https://github.com/ktsu-dev/ImGuiPopups.git -cd ImGuiPopups -dotnet run --project ImGuiPopupsDemo -``` - -## Dependencies - -- [Hexa.NET.ImGui](https://www.nuget.org/packages/Hexa.NET.ImGui/) - ImGui.NET bindings -- [ktsu.Extensions](https://www.nuget.org/packages/ktsu.Extensions/) - Utility extensions -- [ktsu.CaseConverter](https://www.nuget.org/packages/ktsu.CaseConverter/) - String case conversion -- [ktsu.ScopedAction](https://www.nuget.org/packages/ktsu.ScopedAction/) - RAII-style actions -- [ktsu.StrongPaths](https://www.nuget.org/packages/ktsu.StrongPaths/) - Type-safe path handling -- [ktsu.TextFilter](https://www.nuget.org/packages/ktsu.TextFilter/) - Text filtering utilities -- [Microsoft.Extensions.FileSystemGlobbing](https://www.nuget.org/packages/Microsoft.Extensions.FileSystemGlobbing/) - File pattern matching - -## Contributing - -Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change. - -## License - -This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details. - -## Changelog - -See [CHANGELOG.md](CHANGELOG.md) for a detailed history of changes. - ---- - -**ktsu.dev** - Building tools for developers diff --git a/ImGui.Popups/SearchableList.cs b/ImGui.Popups/SearchableList.cs deleted file mode 100644 index b539f02..0000000 --- a/ImGui.Popups/SearchableList.cs +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Popups; - -using System; -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.CaseConverter; -using ktsu.TextFilter; - -public partial class ImGuiPopups -{ - /// - /// A popup window to allow the user to search and select an item from a list - /// - /// The type of the list elements - public class SearchableList where TItem : class - { - private TItem? cachedValue; - private TItem? selectedItem; - private string searchTerm = string.Empty; - private Action OnConfirm { get; set; } = null!; - private Func? GetText { get; set; } - private string Label { get; set; } = string.Empty; - private IEnumerable Items { get; set; } = []; - private Modal Modal { get; } = new(); - - /// - /// Open the popup and set the title, label, and default value. - /// - /// The title of the popup window. - /// The label of the input field. - /// /// The items to select from. - /// The default value of the input field. - /// A delegate to get the text representation of an item. - /// A callback to handle the new input value. - /// Custom size of the popup. - public void Open(string title, string label, IEnumerable items, TItem? defaultItem, Func? getText, Action onConfirm, Vector2 customSize) - { - searchTerm = string.Empty; - Label = label; - OnConfirm = onConfirm; - GetText = getText; - cachedValue = defaultItem; - Items = items; - Modal.Open(title, ShowContent, customSize); - } - - /// - /// Open the popup and set the title, label, and default value. - /// - /// The title of the popup window. - /// The label of the input field. - /// The items to select from. - /// The default value of the input field. - /// A delegate to get the text representation of an item. - /// A callback to handle the new input value. - public void Open(string title, string label, IEnumerable items, TItem? defaultItem, Func? getText, Action onConfirm) => Open(title, label, items, defaultItem, getText, onConfirm, Vector2.Zero); - - /// - /// Open the popup and set the title, label, and default value. - /// - /// The title of the popup window. - /// The label of the input field. - /// The items to select from. - /// A callback to handle the new input value. - public void Open(string title, string label, IEnumerable items, Action onConfirm) => Open(title, label, items, null, null, onConfirm); - - /// - /// Open the popup and set the title, label, and default value. - /// - /// The title of the popup window. - /// The label of the input field. - /// The items to select from. - /// A delegate to get the text representation of an item. - /// A callback to handle the new input value. - public void Open(string title, string label, IEnumerable items, Func getText, Action onConfirm) => Open(title, label, items, null, getText, onConfirm); - - /// - /// Show the content of the popup. - /// - private void ShowContent() - { - ImGui.TextUnformatted(Label); - ImGui.NewLine(); - if (!Modal.WasOpen && !ImGui.IsItemFocused()) - { - ImGui.SetKeyboardFocusHere(); - } - - if (ImGui.InputText("##Search", ref searchTerm, 255, ImGuiInputTextFlags.EnterReturnsTrue)) - { - TItem? confirmedItem = cachedValue ?? selectedItem; - if (confirmedItem is not null) - { - OnConfirm(confirmedItem); - ImGui.CloseCurrentPopup(); - } - } - - Dictionary itemLookup = Items.Select(item => (item, itemString: item.ToString() ?? string.Empty)) - .Where(x => !string.IsNullOrEmpty(x.itemString)) - .DistinctBy(x => x.itemString) - .ToDictionary(x => x.itemString, x => x.item); - - IEnumerable sortedStrings = TextFilter.Rank(itemLookup.Keys, searchTerm); - - if (ImGui.BeginListBox("##List")) - { - selectedItem = null; - foreach (string itemString in sortedStrings) - { - if (!itemLookup.TryGetValue(itemString, out TItem? item)) - { - continue; - } - - //if nothing has been explicitly selected, select the first item which will be the best match - if (selectedItem is null && cachedValue is null) - { - selectedItem = item; - } - - string displayText = GetText?.Invoke(item) ?? item.ToString() ?? string.Empty; - - if (ImGui.Selectable(displayText, item == (cachedValue ?? selectedItem))) - { - cachedValue = item; - } - } - - ImGui.EndListBox(); - } - - if (ImGui.Button($"OK###{Modal.Title.ToSnakeCase()}_OK")) - { - TItem? confirmedItem = cachedValue ?? selectedItem; - if (confirmedItem is not null) - { - OnConfirm(confirmedItem); - ImGui.CloseCurrentPopup(); - } - } - - ImGui.SameLine(); - if (ImGui.Button($"Cancel###{Modal.Title.ToSnakeCase()}_Cancel")) - { - ImGui.CloseCurrentPopup(); - } - } - - /// - /// Show the modal if it is open. - /// - /// True if the modal is open. - public bool ShowIfOpen() => Modal.ShowIfOpen(); - } -} diff --git a/ImGui.Styler/Alignment.cs b/ImGui.Styler/Alignment.cs deleted file mode 100644 index 869518a..0000000 --- a/ImGui.Styler/Alignment.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ScopedAction; - -/// -/// Provides methods for aligning content within a container. -/// -public static class Alignment -{ - /// - /// Centers the content within the available content region. - /// - /// The size of the content to be centered. - public class Center(Vector2 contentSize) : CenterWithin(contentSize, new Vector2(ImGui.GetContentRegionAvail().X, contentSize.Y)) - { - } - - /// - /// Centers the content within a specified container size. - /// - public class CenterWithin : ScopedAction - { - /// - /// Initializes a new instance of the class. - /// - /// The size of the content to be centered. - /// The size of the container within which the content will be centered. - public CenterWithin(Vector2 contentSize, Vector2 containerSize) - { - // We need to manipulate the cursor a lot to support the layout of this widget and - // integrate with the layout methods of ImGui (eg. SameLine). Because contentDrawDelegate - // is called after the Dummy() it means that CursorPosPrevLine is set to an unexpected value - // so we "abuse" setting the cursor and calling NewLine to force CursorPosPrevLine to be what we need. - - // - Move the cursor to the top left of the content - // - Move the cursor to the top right of the container - // - Make a dummy with the height of the container so that the cursor will advance to - // a new line after the container size, while support ImGui.NewLine() to work as expected - Vector2 cursorContainerTopLeft = ImGui.GetCursorScreenPos(); - Vector2 clippedsize = new(Math.Min(contentSize.X, containerSize.X), Math.Min(contentSize.Y, containerSize.Y)); - Vector2 offset = (containerSize - clippedsize) / 2; - Vector2 cursorContentStart = cursorContainerTopLeft + offset; - ImGui.SetCursorScreenPos(cursorContentStart); - - OnClose = () => - { - ImGui.SetCursorScreenPos(cursorContainerTopLeft + new Vector2(containerSize.X, 0f)); - ImGui.Dummy(new Vector2(0, containerSize.Y)); - }; - } - } -} diff --git a/ImGui.Styler/Button.cs b/ImGui.Styler/Button.cs deleted file mode 100644 index eb14ce3..0000000 --- a/ImGui.Styler/Button.cs +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System.Numerics; - -using Hexa.NET.ImGui; - -/// -/// Provides functionality for creating and aligning buttons in ImGui. -/// -public static class Button -{ - /// - /// Contains methods for aligning buttons. - /// - public static class Alignment - { - /// - /// Aligns the button text to the left. - /// - /// A scoped button alignment with left alignment. - public static ScopedButtonAlignment Left() => new(new(0f, 0.5f)); - - /// - /// Aligns the button text to the center. - /// - /// A scoped button alignment with center alignment. - public static ScopedButtonAlignment Center() => new(new(0.5f, 0.5f)); - - /// - /// Represents a scoped button alignment. - /// - /// The alignment vector. - public class ScopedButtonAlignment(Vector2 vector) : ScopedStyleVar(ImGuiStyleVar.ButtonTextAlign, vector) - { - } - } -} diff --git a/ImGui.Styler/Color.cs b/ImGui.Styler/Color.cs deleted file mode 100644 index 6c95655..0000000 --- a/ImGui.Styler/Color.cs +++ /dev/null @@ -1,437 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System.Globalization; -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ThemeProvider; - -/// -/// Provides methods for creating and manipulating colors in ImGui. -/// -public static class Color -{ - /// - /// Represents the optimal text contrast ratio for accessibility. - /// - public const float OptimalTextContrastRatio = 4.5f; - - #region Color Creation Methods - - /// - /// Converts a hexadecimal color string to an object. - /// - /// The hexadecimal color string in the format #RRGGBB or #RRGGBBAA. - /// An object representing the color. - /// Thrown when the is null. - /// Thrown when the is not in the correct format. - public static ImColor FromHex(string hex) - { - ArgumentNullException.ThrowIfNull(hex, nameof(hex)); - - if (hex.StartsWith('#')) - { - hex = hex[1..]; - } - - if (hex.Length == 6) - { - hex += "FF"; - } - - if (hex.Length != 8) - { - throw new ArgumentException("Hex color must be in the format #RRGGBB or #RRGGBBAA", nameof(hex)); - } - - byte r = byte.Parse(hex.AsSpan(0, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture); - byte g = byte.Parse(hex.AsSpan(2, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture); - byte b = byte.Parse(hex.AsSpan(4, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture); - byte a = byte.Parse(hex.AsSpan(6, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture); - - return FromRGBA(r, g, b, a); - } - - /// - /// Creates an object from RGB byte values. - /// - /// The red component value (0-255). - /// The green component value (0-255). - /// The blue component value (0-255). - /// An object representing the color. - public static ImColor FromRGB(byte r, byte g, byte b) => new() - { - Value = new Vector4(r / 255f, g / 255f, b / 255f, 1f) - }; - - /// - /// Creates an object from RGBA byte values. - /// - /// The red component value (0-255). - /// The green component value (0-255). - /// The blue component value (0-255). - /// The alpha component value (0-255). - /// An object representing the color. - public static ImColor FromRGBA(byte r, byte g, byte b, byte a) => new() - { - Value = new Vector4(r / 255f, g / 255f, b / 255f, a / 255f) - }; - - /// - /// Creates an object from RGB float values. - /// - /// The red component value (0-1). - /// The green component value (0-1). - /// The blue component value (0-1). - /// An object representing the color. - public static ImColor FromRGB(float r, float g, float b) => new() - { - Value = new Vector4(r, g, b, 1f) - }; - - /// - /// Creates an object from RGBA float values. - /// - /// The red component value (0-1). - /// The green component value (0-1). - /// The blue component value (0-1). - /// The alpha component value (0-1). - /// An object representing the color. - public static ImColor FromRGBA(float r, float g, float b, float a) => new() - { - Value = new Vector4(r, g, b, a) - }; - - /// - /// Creates an object from a . - /// - /// The vector containing RGB values. - /// An object representing the color. - public static ImColor FromVector(Vector3 vector) => new() - { - Value = new Vector4(vector.X, vector.Y, vector.Z, 1f) - }; - - /// - /// Creates an object from a . - /// - /// The vector containing RGBA values. - /// An object representing the color. - public static ImColor FromVector(Vector4 vector) => new() - { - Value = vector - }; - - /// - /// Creates an object from HSL values. - /// - /// The vector containing HSL values. - /// An object representing the color. - public static ImColor FromHSL(Vector3 vector) => FromHSLA(vector.X, vector.Y, vector.Z, 1); - - /// - /// Creates an object from HSLA values. - /// - /// The vector containing HSLA values. - /// An object representing the color. - public static ImColor FromHSLA(Vector4 vector) => FromHSLA(vector.X, vector.Y, vector.Z, vector.W); - - /// - /// Creates an object from HSL values. - /// - /// The hue component value (0-1). - /// The saturation component value (0-1). - /// The lightness component value (0-1). - /// An object representing the color. - public static ImColor FromHSL(float h, float s, float l) => FromHSLA(h, s, l, 1); - - /// - /// Creates an object from HSLA values. - /// - /// The hue component value (0-1). - /// The saturation component value (0-1). - /// The lightness component value (0-1). - /// The alpha component value (0-1). - /// An object representing the color. - public static ImColor FromHSLA(float h, float s, float l, float a) - { - float r, g, b; - - if (s == 0) - { - r = g = b = l; - } - else - { - float q = l < 0.5f ? l * (1f + s) : l + s - (l * s); - float p = (2f * l) - q; - r = HueToRGB(p, q, h + (1f / 3f)); - g = HueToRGB(p, q, h); - b = HueToRGB(p, q, h - (1f / 3f)); - } - - return FromRGBA(r, g, b, a); - } - - /// - /// Converts a PerceptualColor from ThemeProvider to an ImColor. - /// - /// The PerceptualColor to convert. - /// An ImColor representing the same color. - public static ImColor FromPerceptualColor(PerceptualColor color) - { - RgbColor rgb = color.RgbValue; - return FromRGBA(rgb.R, rgb.G, rgb.B, 1f); - } - - #endregion - - #region Private Helper Methods - - /// - /// Converts a hue to an RGB component. - /// - /// The first parameter for the conversion. - /// The second parameter for the conversion. - /// The hue value. - /// The RGB component value. - [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0046:Convert to conditional expression", Justification = "Clarity over brevity")] - private static float HueToRGB(float p, float q, float t) - { - if (t < 0) - { - t += 1; - } - - if (t > 1) - { - t -= 1; - } - - if (t < 1f / 6f) - { - return p + ((q - p) * 6f * t); - } - - if (t < 1f / 2f) - { - return q; - } - - if (t < 2f / 3f) - { - return p + ((q - p) * ((2f / 3f) - t) * 6f); - } - - return p; - } - - /// - /// Gets a semantic color from the current theme, or a fallback color if no theme is applied. - /// This should only be used for semantic UI meanings. - /// - /// The semantic meaning of the color. - /// The priority level for the color. - /// The fallback color to use if no theme is applied. - /// An ImColor from the current theme or the fallback color. - private static ImColor GetSemanticColor(SemanticMeaning meaning, Priority priority, ImColor fallbackColor) - { - // Check if a theme is currently applied - if (Theme.CurrentTheme is not null) - { - try - { - // Create a semantic color request - SemanticColorRequest request = new(meaning, priority); - - // Use SemanticColorMapper to get the color from the current theme - IReadOnlyDictionary colorMapping = SemanticColorMapper.MapColors([request], Theme.CurrentTheme.CreateInstance()); - - if (colorMapping.TryGetValue(request, out PerceptualColor perceptualColor)) - { - return FromPerceptualColor(perceptualColor); - } - } - catch (ArgumentException) - { - // Invalid arguments for theme mapping - } - catch (InvalidOperationException) - { - // Theme operation failed - } - } - - // Fall back to hardcoded color if no theme is applied or mapping fails - return fallbackColor; - } - - /// - /// Gets a color from the current theme that is closest to the desired default color, - /// or returns the fallback color if no theme is applied. - /// This preserves the intended hue while adapting to the theme's color scheme. - /// - /// The default hardcoded color to find a close match for. - /// An ImColor that's close to the fallback color within the current theme, or the fallback color itself. - private static ImColor GetThemeColor(ImColor fallbackColor) - { - // Check if a theme is currently applied and get its complete palette - IReadOnlyDictionary? completePalette = Theme.GetCurrentThemeCompletePalette(); - if (completePalette is not null) - { - try - { - // Convert the fallback color to PerceptualColor for comparison - RgbColor fallbackRgb = new(fallbackColor.Value.X, fallbackColor.Value.Y, fallbackColor.Value.Z); - PerceptualColor targetColor = new(fallbackRgb); - - PerceptualColor? closestColor = null; - float closestDistance = float.MaxValue; - - // Search through the complete palette to find the closest match - // This is much more efficient than nested loops through semantic mappings - foreach (PerceptualColor color in completePalette.Values) - { - float distance = targetColor.SemanticDistanceTo(color); - if (distance < closestDistance) - { - closestDistance = distance; - closestColor = color; - } - } - - // If we found a reasonably close color, use it - if (closestColor.HasValue && closestDistance < 0.3f) // Reasonable similarity threshold - { - return FromPerceptualColor(closestColor.Value); - } - } - catch (ArgumentException) - { - // Invalid arguments for theme color matching - } - catch (InvalidOperationException) - { - // Theme operation failed - } - } - - // Fall back to hardcoded color if no theme is applied or no close match found - return fallbackColor; - } - - #endregion - - /// - /// Comprehensive color palette with organized categories. - /// Semantic colors are sourced from the current theme's semantic meanings. - /// Other colors try to find close matches in the theme while preserving intended hues. - /// - public static class Palette - { - /// - /// Basic primary and secondary colors. - /// These try to find close colors in the current theme while preserving the intended hue. - /// - public static class Basic - { -#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member - public static ImColor Red => GetThemeColor(FromHex("#ff4a49")); - public static ImColor Green => GetThemeColor(FromHex("#49ff4a")); - public static ImColor Blue => GetThemeColor(FromHex("#49a3ff")); - public static ImColor Yellow => GetThemeColor(FromHex("#ecff49")); - public static ImColor Cyan => GetThemeColor(FromHex("#49feff")); - public static ImColor Magenta => GetThemeColor(FromHex("#ff49fe")); - public static ImColor Orange => GetThemeColor(FromHex("#ffa549")); - public static ImColor Pink => GetThemeColor(FromHex("#ff49a3")); - public static ImColor Lime => GetThemeColor(FromHex("#a3ff49")); - public static ImColor Purple => GetThemeColor(FromHex("#c949ff")); -#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member - } - - /// - /// Neutral colors for backgrounds, borders, and subtle elements. - /// These try to find close colors in the current theme while preserving the intended lightness. - /// - public static class Neutral - { -#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member - public static ImColor White => GetThemeColor(FromHex("#ffffff")); - public static ImColor Black => GetThemeColor(FromHex("#000000")); - public static ImColor Gray => GetThemeColor(FromHex("#808080")); - public static ImColor LightGray => GetThemeColor(FromHex("#c0c0c0")); - public static ImColor DarkGray => GetThemeColor(FromHex("#404040")); - public static ImColor Transparent => FromHex("#00000000"); // Always transparent -#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member - } - - /// - /// Semantic colors for UI states and meanings. - /// These are mapped directly to their semantic meanings in the current theme. - /// - public static class Semantic - { -#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member - public static ImColor Error => GetSemanticColor(SemanticMeaning.Error, Priority.High, Basic.Red); - public static ImColor Warning => GetSemanticColor(SemanticMeaning.Warning, Priority.High, Basic.Orange); - public static ImColor Success => GetSemanticColor(SemanticMeaning.Success, Priority.High, Basic.Green); - public static ImColor Info => GetSemanticColor(SemanticMeaning.Information, Priority.High, Basic.Cyan); - public static ImColor Primary => GetSemanticColor(SemanticMeaning.Primary, Priority.High, Basic.Blue); - public static ImColor Secondary => GetSemanticColor(SemanticMeaning.Alternate, Priority.High, Basic.Purple); -#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member - } - - /// - /// Natural and earthy colors. - /// These try to find close colors in the current theme while preserving the intended natural hue. - /// - public static class Natural - { -#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member - public static ImColor Brown => GetThemeColor(FromRGB(165, 42, 42)); - public static ImColor Olive => GetThemeColor(FromRGB(128, 128, 0)); - public static ImColor Maroon => GetThemeColor(FromRGB(128, 0, 0)); - public static ImColor Navy => GetThemeColor(FromRGB(0, 0, 128)); - public static ImColor Teal => GetThemeColor(FromRGB(0, 128, 128)); - public static ImColor Indigo => GetThemeColor(FromRGB(75, 0, 130)); -#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member - } - - /// - /// Vibrant and colorful shades. - /// These try to find close colors in the current theme while preserving the intended vibrant character. - /// - public static class Vibrant - { -#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member - public static ImColor Coral => GetThemeColor(FromRGB(255, 127, 80)); - public static ImColor Salmon => GetThemeColor(FromRGB(250, 128, 114)); - public static ImColor Turquoise => GetThemeColor(FromRGB(64, 224, 208)); - public static ImColor Violet => GetThemeColor(FromRGB(238, 130, 238)); - public static ImColor Gold => GetThemeColor(FromRGB(255, 215, 0)); - public static ImColor Silver => GetThemeColor(FromRGB(192, 192, 192)); -#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member - } - - /// - /// Soft, pastel colors for gentle UIs. - /// These try to find close colors in the current theme while preserving the intended pastel softness. - /// - public static class Pastel - { -#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member - public static ImColor Beige => GetThemeColor(FromRGB(245, 245, 220)); - public static ImColor Peach => GetThemeColor(FromRGB(255, 218, 185)); - public static ImColor Mint => GetThemeColor(FromRGB(189, 252, 201)); - public static ImColor Lavender => GetThemeColor(FromRGB(230, 230, 250)); - public static ImColor Khaki => GetThemeColor(FromRGB(240, 230, 140)); - public static ImColor Plum => GetThemeColor(FromRGB(221, 160, 221)); -#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member - } - } -} diff --git a/ImGui.Styler/ColorExtensions.cs b/ImGui.Styler/ColorExtensions.cs deleted file mode 100644 index 35e3009..0000000 --- a/ImGui.Styler/ColorExtensions.cs +++ /dev/null @@ -1,329 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System.Numerics; -using Hexa.NET.ImGui; - -/// -/// Extension methods for color manipulation and analysis. -/// -public static class ColorExtensions -{ - /// - /// Desaturates the color by a specified amount. - /// - /// The original color. - /// The amount to desaturate (0-1). - /// A new object with the adjusted saturation. - public static ImColor DesaturateBy(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.Y = Math.Clamp(hsla.Y - amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Saturates the color by a specified amount. - /// - /// The original color. - /// The amount to saturate (0-1). - /// A new object with the adjusted saturation. - public static ImColor SaturateBy(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.Y = Math.Clamp(hsla.Y + amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Sets the saturation of the color to a specified amount. - /// - /// The original color. - /// The new saturation value (0-1). - /// A new object with the adjusted saturation. - public static ImColor WithSaturation(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.Y = Math.Clamp(amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Multiplies the saturation of the color by a specified amount. - /// - /// The original color. - /// The factor to multiply the saturation by. - /// A new object with the adjusted saturation. - public static ImColor MultiplySaturation(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.Y = Math.Clamp(hsla.Y * amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Offsets the hue of the color by a specified amount. - /// - /// The original color. - /// The amount to offset the hue by (0-1). - /// A new object with the adjusted hue. - public static ImColor OffsetHue(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.X = (1f + (hsla.X + amount)) % 1f; - return Color.FromHSLA(hsla); - } - - /// - /// Lightens the color by a specified amount. - /// - /// The original color. - /// The amount to lighten the color by (0-1). - /// A new object with the adjusted lightness. - public static ImColor LightenBy(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.Z = Math.Clamp(hsla.Z + amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Darkens the color by a specified amount. - /// - /// The original color. - /// The amount to darken the color by (0-1). - /// A new object with the adjusted lightness. - public static ImColor DarkenBy(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.Z = Math.Clamp(hsla.Z - amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Sets the luminance of the color to a specified amount. - /// - /// The original color. - /// The new luminance value (0-1). - /// A new object with the adjusted luminance. - public static ImColor WithLuminance(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.Z = Math.Clamp(amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Multiplies the luminance of the color by a specified amount. - /// - /// The original color. - /// The factor to multiply the luminance by. - /// A new object with the adjusted luminance. - public static ImColor MultiplyLuminance(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.Z = Math.Clamp(hsla.Z * amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Sets the alpha of the color to a specified amount. - /// - /// The original color. - /// The new alpha value (0-1). - /// A new object with the adjusted alpha. - public static ImColor WithAlpha(this ImColor color, float amount) - { - Vector4 hsla = color.ToHSLA(); - hsla.W = Math.Clamp(amount, 0, 1); - return Color.FromHSLA(hsla); - } - - /// - /// Converts the color to grayscale. - /// - /// The original color. - /// A new object in grayscale. - public static ImColor ToGrayscale(this ImColor color) => color.WithSaturation(0); - - /// - /// Converts the color to HSLA (Hue, Saturation, Lightness, Alpha) format. - /// - /// The original color. - /// A representing the color in HSLA format. - [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0045:Convert to conditional expression", Justification = "Clarity over brevity")] - public static Vector4 ToHSLA(this ImColor color) - { - float r = color.Value.X; - float g = color.Value.Y; - float b = color.Value.Z; - float a = color.Value.W; - - float max = Math.Max(r, Math.Max(g, b)); - float min = Math.Min(r, Math.Min(g, b)); - float h, s, l = (max + min) / 2f; - - if (max == min) - { - h = s = 0; - } - else - { - float d = max - min; - s = l > 0.5f ? d / (2f - max - min) : d / (max + min); - if (max == r) - { - h = (g - b) / d; - } - else if (max == g) - { - h = ((b - r) / d) + 2; - } - else - { - h = ((r - g) / d) + 4; - } - - h /= 6; - if (h < 0) - { - h += 1; - } - } - - return new Vector4(h, s, l, a); - } - - /// - /// Gets the relative luminance of the color. - /// - /// The original color. - /// The relative luminance of the color. - public static float GetRelativeLuminance(this ImColor color) => - (color.Value.X * 0.2126f) + (color.Value.Y * 0.7152f) + (color.Value.Z * 0.0722f); - - /// - /// Calculates the contrast ratio of the color over a background color. - /// - /// The original color. - /// The background color. - /// The contrast ratio of the color over the background color. - public static float GetContrastRatioOver(this ImColor color, ImColor background) - { - float relativeLuminance = color.GetRelativeLuminance(); - float backgroundRelativeLuminance = background.GetRelativeLuminance(); - - // Ensure lighter color is in numerator for proper contrast ratio calculation - float lighter = Math.Max(relativeLuminance, backgroundRelativeLuminance); - float darker = Math.Min(relativeLuminance, backgroundRelativeLuminance); - - return (lighter + 0.05f) / (darker + 0.05f); - } - - /// - /// Calculates the optimal contrasting color for the given color. - /// - /// The original color. - /// A new object representing the optimal contrasting color. - public static ImColor CalculateOptimalContrastingColor(this ImColor color) - { - // Try pure white and pure black first as they often provide the best contrast - ImColor white = Color.FromRGBA(1f, 1f, 1f, 1f); - ImColor black = Color.FromRGBA(0f, 0f, 0f, 1f); - - float whiteContrast = white.GetContrastRatioOver(color); - float blackContrast = black.GetContrastRatioOver(color); - - // If either pure white or black provides sufficient contrast, use the better one - if (whiteContrast >= Color.OptimalTextContrastRatio || blackContrast >= Color.OptimalTextContrastRatio) - { - return whiteContrast > blackContrast ? white : black; - } - - // Otherwise, search for optimal luminance - float bestLuminance = 0; - float bestContrast = 0; - int steps = 256; - - for (int i = 0; i < steps; i++) - { - float l = i / (steps - 1f); - ImColor candidateColor = color.WithLuminance(l); - float contrast = candidateColor.GetContrastRatioOver(color); - - if (contrast > bestContrast) - { - bestContrast = contrast; - bestLuminance = l; - } - } - - return color.WithLuminance(bestLuminance); - } - - /// - /// Adjusts the background color to provide sufficient contrast for the given text color. - /// - /// The background color to adjust. - /// The text color that needs to be readable. - /// The target contrast ratio. If not specified, uses the optimal text contrast ratio. - /// A new object representing the adjusted background color. - public static ImColor AdjustForSufficientContrast(this ImColor backgroundColor, ImColor textColor, float? targetContrastRatio = null) - { - float targetRatio = targetContrastRatio ?? Color.OptimalTextContrastRatio; - float currentContrast = textColor.GetContrastRatioOver(backgroundColor); - - // If contrast is already sufficient, return the original color - if (currentContrast >= targetRatio) - { - return backgroundColor; - } - - // Search for optimal luminance that provides the target contrast - float bestLuminance = backgroundColor.ToHSLA().Z; - float bestContrast = currentContrast; - int steps = 256; - - // Try different luminance values to find one that provides sufficient contrast - for (int i = 0; i < steps; i++) - { - float l = i / (steps - 1f); - ImColor candidateBackground = backgroundColor.WithLuminance(l); - float contrast = textColor.GetContrastRatioOver(candidateBackground); - - // If we found sufficient contrast, prefer the luminance closest to original - if (contrast >= targetRatio) - { - float luminanceDifference = Math.Abs(l - backgroundColor.ToHSLA().Z); - float currentBestDifference = Math.Abs(bestLuminance - backgroundColor.ToHSLA().Z); - - if (contrast > bestContrast || - (contrast >= targetRatio && luminanceDifference < currentBestDifference)) - { - bestContrast = contrast; - bestLuminance = l; - } - } - } - - return backgroundColor.WithLuminance(bestLuminance); - } - - /// - /// Calculates the color distance between two colors using Euclidean distance in RGB space. - /// - /// The first color. - /// The second color. - /// The color distance between the two colors (0.0 to ~1.73). - public static float GetColorDistance(this ImColor color1, ImColor color2) - { - float deltaR = color1.Value.X - color2.Value.X; - float deltaG = color1.Value.Y - color2.Value.Y; - float deltaB = color1.Value.Z - color2.Value.Z; - - return (float)Math.Sqrt((deltaR * deltaR) + (deltaG * deltaG) + (deltaB * deltaB)); - } -} diff --git a/ImGui.Styler/CompatibilitySuppressions.xml b/ImGui.Styler/CompatibilitySuppressions.xml deleted file mode 100644 index c54eb32..0000000 --- a/ImGui.Styler/CompatibilitySuppressions.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - CP0001 - T:System.Diagnostics.CodeAnalysis.FeatureGuardAttribute - lib/net8.0/ktsu.ImGui.Styler.dll - lib/net9.0/ktsu.ImGui.Styler.dll - - - CP0001 - T:System.Diagnostics.CodeAnalysis.FeatureSwitchDefinitionAttribute - lib/net8.0/ktsu.ImGui.Styler.dll - lib/net9.0/ktsu.ImGui.Styler.dll - - - CP0001 - T:System.Diagnostics.DebuggerDisableUserUnhandledExceptionsAttribute - lib/net8.0/ktsu.ImGui.Styler.dll - lib/net9.0/ktsu.ImGui.Styler.dll - - - CP0001 - T:System.Runtime.CompilerServices.OverloadResolutionPriorityAttribute - lib/net8.0/ktsu.ImGui.Styler.dll - lib/net9.0/ktsu.ImGui.Styler.dll - - - CP0001 - T:System.Runtime.CompilerServices.ParamCollectionAttribute - lib/net8.0/ktsu.ImGui.Styler.dll - lib/net9.0/ktsu.ImGui.Styler.dll - - - CP0001 - T:System.Threading.Lock - lib/net8.0/ktsu.ImGui.Styler.dll - lib/net9.0/ktsu.ImGui.Styler.dll - - - CP0014 - M:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.get_UrlFormat:[T:System.Runtime.CompilerServices.CompilerGeneratedAttribute] - lib/net8.0/ktsu.ImGui.Styler.dll - lib/net9.0/ktsu.ImGui.Styler.dll - - - CP0014 - M:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.set_UrlFormat(System.String):[T:System.Runtime.CompilerServices.CompilerGeneratedAttribute] - lib/net8.0/ktsu.ImGui.Styler.dll - lib/net9.0/ktsu.ImGui.Styler.dll - - \ No newline at end of file diff --git a/ImGui.Styler/DESCRIPTION.md b/ImGui.Styler/DESCRIPTION.md deleted file mode 100644 index fe9a195..0000000 --- a/ImGui.Styler/DESCRIPTION.md +++ /dev/null @@ -1 +0,0 @@ -A library for expressively styling ImGui.NET interfaces. diff --git a/ImGui.Styler/ImGui.Styler.csproj b/ImGui.Styler/ImGui.Styler.csproj deleted file mode 100644 index b0b090e..0000000 --- a/ImGui.Styler/ImGui.Styler.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - true - net8.0;net9.0; - - - - - - - - - - diff --git a/ImGui.Styler/Indent.cs b/ImGui.Styler/Indent.cs deleted file mode 100644 index 0909b39..0000000 --- a/ImGui.Styler/Indent.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using Hexa.NET.ImGui; - -using ktsu.ScopedAction; - -/// -/// Provides methods to create scoped indents for ImGui. -/// -public static class Indent -{ - /// - /// Creates a scoped indent with the default width. - /// - /// A new instance of . - public static ScopedIndent ByDefault() => new(); - - /// - /// Creates a scoped indent with a specified width. - /// - /// The width of the indent. - /// A new instance of . - public static ScopedIndentBy By(float width) => new(width); - - /// - /// Represents a scoped indent action. - /// - public class ScopedIndent : ScopedAction - { - /// - /// Initializes a new instance of the class. - /// - public ScopedIndent() : base(ImGui.Indent, ImGui.Unindent) { } - } - - /// - /// Represents a scoped indent action with a specified width. - /// - public class ScopedIndentBy : ScopedStyleVar - { - /// - /// Initializes a new instance of the class with a specified width. - /// - /// The width of the indent. - public ScopedIndentBy(float width) : base(ImGuiStyleVar.IndentSpacing, width) - { - ImGui.Indent(width); - Action? onClose = OnClose; - OnClose = () => - { - ImGui.Unindent(width); - onClose?.Invoke(); - }; - } - } -} diff --git a/ImGui.Styler/README.md b/ImGui.Styler/README.md deleted file mode 100644 index 1e729a9..0000000 --- a/ImGui.Styler/README.md +++ /dev/null @@ -1,350 +0,0 @@ -# ImGuiStyler 🎨 - -[![Version](https://img.shields.io/badge/version-1.3.10-blue.svg)](VERSION.md) -[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE.md) - -**A powerful, expressive styling library for ImGui.NET interfaces** that simplifies theme management, provides scoped styling utilities, and offers advanced color manipulation with accessibility features. - -## ✨ Features - -### 🎨 **Advanced Theme System** -- **50+ Built-in Themes**: Comprehensive collection including Catppuccin, Dracula, Gruvbox, Tokyo Night, Nord, and many more -- **Interactive Theme Browser**: Visual theme selection with live preview and categorization -- **Semantic Theme Support**: Leverages `ktsu.ThemeProvider` for consistent, semantic color theming -- **Scoped Theme Application**: Apply themes to specific UI sections without affecting the global style - -### 🎯 **Precise Alignment Tools** -- **Automatic Content Centering**: Center any content within containers or available regions -- **Flexible Container Alignment**: Align content within custom-sized containers -- **Layout Integration**: Seamlessly works with ImGui's existing layout system - -### 🌈 **Advanced Color Management** -- **Hex Color Support**: Direct conversion from hex strings to ImGui colors -- **Accessibility-First**: Automatic contrast calculation and optimal text color selection -- **Color Manipulation**: Lighten, darken, and adjust colors programmatically -- **Scoped Color Application**: Apply colors to specific UI elements without side effects - -### 🔧 **Scoped Styling System** -- **Style Variables**: Apply temporary style modifications with automatic cleanup -- **Text Colors**: Scoped text color changes with proper restoration -- **Theme Colors**: Apply theme-based colors to specific UI sections -- **Memory Safe**: Automatic resource management and style restoration - -## 📦 Installation - -Add ImGuiStyler to your project via NuGet: - -```xml - -``` - -Or via Package Manager Console: -```powershell -Install-Package ktsu.ImGuiStyler -``` - -## 🚀 Quick Start - -```csharp -using ktsu.ImGuiStyler; -using Hexa.NET.ImGui; - -// Apply a global theme -Theme.Apply("TokyoNight"); - -// Use scoped styling for specific elements -using (new ScopedColor(ImGuiCol.Text, Color.FromHex("#ff6b6b"))) -{ - ImGui.Text("This text is red!"); -} - -// Center content automatically -using (new Alignment.Center(ImGui.CalcTextSize("Centered!"))) -{ - ImGui.Text("Centered!"); -} -``` - -## 📚 Comprehensive Usage Guide - -### 🎨 Theme Management - -#### Applying Global Themes -```csharp -// Apply any of the 50+ built-in themes -Theme.Apply("Catppuccin.Mocha"); -Theme.Apply("Gruvbox.Dark"); -Theme.Apply("Tokyo Night"); - -// Get current theme information -string? currentTheme = Theme.CurrentThemeName; -bool isCurrentThemeDark = Theme.IsCurrentThemeDark; - -// Reset to default ImGui theme -Theme.Reset(); -``` - -#### Interactive Theme Browser -```csharp -// Show the theme browser modal -if (ImGui.Button("Choose Theme")) -{ - Theme.ShowThemeSelector("Select a Theme"); -} - -// Render the theme selector (call this in your main render loop) -if (Theme.RenderThemeSelector()) -{ - Console.WriteLine($"Theme changed to: {Theme.CurrentThemeName}"); -} -``` - -#### Scoped Theme Application -```csharp -using (new ScopedTheme("Dracula")) -{ - ImGui.Text("This text uses Dracula theme"); - ImGui.Button("Themed button"); - - using (new ScopedTheme("Nord")) - { - ImGui.Text("Nested Nord theme"); - } - // Automatically reverts to Dracula -} -// Automatically reverts to previous theme -``` - -### 🌈 Color Management - -#### Creating Colors -```csharp -// From hex strings -ImColor red = Color.FromHex("#ff0000"); -ImColor blueWithAlpha = Color.FromHex("#0066ffcc"); - -// From RGB values -ImColor green = Color.FromRGB(0, 255, 0); -ImColor customColor = Color.FromRGBA(255, 128, 64, 200); - -// From HSV -ImColor rainbow = Color.FromHSV(0.83f, 1.0f, 1.0f); // Purple -``` - -#### Color Manipulation -```csharp -ImColor baseColor = Color.FromHex("#3498db"); - -// Adjust brightness -ImColor lighter = Color.Lighten(baseColor, 0.3f); -ImColor darker = Color.Darken(baseColor, 0.2f); - -// Accessibility-focused text colors -ImColor optimalText = Color.GetOptimalTextColor(baseColor); -ImColor contrastText = Color.GetContrastingTextColor(baseColor); -``` - -#### Scoped Color Application -```csharp -// Scoped text color -using (new ScopedTextColor(Color.FromHex("#e74c3c"))) -{ - ImGui.Text("Red text"); -} - -// Scoped UI element color -using (new ScopedColor(ImGuiCol.Button, Color.FromHex("#2ecc71"))) -{ - ImGui.Button("Green button"); -} - -// Multiple scoped colors -using (new ScopedColor(ImGuiCol.Button, Color.FromHex("#9b59b6"))) -using (new ScopedColor(ImGuiCol.ButtonHovered, Color.FromHex("#8e44ad"))) -using (new ScopedColor(ImGuiCol.ButtonActive, Color.FromHex("#71368a"))) -{ - ImGui.Button("Fully styled button"); -} -``` - -### 🎯 Alignment and Layout - -#### Content Centering -```csharp -// Center text -string text = "Perfectly centered!"; -using (new Alignment.Center(ImGui.CalcTextSize(text))) -{ - ImGui.Text(text); -} - -// Center buttons -using (new Alignment.Center(new Vector2(120, 30))) -{ - ImGui.Button("Centered Button", new Vector2(120, 30)); -} -``` - -#### Custom Container Alignment -```csharp -Vector2 containerSize = new(400, 200); -Vector2 contentSize = new(100, 50); - -// Center content within a specific container -using (new Alignment.CenterWithin(contentSize, containerSize)) -{ - ImGui.Button("Centered in Container", contentSize); -} -``` - -### 🔧 Advanced Styling - -#### Scoped Style Variables -```csharp -// Rounded buttons -using (new ScopedStyleVar(ImGuiStyleVar.FrameRounding, 8.0f)) -{ - ImGui.Button("Rounded Button"); -} - -// Multiple style modifications -using (new ScopedStyleVar(ImGuiStyleVar.FrameRounding, 12.0f)) -using (new ScopedStyleVar(ImGuiStyleVar.FramePadding, new Vector2(20, 10))) -using (new ScopedStyleVar(ImGuiStyleVar.ItemSpacing, new Vector2(10, 8))) -{ - ImGui.Button("Highly Styled Button"); - ImGui.Button("Another Styled Button"); -} -``` - -#### Theme-Based Styling -```csharp -// Use semantic colors from current theme -using (new ScopedThemeColor(Color.Primary)) -{ - ImGui.Text("Primary theme color"); -} - -using (new ScopedThemeColor(Color.Secondary)) -{ - ImGui.Button("Secondary theme button"); -} -``` - -## 🎨 Available Themes - -ImGuiStyler includes **50+ carefully crafted themes** across multiple families: - -### 🌙 Dark Themes -- **Catppuccin**: Mocha, Macchiato, Frappe -- **Tokyo Night**: Classic, Storm -- **Gruvbox**: Dark, Dark Hard, Dark Soft -- **Dracula**: Classic vampire theme -- **Nord**: Arctic, frost-inspired theme -- **Nightfox**: Carbonfox, Nightfox, Terafox -- **OneDark**: Popular dark theme -- **Kanagawa**: Wave, Dragon variants -- **Everforest**: Dark, Dark Hard, Dark Soft - -### ☀️ Light Themes -- **Catppuccin**: Latte -- **Tokyo Night**: Day -- **Gruvbox**: Light, Light Hard, Light Soft -- **Nord**: Light variant -- **Nightfox**: Dawnfox, Dayfox -- **PaperColor**: Light -- **Everforest**: Light, Light Hard, Light Soft -- **VSCode**: Light theme - -### 🎨 Specialty Themes -- **Monokai**: Classic editor theme -- **Nightfly**: Smooth dark theme -- **VSCode**: Dark theme recreation - -## 🛠️ API Reference - -### Theme Class -- `Theme.Apply(string themeName)` - Apply a global theme -- `Theme.Apply(ISemanticTheme theme)` - Apply a semantic theme -- `Theme.Reset()` - Reset to default ImGui theme -- `Theme.ShowThemeSelector(string title)` - Show theme browser modal -- `Theme.RenderThemeSelector()` - Render theme browser (returns true if theme changed) -- `Theme.AllThemes` - Get all available themes -- `Theme.Families` - Get all theme families -- `Theme.CurrentThemeName` - Get current theme name -- `Theme.IsCurrentThemeDark` - Check if current theme is dark - -### Color Class -- `Color.FromHex(string hex)` - Create color from hex string -- `Color.FromRGB(int r, int g, int b)` - Create color from RGB -- `Color.FromRGBA(int r, int g, int b, int a)` - Create color from RGBA -- `Color.GetOptimalTextColor(ImColor background)` - Get accessible text color -- `Color.Lighten(ImColor color, float amount)` - Lighten color -- `Color.Darken(ImColor color, float amount)` - Darken color - -### Alignment Classes -- `new Alignment.Center(Vector2 contentSize)` - Center in available region -- `new Alignment.CenterWithin(Vector2 contentSize, Vector2 containerSize)` - Center in container - -### Scoped Classes -- `new ScopedColor(ImGuiCol col, ImColor color)` - Scoped color application -- `new ScopedTextColor(ImColor color)` - Scoped text color -- `new ScopedStyleVar(ImGuiStyleVar var, float value)` - Scoped style variable -- `new ScopedTheme(string themeName)` - Scoped theme application -- `new ScopedThemeColor(Color semanticColor)` - Scoped semantic color - -## 🎯 Demo Application - -The included demo application showcases all features: - -```bash -cd ImGuiStylerDemo -dotnet run -``` - -Features demonstrated: -- Interactive theme browser with live preview -- All 50+ themes with family categorization -- Scoped styling examples -- Color manipulation demos -- Alignment showcases -- Accessibility features - -## 🤝 Contributing - -We welcome contributions! Please see our contributing guidelines: - -1. **Fork** the repository -2. **Create** a feature branch (`git checkout -b feature/amazing-feature`) -3. **Commit** your changes (`git commit -m 'Add amazing feature'`) -4. **Push** to the branch (`git push origin feature/amazing-feature`) -5. **Open** a Pull Request - -### Development Setup -```bash -git clone https://github.com/ktsu-dev/ImGuiStyler.git -cd ImGuiStyler -dotnet restore -dotnet build -``` - -## 📄 License - -This project is licensed under the **MIT License** - see the [LICENSE.md](LICENSE.md) file for details. - -## 🙏 Acknowledgments - -- **[ImGui.NET](https://github.com/mellinoe/ImGui.NET)** - .NET bindings for Dear ImGui -- **[Hexa.NET.ImGui](https://github.com/HexaEngine/Hexa.NET.ImGui)** - Modern ImGui bindings -- **Theme Inspirations**: Catppuccin, Tokyo Night, Gruvbox, and other amazing color schemes -- **Community Contributors** - Thank you for your themes, bug reports, and improvements! - -## 🔗 Related Projects - -- **[ktsu.ThemeProvider](https://github.com/ktsu-dev/ThemeProvider)** - Semantic theming foundation -- **[ktsu.ImGuiPopups](https://github.com/ktsu-dev/ImGuiPopups)** - Modal and popup utilities -- **[ktsu.Extensions](https://github.com/ktsu-dev/Extensions)** - Utility extensions - ---- - -**Made with ❤️ by the ktsu.dev team** diff --git a/ImGui.Styler/ScopedColor.cs b/ImGui.Styler/ScopedColor.cs deleted file mode 100644 index f9d452c..0000000 --- a/ImGui.Styler/ScopedColor.cs +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using Hexa.NET.ImGui; - -using ktsu.ScopedAction; - -/// -/// Represents a scoped color change in ImGui. -/// -/// -/// This class ensures that the color change is reverted when the scope ends. -/// -public class ScopedColor : ScopedAction -{ - /// - /// Initializes a new instance of the class with a specified target and color. - /// - /// The ImGui color target to change. - /// The color to apply to the target. - public ScopedColor(ImGuiCol target, ImColor color) : base( - onOpen: () => ImGui.PushStyleColor(target, color.Value), - onClose: ImGui.PopStyleColor) - { - } - - /// - /// Initializes a new instance of the class with a specified color for the button. - /// - /// The color to apply to the button. - public ScopedColor(ImColor color) - { - ImGui.PushStyleColor(ImGuiCol.Button, color.Value); - OnClose = ImGui.PopStyleColor; - } -} diff --git a/ImGui.Styler/ScopedStyleVar.cs b/ImGui.Styler/ScopedStyleVar.cs deleted file mode 100644 index 0f63a93..0000000 --- a/ImGui.Styler/ScopedStyleVar.cs +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ScopedAction; - -/// -/// Represents a scoped style variable for ImGui. This class ensures that the style variable is popped when disposed. -/// -public class ScopedStyleVar : ScopedAction -{ - /// - /// Initializes a new instance of the class with a vector value. - /// - /// The style variable to be pushed. - /// The vector value to be applied to the style variable. - public ScopedStyleVar(ImGuiStyleVar target, Vector2 vector) - { - ImGui.PushStyleVar(target, vector); - OnClose = ImGui.PopStyleVar; - } - - /// - /// Initializes a new instance of the class with a scalar value. - /// - /// The style variable to be pushed. - /// The scalar value to be applied to the style variable. - public ScopedStyleVar(ImGuiStyleVar target, float scalar) - { - ImGui.PushStyleVar(target, scalar); - OnClose = ImGui.PopStyleVar; - } -} diff --git a/ImGui.Styler/ScopedTextColor.cs b/ImGui.Styler/ScopedTextColor.cs deleted file mode 100644 index 9682faf..0000000 --- a/ImGui.Styler/ScopedTextColor.cs +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; -using Hexa.NET.ImGui; - -/// -/// Represents a scoped text color change in ImGui. -/// -/// The color to apply to the text. -public class ScopedTextColor(ImColor color) : ScopedColor(ImGuiCol.Text, color) -{ -} diff --git a/ImGui.Styler/ScopedTheme.cs b/ImGui.Styler/ScopedTheme.cs deleted file mode 100644 index 9c3f6a5..0000000 --- a/ImGui.Styler/ScopedTheme.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System.Collections.Concurrent; -using System.Numerics; -using Hexa.NET.ImGui; -using ktsu.ScopedAction; -using ktsu.ThemeProvider; - -/// -/// Represents a scoped action that applies a complete semantic theme to ImGui elements. -/// This provides semantic theme-based styling that automatically reverts when disposed. -/// -public class ScopedTheme : ScopedAction -{ - /// - /// Cache for storing computed color mappings per theme to avoid repeated computation. - /// - private static readonly ConcurrentDictionary> colorMappingCache = new(); - - /// - /// Initializes a new instance of the class. - /// - /// The semantic theme to apply. - public ScopedTheme(ISemanticTheme theme) - { - ArgumentNullException.ThrowIfNull(theme); - - // Create a cache key based on the theme type name (assumes one theme per type) - string cacheKey = theme.GetType().FullName ?? theme.GetType().Name; - - // Get the color mapping from cache or compute it - IReadOnlyDictionary colorMapping = colorMappingCache.GetOrAdd(cacheKey, _ => Theme.GetColorMapping(theme)); - - int numStyles = 0; - - // Apply all mapped colors using PushStyleAndCount - foreach ((ImGuiCol imguiCol, Vector4 color) in colorMapping) - { - PushStyleAndCount(imguiCol, color, ref numStyles); - } - - OnClose = () => ImGui.PopStyleColor(numStyles); - } - - /// - /// Clears the color mapping cache. This can be useful if themes have been modified - /// or to free memory if many different themes have been used. - /// - public static void ClearCache() => colorMappingCache.Clear(); - - private static void PushStyleAndCount(ImGuiCol style, Vector4 color, ref int numStyles) - { - ImGui.PushStyleColor(style, color); - ++numStyles; - } -} diff --git a/ImGui.Styler/ScopedThemeColor.cs b/ImGui.Styler/ScopedThemeColor.cs deleted file mode 100644 index c93ff60..0000000 --- a/ImGui.Styler/ScopedThemeColor.cs +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using Hexa.NET.ImGui; -using ktsu.ScopedAction; - -/// -/// Represents a scoped action that applies a theme color to ImGui elements. -/// This provides a simple color-based theming that automatically reverts when disposed. -/// -public class ScopedThemeColor : ScopedAction -{ - /// - /// Initializes a new instance of the class. - /// - /// The base color to apply to the theme. - /// Whether the theme should be enabled or disabled. - public ScopedThemeColor(ImColor baseColor, bool enabled) - { - // Simple color adjustments for basic theming - ImColor primaryColor = enabled ? baseColor : baseColor.MultiplySaturation(0.3f); - ImColor hoveredColor = primaryColor.MultiplyLuminance(1.2f); - ImColor activeColor = primaryColor.MultiplyLuminance(0.8f); - ImColor textColor = primaryColor.CalculateOptimalContrastingColor(); - ImColor backgroundColor = primaryColor.MultiplyLuminance(0.1f).MultiplySaturation(0.1f); - - int numStyles = 0; - PushStyleAndCount(ImGuiCol.Text, textColor, ref numStyles); - PushStyleAndCount(ImGuiCol.TextSelectedBg, primaryColor, ref numStyles); - PushStyleAndCount(ImGuiCol.TextDisabled, textColor.MultiplySaturation(0.5f), ref numStyles); - PushStyleAndCount(ImGuiCol.Button, primaryColor, ref numStyles); - PushStyleAndCount(ImGuiCol.ButtonActive, activeColor, ref numStyles); - PushStyleAndCount(ImGuiCol.ButtonHovered, hoveredColor, ref numStyles); - PushStyleAndCount(ImGuiCol.CheckMark, textColor, ref numStyles); - PushStyleAndCount(ImGuiCol.Header, primaryColor, ref numStyles); - PushStyleAndCount(ImGuiCol.HeaderActive, activeColor, ref numStyles); - PushStyleAndCount(ImGuiCol.HeaderHovered, hoveredColor, ref numStyles); - PushStyleAndCount(ImGuiCol.SliderGrab, primaryColor, ref numStyles); - PushStyleAndCount(ImGuiCol.SliderGrabActive, activeColor, ref numStyles); - PushStyleAndCount(ImGuiCol.Tab, primaryColor, ref numStyles); - PushStyleAndCount(ImGuiCol.TabSelected, activeColor, ref numStyles); - PushStyleAndCount(ImGuiCol.TabHovered, hoveredColor, ref numStyles); - PushStyleAndCount(ImGuiCol.FrameBg, primaryColor, ref numStyles); - PushStyleAndCount(ImGuiCol.FrameBgActive, activeColor, ref numStyles); - PushStyleAndCount(ImGuiCol.FrameBgHovered, hoveredColor, ref numStyles); - PushStyleAndCount(ImGuiCol.WindowBg, backgroundColor, ref numStyles); - PushStyleAndCount(ImGuiCol.ChildBg, backgroundColor, ref numStyles); - PushStyleAndCount(ImGuiCol.PopupBg, backgroundColor, ref numStyles); - - OnClose = () => ImGui.PopStyleColor(numStyles); - } - - private static void PushStyleAndCount(ImGuiCol style, ImColor color, ref int numStyles) - { - ImGui.PushStyleColor(style, color.Value); - ++numStyles; - } -} diff --git a/ImGui.Styler/Text.cs b/ImGui.Styler/Text.cs deleted file mode 100644 index 7545696..0000000 --- a/ImGui.Styler/Text.cs +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; -using Hexa.NET.ImGui; - -/// -/// Provides functionality for managing text in ImGui. -/// -public static partial class Text -{ - /// - /// Provides functionality for managing text colors in ImGui. - /// - public static partial class Color - { - /// - /// Contains predefined color definitions for text. - /// - public static class Definitions - { - /// - /// Gets or sets the normal text color. - /// - public static ImColor Normal { get; set; } = Styler.Color.Palette.Neutral.White; - - /// - /// Gets or sets the error text color. - /// - public static ImColor Error { get; set; } = Styler.Color.Palette.Basic.Red; - - /// - /// Gets or sets the warning text color. - /// - public static ImColor Warning { get; set; } = Styler.Color.Palette.Basic.Yellow; - - /// - /// Gets or sets the info text color. - /// - public static ImColor Info { get; set; } = Styler.Color.Palette.Basic.Cyan; - - /// - /// Gets or sets the success text color. - /// - public static ImColor Success { get; set; } = Styler.Color.Palette.Basic.Green; - } - - /// - /// Applies the normal text color within a scoped block. - /// - /// A instance that reverts the color when disposed. - public static ScopedTextColor Normal() => new(Definitions.Normal); - - /// - /// Applies the error text color within a scoped block. - /// - /// A instance that reverts the color when disposed. - public static ScopedTextColor Error() => new(Definitions.Error); - - /// - /// Applies the warning text color within a scoped block. - /// - /// A instance that reverts the color when disposed. - public static ScopedTextColor Warning() => new(Definitions.Warning); - - /// - /// Applies the info text color within a scoped block. - /// - /// A instance that reverts the color when disposed. - public static ScopedTextColor Info() => new(Definitions.Info); - - /// - /// Applies the success text color within a scoped block. - /// - /// A instance that reverts the color when disposed. - public static ScopedTextColor Success() => new(Definitions.Success); - } -} diff --git a/ImGui.Styler/Theme.cs b/ImGui.Styler/Theme.cs deleted file mode 100644 index c63ff93..0000000 --- a/ImGui.Styler/Theme.cs +++ /dev/null @@ -1,1304 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System.Collections.Immutable; -using System.Collections.ObjectModel; -using System.Numerics; -using Hexa.NET.ImGui; -using ktsu.ThemeProvider; -using ktsu.ThemeProvider.ImGui; - -/// -/// Provides methods and properties to manage and apply themes for ImGui elements using ThemeProvider. -/// -public static class Theme -{ - private static readonly ImGuiPaletteMapper paletteMapper = new(); - private static string? currentThemeName; - - // Cache for complete palettes to avoid recalculating them every frame - private static readonly Dictionary> paletteCache = []; - private static readonly Lock paletteCacheLock = new(); - - // ThemeBrowser modal instance - private static readonly ThemeBrowser themeBrowser = new(); - - #region Theme Application - - /// - /// Applies a semantic theme to ImGui using ThemeProvider's color mapping system. - /// - /// The semantic theme to apply. - public static void Apply(ISemanticTheme theme) - { - ArgumentNullException.ThrowIfNull(theme); - - // Map the theme to ImGui colors - IReadOnlyDictionary colorMapping = paletteMapper.MapTheme(theme); - - // Apply all colors to ImGui - unsafe - { - ImGuiStylePtr style = ImGui.GetStyle(); - foreach ((ImGuiCol imguiCol, Vector4 color) in colorMapping) - { - style.Colors[(int)imguiCol] = color; - } - } - } - - /// - /// Gets the color mapping for a semantic theme without applying it. - /// This is useful for temporary theme application via scoped actions. - /// - /// The semantic theme to get the color mapping for. - /// A dictionary mapping ImGui colors to their theme-based values. - public static IReadOnlyDictionary GetColorMapping(ISemanticTheme theme) - { - ArgumentNullException.ThrowIfNull(theme); - return paletteMapper.MapTheme(theme); - } - - /// - /// Applies a theme by name using ThemeRegistry. - /// - /// The name of the theme to apply. - /// True if the theme was found and applied, false otherwise. - public static bool Apply(string themeName) - { - ThemeRegistry.ThemeInfo? themeInfo = ThemeRegistry.FindTheme(themeName); - if (themeInfo is null) - { - return false; - } - - Apply(themeInfo.CreateInstance()); - currentThemeName = themeName; - - // Clear palette cache when theme changes - ClearPaletteCache(); - return true; - } - - /// - /// Resets ImGui to default styling with no theme applied. - /// - public static void ResetToDefault() - { - // Use ImGui's built-in classic color scheme to restore proper defaults - ImGui.StyleColorsDark(); - currentThemeName = null; - - // Clear palette cache when resetting theme - ClearPaletteCache(); - } - - #endregion - - #region Current Theme Tracking - - /// - /// Gets or sets the name of the currently selected theme. - /// Setting this will apply the theme if it exists, or reset to default if set to null. - /// - public static string? CurrentThemeName - { - get => currentThemeName; - set - { - if (value is null) - { - ResetToDefault(); - } - else if (Apply(value)) - { - currentThemeName = value; - } - } - } - - /// - /// Gets the ThemeInfo for the currently selected theme, if any. - /// - public static ThemeRegistry.ThemeInfo? CurrentTheme => - currentThemeName is not null ? FindTheme(currentThemeName) : null; - - #endregion - - #region Theme Menu Rendering - - /// - /// Renders a theme selection submenu for use in an application's main menu bar. - /// - /// The label for the theme submenu (default: "Theme") - /// True if a theme was selected and changed, false otherwise. - public static bool RenderMenu(string menuLabel = "Theme") - { - bool themeChanged = false; - - if (ImGui.BeginMenu(menuLabel)) - { - // Reset option at the top - bool isReset = currentThemeName is null; - if (ImGui.MenuItem("Reset to Default", "", isReset)) - { - if (!isReset) - { - ResetToDefault(); - themeChanged = true; - } - } - - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip("Reset to default ImGui styling with no theme applied"); - } - - ImGui.Separator(); - - // Group themes by family for better organization - IOrderedEnumerable>> themesByFamily = ThemesByFamily.OrderBy(kvp => kvp.Key); - - foreach ((string family, IReadOnlyList themes) in themesByFamily) - { - if (themes.Count == 1) - { - // Single theme - render directly with color swatches - ThemeRegistry.ThemeInfo theme = themes[0]; - bool isSelected = currentThemeName == theme.Name; - - if (RenderThemeMenuItemWithDialogSwatches(theme, theme.Name, isSelected)) - { - if (!isSelected && Apply(theme.Name)) - { - themeChanged = true; - } - } - } - else - { - themeChanged |= RenderFamilySubmenu(family, themes); - } - } - - ImGui.EndMenu(); - } - - return themeChanged; - } - - /// - /// Renders a submenu for a theme family. - /// - /// The theme family name. - /// The themes in the family. - /// True if a theme was selected and changed, false otherwise. - private static bool RenderFamilySubmenu(string family, IReadOnlyList themes) - { - bool themeChanged = false; - - // Use dialog window style for the family header using colors from the first theme - bool anyFamilyThemeSelected = themes.Any(t => t.Name == currentThemeName); - - if (RenderFamilyMenuHeader(family, themes.Count > 0 ? themes[0] : null, anyFamilyThemeSelected)) - { - try - { - // Group by dark/light for families with many variants - if (themes.Count > 4) - { - ThemeRegistry.ThemeInfo[] darkThemes = [.. themes.Where(t => t.IsDark)]; - ThemeRegistry.ThemeInfo[] lightThemes = [.. themes.Where(t => !t.IsDark)]; - - themeChanged |= RenderThemeGroup("Dark", darkThemes); - - if (darkThemes.Length > 0 && lightThemes.Length > 0) - { - ImGui.Separator(); - } - - themeChanged |= RenderThemeGroup("Light", lightThemes); - } - else - { - // Few themes - render directly with color swatches - foreach (ThemeRegistry.ThemeInfo theme in themes) - { - bool isSelected = currentThemeName == theme.Name; - string displayName = theme.Variant ?? theme.Name; - - if (RenderThemeMenuItemWithDialogSwatches(theme, displayName, isSelected)) - { - if (!isSelected && Apply(theme.Name)) - { - themeChanged = true; - } - } - } - } - - ImGui.EndMenu(); - } - finally - { - // Pop the ID that was pushed in RenderFamilyMenuHeader when menu was opened - ImGui.PopID(); - } - } - - return themeChanged; - } - - /// - /// Renders a group of themes (e.g., "Dark", "Light"). - /// - /// The group name. - /// The themes to render. - /// True if a theme was selected and changed, false otherwise. - private static bool RenderThemeGroup(string groupName, ThemeRegistry.ThemeInfo[] themes) - { - bool themeChanged = false; - - if (themes.Length > 0) - { - if (!string.IsNullOrEmpty(groupName)) - { - // Use dialog window style for the group header using colors from the first theme - bool anyGroupThemeSelected = themes.Any(t => t.Name == currentThemeName); - RenderGroupHeader(groupName, themes[0], anyGroupThemeSelected); - ImGui.Separator(); - } - - foreach (ThemeRegistry.ThemeInfo theme in themes) - { - bool isSelected = currentThemeName == theme.Name; - string displayName = theme.Variant ?? theme.Name; - - if (RenderThemeMenuItemWithDialogSwatches(theme, displayName, isSelected)) - { - if (!isSelected && Apply(theme.Name)) - { - themeChanged = true; - } - } - } - } - - return themeChanged; - } - - /// - /// Renders a simple theme selection menu without family grouping. - /// - /// The label for the theme submenu (default: "Theme") - /// True if a theme was selected and changed, false otherwise. - public static bool RenderSimpleMenu(string menuLabel = "Theme") - { - bool themeChanged = false; - - if (ImGui.BeginMenu(menuLabel)) - { - // Reset option at the top - bool isReset = currentThemeName is null; - if (ImGui.MenuItem("Reset to Default", "", isReset)) - { - if (!isReset) - { - ResetToDefault(); - themeChanged = true; - } - } - - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip("Reset to default ImGui styling with no theme applied"); - } - - ImGui.Separator(); - - // Group by dark/light - ThemeRegistry.ThemeInfo[] darkThemes = [.. DarkThemes.OrderBy(t => t.Name)]; - ThemeRegistry.ThemeInfo[] lightThemes = [.. LightThemes.OrderBy(t => t.Name)]; - - if (darkThemes.Length > 0) - { - ImGui.TextDisabled("Dark Themes"); - ImGui.Separator(); - - foreach (ThemeRegistry.ThemeInfo theme in darkThemes) - { - bool isSelected = currentThemeName == theme.Name; - - if (RenderThemeMenuItemWithDialogSwatches(theme, theme.Name, isSelected)) - { - if (!isSelected && Apply(theme.Name)) - { - themeChanged = true; - } - } - } - - if (lightThemes.Length > 0) - { - ImGui.Separator(); - } - } - - if (lightThemes.Length > 0) - { - if (darkThemes.Length > 0) - { - ImGui.TextDisabled("Light Themes"); - ImGui.Separator(); - } - - foreach (ThemeRegistry.ThemeInfo theme in lightThemes) - { - bool isSelected = currentThemeName == theme.Name; - - if (RenderThemeMenuItemWithDialogSwatches(theme, theme.Name, isSelected)) - { - if (!isSelected && Apply(theme.Name)) - { - themeChanged = true; - } - } - } - } - - ImGui.EndMenu(); - } - - return themeChanged; - } - - #endregion - - #region Theme Menu Helpers - - /// - /// Renders a theme menu item with color preview swatches - /// - /// The theme to render. - /// The display name for the theme. - /// Whether this theme is currently selected. - /// True if the theme was clicked, false otherwise. -#pragma warning disable IDE0051 // Remove unused private members - preserved for reference - private static bool RenderThemeMenuItemWithSwatches(ThemeRegistry.ThemeInfo theme, string displayName, bool isSelected) - { - bool clicked = false; - - // Create a unique ID for this menu item - ImGui.PushID(theme.Name); - - try - { - // Get the theme's complete palette for color preview - IReadOnlyDictionary completePalette = GetCompletePalette(theme.CreateInstance()); - - // Define the colors we want to show: primary, alternate, medium neutral, low neutral - SemanticColorRequest[] colorRequests = [ - new SemanticColorRequest(SemanticMeaning.Primary, Priority.High), - new SemanticColorRequest(SemanticMeaning.Alternate, Priority.High), - new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Medium), - new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Low) - ]; - - // Use Selectable instead of MenuItem so we can draw custom content - if (ImGui.Selectable($"##theme_{theme.Name}", isSelected, ImGuiSelectableFlags.None)) - { - clicked = true; - } - - // Draw color swatches and theme name on top of the selectable - Vector2 itemMin = ImGui.GetItemRectMin(); - Vector2 itemMax = ImGui.GetItemRectMax(); - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - - float swatchSize = 12.0f; - float swatchSpacing = 2.0f; - float textOffset = (colorRequests.Length * (swatchSize + swatchSpacing)) + 8.0f; - - // Draw color swatches - for (int i = 0; i < colorRequests.Length; i++) - { - if (completePalette.TryGetValue(colorRequests[i], out PerceptualColor color)) - { - ImColor imColor = Color.FromPerceptualColor(color); - Vector2 swatchPos = new( - itemMin.X + 4.0f + (i * (swatchSize + swatchSpacing)), - itemMin.Y + ((itemMax.Y - itemMin.Y - swatchSize) * 0.5f) - ); - - // Draw swatch background (slightly larger for border effect) - drawList.AddRectFilled( - swatchPos - Vector2.One, - swatchPos + new Vector2(swatchSize + 1, swatchSize + 1), - ImGui.ColorConvertFloat4ToU32(new Vector4(0.2f, 0.2f, 0.2f, 1.0f)) - ); - - // Draw color swatch - drawList.AddRectFilled( - swatchPos, - swatchPos + new Vector2(swatchSize, swatchSize), - ImGui.ColorConvertFloat4ToU32(imColor.Value) - ); - } - } - - // Draw theme name text - Vector2 textPos = new(itemMin.X + textOffset, itemMin.Y + ((itemMax.Y - itemMin.Y - ImGui.GetTextLineHeight()) * 0.5f)); - uint textColor = isSelected ? - ImGui.ColorConvertFloat4ToU32(ImGui.GetStyle().Colors[(int)ImGuiCol.Text]) : - ImGui.ColorConvertFloat4ToU32(ImGui.GetStyle().Colors[(int)ImGuiCol.Text]); - - drawList.AddText(textPos, textColor, displayName); - - // Add tooltip with theme description if hovered - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip($"{theme.Description}\n\nColors shown: Primary, Alternate, Neutral (Med), Neutral (Low)"); - } - } - catch (ArgumentException) - { - // Fallback to simple menu item if color extraction fails - clicked = ImGui.MenuItem(displayName, "", isSelected); - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip(theme.Description); - } - } - catch (InvalidOperationException) - { - // Fallback to simple menu item if color extraction fails - clicked = ImGui.MenuItem(displayName, "", isSelected); - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip(theme.Description); - } - } - catch (System.Reflection.TargetInvocationException) - { - // Fallback to simple menu item if reflection call fails - clicked = ImGui.MenuItem(displayName, "", isSelected); - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip(theme.Description); - } - } - finally - { - ImGui.PopID(); - } - - return clicked; - } -#pragma warning restore IDE0051 // Remove unused private members - - /// - /// Renders a theme menu item styled like a mini dialog window with title bar and content area. - /// - /// The theme to render. - /// The display name for the theme. - /// Whether this theme is currently selected. - /// True if the theme was clicked, false otherwise. - private static bool RenderThemeMenuItemWithDialogSwatches(ThemeRegistry.ThemeInfo theme, string displayName, bool isSelected) - { - bool clicked = false; - - // Create a unique ID for this menu item - ImGui.PushID(theme.Name); - - try - { - // Get the theme's complete palette for color preview - IReadOnlyDictionary completePalette = GetCompletePalette(theme.CreateInstance()); - - // Get primary color for title bar and surface color for background - ImColor primaryColor = Color.Palette.Basic.Blue; // Fallback - ImColor surfaceColor = Color.Palette.Neutral.Gray; // Fallback - - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Primary, Priority.High), out PerceptualColor primary)) - { - primaryColor = Color.FromPerceptualColor(primary); - } - - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Low), out PerceptualColor surface)) - { - surfaceColor = Color.FromPerceptualColor(surface); - } - else if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Medium), out PerceptualColor surfaceMed)) - { - surfaceColor = Color.FromPerceptualColor(surfaceMed); - } - - // Calculate required width for the dialog window - // This ensures the menu expands wide enough to show our custom dialog rendering - Vector2 textSize = ImGui.CalcTextSize(displayName); - float minDialogWidth = Math.Max(textSize.X + 16.0f, 140.0f); // Text width + padding, minimum 140px - float dialogHeight = 32.0f; // Height for the dialog window - Vector2 selectableSize = new(minDialogWidth, dialogHeight); - - // Use invisible selectable for interaction with proper sizing - if (ImGui.Selectable($"##theme_{theme.Name}", isSelected, ImGuiSelectableFlags.None, selectableSize)) - { - clicked = true; - } - - // Get item bounds for custom drawing - Vector2 itemMin = ImGui.GetItemRectMin(); - Vector2 itemMax = ImGui.GetItemRectMax(); - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - - float titleBarHeight = 8.0f; // Height of the dialog title bar - float margin = 2.0f; - - // Calculate dialog window bounds using the full selectable area - Vector2 dialogMin = new(itemMin.X + margin, itemMin.Y + margin); - Vector2 dialogMax = new(itemMax.X - margin, itemMax.Y - margin); - Vector2 titleBarMax = new(dialogMax.X, dialogMin.Y + titleBarHeight); - - // Draw dialog window shadow/border (slightly offset and darker) - Vector2 shadowOffset = new(1.0f, 1.0f); - drawList.AddRectFilled( - dialogMin + shadowOffset, - dialogMax + shadowOffset, - ImGui.ColorConvertFloat4ToU32(new Vector4(0.0f, 0.0f, 0.0f, 0.3f)), - 2.0f - ); - - // Draw main surface background - drawList.AddRectFilled( - dialogMin, - dialogMax, - ImGui.ColorConvertFloat4ToU32(surfaceColor.Value), - 2.0f - ); - - // Draw primary color title bar - drawList.AddRectFilled( - dialogMin, - titleBarMax, - ImGui.ColorConvertFloat4ToU32(primaryColor.Value), - 2.0f, - ImDrawFlags.RoundCornersTop - ); - - // Add subtle inner glow for selected themes - if (isSelected) - { - // Inner glow - subtle light glow inside the dialog - drawList.AddRect( - dialogMin + Vector2.One, - dialogMax - Vector2.One, - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 0.4f)), - 2.0f, - ImDrawFlags.None, - 1.0f - ); - } - - // Add hover effect - if (ImGui.IsItemHovered()) - { - drawList.AddRect( - dialogMin, - dialogMax, - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 0.4f)), - 2.0f, - ImDrawFlags.None, - 1.0f - ); - } - - // Calculate contrasting text color for the surface - Vector4 surfaceVec = surfaceColor.Value; - float luminance = (0.299f * surfaceVec.X) + (0.587f * surfaceVec.Y) + (0.114f * surfaceVec.Z); - uint textColor = luminance > 0.5f ? - ImGui.ColorConvertFloat4ToU32(new Vector4(0.0f, 0.0f, 0.0f, 1.0f)) : // Dark text on light surface - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 1.0f)); // Light text on dark surface - - // Draw theme name text over the surface area (below title bar) - Vector2 textPos = new( - dialogMin.X + 4.0f, - titleBarMax.Y + 2.0f - ); - - drawList.AddText(textPos, textColor, displayName); - - // Add tooltip with theme description if hovered - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip($"{theme.Description}\n\nDialog style: Primary title bar, surface background"); - } - } - catch (ArgumentException) - { - // Fallback to simple menu item if color extraction fails - clicked = ImGui.MenuItem(displayName, "", isSelected); - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip(theme.Description); - } - } - catch (InvalidOperationException) - { - // Fallback to simple menu item if color extraction fails - clicked = ImGui.MenuItem(displayName, "", isSelected); - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip(theme.Description); - } - } - finally - { - ImGui.PopID(); - } - - return clicked; - } - - /// - /// Renders a family menu header styled like a mini dialog window with title bar and content area. - /// - /// The theme family name. - /// The theme to use for color extraction (typically first theme in family). - /// Whether any theme in this family is currently selected. - /// True if the menu should be opened, false otherwise. - private static bool RenderFamilyMenuHeader(string familyName, ThemeRegistry.ThemeInfo? representativeTheme, bool anyFamilyThemeSelected) - { - // Create a unique ID for this family header - ImGui.PushID($"Family_{familyName}"); - - bool menuOpened = false; - - try - { - // Get colors from the representative theme if available - ImColor primaryColor = Color.Palette.Basic.Blue; // Fallback - ImColor surfaceColor = Color.Palette.Neutral.Gray; // Fallback - - if (representativeTheme != null) - { - try - { - // Use the complete palette for efficient color extraction - IReadOnlyDictionary completePalette = GetCompletePalette(representativeTheme.CreateInstance()); - - // Get primary color for title bar - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Primary, Priority.High), out PerceptualColor primary)) - { - primaryColor = Color.FromPerceptualColor(primary); - } - - // Get surface color for background - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Low), out PerceptualColor surface)) - { - surfaceColor = Color.FromPerceptualColor(surface); - } - else if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Medium), out PerceptualColor surfaceMed)) - { - surfaceColor = Color.FromPerceptualColor(surfaceMed); - } - } - catch (ArgumentException) - { - // Use fallback colors if extraction fails - } - catch (InvalidOperationException) - { - // Use fallback colors if extraction fails - } - } - - // Use BeginMenu with transparent styling and draw our custom dialog over it - string displayText = familyName; // Don't add arrow, BeginMenu will handle it - - // Calculate proper width to match other menu items and account for arrow space - Vector2 textSize = ImGui.CalcTextSize(displayText); - float arrowWidth = ImGui.CalcTextSize(" ►").X; // Space needed for the arrow - float desiredWidth = Math.Max(textSize.X + arrowWidth + 16.0f, 180.0f); // Text + arrow + padding, minimum 180px - - // Push style to control menu item size - ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new Vector2(ImGui.GetStyle().ItemSpacing.X, 4.0f)); // Ensure proper vertical spacing - - // Now use the standard BeginMenu with transparent styling to handle menu behavior - ImGui.PushStyleColor(ImGuiCol.Header, new Vector4(0, 0, 0, 0)); // Transparent - ImGui.PushStyleColor(ImGuiCol.HeaderHovered, new Vector4(1, 1, 1, 0.1f)); // Subtle hover - ImGui.PushStyleColor(ImGuiCol.HeaderActive, new Vector4(1, 1, 1, 0.2f)); // Subtle active - ImGui.PushStyleColor(ImGuiCol.Text, new Vector4(0, 0, 0, 0)); // Hide text (we drew our own) - - // Use a dummy selectable to reserve the exact space we want, then use BeginMenu - Vector2 desiredSize = new(desiredWidth, 34.0f); // 34px height to match our dialog design - ImGui.Selectable($"##dummy_{familyName}", false, ImGuiSelectableFlags.Disabled, desiredSize); - Vector2 itemMin = ImGui.GetItemRectMin(); - Vector2 itemMax = ImGui.GetItemRectMax(); - - // Move cursor back to draw BeginMenu over the same space - ImGui.SetCursorScreenPos(itemMin); - menuOpened = ImGui.BeginMenu($"##menu_{familyName}"); - - // Draw our custom dialog using the reserved space - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - - float titleBarHeight = 8.0f; // Height of the dialog title bar - float margin = 2.0f; - float arrowSpace = 20.0f; // Reserve space on right for arrow - - // Calculate dialog window bounds using reserved space, leaving room for arrow - Vector2 dialogMin = new(itemMin.X + margin, itemMin.Y + margin); - Vector2 dialogMax = new(itemMax.X - margin - arrowSpace, itemMax.Y - margin); - Vector2 titleBarMax = new(dialogMax.X, dialogMin.Y + titleBarHeight); - - // Draw dialog window shadow/border (slightly offset and darker) - Vector2 shadowOffset = new(1.0f, 1.0f); - drawList.AddRectFilled( - dialogMin + shadowOffset, - dialogMax + shadowOffset, - ImGui.ColorConvertFloat4ToU32(new Vector4(0.0f, 0.0f, 0.0f, 0.3f)), - 2.0f - ); - - // Draw main surface background - drawList.AddRectFilled( - dialogMin, - dialogMax, - ImGui.ColorConvertFloat4ToU32(surfaceColor.Value), - 2.0f - ); - - // Draw primary color title bar - drawList.AddRectFilled( - dialogMin, - titleBarMax, - ImGui.ColorConvertFloat4ToU32(primaryColor.Value), - 2.0f, - ImDrawFlags.RoundCornersTop - ); - - // Add subtle inner glow if any family theme is selected - if (anyFamilyThemeSelected) - { - // Inner glow - subtle light glow inside the dialog - drawList.AddRect( - dialogMin + Vector2.One, - dialogMax - Vector2.One, - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 0.3f)), - 2.0f, - ImDrawFlags.None, - 1.0f - ); - } - - // Calculate contrasting text color for the surface - Vector4 surfaceVec = surfaceColor.Value; - float luminance = (0.299f * surfaceVec.X) + (0.587f * surfaceVec.Y) + (0.114f * surfaceVec.Z); - uint textColor = luminance > 0.5f ? - ImGui.ColorConvertFloat4ToU32(new Vector4(0.0f, 0.0f, 0.0f, 1.0f)) : // Dark text on light surface - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 1.0f)); // Light text on dark surface - - // Draw family name text over the surface area (below title bar) - Vector2 textPos = new( - dialogMin.X + 4.0f, - titleBarMax.Y + 2.0f - ); - - drawList.AddText(textPos, textColor, displayText); - - ImGui.PopStyleColor(4); - ImGui.PopStyleVar(); // Pop the ItemSpacing style - } - catch - { - // If there's an exception and menu wasn't opened, clean up the ID - if (!menuOpened) - { - ImGui.PopID(); - } - throw; - } - - // Only pop ID if menu is not opened - if opened, RenderFamilySubmenu will handle it - if (!menuOpened) - { - ImGui.PopID(); - } - - return menuOpened; - } - - /// - /// Renders a group header styled like a mini dialog window with title bar and content area. - /// - /// The group name (e.g., "Dark", "Light"). - /// The theme to use for color extraction (typically first theme in group). - /// Whether any theme in this group is currently selected. - private static void RenderGroupHeader(string groupName, ThemeRegistry.ThemeInfo representativeTheme, bool anyGroupThemeSelected) - { - // Create a unique ID for this group header - ImGui.PushID($"Group_{groupName}"); - - try - { - // Get colors from the representative theme - ImColor primaryColor = Color.Palette.Basic.Blue; // Fallback - ImColor surfaceColor = Color.Palette.Neutral.Gray; // Fallback - - try - { - // Use the complete palette for efficient color extraction - IReadOnlyDictionary completePalette = GetCompletePalette(representativeTheme.CreateInstance()); - - // Get primary color for title bar - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Primary, Priority.High), out PerceptualColor primary)) - { - primaryColor = Color.FromPerceptualColor(primary); - } - - // Get surface color for background - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Low), out PerceptualColor surface)) - { - surfaceColor = Color.FromPerceptualColor(surface); - } - else if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Medium), out PerceptualColor surfaceMed)) - { - surfaceColor = Color.FromPerceptualColor(surfaceMed); - } - } - catch (ArgumentException) - { - // Use fallback colors if extraction fails - } - catch (InvalidOperationException) - { - // Use fallback colors if extraction fails - } - - // Calculate required width for the dialog window - Vector2 textSize = ImGui.CalcTextSize(groupName); - float minDialogWidth = Math.Max(textSize.X + 16.0f, 120.0f); // Text width + padding, minimum 120px for groups - float dialogHeight = 24.0f; // Smaller height for group headers - Vector2 selectableSize = new(minDialogWidth, dialogHeight); - - // Use invisible selectable for proper sizing (non-interactive) - ImGui.Selectable($"##group_{groupName}", false, ImGuiSelectableFlags.Disabled, selectableSize); - - // Get item bounds for custom drawing - Vector2 itemMin = ImGui.GetItemRectMin(); - Vector2 itemMax = ImGui.GetItemRectMax(); - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - - float titleBarHeight = 6.0f; // Smaller title bar for group headers - float margin = 1.5f; - - // Calculate dialog window bounds using the full selectable area - Vector2 dialogMin = new(itemMin.X + margin, itemMin.Y + margin); - Vector2 dialogMax = new(itemMax.X - margin, itemMax.Y - margin); - Vector2 titleBarMax = new(dialogMax.X, dialogMin.Y + titleBarHeight); - - // Draw dialog window shadow/border (slightly offset and darker) - Vector2 shadowOffset = new(0.5f, 0.5f); - drawList.AddRectFilled( - dialogMin + shadowOffset, - dialogMax + shadowOffset, - ImGui.ColorConvertFloat4ToU32(new Vector4(0.0f, 0.0f, 0.0f, 0.2f)), - 1.5f - ); - - // Draw main surface background - drawList.AddRectFilled( - dialogMin, - dialogMax, - ImGui.ColorConvertFloat4ToU32(surfaceColor.Value), - 1.5f - ); - - // Draw primary color title bar - drawList.AddRectFilled( - dialogMin, - titleBarMax, - ImGui.ColorConvertFloat4ToU32(primaryColor.Value), - 1.5f, - ImDrawFlags.RoundCornersTop - ); - - // Add subtle inner glow if any group theme is selected - if (anyGroupThemeSelected) - { - // Inner glow - subtle light glow inside the dialog - drawList.AddRect( - dialogMin + new Vector2(0.5f, 0.5f), - dialogMax - new Vector2(0.5f, 0.5f), - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 0.25f)), - 1.5f, - ImDrawFlags.None, - 0.8f - ); - } - - // Calculate contrasting text color for the surface - Vector4 surfaceVec = surfaceColor.Value; - float luminance = (0.299f * surfaceVec.X) + (0.587f * surfaceVec.Y) + (0.114f * surfaceVec.Z); - uint textColor = luminance > 0.5f ? - ImGui.ColorConvertFloat4ToU32(new Vector4(0.0f, 0.0f, 0.0f, 1.0f)) : // Dark text on light surface - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 1.0f)); // Light text on dark surface - - // Draw group name text centered over the surface area (below title bar) - Vector2 textPos = new( - dialogMin.X + ((dialogMax.X - dialogMin.X - textSize.X) * 0.5f), // Centered horizontally - titleBarMax.Y + 1.0f // Small padding below title bar - ); - - drawList.AddText(textPos, textColor, groupName); - } - finally - { - ImGui.PopID(); - } - } - - #endregion - - #region Theme Discovery - - /// - /// Gets all available themes with their metadata. - /// - public static IReadOnlyList AllThemes => ThemeRegistry.AllThemes; - - /// - /// Gets all dark themes. - /// - public static IReadOnlyList DarkThemes => ThemeRegistry.DarkThemes; - - /// - /// Gets all light themes. - /// - public static IReadOnlyList LightThemes => ThemeRegistry.LightThemes; - - /// - /// Gets themes grouped by family. - /// - public static IReadOnlyDictionary> ThemesByFamily => ThemeRegistry.ThemesByFamily; - - /// - /// Gets all theme families. - /// - public static IReadOnlyList Families => ThemeRegistry.Families; - - /// - /// Finds a theme by name (case-insensitive). - /// - /// The theme name to search for. - /// The theme info if found, null otherwise. - public static ThemeRegistry.ThemeInfo? FindTheme(string name) => ThemeRegistry.FindTheme(name); - - /// - /// Gets all themes in a specific family. - /// - /// The family name. - /// Array of themes in the family. - public static IReadOnlyList GetThemesInFamily(string family) => ThemeRegistry.GetThemesInFamily(family); - - /// - /// Creates instances of all themes. - /// - /// Array of all theme instances. - public static IReadOnlyList CreateAllThemeInstances() => ThemeRegistry.CreateAllThemeInstances(); - - /// - /// Creates theme instances for a specific family. - /// - /// The family name. - /// Array of theme instances in the family. - public static IReadOnlyList CreateThemeInstancesInFamily(string family) => ThemeRegistry.CreateThemeInstancesInFamily(family); - - #endregion - - #region Complete Palette Access - - /// - /// Gets the complete palette for the current theme containing all possible semantic color combinations. - /// This provides every color that can be requested from the theme, useful for theme exploration and previews. - /// - /// A dictionary mapping every possible semantic color request to its assigned color, or null if no theme is active. - public static IReadOnlyDictionary? GetCurrentThemeCompletePalette() - { - ThemeRegistry.ThemeInfo? currentTheme = CurrentTheme; - if (currentTheme is null) - { - return null; - } - - return GetCompletePalette(currentTheme.CreateInstance()); - } - - /// - /// Gets the complete palette for a specific theme containing all possible semantic color combinations. - /// This provides every color that can be requested from the theme, useful for theme exploration and previews. - /// Uses the MakeCompletePalette API with efficient caching to avoid expensive recalculation. - /// - /// The semantic theme to generate the complete palette from. - /// A dictionary mapping every possible semantic color request to its assigned color. - public static IReadOnlyDictionary GetCompletePalette(ISemanticTheme theme) - { - ArgumentNullException.ThrowIfNull(theme); - - // Generate a cache key based on the theme - string cacheKey = GenerateThemeCacheKey(theme); - - // Check cache first - using (paletteCacheLock.EnterScope()) - { - if (paletteCache.TryGetValue(cacheKey, out IReadOnlyDictionary? cachedPalette)) - { - return cachedPalette; - } - } - - // Generate the palette - IReadOnlyDictionary palette = GeneratePaletteUncached(theme); - - // Cache the result - using (paletteCacheLock.EnterScope()) - { - // Limit cache size to prevent memory issues - if (paletteCache.Count >= 50) // Reasonable limit for theme count - { - // Remove oldest entries (simple FIFO) - string firstKey = paletteCache.Keys.First(); - paletteCache.Remove(firstKey); - } - - paletteCache[cacheKey] = palette; - } - - return palette; - } - - /// - /// Generates the complete palette without caching using the MakeCompletePalette API. - /// - /// The theme to generate the palette from. - /// The complete palette dictionary. - private static IReadOnlyDictionary GeneratePaletteUncached(ISemanticTheme theme) => - SemanticColorMapper.MakeCompletePalette(theme); - - /// - /// Generates a cache key for a theme based on its semantic mapping. - /// - /// The theme to generate a cache key for. - /// A unique cache key string. - private static string GenerateThemeCacheKey(ISemanticTheme theme) - { - // Create a hash based on the theme's semantic mapping content - // This ensures we get a new cache entry if the theme definition changes - System.Text.StringBuilder keyBuilder = new(); - - keyBuilder.Append(theme.GetType().FullName); - keyBuilder.Append('_'); - - // Add a simple hash of the semantic mappings - foreach (KeyValuePair> mapping in theme.SemanticMapping.OrderBy(kvp => kvp.Key)) - { - keyBuilder.Append(mapping.Key); - keyBuilder.Append(':'); - keyBuilder.Append(mapping.Value.Count); - keyBuilder.Append(';'); - } - - return keyBuilder.ToString(); - } - - /// - /// Clears the palette cache. Called when themes change. - /// - private static void ClearPaletteCache() - { - using (paletteCacheLock.EnterScope()) - { - paletteCache.Clear(); - } - } - - /// - /// Gets the complete palette for a theme by name. - /// - /// The name of the theme to get the palette for. - /// A dictionary mapping every possible semantic color request to its assigned color, or null if theme not found. - public static IReadOnlyDictionary? GetCompletePalette(string themeName) - { - ThemeRegistry.ThemeInfo? themeInfo = FindTheme(themeName); - if (themeInfo is null) - { - return null; - } - - return GetCompletePalette(themeInfo.CreateInstance()); - } - - /// - /// Gets all available semantic color requests for the current theme. - /// This is useful for discovering what colors are available without needing the actual color values. - /// - /// An array of all available semantic color requests, or empty array if no theme is active. - public static ImmutableArray GetCurrentThemeAvailableColorRequests() - { - IReadOnlyDictionary? palette = GetCurrentThemeCompletePalette(); - return palette?.Keys.ToImmutableArray() ?? []; - } - - /// - /// Tries to get a specific color from the current theme's complete palette. - /// This is more efficient than manually navigating semantic mappings. - /// - /// The semantic color request specifying the color to retrieve. - /// The retrieved color if found. - /// True if the color was found, false otherwise. - public static bool TryGetColor(SemanticColorRequest request, out PerceptualColor color) - { - IReadOnlyDictionary? palette = GetCurrentThemeCompletePalette(); - if (palette is not null && palette.TryGetValue(request, out color)) - { - return true; - } - - color = default; - return false; - } - - /// - /// Gets a specific color from the current theme's complete palette. - /// This is more efficient than manually navigating semantic mappings. - /// - /// The semantic color request specifying the color to retrieve. - /// The color if found, null otherwise. - public static PerceptualColor? GetColor(SemanticColorRequest request) => - TryGetColor(request, out PerceptualColor color) ? color : null; - - #endregion - - #region Scoped Theme Colors - - /// - /// Creates a scoped theme color that automatically reverts when disposed. - /// - /// The color to apply to the theme. - /// A scoped theme color instance. - public static ScopedThemeColor FromColor(ImColor color) => new(color, enabled: true); - - /// - /// Creates a scoped disabled theme color that automatically reverts when disposed. - /// - /// The color to apply to the theme. - /// A scoped theme color instance with disabled state. - public static ScopedThemeColor DisabledFromColor(ImColor color) => new(color, enabled: false); - - #endregion - - #region Theme Selector Dialog - - /// - /// Shows the theme browser modal. Call this to programmatically open the theme selector. - /// - /// The title for the theme browser modal. - /// Custom size for the modal window. Default is 900x650 to accommodate wider theme cards. - public static void ShowThemeSelector(string title = "🎨 Theme Browser", Vector2? customSize = null) - { - themeBrowser.Open( - title, - onThemeSelected: themeName => { /* Theme was already applied in ThemeBrowser */ }, - onDefaultRequested: () => { /* Default was already applied in ThemeBrowser */ }, - customSize - ); - } - - /// - /// Hides the theme selector dialog. This is kept for API compatibility but the modal handles its own state. - /// - public static void HideThemeSelector() { /* Modal handles its own close state, so this is mainly for API compatibility */ } - - /// - /// Renders the theme browser modal if it's currently open. - /// This should be called in your main render loop to display the theme browser. - /// - /// True if a theme was changed during modal interaction, false otherwise. - public static bool RenderThemeSelector() => themeBrowser.ShowIfOpen(); - - /// - /// Renders the theme browser modal if it's currently open. - /// This overload is kept for backward compatibility. - /// - /// The title for the theme browser modal (ignored - kept for compatibility). - /// The size for the theme browser modal (ignored - kept for compatibility). - /// True if a theme was changed during modal interaction, false otherwise. - public static bool RenderThemeSelector(string windowTitle, Vector2? windowSize = null) - { - // Parameters are intentionally unused - kept for backward compatibility - _ = windowTitle; - _ = windowSize; - return themeBrowser.ShowIfOpen(); - } - - /// - /// Renders a theme menu that opens the theme browser modal instead of using dropdown menus. - /// This provides a better user experience than the traditional RenderMenu() method. - /// - /// The label for the theme submenu (default: "Theme") - /// True if a theme was selected and changed, false otherwise. - public static bool RenderThemeSelectorMenu(string menuLabel = "Theme") - { - bool themeChanged = false; - - if (ImGui.BeginMenu(menuLabel)) - { - if (ImGui.MenuItem("Browse Themes...")) - { - ShowThemeSelector(); - } - - ImGui.Separator(); - - // Quick reset option - if (ImGui.MenuItem("Reset to Default", "", currentThemeName is null)) - { - if (currentThemeName is not null) - { - ResetToDefault(); - themeChanged = true; - } - } - - if (ImGui.IsItemHovered()) - { - ImGui.SetTooltip("Reset to default ImGui styling with no theme applied"); - } - - // Show current theme info if any - if (currentThemeName is not null) - { - ImGui.Separator(); - ImGui.TextDisabled($"Current: {currentThemeName}"); - ThemeRegistry.ThemeInfo? currentTheme = FindTheme(currentThemeName); - if (currentTheme is not null) - { - ImGui.TextDisabled($"({(currentTheme.IsDark ? "Dark" : "Light")})"); - } - } - - ImGui.EndMenu(); - } - - // Check if any theme changes occurred through the modal browser - // The modal handles theme application internally, so we check for changes here - bool modalThemeChanged = RenderThemeSelector(); - - return themeChanged || modalThemeChanged; - } - - #endregion -} diff --git a/ImGui.Styler/ThemeBrowser.cs b/ImGui.Styler/ThemeBrowser.cs deleted file mode 100644 index 9a5b0e8..0000000 --- a/ImGui.Styler/ThemeBrowser.cs +++ /dev/null @@ -1,176 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using Hexa.NET.ImGui; -using ktsu.ThemeProvider; -using ktsu.ImGui.Popups; - -/// -/// A modal theme browser that allows users to select themes from a visual grid. -/// -public class ThemeBrowser -{ - /// - /// The underlying modal instance for managing popup behavior using ktsu.ImGuiPopups. - /// - private readonly ImGuiPopups.Modal modal = new(); - - /// - /// The selected theme family filter index. - /// - private int selectedFamilyFilter; - - /// - /// The action to invoke when a theme is selected. - /// - private Action? onThemeSelected; - - /// - /// The action to invoke when the default theme is requested. - /// - private Action? onDefaultRequested; - - /// - /// Tracks whether a theme change occurred during the current modal session. - /// - private bool themeChanged; - - /// - /// Opens the theme browser modal. - /// - /// The title of the modal window. - /// Action to invoke when a theme is selected. Parameter is the theme name. - /// Action to invoke when default theme is requested. - /// Custom size of the modal. If not specified, uses a default size. - public void Open(string title = "🎨 Theme Browser", Action? onThemeSelected = null, Action? onDefaultRequested = null, Vector2? customSize = null) - { - this.onThemeSelected = onThemeSelected; - this.onDefaultRequested = onDefaultRequested; - themeChanged = false; // Reset theme change tracking for this modal session - Vector2 size = customSize ?? new Vector2(900, 650); // Increased width to accommodate wider theme cards - modal.Open(title, ShowContent, size); - } - - /// - /// Shows the theme browser modal if it's open and returns whether a theme was changed. - /// - /// True if a theme was changed during modal interaction, false otherwise. - public bool ShowIfOpen() - { - bool wasOpen = modal.WasOpen; - bool isOpen = modal.ShowIfOpen(); - - // If the modal was just closed and a theme was changed, return true and reset the flag - if (wasOpen && !isOpen && themeChanged) - { - themeChanged = false; - return true; - } - - // If modal is still open but theme was changed this frame, return true (but don't reset flag yet) - return themeChanged; - } - - /// - /// Shows the content of the theme browser modal. - /// - private void ShowContent() - { - // Header with current theme info - ImGui.Text("Choose a theme from the gallery below:"); - if (Theme.CurrentThemeName is not null) - { - ImGui.SameLine(); - using (Text.Color.Success()) - { - ImGui.Text($"Current: {Theme.CurrentThemeName}"); - } - } - else - { - ImGui.SameLine(); - using (Text.Color.Info()) - { - ImGui.Text("Current: Default"); - } - } - - ImGui.Separator(); - - // Theme family filter - ImGui.Text("Filter by Family:"); - ImGui.SameLine(); - - // Create family list for filtering - List familyList = ["All Themes", .. Theme.Families.OrderBy(f => f)]; - - if (ImGui.Combo("##FamilyFilter", ref selectedFamilyFilter, [.. familyList], familyList.Count)) - { - // Family filter changed - could add logic here if needed - } - - ImGui.Separator(); - - // Get filtered themes - IEnumerable filteredThemes = selectedFamilyFilter == 0 - ? Theme.AllThemes - : Theme.AllThemes.Where(t => t.Family == familyList[selectedFamilyFilter]); - - List themesToShow = [.. filteredThemes.OrderBy(t => t.Family).ThenBy(t => t.Name)]; - - // Theme count info - ImGui.Text($"Themes ({themesToShow.Count}):"); - - // Theme grid in a scrollable area - Vector2 childSize = new(0, ImGui.GetContentRegionAvail().Y - 60); // Leave space for buttons - ImGui.BeginChild("ThemeGridScrollArea", childSize, ImGuiChildFlags.Borders); - - // Use ThemeCard.RenderGrid with appropriate sizing for the modal - Vector2 cardSize = new(200, 90); // Increased width to accommodate longer theme names - ThemeCard.RenderGrid(themesToShow, selectedTheme => - { - // Apply the selected theme - if (Theme.Apply(selectedTheme.Name)) - { - themeChanged = true; // Set flag when theme is successfully applied - onThemeSelected?.Invoke(selectedTheme.Name); - //ImGui.CloseCurrentPopup(); - } - }, cardSize); - - ImGui.EndChild(); - - ImGui.NewLine(); - - // Modal buttons - float buttonWidth = 100.0f; - float totalButtonsWidth = (buttonWidth * 2) + ImGui.GetStyle().ItemSpacing.X; - ImGui.SetCursorPosX((ImGui.GetContentRegionAvail().X - totalButtonsWidth) * 0.5f); - - // Reset button - using (Theme.FromColor(Color.Palette.Semantic.Warning)) - { - if (ImGui.Button("Reset", new Vector2(buttonWidth, 0))) - { - Theme.ResetToDefault(); - themeChanged = true; // Set flag when default is applied - onDefaultRequested?.Invoke(); - //ImGui.CloseCurrentPopup(); - } - } - - ImGui.SameLine(); - - // Close button - if (ImGui.Button("Close", new Vector2(buttonWidth, 0))) - { - ImGui.CloseCurrentPopup(); - } - } -} diff --git a/ImGui.Styler/ThemeCard.cs b/ImGui.Styler/ThemeCard.cs deleted file mode 100644 index 9e0758e..0000000 --- a/ImGui.Styler/ThemeCard.cs +++ /dev/null @@ -1,375 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Styler; - -using System; -using System.Collections.Generic; -using System.Numerics; -using Hexa.NET.ImGui; -using ktsu.ThemeProvider; - -/// -/// Provides theme preview card widgets for displaying theme information in a dialog window style. -/// -public static class ThemeCard -{ - /// - /// Renders a theme preview card styled like a mini dialog window with title bar and content area. - /// - /// The theme to render. - /// The size of the card. If not specified, uses a default size. - /// Whether this theme is currently selected. - /// True if the theme card was clicked, false otherwise. - public static bool Render(ThemeRegistry.ThemeInfo theme, Vector2? size = null, bool? isSelected = null) => - Render(theme, theme?.Name ?? string.Empty, size, isSelected); - - /// - /// Renders a theme preview card styled like a mini dialog window with title bar and content area. - /// This version uses a callback delegate to report theme selection. - /// - /// The theme to render. - /// Callback invoked when the theme is selected. - /// The size of the card. If not specified, uses a default size. - /// Whether this theme is currently selected. - public static void Render(ThemeRegistry.ThemeInfo theme, Action onThemeSelected, Vector2? size = null, bool? isSelected = null) => - Render(theme, theme?.Name ?? string.Empty, onThemeSelected, size, isSelected); - - /// - /// Renders a theme preview card styled like a mini dialog window with title bar and content area. - /// This version uses a callback delegate to report theme selection. - /// - /// The theme to render. - /// The display name for the theme (shown in the card). - /// Callback invoked when the theme is selected. - /// The size of the card. If not specified, uses a default size. - /// Whether this theme is currently selected. If not specified, compares against current theme. - public static void Render(ThemeRegistry.ThemeInfo theme, string displayName, Action onThemeSelected, Vector2? size = null, bool? isSelected = null) - { - ArgumentNullException.ThrowIfNull(theme); - ArgumentNullException.ThrowIfNull(displayName); - ArgumentNullException.ThrowIfNull(onThemeSelected); - - // Use the existing Render method and handle the click result - if (Render(theme, displayName, size, isSelected)) - { - onThemeSelected(theme); - } - } - - /// - /// Renders a theme preview card styled like a mini dialog window with title bar and content area. - /// - /// The theme to render. - /// The display name for the theme (shown in the card). - /// The size of the card. If not specified, uses a default size. - /// Whether this theme is currently selected. If not specified, compares against current theme. - /// True if the theme card was clicked, false otherwise. - public static bool Render(ThemeRegistry.ThemeInfo theme, string displayName, Vector2? size = null, bool? isSelected = null) - { - ArgumentNullException.ThrowIfNull(theme); - ArgumentNullException.ThrowIfNull(displayName); - - bool clicked = false; - - // Create a unique ID for this card - ImGui.PushID($"ThemeCard_{theme.Name}"); - - try - { - // Determine if this theme is selected - bool isCurrentTheme = isSelected ?? (Theme.CurrentThemeName == theme.Name); - - // Use default size if not specified - Vector2 cardSize = size ?? new Vector2(180, 70); - - // Get colors for dialog window style from complete palette - ImColor primaryColor = Color.Palette.Basic.Blue; // Fallback - ImColor surfaceColor = Color.Palette.Neutral.Gray; // Fallback - ImColor textColor = Color.Palette.Neutral.White; // Fallback - IReadOnlyDictionary? completePalette = null; - - try - { - // Use the complete palette for efficient color extraction - completePalette = Theme.GetCompletePalette(theme.CreateInstance()); - - // Get primary color for title bar - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Primary, Priority.High), out PerceptualColor primary)) - { - primaryColor = Color.FromPerceptualColor(primary); - } - - // Get surface color for background - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Low), out PerceptualColor surface)) - { - surfaceColor = Color.FromPerceptualColor(surface); - } - else if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.Medium), out PerceptualColor surfaceMed)) - { - surfaceColor = Color.FromPerceptualColor(surfaceMed); - } - - // Get highest priority neutral for text - if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.VeryHigh), out PerceptualColor textVeryHigh)) - { - textColor = Color.FromPerceptualColor(textVeryHigh); - } - else if (completePalette.TryGetValue(new SemanticColorRequest(SemanticMeaning.Neutral, Priority.High), out PerceptualColor textHigh)) - { - textColor = Color.FromPerceptualColor(textHigh); - } - } - catch (ArgumentException) - { - // Use fallback colors if extraction fails - } - catch (InvalidOperationException) - { - // Use fallback colors if extraction fails - } - - // Use invisible button for interaction - clicked = ImGui.InvisibleButton($"##card_{theme.Name}", cardSize); - - // Get button bounds for custom drawing - Vector2 cardMin = ImGui.GetItemRectMin(); - Vector2 cardMax = ImGui.GetItemRectMax(); - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - - bool isHovered = ImGui.IsItemHovered(); - bool isActive = ImGui.IsItemActive(); - - float titleBarHeight = 16.0f; // Height of the dialog title bar - float margin = 3.0f; - - // Calculate dialog window bounds (with margins) - Vector2 dialogMin = new(cardMin.X + margin, cardMin.Y + margin); - Vector2 dialogMax = new(cardMax.X - margin, cardMax.Y - margin); - Vector2 titleBarMax = new(dialogMax.X, dialogMin.Y + titleBarHeight); - - // Draw enhanced shadow for selected themes - Vector2 shadowOffset = isCurrentTheme ? new(3.0f, 3.0f) : new(2.0f, 2.0f); - float shadowOpacity = isCurrentTheme ? 0.4f : 0.2f; - drawList.AddRectFilled( - dialogMin + shadowOffset, - dialogMax + shadowOffset, - ImGui.ColorConvertFloat4ToU32(new Vector4(0.0f, 0.0f, 0.0f, shadowOpacity)), - 3.0f - ); - - // Draw main surface background - drawList.AddRectFilled( - dialogMin, - dialogMax, - ImGui.ColorConvertFloat4ToU32(surfaceColor.Value), - 3.0f - ); - - // Draw primary color title bar - drawList.AddRectFilled( - dialogMin, - titleBarMax, - ImGui.ColorConvertFloat4ToU32(primaryColor.Value), - 3.0f, - ImDrawFlags.RoundCornersTop - ); - - // Add subtle inner glow for selected themes - if (isCurrentTheme) - { - // Inner glow - subtle white glow inside the card - drawList.AddRect( - dialogMin + Vector2.One, - dialogMax - Vector2.One, - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 0.3f)), - 2.5f, - ImDrawFlags.None, - 1.0f - ); - - // Secondary inner glow for more prominence - drawList.AddRect( - dialogMin + new Vector2(2.0f, 2.0f), - dialogMax - new Vector2(2.0f, 2.0f), - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 0.15f)), - 2.0f, - ImDrawFlags.None, - 0.5f - ); - } - - // Add hover effect - if (isHovered) - { - drawList.AddRect( - dialogMin, - dialogMax, - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 0.6f)), - 3.0f, - ImDrawFlags.None, - 1.5f - ); - } - - // Add active (pressed) effect - if (isActive) - { - drawList.AddRectFilled( - dialogMin, - dialogMax, - ImGui.ColorConvertFloat4ToU32(new Vector4(1.0f, 1.0f, 1.0f, 0.1f)), - 3.0f - ); - } - - // Draw theme name centered in content area (below title bar) - // Calculate display text (remove checkmark to avoid layout jumping) - string displayText = displayName; - Vector2 textSize = ImGui.CalcTextSize(displayText); - - // Calculate content area bounds (below title bar) - float contentHeight = dialogMax.Y - titleBarMax.Y; - - Vector2 textPos = new( - dialogMin.X + ((dialogMax.X - dialogMin.X - textSize.X) * 0.5f), // Centered horizontally - titleBarMax.Y + ((contentHeight - textSize.Y) * 0.5f) - 4.0f // Centered vertically but moved up 4px for balance - ); - - drawList.AddText(textPos, ImGui.ColorConvertFloat4ToU32(textColor.Value), displayText); - - // Add semantic color swatches in bottom right corner - DrawSemanticSwatches(drawList, completePalette, dialogMax, margin); - - // Add tooltip with theme description if hovered - if (isHovered) - { - ImGui.SetTooltip($"{theme.Description}\n\nFamily: {theme.Family}\nType: {(theme.IsDark ? "Dark" : "Light")}\n\nColor swatches show: Primary, Alternate, Success, Warning, Error\n\nClick to select this theme"); - } - } - finally - { - ImGui.PopID(); - } - - return clicked; - } - - /// - /// Renders a grid of theme preview cards. - /// - /// The themes to display in the grid. - /// Size of each card. If not specified, uses default size. - /// Number of cards per row. If not specified, calculates based on available width. - /// The theme that was clicked, or null if no theme was clicked. - public static ThemeRegistry.ThemeInfo? RenderGrid(IEnumerable themes, Vector2? cardSize = null, int? columnsPerRow = null) - { - ArgumentNullException.ThrowIfNull(themes); - - Vector2 size = cardSize ?? new Vector2(180, 70); - int columns = columnsPerRow ?? Math.Max(1, (int)(ImGui.GetContentRegionAvail().X / (size.X + 10))); // 10px spacing - - ImGui.Columns(columns, "ThemeCardGrid", false); - - foreach (ThemeRegistry.ThemeInfo theme in themes) - { - if (Render(theme, size)) - { - ImGui.Columns(1); // Reset columns - return theme; - } - - ImGui.NextColumn(); - } - - ImGui.Columns(1); // Reset columns - return null; - } - - /// - /// Renders a grid of theme preview cards using a callback delegate for theme selection. - /// - /// The themes to display in the grid. - /// Callback invoked when any theme is selected. - /// Size of each card. If not specified, uses default size. - /// Number of cards per row. If not specified, calculates based on available width. - public static void RenderGrid(IEnumerable themes, Action onThemeSelected, Vector2? cardSize = null, int? columnsPerRow = null) - { - ArgumentNullException.ThrowIfNull(themes); - ArgumentNullException.ThrowIfNull(onThemeSelected); - - Vector2 size = cardSize ?? new Vector2(180, 70); - int columns = columnsPerRow ?? Math.Max(1, (int)(ImGui.GetContentRegionAvail().X / (size.X + 10))); // 10px spacing - - ImGui.Columns(columns, "ThemeCardGrid", false); - - foreach (ThemeRegistry.ThemeInfo theme in themes) - { - Render(theme, onThemeSelected, size); - ImGui.NextColumn(); - } - - ImGui.Columns(1); // Reset columns - } - - /// - /// Draws small semantic color swatches in the bottom right corner of a theme card. - /// - /// The ImGui draw list to draw on. - /// The complete color palette for the theme. - /// The bottom-right corner of the dialog area. - /// The margin from the dialog edge. - private static void DrawSemanticSwatches(ImDrawListPtr drawList, IReadOnlyDictionary? completePalette, Vector2 dialogMax, float margin) - { - // Skip drawing swatches if palette is not available - if (completePalette is null) - { - return; - } - - // Define the semantic meanings to show as swatches (in order) - SemanticMeaning[] swatchMeanings = [ - SemanticMeaning.Primary, - SemanticMeaning.Alternate, - SemanticMeaning.Success, - SemanticMeaning.Warning, - SemanticMeaning.Error - ]; - - const float swatchSize = 8.0f; // Small square size (increased from 6.0f) - const float swatchSpacing = 2.0f; // Spacing between squares (changed to whole number) - const float swatchPadding = 3.0f; // Padding from dialog edge (already whole number) - - // Calculate starting position (bottom-right, working left) - float totalWidth = (swatchMeanings.Length * swatchSize) + ((swatchMeanings.Length - 1) * swatchSpacing); - Vector2 startPos = new( - dialogMax.X - margin - swatchPadding - totalWidth, - dialogMax.Y - margin - swatchPadding - swatchSize - ); - - // Draw each semantic color swatch - for (int i = 0; i < swatchMeanings.Length; i++) - { - SemanticColorRequest colorRequest = new(swatchMeanings[i], Priority.High); - - // Try to get the color from the complete palette - if (completePalette.TryGetValue(colorRequest, out PerceptualColor semanticColor)) - { - ImColor swatchColor = Color.FromPerceptualColor(semanticColor); - - Vector2 swatchMin = new( - startPos.X + (i * (swatchSize + swatchSpacing)), - startPos.Y - ); - Vector2 swatchMax = new( - swatchMin.X + swatchSize, - swatchMin.Y + swatchSize - ); - - // Draw the color swatch as a flat square - drawList.AddRectFilled(swatchMin, swatchMax, ImGui.ColorConvertFloat4ToU32(swatchColor.Value)); - } - } - } -} diff --git a/ImGui.Widgets/ColorIndicator.cs b/ImGui.Widgets/ColorIndicator.cs deleted file mode 100644 index 7ec575f..0000000 --- a/ImGui.Widgets/ColorIndicator.cs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System.Numerics; - -using Hexa.NET.ImGui; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// Displays a colored square. - /// - /// The color to be displayed when enabled. - /// A boolean indicating whether the ColorIndicator is enabled. - public static void ColorIndicator(ImColor color, bool enabled) => ColorIndicatorImpl.Show(color, enabled); - - internal static class ColorIndicatorImpl - { - public static void Show(ImColor color, bool enabled) - { - float frameHeight = ImGui.GetFrameHeight(); - ImGui.Dummy(new Vector2(frameHeight, frameHeight)); - Vector2 dummyRectMin = ImGui.GetItemRectMin(); - Vector2 dummyRectMax = ImGui.GetItemRectMax(); - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - uint colorToShow = enabled ? ImGui.GetColorU32(color.Value) : ImGui.GetColorU32(ImGuiCol.FrameBg); - drawList.AddRectFilled(dummyRectMin, dummyRectMax, colorToShow); - } - } -} diff --git a/ImGui.Widgets/Combo.cs b/ImGui.Widgets/Combo.cs deleted file mode 100644 index 9be62d3..0000000 --- a/ImGui.Widgets/Combo.cs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System.Collections.ObjectModel; -using System.Globalization; -using Hexa.NET.ImGui; - -using ktsu.Semantics.Strings; - -public static partial class ImGuiWidgets -{ - /// - /// An ImGui.Combo implementation that works with Enums. - /// - /// Type of the Enum. - /// Label for display and id. - /// The currently selected value. - /// If a combo value was selected. - public static bool Combo(string label, ref TEnum selectedValue) where TEnum : Enum - { - Array possibleValues = Enum.GetValues(typeof(TEnum)); - int currentIndex = Array.IndexOf(possibleValues, selectedValue); - string[] possibleValuesNames = Enum.GetNames(typeof(TEnum)); - if (ImGui.Combo(label, ref currentIndex, possibleValuesNames, possibleValuesNames.Length)) - { - selectedValue = (TEnum)possibleValues.GetValue(currentIndex)!; - return true; - } - - return false; - } - - /// - /// An ImGui.Combo implementation that works with IStrings. - /// - /// Type of the StrongString - /// Label for display and id. - /// The currently selected value. - /// The collection of possible values. - /// If a combo value was selected. - public static bool Combo(string label, ref TString selectedValue, Collection possibleValues) where TString : ISemanticString - { - ArgumentNullException.ThrowIfNull(possibleValues); - - int currentIndex = possibleValues.IndexOf(selectedValue); - string[] possibleValuesNames = [.. possibleValues.Select(e => e.ToString(CultureInfo.InvariantCulture))]; - if (ImGui.Combo(label, ref currentIndex, possibleValuesNames, possibleValuesNames.Length)) - { - selectedValue = possibleValues[currentIndex]; - return true; - } - - return false; - } - - /// - /// An ImGui.Combo implementation that works with strings. - /// - /// Label for display and id. - /// The currently selected value. - /// The collection of possible values. - /// If a combo value was selected. - public static bool Combo(string label, ref string selectedValue, Collection possibleValues) - { - ArgumentNullException.ThrowIfNull(possibleValues); - - int currentIndex = possibleValues.IndexOf(selectedValue); - string[] possibleValuesNames = [.. possibleValues]; - if (ImGui.Combo(label, ref currentIndex, possibleValuesNames, possibleValuesNames.Length)) - { - selectedValue = possibleValues[currentIndex]; - return true; - } - - return false; - } -} diff --git a/ImGui.Widgets/CompatibilitySuppressions.xml b/ImGui.Widgets/CompatibilitySuppressions.xml deleted file mode 100644 index df05015..0000000 --- a/ImGui.Widgets/CompatibilitySuppressions.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - CP0001 - T:System.Diagnostics.CodeAnalysis.FeatureGuardAttribute - lib/net8.0/ktsu.ImGui.Widgets.dll - lib/net9.0/ktsu.ImGui.Widgets.dll - - - CP0001 - T:System.Diagnostics.CodeAnalysis.FeatureSwitchDefinitionAttribute - lib/net8.0/ktsu.ImGui.Widgets.dll - lib/net9.0/ktsu.ImGui.Widgets.dll - - - CP0001 - T:System.Diagnostics.DebuggerDisableUserUnhandledExceptionsAttribute - lib/net8.0/ktsu.ImGui.Widgets.dll - lib/net9.0/ktsu.ImGui.Widgets.dll - - - CP0001 - T:System.Runtime.CompilerServices.OverloadResolutionPriorityAttribute - lib/net8.0/ktsu.ImGui.Widgets.dll - lib/net9.0/ktsu.ImGui.Widgets.dll - - - CP0001 - T:System.Runtime.CompilerServices.ParamCollectionAttribute - lib/net8.0/ktsu.ImGui.Widgets.dll - lib/net9.0/ktsu.ImGui.Widgets.dll - - - CP0001 - T:System.Threading.Lock - lib/net8.0/ktsu.ImGui.Widgets.dll - lib/net9.0/ktsu.ImGui.Widgets.dll - - - CP0014 - M:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.get_UrlFormat:[T:System.Runtime.CompilerServices.CompilerGeneratedAttribute] - lib/net8.0/ktsu.ImGui.Widgets.dll - lib/net9.0/ktsu.ImGui.Widgets.dll - - - CP0014 - M:System.Diagnostics.CodeAnalysis.ExperimentalAttribute.set_UrlFormat(System.String):[T:System.Runtime.CompilerServices.CompilerGeneratedAttribute] - lib/net8.0/ktsu.ImGui.Widgets.dll - lib/net9.0/ktsu.ImGui.Widgets.dll - - \ No newline at end of file diff --git a/ImGui.Widgets/DESCRIPTION.md b/ImGui.Widgets/DESCRIPTION.md deleted file mode 100644 index 2b61e9f..0000000 --- a/ImGui.Widgets/DESCRIPTION.md +++ /dev/null @@ -1 +0,0 @@ -A library of custom widgets using ImGui.NET and utilities to enhance ImGui-based applications. diff --git a/ImGui.Widgets/DividerContainer.cs b/ImGui.Widgets/DividerContainer.cs deleted file mode 100644 index 90a9a3e..0000000 --- a/ImGui.Widgets/DividerContainer.cs +++ /dev/null @@ -1,390 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System.Collections.ObjectModel; -using System.Drawing; -using System.Numerics; - -using Extensions; - -using Hexa.NET.ImGui; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// An enum to specify the layout direction of the divider container. - /// - public enum DividerLayout - { - /// - /// The container will be laid out in columns. - /// - Columns, - /// - /// The container will be laid out in rows. - /// - Rows, - } - - /// - /// A container that can be divided into dragable zones. - /// Useful for creating resizable layouts. - /// Containers can be nested to create complex layouts. - /// - /// - /// Create a new divider container with a callback for when the container is resized and a specified layout direction. - /// - /// The ID of the container. - /// A callback for when the container is resized. - /// The layout direction of the container. - /// The zones to add to the container. - public class DividerContainer(string id, Action? onResized, DividerLayout layout, IEnumerable zones) - { - /// - /// An ID for the container. - /// - public string Id { get; init; } = id; - private int DragIndex { get; set; } = -1; - private List Zones { get; init; } = [.. zones]; - - /// - /// Create a new divider container with a callback for when the container is resized and a specified layout direction. - /// - /// The ID of the container. - /// A callback for when the container is resized. - /// The layout direction of the container. - public DividerContainer(string id, Action? onResized, DividerLayout layout) - : this(id, onResized, layout, []) - { - } - - /// - /// Create a new divider container with the default layout direction of columns. - /// - /// The ID of the container. - public DividerContainer(string id) - : this(id, null, DividerLayout.Columns) - { - } - - /// - /// Create a new divider container with a specified layout direction. - /// - /// The ID of the container. - /// The layout direction of the container. - public DividerContainer(string id, DividerLayout layout) - : this(id, null, layout) - { - } - - /// - /// Create a new divider container with a callback for when the container is resized and the default layout direction of columns. - /// - /// The ID of the container. - /// A callback for when the container is resized. - public DividerContainer(string id, Action? onResized) - : this(id, onResized, DividerLayout.Columns) - { - } - - /// - /// Tick the container to update and draw its contents. - /// - /// The delta time since the last tick. - /// Thrown if the layout direction is not supported. - public void Tick(float dt) - { - ImGuiStylePtr style = ImGui.GetStyle(); - Vector2 windowPadding = style.WindowPadding; - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - Vector2 containerSize = ImGui.GetWindowSize() - (windowPadding * 2.0f); - - Vector2 layoutMask = layout switch - { - DividerLayout.Columns => new Vector2(1, 0), - DividerLayout.Rows => new Vector2(0, 1), - _ => throw new NotImplementedException(), - }; - - Vector2 layoutMaskInverse = layout switch - { - DividerLayout.Columns => new Vector2(0, 1), - DividerLayout.Rows => new Vector2(1, 0), - _ => throw new NotImplementedException(), - }; - - Vector2 windowPos = ImGui.GetWindowPos(); - Vector2 advance = windowPos + windowPadding; - - ImGui.SetNextWindowPos(advance); - ImGui.BeginChild(Id, containerSize, ImGuiChildFlags.None, ImGuiWindowFlags.NoSavedSettings); - - foreach (DividerZone z in Zones) - { - Vector2 zoneSize = CalculateZoneSize(z, windowPadding, containerSize, layoutMask, layoutMaskInverse); - ImGui.SetNextWindowPos(advance); - ImGui.BeginChild(z.Id, zoneSize, ImGuiChildFlags.Borders, ImGuiWindowFlags.NoSavedSettings); - z.Tick(dt); - ImGui.EndChild(); - - advance += CalculateAdvance(z, windowPadding, containerSize, layoutMask); - } - - ImGui.EndChild(); - - //render the handles last otherwise they'll be covered by the other zones windows and wont receive hover events - - //reset the advance to the top left of the container - advance = windowPos + windowPadding; - float resize = 0; - Vector2 mousePos = ImGui.GetMousePos(); - bool resetSize = false; - foreach ((DividerZone z, int i) in Zones.WithIndex()) - { - //draw the grab handle if we're not the last zone - if (z != Zones.Last()) - { - Vector2 zoneSize = CalculateZoneSize(z, windowPadding, containerSize, layoutMask, layoutMaskInverse); - Vector2 lineA = advance + (zoneSize * layoutMask) + (windowPadding * 0.5f * layoutMask); - Vector2 lineB = lineA + (zoneSize * layoutMaskInverse); - float lineWidth = style.WindowPadding.X * 0.5f; - float grabWidth = style.WindowPadding.X * 2; - Vector2 grabBox = new Vector2(grabWidth, grabWidth) * 0.5f; - Vector2 grabMin = lineA - (grabBox * layoutMask); - Vector2 grabMax = lineB + (grabBox * layoutMask); - Vector2 grabSize = grabMax - grabMin; - RectangleF handleRect = new(grabMin.X, grabMin.Y, grabSize.X, grabSize.Y); - bool handleHovered = handleRect.Contains(mousePos.X, mousePos.Y); - bool mouseClickedThisFrame = ImGui.IsMouseClicked(ImGuiMouseButton.Left); - bool handleClicked = handleHovered && mouseClickedThisFrame; - bool handleDoubleClicked = handleHovered && ImGui.IsMouseDoubleClicked(ImGuiMouseButton.Left); - - if (handleClicked) - { - DragIndex = i; - } - - if (handleDoubleClicked) - { - resetSize = true; - } - else if (DragIndex == i) - { - if (ImGui.IsMouseDown(ImGuiMouseButton.Left)) - { - Vector2 mousePosLocal = mousePos - advance; - - DividerZone first = Zones.First(); - DividerZone last = Zones.Last(); - if (first != last && z != first) - { - mousePosLocal += windowPadding * 0.5f * layoutMask; - } - - float requestedSize = layout switch - { - DividerLayout.Columns => mousePosLocal.X / containerSize.X, - DividerLayout.Rows => mousePosLocal.Y / containerSize.Y, - _ => throw new NotImplementedException(), - }; - resize = Math.Clamp(requestedSize, 0.1f, 0.9f); - } - else - { - DragIndex = -1; - } - } - - Vector4 lineColor = DragIndex == i ? new Vector4(1, 1, 1, 0.7f) : handleHovered ? new Vector4(1, 1, 1, 0.5f) : new Vector4(1, 1, 1, 0.3f); - //drawList.AddRectFilled(grabMin, grabMax, ImGui.ColorConvertFloat4ToU32(new Vector4(1, 1, 1, 0.3f))); - drawList.AddLine(lineA, lineB, ImGui.ColorConvertFloat4ToU32(lineColor), lineWidth); - - if (handleHovered || DragIndex == i) - { - ImGui.SetMouseCursor(layout switch - { - DividerLayout.Columns => ImGuiMouseCursor.ResizeEw, - DividerLayout.Rows => ImGuiMouseCursor.ResizeNs, - _ => throw new NotImplementedException(), - }); - } - } - - advance += CalculateAdvance(z, windowPadding, containerSize, layoutMask); - } - - //do the actual resize at the end of the tick so that we don't mess with the dimensions of the layout mid rendering - if (DragIndex > -1) - { - if (resetSize) - { - resize = Zones[DragIndex].InitialSize; - } - - DividerZone resizedZone = Zones[DragIndex]; - DividerZone neighbourZone = Zones[DragIndex + 1]; - float combinedSize = resizedZone.Size + neighbourZone.Size; - float maxSize = combinedSize - 0.1f; - resize = Math.Clamp(resize, 0.1f, maxSize); - bool sizeDidChange = resizedZone.Size != resize; - resizedZone.Size = resize; - neighbourZone.Size = combinedSize - resize; - if (sizeDidChange) - { - onResized?.Invoke(this); - } - - if (resetSize) - { - DragIndex = -1; - } - } - } - - private Vector2 CalculateZoneSize(DividerZone z, Vector2 windowPadding, Vector2 containerSize, Vector2 layoutMask, Vector2 layoutMaskInverse) - { - Vector2 zoneSize = (containerSize * z.Size * layoutMask) + (containerSize * layoutMaskInverse); - - DividerZone first = Zones.First(); - DividerZone last = Zones.Last(); - if (first != last) - { - if (z == first || z == last) - { - zoneSize -= windowPadding * 0.5f * layoutMask; - } - else - { - zoneSize -= windowPadding * layoutMask; - } - } - - return new Vector2((float)Math.Floor(zoneSize.X), (float)Math.Floor(zoneSize.Y)); - } - - private Vector2 CalculateAdvance(DividerZone z, Vector2 windowPadding, Vector2 containerSize, Vector2 layoutMask) - { - Vector2 advance = containerSize * z.Size * layoutMask; - - DividerZone first = Zones.First(); - DividerZone last = Zones.Last(); - if (first != last && z == first) - { - advance += windowPadding * 0.5f * layoutMask; - } - - return new Vector2((float)Math.Round(advance.X), (float)Math.Round(advance.Y)); - } - - /// - /// Add a zone to the container. - /// - /// The ID of the zone. - /// The size of the zone. - /// Whether the zone is resizable. - /// The delegate to call when the zone is ticked. - public void Add(string id, float size, bool resizable, Action tickDelegate) => Zones.Add(new(id, size, resizable, tickDelegate)); - - /// - /// Add a zone to the container. - /// - /// The ID of the zone. - /// The size of the zone. - /// The delegate to call when the zone is ticked. - public void Add(string id, float size, Action tickDelegate) => Zones.Add(new(id, size, tickDelegate)); - - /// - /// Add a zone to the container. - /// - /// The ID of the zone. - /// The delegate to call when the zone is ticked. - public void Add(string id, Action tickDelegate) - { - float size = 1.0f / (Zones.Count + 1); - Zones.Add(new(id, size, tickDelegate)); - } - - /// - /// Add a zone to the container. - /// - /// The zone to add - public void Add(DividerZone zone) => Zones.Add(zone); - - /// - /// Remove a zone from the container. - /// - /// The ID of the zone to remove. - public void Remove(string id) - { - DividerZone? zone = Zones.FirstOrDefault(z => z.Id == id); - if (zone != null) - { - Zones.Remove(zone); - } - } - - /// - /// Remome all zones from the container. - /// - public void Clear() => Zones.Clear(); - - /// - /// Set the size of a zone by its ID. - /// - /// The ID of the zone to set the size of. - /// The size to set. - public void SetSize(string id, float size) - { - DividerZone? zone = Zones.FirstOrDefault(z => z.Id == id); - if (zone != null) - { - zone.Size = size; - } - } - - /// - /// Set the size of a zone by its index. - /// - /// The index of the zone to set the size of. - /// The size to set. - public void SetSize(int index, float size) - { - if (index >= 0 && index < Zones.Count) - { - Zones[index].Size = size; - } - } - - /// - /// Set the sizes of all zones in this container from a collection of sizes. - /// - /// The collection of sizes to set. - /// - public void SetSizesFromList(ICollection sizes) - { - ArgumentNullException.ThrowIfNull(sizes, nameof(sizes)); - - if (sizes.Count != Zones.Count) - { - throw new ArgumentException("List of sizes must be the same length as the zones list"); - } - - foreach ((float s, int i) in sizes.WithIndex()) - { - Zones[i].Size = s; - } - } - - /// - /// Get a collection of the sizes of all zones in this container. - /// - /// A collection of the sizes of all zones in this container. - public Collection GetSizes() => Zones.Select(z => z.Size).ToCollection(); - } -} diff --git a/ImGui.Widgets/DividerZone.cs b/ImGui.Widgets/DividerZone.cs deleted file mode 100644 index 983ac14..0000000 --- a/ImGui.Widgets/DividerZone.cs +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// A zone that can be resized by dragging a divider. - /// For use inside DividerContainer. - /// - public class DividerZone - { - /// - /// The unique identifier for this zone. - /// - public string Id { get; private set; } - /// - /// The size of this zone. - /// - public float Size { get; set; } - /// - /// Whether this zone can be resized. - /// - public bool Resizable { get; } = true; - private Action? TickDelegate { get; } - internal float InitialSize { get; init; } - - /// - /// Create a new divider zone. - /// - /// The unique identifier for this zone. - /// The size of this zone. - public DividerZone(string id, float size) - { - Id = id; - Size = size; - InitialSize = size; - Resizable = true; - } - - /// - /// Create a new resizable divider zone with a tick delegate. - /// - /// The unique identifier for this zone. - /// The size of this zone. - /// The delegate to call every frame. - public DividerZone(string id, float size, Action tickDelegate) - { - Id = id; - Size = size; - InitialSize = size; - TickDelegate = tickDelegate; - } - - /// - /// Create a new divider zone that is optionally resizable with a tick delegate. - /// - /// The unique identifier for this zone. - /// The size of this zone. - /// Whether this zone can be resized. - /// The delegate to call every frame. - public DividerZone(string id, float size, bool resizable, Action tickDelegate) - { - Id = id; - Size = size; - InitialSize = size; - Resizable = resizable; - TickDelegate = tickDelegate; - } - - /// - /// Create a new divider zone that is optionally resizable. - /// - /// The unique identifier for this zone. - /// The size of this zone. - /// Whether this zone can be resized. - public DividerZone(string id, float size, bool resizable) - { - Id = id; - Size = size; - InitialSize = size; - Resizable = resizable; - } - - /// - /// Calls the tick delegate if it is set. - /// - /// The delta time since the last tick. - internal void Tick(float dt) => TickDelegate?.Invoke(dt); - } -} diff --git a/ImGui.Widgets/Grid.cs b/ImGui.Widgets/Grid.cs deleted file mode 100644 index 9221a0c..0000000 --- a/ImGui.Widgets/Grid.cs +++ /dev/null @@ -1,471 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System.Drawing; -using System.Numerics; - -using Hexa.NET.ImGui; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// Gets or sets a value indicating whether to enable grid debug drawing. - /// - public static bool EnableGridDebugDraw { get; set; } - - /// - /// Specifies the order in which grid items are displayed. - /// - /// - /// displays items left to right before moving to the next row. - /// displays items top to bottom before moving to the next column. - /// - public enum GridOrder - { - /// - /// Items are displayed in order left to right before dropping to the next row. - /// Recommended for when displaying grids of icons. - /// Example: - /// [ [1] [2] [3] ] - /// [ [4] [5] [6] ] - /// OR - /// [ [1] [2] [3] [4] [5] ] - /// [ [6] ] - /// - RowMajor, - /// - /// Items are displayed top to bottom before moving to the next column. - /// Recommended when displaying tables of data. - /// Example: - /// [ [1] [4] ] - /// [ [2] [5] ] - /// [ [3] [6] ] - /// OR - /// [ [1] [5] ] - /// [ [2] [6] ] - /// [ [3] ] - /// [ [4] ] - /// - ColumnMajor, - } - - /// - /// Options for changing how the grid is laid out. - /// - public class GridOptions - { - /// - /// Size of the grid. Setting any axis to 0 will use the available space. - /// - public Vector2 GridSize { get; set; } = new(0, 0); - - /// - /// Size the content region to cover all the items. - /// - public bool FitToContents { get; init; } - } - - /// - /// Delegate to measure the size of a grid cell. - /// - /// The type of the item. - /// The item to measure. - /// The size of the item. - public delegate Vector2 MeasureGridCell(T item); - - /// - /// Delegate to draw a grid cell. - /// - /// The type of the item. - /// The item to draw. - /// The calculated size of the grid cell. - /// The calculated size of the item. - public delegate void DrawGridCell(T item, Vector2 cellSize, Vector2 itemSize); - - /// - /// Renders a grid with the specified items and delegates. - /// - /// The type of the items. - /// Id for the grid. - /// The items to be displayed in the grid. - /// The delegate to measure the size of each item. - /// The delegate to draw each item. - public static void RowMajorGrid(string id, IEnumerable items, MeasureGridCell measureDelegate, DrawGridCell drawDelegate) - { - ArgumentNullException.ThrowIfNull(items); - ArgumentNullException.ThrowIfNull(measureDelegate); - ArgumentNullException.ThrowIfNull(drawDelegate); - - GridImpl.ShowRowMajor(id, items, measureDelegate, drawDelegate, new()); - } - - /// - /// Renders a grid with the specified items and delegates. - /// - /// The type of the items. - /// Id for the grid. - /// The items to be displayed in the grid. - /// The delegate to measure the size of each item. - /// The delegate to draw each item. - /// Additional options to modify the grid behaviour - public static void RowMajorGrid(string id, IEnumerable items, MeasureGridCell measureDelegate, DrawGridCell drawDelegate, GridOptions gridOptions) - { - ArgumentNullException.ThrowIfNull(items); - ArgumentNullException.ThrowIfNull(measureDelegate); - ArgumentNullException.ThrowIfNull(drawDelegate); - ArgumentNullException.ThrowIfNull(gridOptions); - - GridImpl.ShowRowMajor(id, items, measureDelegate, drawDelegate, gridOptions); - } - - /// - /// Renders a grid with the specified items and delegates. - /// - /// The type of the items. - /// Id for the grid. - /// The items to be displayed in the grid. - /// The delegate to measure the size of each item. - /// The delegate to draw each item. - public static void ColumnMajorGrid(string id, IEnumerable items, MeasureGridCell measureDelegate, DrawGridCell drawDelegate) - { - ArgumentNullException.ThrowIfNull(items); - ArgumentNullException.ThrowIfNull(measureDelegate); - ArgumentNullException.ThrowIfNull(drawDelegate); - - GridImpl.ShowColumnMajor(id, items, measureDelegate, drawDelegate, new()); - } - - /// - /// Renders a grid with the specified items and delegates. - /// - /// The type of the items. - /// Id for the grid. - /// The items to be displayed in the grid. - /// The delegate to measure the size of each item. - /// The delegate to draw each item. - /// Additional options to modify the grid behaviour - public static void ColumnMajorGrid(string id, IEnumerable items, MeasureGridCell measureDelegate, DrawGridCell drawDelegate, GridOptions gridOptions) - { - ArgumentNullException.ThrowIfNull(items); - ArgumentNullException.ThrowIfNull(measureDelegate); - ArgumentNullException.ThrowIfNull(drawDelegate); - ArgumentNullException.ThrowIfNull(gridOptions); - - GridImpl.ShowColumnMajor(id, items, measureDelegate, drawDelegate, gridOptions); - } - - /// - /// Contains the implementation details for rendering grids. - /// - internal static class GridImpl - { - internal sealed class GridLayout() - { - internal Point Dimensions { private get; init; } - internal float[] ColumnWidths { get; init; } = []; - internal float[] RowHeights { get; init; } = []; - internal int ColumnCount => Dimensions.X; - internal int RowCount => Dimensions.Y; - } - - #region RowMajor - private static Point CalculateRowMajorCellLocation(int itemIndex, int columnCount) - { - int columnIndex = itemIndex % columnCount; - int rowIndex = itemIndex / columnCount; - return new(columnIndex, rowIndex); - } - - private static GridLayout CalculateRowMajorGridLayout(Vector2[] itemSizes, float containerWidth) - { - float widestElementHeight = itemSizes.Max(itemSize => itemSize.X); - GridLayout currentGridLayout = new() - { - Dimensions = new(1, itemSizes.Length), - ColumnWidths = [widestElementHeight], - RowHeights = [.. itemSizes.Select(itemSize => itemSize.Y)] - }; - - GridLayout previousGridLayout = currentGridLayout; - while (currentGridLayout.ColumnCount < itemSizes.Length) - { - int newColumnCount = currentGridLayout.ColumnCount + 1; - int newRowCount = (int)MathF.Ceiling(itemSizes.Length / (float)newColumnCount); - currentGridLayout = new() - { - Dimensions = new(newColumnCount, newRowCount), - ColumnWidths = new float[newColumnCount], - RowHeights = new float[newRowCount], - }; - - for (int i = 0; i < itemSizes.Length; i++) - { - Vector2 itemSize = itemSizes[i]; - Point cellLocation = CalculateRowMajorCellLocation(i, newColumnCount); - - float maxColumnWidth = currentGridLayout.ColumnWidths[cellLocation.X]; - maxColumnWidth = Math.Max(maxColumnWidth, itemSize.X); - currentGridLayout.ColumnWidths[cellLocation.X] = maxColumnWidth; - - float maxRowHeight = currentGridLayout.RowHeights[cellLocation.Y]; - maxRowHeight = Math.Max(maxRowHeight, itemSize.Y); - currentGridLayout.RowHeights[cellLocation.Y] = maxRowHeight; - } - - if (currentGridLayout.ColumnWidths.Sum() > containerWidth) - { - currentGridLayout = previousGridLayout; - break; - } - - previousGridLayout = currentGridLayout; - } - - return currentGridLayout; - } - - internal static void ShowRowMajor(string id, IEnumerable items, MeasureGridCell measureDelegate, DrawGridCell drawDelegate, GridOptions gridOptions) - { - if (gridOptions.GridSize.X <= 0) - { - gridOptions.GridSize = new(ImGui.GetContentRegionAvail().X, gridOptions.GridSize.Y); - } - - if (gridOptions.GridSize.Y <= 0) - { - gridOptions.GridSize = new(gridOptions.GridSize.X, ImGui.GetContentRegionAvail().Y); - } - - Vector2 itemSpacing = ImGui.GetStyle().ItemSpacing; - T[] itemList = [.. items]; - int itemListCount = itemList.Length; - Vector2[] itemDimensions = [.. itemList.Select(i => measureDelegate(i))]; - Vector2[] itemDimensionsWithSpacing = [.. itemDimensions.Select(d => d + itemSpacing)]; - - if (itemList.Length == 0) - { - // No items to display - if (!gridOptions.FitToContents) - { - ImGui.Dummy(gridOptions.GridSize); - } - - return; - } - - GridLayout gridLayout = CalculateRowMajorGridLayout(itemDimensionsWithSpacing, gridOptions.GridSize.X); - - if (gridOptions.FitToContents) - { - float width = gridLayout.ColumnWidths.Sum(); - float height = gridLayout.RowHeights.Sum(); - gridOptions.GridSize = new(width, height); - } - - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - uint borderColor = ImGui.GetColorU32(ImGui.GetStyle().Colors[(int)ImGuiCol.Border]); - if (ImGui.BeginChild($"rowMajorGrid_{id}", gridOptions.GridSize, ImGuiChildFlags.None)) - { - Vector2 gridTopLeft = ImGui.GetCursorScreenPos(); - if (EnableGridDebugDraw) - { - drawList.AddRect(gridTopLeft, gridTopLeft + gridOptions.GridSize, borderColor); - } - - Vector2 rowTopleft = gridTopLeft; - for (int rowIndex = 0; rowIndex < gridLayout.RowCount; rowIndex++) - { - bool isFirstRow = rowIndex == 0; - float previousRowHeight = isFirstRow ? 0f : gridLayout.RowHeights[rowIndex - 1]; - - float columnCursorX = rowTopleft.X; - float columnCursorY = rowTopleft.Y + previousRowHeight; - rowTopleft = new(columnCursorX, columnCursorY); - ImGui.SetCursorScreenPos(rowTopleft); - - Vector2 cellTopLeft = ImGui.GetCursorScreenPos(); - int itemBeginIndex = rowIndex * gridLayout.ColumnCount; - int itemEndIndex = Math.Min(itemBeginIndex + gridLayout.ColumnCount, itemListCount); - for (int itemIndex = itemBeginIndex; itemIndex < itemEndIndex; itemIndex++) - { - int columnIndex = itemIndex - itemBeginIndex; - bool isFirstColumn = itemIndex == itemBeginIndex; - float previousCellWidth = isFirstColumn ? 0f : gridLayout.ColumnWidths[columnIndex - 1]; - - float cellCursorX = cellTopLeft.X + previousCellWidth; - float cellCursorY = cellTopLeft.Y; - cellTopLeft = new(cellCursorX, cellCursorY); - ImGui.SetCursorScreenPos(cellTopLeft); - - float cellWidth = gridLayout.ColumnWidths[columnIndex]; - float cellHeight = gridLayout.RowHeights[rowIndex]; - Vector2 cellSize = new(cellWidth, cellHeight); - - if (EnableGridDebugDraw) - { - drawList.AddRect(cellTopLeft, cellTopLeft + cellSize, borderColor); - } - - drawDelegate(itemList[itemIndex], cellSize, itemDimensions[itemIndex]); - } - } - } - - ImGui.EndChild(); - } - #endregion - - #region ColumnMajor - private static Point CalculateColumnMajorCellLocation(int itemIndex, int rowCount) - { - int columnIndex = itemIndex / rowCount; - int rowIndex = itemIndex % rowCount; - return new(columnIndex, rowIndex); - } - - private static GridLayout CalculateColumnMajorGridLayout(Vector2[] itemSizes, float containerHeight) - { - float tallestElementHeight = itemSizes.Max(itemSize => itemSize.Y); - GridLayout currentGridLayout = new() - { - Dimensions = new(itemSizes.Length, 1), - ColumnWidths = [.. itemSizes.Select(itemSize => itemSize.X)], - RowHeights = [tallestElementHeight], - }; - - GridLayout previousGridLayout = currentGridLayout; - while (currentGridLayout.RowCount < itemSizes.Length) - { - int newRowCount = currentGridLayout.RowCount + 1; - int newColumnCount = (int)MathF.Ceiling(itemSizes.Length / (float)newRowCount); - currentGridLayout = new() - { - Dimensions = new(newColumnCount, newRowCount), - ColumnWidths = new float[newColumnCount], - RowHeights = new float[newRowCount], - }; - - for (int i = 0; i < itemSizes.Length; i++) - { - Vector2 itemSize = itemSizes[i]; - Point cellLocation = CalculateColumnMajorCellLocation(i, newRowCount); - - float maxColumnWidth = currentGridLayout.ColumnWidths[cellLocation.X]; - maxColumnWidth = Math.Max(maxColumnWidth, itemSize.X); - currentGridLayout.ColumnWidths[cellLocation.X] = maxColumnWidth; - - float maxRowHeight = currentGridLayout.RowHeights[cellLocation.Y]; - maxRowHeight = Math.Max(maxRowHeight, itemSize.Y); - currentGridLayout.RowHeights[cellLocation.Y] = maxRowHeight; - } - - if (currentGridLayout.RowHeights.Sum() > containerHeight) - { - currentGridLayout = previousGridLayout; - break; - } - - previousGridLayout = currentGridLayout; - } - - return currentGridLayout; - } - - internal static void ShowColumnMajor(string id, IEnumerable items, MeasureGridCell measureDelegate, DrawGridCell drawDelegate, GridOptions gridOptions) - { - if (gridOptions.GridSize.X <= 0) - { - gridOptions.GridSize = new(ImGui.GetContentRegionAvail().X, gridOptions.GridSize.Y); - } - - if (gridOptions.GridSize.Y <= 0) - { - gridOptions.GridSize = new(gridOptions.GridSize.X, ImGui.GetContentRegionAvail().Y); - } - - Vector2 itemSpacing = ImGui.GetStyle().ItemSpacing; - T[] itemList = [.. items]; - int itemListCount = itemList.Length; - Vector2[] itemDimensions = [.. itemList.Select(i => measureDelegate(i))]; - Vector2[] itemDimensionsWithSpacing = [.. itemDimensions.Select(d => d + itemSpacing)]; - - if (itemList.Length == 0) - { - // No items to display - if (!gridOptions.FitToContents) - { - ImGui.Dummy(gridOptions.GridSize); - } - - return; - } - - GridLayout gridLayout = CalculateColumnMajorGridLayout(itemDimensionsWithSpacing, gridOptions.GridSize.Y); - - if (gridOptions.FitToContents) - { - float width = gridLayout.ColumnWidths.Sum(); - float height = gridLayout.RowHeights.Sum(); - gridOptions.GridSize = new(width, height); - } - - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - uint borderColor = ImGui.GetColorU32(ImGui.GetStyle().Colors[(int)ImGuiCol.Border]); - if (ImGui.BeginChild($"columnMajorGrid_{id}", gridOptions.GridSize, ImGuiChildFlags.None, ImGuiWindowFlags.HorizontalScrollbar)) - { - Vector2 gridTopLeft = ImGui.GetCursorScreenPos(); - if (EnableGridDebugDraw) - { - drawList.AddRect(gridTopLeft, gridTopLeft + gridOptions.GridSize, borderColor); - } - - Vector2 columnTopLeft = gridTopLeft; - for (int columnIndex = 0; columnIndex < gridLayout.ColumnCount; columnIndex++) - { - bool isFirstColumn = columnIndex == 0; - float previousColumnWidth = isFirstColumn ? 0f : gridLayout.ColumnWidths[columnIndex - 1]; - - float columnCursorX = columnTopLeft.X + previousColumnWidth; - float columnCursorY = columnTopLeft.Y; - columnTopLeft = new(columnCursorX, columnCursorY); - ImGui.SetCursorScreenPos(columnTopLeft); - - Vector2 cellTopLeft = ImGui.GetCursorScreenPos(); - int itemBeginIndex = columnIndex * gridLayout.RowCount; - int itemEndIndex = Math.Min(itemBeginIndex + gridLayout.RowCount, itemListCount); - for (int itemIndex = itemBeginIndex; itemIndex < itemEndIndex; itemIndex++) - { - int rowIndex = itemIndex - itemBeginIndex; - bool isFirstRow = itemIndex == itemBeginIndex; - float previousCellHeight = isFirstRow ? 0f : itemDimensionsWithSpacing[rowIndex - 1].Y; - - float cellCursorX = cellTopLeft.X; - float cellCursorY = cellTopLeft.Y + previousCellHeight; - cellTopLeft = new(cellCursorX, cellCursorY); - ImGui.SetCursorScreenPos(cellTopLeft); - - float cellWidth = gridLayout.ColumnWidths[columnIndex]; - float cellHeight = gridLayout.RowHeights[rowIndex]; - Vector2 cellSize = new(cellWidth, cellHeight); - - if (EnableGridDebugDraw) - { - drawList.AddRect(cellTopLeft, cellTopLeft + cellSize, borderColor); - } - - drawDelegate(itemList[itemIndex], cellSize, itemDimensions[itemIndex]); - } - } - } - - ImGui.EndChild(); - } - #endregion - } -} diff --git a/ImGui.Widgets/Icon.cs b/ImGui.Widgets/Icon.cs deleted file mode 100644 index 6921dc0..0000000 --- a/ImGui.Widgets/Icon.cs +++ /dev/null @@ -1,302 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ImGui.Styler; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// Gets or sets a value indicating whether to enable debug drawing for icons. - /// - public static bool EnableIconDebugDraw { get; set; } - - /// - /// Specifies the alignment of the icon. - /// - public enum IconAlignment - { - /// - /// Aligns the icon horizontally. - /// - Horizontal, - - /// - /// Aligns the icon vertically. - /// - Vertical, - } - - /// - /// Additional options to modify Icon behavior. - /// - public class IconOptions - { - /// - /// The color of the icon. - /// - public Vector4 Color { get; init; } = Styler.Color.Palette.Neutral.White.Value; - - /// - /// The tooltip to display. - /// - public string Tooltip { get; init; } = string.Empty; - - /// - /// Gets or sets the action to be performed on click. - /// - public Action? OnClick { get; init; } - - /// - /// Gets or sets the action to be performed on double click. - /// - public Action? OnDoubleClick { get; init; } - - /// - /// Gets or sets the action to be performed on right click. - /// - public Action? OnRightClick { get; init; } - - /// - /// Gets or sets the action to be performed on context menu. - /// - public Action? OnContextMenu { get; init; } - } - - /// - /// Renders an icon with the specified parameters. - /// - /// The label of the icon. - /// The texture ID of the icon. - /// The size of the image. - /// The alignment of the icon. - /// Was the icon bounds clicked - public static bool Icon(string label, uint textureId, float imageSize, IconAlignment iconAlignment) => - IconImpl.Show(label, textureId, new(imageSize, imageSize), iconAlignment, new()); - - /// - /// Renders an icon with the specified parameters. - /// - /// The label of the icon. - /// The texture ID of the icon. - /// The size of the image. - /// The alignment of the icon. - /// Was the icon bounds clicked - public static bool Icon(string label, uint textureId, Vector2 imageSize, IconAlignment iconAlignment) => - IconImpl.Show(label, textureId, imageSize, iconAlignment, new()); - - /// - /// Renders an icon with the specified parameters. - /// - /// The label of the icon. - /// The texture ID of the icon. - /// The size of the image. - /// The alignment of the icon. - /// Additional options - /// Was the icon bounds clicked - public static bool Icon(string label, uint textureId, float imageSize, IconAlignment iconAlignment, IconOptions options) => - IconImpl.Show(label, textureId, new(imageSize, imageSize), iconAlignment, options); - - /// - /// Renders an icon with the specified parameters. - /// - /// The label of the icon. - /// The texture ID of the icon. - /// The size of the image. - /// The alignment of the icon. - /// Additional options - /// Was the icon bounds clicked - public static bool Icon(string label, uint textureId, Vector2 imageSize, IconAlignment iconAlignment, IconOptions options) => - IconImpl.Show(label, textureId, imageSize, iconAlignment, options); - - /// - /// Calculates the size of the icon with the specified parameters. - /// - /// The label of the icon. - /// The size of the image. - /// The alignment of the icon. - /// The calculated size of the icon. - public static Vector2 CalcIconSize(string label, float imageSize, IconAlignment iconAlignment) => CalcIconSize(label, new Vector2(imageSize), iconAlignment); - - /// - /// Calculates the size of the icon with the specified parameters. - /// - /// The label of the icon. - /// The size of the image. - /// The calculated size of the icon. - public static Vector2 CalcIconSize(string label, Vector2 imageSize) => CalcIconSize(label, imageSize, IconAlignment.Horizontal); - - /// - /// Calculates the size of the icon with the specified parameters. - /// - /// The label of the icon. - /// The size of the image. - /// The alignment of the image and label with respect to each other. - /// The calculated size of the widget. - public static Vector2 CalcIconSize(string label, Vector2 imageSize, IconAlignment iconAlignment) - { - ImGuiStylePtr style = ImGui.GetStyle(); - Vector2 framePadding = style.FramePadding; - Vector2 itemSpacing = style.ItemSpacing; - Vector2 labelSize = ImGui.CalcTextSize(label); - if (iconAlignment == IconAlignment.Horizontal) - { - Vector2 boundingBoxSize = imageSize + new Vector2(labelSize.X + itemSpacing.X, 0); - boundingBoxSize.Y = Math.Max(boundingBoxSize.Y, labelSize.Y); - return boundingBoxSize + (framePadding * 2); - } - else if (iconAlignment == IconAlignment.Vertical) - { - Vector2 boundingBoxSize = imageSize + new Vector2(0, labelSize.Y + itemSpacing.Y); - boundingBoxSize.X = Math.Max(boundingBoxSize.X, labelSize.X); - return boundingBoxSize + (framePadding * 2); - } - - return imageSize; - } - - /// - /// Contains the implementation details for rendering icons. - /// - internal static class IconImpl - { - internal static bool Show(string label, uint textureId, Vector2 imageSize, IconAlignment iconAlignment, IconOptions options) - { - ArgumentNullException.ThrowIfNull(label); - ArgumentNullException.ThrowIfNull(options); - - bool wasClicked = false; - - ImGuiStylePtr style = ImGui.GetStyle(); - Vector2 framePadding = style.FramePadding; - Vector2 itemSpacing = style.ItemSpacing; - - ImGui.PushID(label); - - Vector2 cursorStartPos = ImGui.GetCursorScreenPos(); - Vector2 labelSize = ImGui.CalcTextSize(label);// TODO, maybe pass this to an internal overload of CalcIconSize to save recalculating - Vector2 boundingBoxSize = CalcIconSize(label, imageSize, iconAlignment); - - ImGui.SetCursorScreenPos(cursorStartPos + framePadding); - - switch (iconAlignment) - { - case IconAlignment.Horizontal: - HorizontalLayout(label, textureId, imageSize, labelSize, boundingBoxSize, itemSpacing, options.Color, cursorStartPos); - break; - case IconAlignment.Vertical: - VerticalLayout(label, textureId, imageSize, labelSize, boundingBoxSize, itemSpacing, options.Color, cursorStartPos); - break; - default: - throw new NotImplementedException(); - } - - ImGui.SetCursorScreenPos(cursorStartPos); - ImGui.Dummy(boundingBoxSize); - bool isHovered = ImGui.IsItemHovered(); - bool isMouseClicked = ImGui.IsMouseClicked(ImGuiMouseButton.Left); - bool isMouseDoubleClicked = ImGui.IsMouseDoubleClicked(ImGuiMouseButton.Left); - bool isRightMouseClicked = ImGui.IsMouseClicked(ImGuiMouseButton.Right); - bool isRightMouseReleased = ImGui.IsMouseReleased(ImGuiMouseButton.Right); - - if (!string.IsNullOrEmpty(options.Tooltip)) - { - ImGui.SetItemTooltip(options.Tooltip); - } - - if (isHovered || EnableIconDebugDraw) - { - uint borderColor = ImGui.GetColorU32(ImGui.GetStyle().Colors[(int)ImGuiCol.Border]); - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - drawList.AddRect(cursorStartPos, cursorStartPos + boundingBoxSize, ImGui.GetColorU32(borderColor)); - } - - if (isHovered) - { - if (isMouseClicked) - { - options.OnClick?.Invoke(); - wasClicked = true; - } - - if (isMouseDoubleClicked) - { - options.OnDoubleClick?.Invoke(); - } - - if (isRightMouseClicked) - { - options.OnRightClick?.Invoke(); - } - - if (isRightMouseReleased && options.OnContextMenu is not null) - { - ImGui.OpenPopup($"{label}_Context"); - } - } - - if (ImGui.BeginPopup($"{label}_Context")) - { - options.OnContextMenu?.Invoke(); - ImGui.EndPopup(); - } - - ImGui.PopID(); - - return wasClicked; - } - - private static void VerticalLayout(string label, uint textureId, Vector2 imageSize, Vector2 labelSize, Vector2 boundingBoxSize, Vector2 itemSpacing, Vector4 color = default, Vector2 cursorStartPos = default) - { - Vector2 imageTopLeft = cursorStartPos + new Vector2((boundingBoxSize.X - imageSize.X) / 2, 0); - ImGui.SetCursorScreenPos(imageTopLeft); - unsafe - { - if (color != default) - { - // Use transparent background with color as tint to preserve alpha - ImGui.ImageWithBg(new ImTextureRef(texId: textureId), imageSize, Vector4.Zero, color); - } - else - { - ImGui.Image(new ImTextureRef(texId: textureId), imageSize); - } - } - - Vector2 labelTopLeft = cursorStartPos + new Vector2((boundingBoxSize.X - labelSize.X) / 2, imageSize.Y + itemSpacing.Y); - ImGui.SetCursorScreenPos(labelTopLeft); - ImGui.TextUnformatted(label); - } - - private static void HorizontalLayout(string label, uint textureId, Vector2 imageSize, Vector2 labelSize, Vector2 boundingBoxSize, Vector2 itemSpacing, Vector4 color = default, Vector2 cursorStartPos = default) - { - unsafe - { - if (color != default) - { - // Use transparent background with color as tint to preserve alpha - ImGui.ImageWithBg(new ImTextureRef(texId: textureId), imageSize, Vector4.Zero, color); - } - else - { - ImGui.Image(new ImTextureRef(texId: textureId), imageSize); - } - } - Vector2 leftAlign = new(labelSize.X, boundingBoxSize.Y); - ImGui.SetCursorScreenPos(cursorStartPos + new Vector2(imageSize.X + itemSpacing.X, 0)); - using (new Alignment.CenterWithin(labelSize, leftAlign)) - { - ImGui.TextUnformatted(label); - } - } - } -} diff --git a/ImGui.Widgets/ImGui.Widgets.csproj b/ImGui.Widgets/ImGui.Widgets.csproj deleted file mode 100644 index d017b0a..0000000 --- a/ImGui.Widgets/ImGui.Widgets.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - True - net8.0;net9.0 - - - - - - - diff --git a/ImGui.Widgets/Image.cs b/ImGui.Widgets/Image.cs deleted file mode 100644 index 18a811d..0000000 --- a/ImGui.Widgets/Image.cs +++ /dev/null @@ -1,158 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ImGui.Styler; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// Displays an image with the specified texture ID and size. - /// - /// The ID of the texture to display. - /// The size of the image. - /// True if the image is clicked; otherwise, false. - public static bool Image(uint textureId, Vector2 size) => ImageImpl.Show(textureId, size, Vector4.One); - - /// - /// Displays an image with the specified texture ID, size, and color. - /// - /// The ID of the texture to display. - /// The size of the image. - /// The color to apply to the image. - /// True if the image is clicked; otherwise, false. - public static bool Image(uint textureId, Vector2 size, Vector4 color) => ImageImpl.Show(textureId, size, color); - - /// - /// Displays a centered image with the specified texture ID and size. - /// - /// The ID of the texture to display. - /// The size of the image. - /// True if the image is clicked; otherwise, false. - public static bool ImageCentered(uint textureId, Vector2 size) => ImageImpl.Centered(textureId, size, Vector4.One); - - /// - /// Displays a centered image with the specified texture ID, size, and color. - /// - /// The ID of the texture to display. - /// The size of the image. - /// The color to apply to the image. - /// True if the image is clicked; otherwise, false. - public static bool ImageCentered(uint textureId, Vector2 size, Vector4 color) => ImageImpl.Centered(textureId, size, color); - - /// - /// Displays a centered image within a container with the specified texture ID, size, and container size. - /// - /// The ID of the texture to display. - /// The size of the image. - /// The size of the container. - /// True if the image is clicked; otherwise, false. - public static bool ImageCenteredWithin(uint textureId, Vector2 size, Vector2 containerSize) => ImageImpl.CenteredWithin(textureId, size, containerSize, Vector4.One); - - /// - /// Displays a centered image within a container with the specified texture ID, size, container size, and color. - /// - /// The ID of the texture to display. - /// The size of the image. - /// The size of the container. - /// The color to apply to the image. - /// True if the image is clicked; otherwise, false. - public static bool ImageCenteredWithin(uint textureId, Vector2 size, Vector2 containerSize, Vector4 color) => ImageImpl.CenteredWithin(textureId, size, containerSize, color); - - internal static class ImageImpl - { - /// - /// Displays an image with the specified texture ID and size. - /// - /// The ID of the texture to display. - /// The size of the image. - /// True if the image is clicked; otherwise, false. - internal static bool Show(uint textureId, Vector2 size) => Show(textureId, size, Vector4.One); - - /// - /// Displays an image with the specified texture ID, size, and color. - /// - /// The ID of the texture to display. - /// The size of the image. - /// The color to apply to the image. - /// True if the image is clicked; otherwise, false. - internal static bool Show(uint textureId, Vector2 size, Vector4 color = default) - { - unsafe - { - if (color != default) - { - // Use transparent background with color as tint to preserve alpha - ImGui.ImageWithBg(new ImTextureRef(texId: textureId), size, Vector4.Zero, color); - } - else - { - ImGui.Image(new ImTextureRef(texId: textureId), size); - } - } - return ImGui.IsItemClicked(); - } - - /// - /// Displays a centered image with the specified texture ID and size. - /// - /// The ID of the texture to display. - /// The size of the image. - /// True if the image is clicked; otherwise, false. - internal static bool Centered(uint textureId, Vector2 size) => Centered(textureId, size, Vector4.One); - - /// - /// Displays a centered image with the specified texture ID, size, and color. - /// - /// The ID of the texture to display. - /// The size of the image. - /// The color to apply to the image. - /// True if the image is clicked; otherwise, false. - internal static bool Centered(uint textureId, Vector2 size, Vector4 color) - { - bool clicked = false; - using (new Alignment.Center(size)) - { - clicked = Show(textureId, size, color); - } - - return clicked; - } - - /// - /// Displays a centered image within a container with the specified texture ID, size, and container size. - /// - /// The ID of the texture to display. - /// The size of the image. - /// The size of the container. - /// True if the image is clicked; otherwise, false. - internal static bool CenteredWithin(uint textureId, Vector2 size, Vector2 containerSize) => CenteredWithin(textureId, size, containerSize, Vector4.One); - - /// - /// Displays a centered image within a container with the specified texture ID, size, container size, and color. - /// - /// The ID of the texture to display. - /// The size of the image. - /// The size of the container. - /// The color to apply to the image. - /// True if the image is clicked; otherwise, false. - internal static bool CenteredWithin(uint textureId, Vector2 imageSize, Vector2 containerSize, Vector4 color) - { - bool clicked = false; - using (new Alignment.CenterWithin(imageSize, containerSize)) - { - clicked = Show(textureId, imageSize, color); - } - - return clicked; - } - } -} diff --git a/ImGui.Widgets/Knob.cs b/ImGui.Widgets/Knob.cs deleted file mode 100644 index 3fb5199..0000000 --- a/ImGui.Widgets/Knob.cs +++ /dev/null @@ -1,726 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; -using System; -using System.Globalization; -using System.Numerics; - -using Hexa.NET.ImGui; - -/// -/// Options for customizing the appearance and behavior of the knob widget. -/// -[Flags] -public enum ImGuiKnobOptions -{ - /// - /// No options selected. - /// - None = 0, - /// - /// Hides the title of the knob. - /// - NoTitle = 1 << 0, - /// - /// Disables the input field for the knob. - /// - NoInput = 1 << 1, - /// - /// Shows a tooltip with the current value when hovering over the knob. - /// - ValueTooltip = 1 << 2, - /// - /// Allows horizontal dragging to change the knob value. - /// - DragHorizontal = 1 << 3, - /// - /// Displays the title below the knob. - /// - TitleBelow = 1 << 4, -}; - -/// -/// Variants for customizing the visual appearance of the knob widget. -/// -[Flags] -public enum ImGuiKnobVariant -{ - /// - /// Represents a knob variant with tick marks. - /// - Tick = 1 << 0, - /// - /// Represents a knob variant with a dot indicator. - /// - Dot = 1 << 1, - /// - /// Represents a knob variant with a wiper indicator. - /// - Wiper = 1 << 2, - /// - /// Represents a knob variant with only a wiper indicator. - /// - WiperOnly = 1 << 3, - /// - /// Represents a knob variant with a wiper and dot indicator. - /// - WiperDot = 1 << 4, - /// - /// Represents a knob variant with stepped values. - /// - Stepped = 1 << 5, - /// - /// Represents a knob variant with a space theme. - /// - Space = 1 << 6, -}; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// Draws a knob widget with a floating-point value. - /// - /// The label for the knob. - /// The current value of the knob. - /// The minimum value of the knob. - /// The maximum value of the knob. - /// The speed at which the knob value changes. - /// The format string for displaying the value. - /// The visual variant of the knob. - /// The size of the knob. - /// The options for the knob. - /// The number of steps for the knob. - /// True if the value was changed, otherwise false. - public static bool Knob(string label, ref float value, float vMin, float vMax, float speed = 0, string? format = null, ImGuiKnobVariant variant = ImGuiKnobVariant.Tick, float size = 0, ImGuiKnobOptions flags = ImGuiKnobOptions.None, int steps = 10) => - KnobImpl.Draw(label, ref value, vMin, vMax, speed, format, variant, size, flags, steps); - - /// - /// Draws a knob widget with an integer value. - /// - /// The label for the knob. - /// The current value of the knob. - /// The minimum value of the knob. - /// The maximum value of the knob. - /// The speed at which the knob value changes. - /// The format string for displaying the value. - /// The visual variant of the knob. - /// The size of the knob. - /// The options for the knob. - /// The number of steps for the knob. - /// True if the value was changed, otherwise false. - public static bool Knob(string label, ref int value, int vMin, int vMax, float speed = 0, string? format = null, ImGuiKnobVariant variant = ImGuiKnobVariant.Tick, float size = 0, ImGuiKnobOptions flags = ImGuiKnobOptions.None, int steps = 10) => - KnobImpl.Draw(label, ref value, vMin, vMax, speed, format, variant, size, flags, steps); - /// - /// Knob widget for ImGui.NET - /// - internal static class KnobImpl - { - public sealed class KnobColors - { - public ImColor Base { get; set; } - public ImColor Hovered { get; set; } - public ImColor Active { get; set; } - - public KnobColors() { } - - public KnobColors(ImColor color) - { - Base = color; - Hovered = color; - Active = color; - } - } - - public static bool Draw(string label, ref float value, float vMin, float vMax, float speed = 0, string? format = null, ImGuiKnobVariant variant = ImGuiKnobVariant.Tick, float? size = null, ImGuiKnobOptions flags = ImGuiKnobOptions.None, int steps = 10) - { - format ??= "%.3f"; - return KnobInternal.BaseKnob(label, ImGuiDataType.Float, ref value, vMin, vMax, speed, format, variant, size, flags, steps); - } - - public static bool Draw(string label, ref int value, int vMin, int vMax, float speed = 0, string? format = null, ImGuiKnobVariant variant = ImGuiKnobVariant.Tick, float? size = null, ImGuiKnobOptions flags = ImGuiKnobOptions.None, int steps = 10) - { - format ??= "%if"; - return KnobInternal.BaseKnob(label, ImGuiDataType.S32, ref value, vMin, vMax, speed, format, variant, size, flags, steps); - } - - private static void DrawArc1(Vector2 center, float radius, float startAngle, float endAngle, float thickness, ImColor color, int numSegments) - { - Vector2 start = new( - center[0] + (MathF.Cos(startAngle) * radius), - center[1] + (MathF.Sin(startAngle) * radius)); - - Vector2 end = new( - center[0] + (MathF.Cos(endAngle) * radius), - center[1] + (MathF.Sin(endAngle) * radius)); - - // Calculate bezier arc points - float ax = start[0] - center[0]; - float ay = start[1] - center[1]; - float bx = end[0] - center[0]; - float by = end[1] - center[1]; - float q1 = (ax * ax) + (ay * ay); - float q2 = q1 + (ax * bx) + (ay * by); - float k2 = 4.0f / 3.0f * (MathF.Sqrt(2.0f * q1 * q2) - q2) / ((ax * by) - (ay * bx)); - Vector2 arc1 = new(center[0] + ax - (k2 * ay), center[1] + ay + (k2 * ax)); - Vector2 arc2 = new(center[0] + bx + (k2 * by), center[1] + by - (k2 * bx)); - - ImDrawListPtr drawlist = ImGui.GetWindowDrawList(); - - drawlist.AddBezierCubic(start, arc1, arc2, end, ImGui.GetColorU32(color.Value), thickness, numSegments); - } - - internal static void DrawArc(Vector2 center, float radius, float startAngle, float endAngle, float thickness, ImColor color, int numSegments, int bezierCount) - { - // Overlap and angle of ends of bezier curves needs work, only looks good when not transperant - float overlap = thickness * radius * 0.00001f * MathF.PI; - float delta = endAngle - startAngle; - float bez_step = 1.0f / bezierCount; - float mid_angle = startAngle + overlap; - - for (int i = 0; i < bezierCount - 1; i++) - { - float mid_angle2 = (delta * bez_step) + mid_angle; - DrawArc1(center, radius, mid_angle - overlap, mid_angle2 + overlap, thickness, color, numSegments); - mid_angle = mid_angle2; - } - - DrawArc1(center, radius, mid_angle - overlap, endAngle, thickness, color, numSegments); - } - - private sealed class KnobInternal where TDataType : unmanaged, INumber - { - public float Radius { get; set; } - public bool ValueChanged { get; set; } - public Vector2 Center { get; set; } - public bool IsActive { get; set; } - public bool IsHovered { get; set; } - public float AngleMin { get; set; } - public float AngleMax { get; set; } - public float T { get; set; } - public float Angle { get; set; } - public float AngleCos { get; set; } - public float AngleSin { get; set; } - - private static float AccumulatedDiff { get; set; } - private static bool AccumulatorDirty { get; set; } - - private static float InverseLerp(TDataType min, TDataType max, TDataType value) => float.CreateSaturating(value - min) / float.CreateSaturating(max - min); - - public KnobInternal(string label_, ImGuiDataType dataType, ref TDataType value, TDataType vMin, TDataType vMax, float speed, float radius_, string format, ImGuiKnobOptions flags) - { - Radius = radius_; - T = InverseLerp(vMin, vMax, value); - Vector2 screenPos = ImGui.GetCursorScreenPos(); - - // Handle dragging - ImGui.InvisibleButton(label_, new(Radius * 2.0f, Radius * 2.0f)); - - ValueChanged = DragBehavior(dataType, ref value, vMin, vMax, speed, format, flags); - - AngleMin = MathF.PI * 0.75f; - AngleMax = MathF.PI * 2.25f; - Center = new(screenPos[0] + Radius, screenPos[1] + Radius); - Angle = AngleMin + ((AngleMax - AngleMin) * T); - AngleCos = MathF.Cos(Angle); - AngleSin = MathF.Sin(Angle); - } - - private bool DragBehavior(ImGuiDataType dataType, ref TDataType v, TDataType vMin, TDataType vMax, float speed, string format, ImGuiKnobOptions flags) - { - float floatValue = float.CreateSaturating(v); - float floatMin = float.CreateSaturating(vMin); - float floatMax = float.CreateSaturating(vMax); - bool isClamped = vMin < vMax; - float range = floatMax - floatMin; - if (speed == 0.0f && isClamped && (range < float.MaxValue)) - { - speed = range * 0.01f; - } - - bool justActivated = ImGui.IsItemActivated(); - IsActive = ImGui.IsItemActive(); - IsHovered = ImGui.IsItemHovered(); - - bool isFloatingPoint = dataType is ImGuiDataType.Float or ImGuiDataType.Double; - int decimalPrecision = isFloatingPoint ? ParseFormatPrecision(format, 3) : 0; - speed = MathF.Max(speed, GetMinimumStepAtDecimalPrecision(decimalPrecision)); - - Vector2 mouseDelta = ImGui.GetIO().MouseDelta; - float diff = (flags.HasFlag(ImGuiKnobOptions.DragHorizontal) ? mouseDelta.X : -mouseDelta.Y) * speed; - - diff = IsActive ? diff : 0.0f; - - if (justActivated) - { - AccumulatedDiff = 0.0f; - AccumulatorDirty = false; - } - else if (diff != 0.0f) - { - AccumulatedDiff += diff; - AccumulatorDirty = true; - } - - if (!AccumulatorDirty) - { - return false; - } - - float newValue = floatValue + diff; - - // Round to user desired precision based on format string - if (isFloatingPoint) - { - newValue = MathF.Round(newValue, decimalPrecision); - } - - float appliedDiff = newValue - floatValue; - AccumulatedDiff -= appliedDiff; - AccumulatorDirty = false; - - if (newValue == -0.0f) - { - newValue = 0.0f; - } - - // Clamp values (+ handle overflow/wrap-around for integer types) - if (newValue != floatValue && isClamped) - { - if (newValue < floatMin || (newValue > floatValue && diff < 0.0f && !isFloatingPoint)) - { - newValue = floatMin; - } - - if (newValue > floatMax || (newValue < floatValue && diff > 0.0f && !isFloatingPoint)) - { - newValue = floatMax; - } - } - - if (newValue != floatValue) - { - v = TDataType.CreateSaturating(newValue); - return true; - } - - return false; - } - - private static int ParseFormatPrecision(string fmt, int defaultPrecision) - { - - ReadOnlySpan fmtSpan = ParseFormatFindStart(fmt); - if (fmtSpan[0] != '%') - { - return defaultPrecision; - } - - fmtSpan = fmtSpan[1..]; - while (fmtSpan[0] is >= '0' and <= '9') - { - fmtSpan = fmtSpan[1..]; - } - - int precision = int.MaxValue; - if (fmtSpan[0] == '.') - { - fmtSpan = fmtSpan[1..]; - int precisionLength = 0; - while (fmtSpan[precisionLength] is >= '0' and <= '9') - { - precisionLength++; - } - - precision = int.Parse(fmtSpan[..precisionLength], CultureInfo.CurrentCulture); - fmtSpan = fmtSpan[precisionLength..]; - - if (precision is < 0 or > 99) - { - precision = defaultPrecision; - } - } - - if (fmtSpan[0] is 'e' or 'E') // Maximum precision with scientific notation - { - precision = -1; - } - - if ((fmtSpan[0] == 'g' || fmtSpan[0] == 'G') && precision == int.MaxValue) - { - precision = -1; - } - - return (precision == int.MaxValue) ? defaultPrecision : precision; - } - - private static ReadOnlySpan ParseFormatFindStart(string fmt) - { - ReadOnlySpan fmtSpan = fmt.AsSpan(); - while (fmtSpan.Length > 2) - { - char c = fmtSpan[0]; - if (c == '%' && fmtSpan[1] != '%') - { - return fmtSpan; - } - else if (c == '%') - { - fmtSpan = fmtSpan[1..]; - } - - fmtSpan = fmtSpan[1..]; - } - - return fmtSpan; - } - - private static readonly List MinSteps = [1.0f, 0.1f, 0.01f, 0.001f, 0.0001f, 0.00001f, 0.000001f, 0.0000001f, 0.00000001f, 0.000000001f]; - private static float GetMinimumStepAtDecimalPrecision(int decimal_precision) - { - return decimal_precision < 0 - ? float.MinValue - : (decimal_precision < MinSteps.Count) ? MinSteps[decimal_precision] : MathF.Pow(10.0f, -decimal_precision); - } - - private void DrawDot(float size, float radius, float angle, KnobColors color, int segments) - { - float dotSize = size * Radius; - float dotRadius = radius * Radius; - - ImGui.GetWindowDrawList().AddCircleFilled( - new(Center[0] + (MathF.Cos(angle) * dotRadius), Center[1] + (MathF.Sin(angle) * dotRadius)), - dotSize, - ImGui.GetColorU32((IsActive ? color.Active : (IsHovered ? color.Hovered : color.Base)).Value), - segments); - } - - private void DrawTick(float start, float end, float width, float angle, KnobColors color) - { - float tickStart = start * Radius; - float tickEnd = end * Radius; - float angleCos = MathF.Cos(angle); - float angleSin = MathF.Sin(angle); - - ImGui.GetWindowDrawList().AddLine( - - new(Center[0] + (angleCos * tickEnd), Center[1] + (angleSin * tickEnd)), - new(Center[0] + (angleCos * tickStart), Center[1] + (angleSin * tickStart)), - ImGui.GetColorU32((IsActive ? color.Active : (IsHovered ? color.Hovered : color.Base)).Value), - width * Radius); - } - - private void DrawCircle(float size, KnobColors color, int segments) - { - float circleRadius = size * Radius; - - ImGui.GetWindowDrawList().AddCircleFilled( - Center, - circleRadius, - ImGui.GetColorU32((IsActive ? color.Active : (IsHovered ? color.Hovered : color.Base)).Value), - segments); - } - - private void DrawArc(float radius, float size, float startAngle, float endAngle, KnobColors color, int segments, int bezierCount) - { - float trackRadius = radius * Radius; - float trackSize = (size * Radius * 0.5f) + 0.0001f; - - KnobImpl.DrawArc( - Center, - trackRadius, - startAngle, - endAngle, - trackSize, - IsActive ? color.Active : (IsHovered ? color.Hovered : color.Base), - segments, - bezierCount); - } - - private static List WrapStringToWidth(string text, float width) - { - List lines = []; - string line; - ReadOnlySpan textSpan = text.AsSpan(); - float textWidth = ImGui.CalcTextSize(text).X; - - if (textWidth <= width) - { - lines.Add(text); - return lines; - } - - while (textSpan.Length > 0) - { - while (textSpan.StartsWith(" ")) - { - textSpan = textSpan[1..]; - } - - while (textSpan.EndsWith(" ")) - { - textSpan = textSpan[..(textSpan.Length - 1)]; - } - - ReadOnlySpan lineSpan = textSpan; - - float lineSize = ImGui.CalcTextSize(lineSpan.ToString()).X; - - while (lineSize > width) - { - int lastSpace = lineSpan.LastIndexOf(' '); - if (lastSpace == -1) - { - break; - } - - lineSpan = lineSpan[..lastSpace]; - while (lineSpan.StartsWith(" ")) - { - lineSpan = lineSpan[1..]; - } - - while (lineSpan.EndsWith(" ")) - { - lineSpan = lineSpan[..(lineSpan.Length - 1)]; - } - - lineSize = ImGui.CalcTextSize(lineSpan.ToString()).X; - } - - line = lineSpan.ToString(); - lines.Add(line); - textSpan = textSpan[line.Length..]; - } - - return lines; - } - - public static KnobInternal KnobWithDrag(string label, ImGuiDataType dataType, ref TDataType value, TDataType vMin, TDataType vMax, float speed, string format, float? size, ImGuiKnobOptions flags) - { - speed = speed == 0 ? float.CreateSaturating(vMax - vMin) / 250.0f : speed; - ImGui.PushID(label); - float lineBasedHeight = ImGui.GetTextLineHeight() * 4.0f; - float width = size ?? lineBasedHeight; - if (width == 0) - { - width = lineBasedHeight; - } - - List titleLines = WrapStringToWidth(label, width); - - float maxTitleLineWidth = 0.0f; - - if (!flags.HasFlag(ImGuiKnobOptions.NoTitle)) - { - maxTitleLineWidth = titleLines.Max(line => ImGui.CalcTextSize(line).X); - } - - maxTitleLineWidth = Math.Max(maxTitleLineWidth, width); - float knobPadding = (maxTitleLineWidth - width) * 0.5f; - - ImGui.PushItemWidth(width); - - ImGui.BeginGroup(); - - // There's an issue with `SameLine` and Groups, see https://github.com/ocornut/imgui/issues/4190. - // This is probably not the best solution, but seems to work for now - //ImGui.GetCurrentWindow().DC.CurrLineTextBaseOffset = 0; - - if (!flags.HasFlag(ImGuiKnobOptions.TitleBelow)) - { - DrawTitle(flags, maxTitleLineWidth, titleLines); - } - - // Draw knob - ImGui.SetCursorPosX(ImGui.GetCursorPosX() + knobPadding); - KnobInternal k = new(label, dataType, ref value, vMin, vMax, speed, width * 0.5f, format, flags); - - // Draw tooltip - if (flags.HasFlag(ImGuiKnobOptions.ValueTooltip) && (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled) || ImGui.IsItemActive())) - { - ImGui.BeginTooltip(); - ImGui.Text(string.Format(CultureInfo.CurrentCulture, format, value)); - ImGui.EndTooltip(); - } - - // Draw input - if (!flags.HasFlag(ImGuiKnobOptions.NoInput)) - { - ImGui.SetCursorPosX(ImGui.GetCursorPosX() + knobPadding); - unsafe - { - fixed (TDataType* pValue = &value) - { - TDataType* pMin = &vMin; - TDataType* pMax = &vMax; - k.ValueChanged = ImGui.DragScalar("###knob_drag", dataType, pValue, speed, pMin, pMax, format); - } - } - } - - if (flags.HasFlag(ImGuiKnobOptions.TitleBelow)) - { - DrawTitle(flags, maxTitleLineWidth, titleLines); - } - - ImGui.EndGroup(); - ImGui.PopItemWidth(); - ImGui.PopID(); - - return k; - - static void DrawTitle(ImGuiKnobOptions flags, float width, List titleLines) - { - if (!flags.HasFlag(ImGuiKnobOptions.NoTitle)) - { - foreach (string line in titleLines) - { - Vector2 lineWidth = ImGui.CalcTextSize(line, false, width); - ImGui.SetCursorPosX(ImGui.GetCursorPosX() + ((width - lineWidth[0]) * 0.5f)); - ImGui.TextUnformatted(line); - } - } - } - } - - public static bool BaseKnob(string label, ImGuiDataType dataType, ref TDataType value, TDataType vMin, TDataType vMax, float speed, string format, ImGuiKnobVariant variant, float? size, ImGuiKnobOptions flags, int steps = 10) - { - - KnobInternal knob = KnobWithDrag(label, dataType, ref value, vMin, vMax, speed, format, size, flags); - - switch (variant) - { - case ImGuiKnobVariant.Tick: - { - knob.DrawCircle(0.85f, GetSecondaryColorSet(), 32); - knob.DrawTick(0.5f, 0.85f, 0.08f, knob.Angle, GetPrimaryColorSet()); - break; - } - case ImGuiKnobVariant.Dot: - { - knob.DrawCircle(0.85f, GetSecondaryColorSet(), 32); - knob.DrawDot(0.12f, 0.6f, knob.Angle, GetPrimaryColorSet(), 12); - break; - } - - case ImGuiKnobVariant.Wiper: - { - knob.DrawCircle(0.7f, GetSecondaryColorSet(), 32); - knob.DrawArc(0.8f, 0.41f, knob.AngleMin, knob.AngleMax, GetTrackColorSet(), 16, 2); - - if (knob.T > 0.01f) - { - knob.DrawArc(0.8f, 0.43f, knob.AngleMin, knob.Angle, GetPrimaryColorSet(), 16, 2); - } - - break; - } - case ImGuiKnobVariant.WiperOnly: - { - knob.DrawArc(0.8f, 0.41f, knob.AngleMin, knob.AngleMax, GetTrackColorSet(), 32, 2); - - if (knob.T > 0.01) - { - knob.DrawArc(0.8f, 0.43f, knob.AngleMin, knob.Angle, GetPrimaryColorSet(), 16, 2); - } - - break; - } - case ImGuiKnobVariant.WiperDot: - { - knob.DrawCircle(0.6f, GetSecondaryColorSet(), 32); - knob.DrawArc(0.85f, 0.41f, knob.AngleMin, knob.AngleMax, GetTrackColorSet(), 16, 2); - knob.DrawDot(0.1f, 0.85f, knob.Angle, GetPrimaryColorSet(), 12); - break; - } - case ImGuiKnobVariant.Stepped: - { - for (float n = 0.0f; n < steps; n++) - { - float a = n / (steps - 1); - float angle = knob.AngleMin + ((knob.AngleMax - knob.AngleMin) * a); - knob.DrawTick(0.7f, 0.9f, 0.04f, angle, GetPrimaryColorSet()); - } - - knob.DrawCircle(0.6f, GetSecondaryColorSet(), 32); - knob.DrawDot(0.12f, 0.4f, knob.Angle, GetPrimaryColorSet(), 12); - break; - } - case ImGuiKnobVariant.Space: - { - knob.DrawCircle(0.3f - (knob.T * 0.1f), GetSecondaryColorSet(), 16); - - if (knob.T > 0.01f) - { - knob.DrawArc(0.4f, 0.15f, knob.AngleMin - 1.0f, knob.Angle - 1.0f, GetPrimaryColorSet(), 16, 2); - knob.DrawArc(0.6f, 0.15f, knob.AngleMin + 1.0f, knob.Angle + 1.0f, GetPrimaryColorSet(), 16, 2); - knob.DrawArc(0.8f, 0.15f, knob.AngleMin + 3.0f, knob.Angle + 3.0f, GetPrimaryColorSet(), 16, 2); - } - - break; - } - - default: - break; - } - - return knob.ValueChanged; - } - } - - private static KnobColors GetPrimaryColorSet() - { - Span colors = ImGui.GetStyle().Colors; - - return new() - { - Active = new ImColor() { Value = colors[(int)ImGuiCol.ButtonActive] }, - Hovered = new ImColor() { Value = colors[(int)ImGuiCol.ButtonHovered] }, - Base = new ImColor() { Value = colors[(int)ImGuiCol.ButtonHovered] }, - }; - } - - private static KnobColors GetSecondaryColorSet() - { - Span colors = ImGui.GetStyle().Colors; - Vector4 activeColor = colors[(int)ImGuiCol.ButtonActive]; - Vector4 hoveredColor = colors[(int)ImGuiCol.ButtonHovered]; - - Vector4 active = new( - activeColor.X * 0.5f, - activeColor.Y * 0.5f, - activeColor.Z * 0.5f, - activeColor.W); - - Vector4 hovered = new( - hoveredColor.X * 0.5f, - hoveredColor.Y * 0.5f, - hoveredColor.Z * 0.5f, - hoveredColor.W); - - return new() - { - Active = new ImColor() { Value = active }, - Hovered = new ImColor() { Value = hovered }, - Base = new ImColor() { Value = hovered }, - }; - } - - private static KnobColors GetTrackColorSet() - { - Span colors = ImGui.GetStyle().Colors; - Vector4 color = colors[(int)ImGuiCol.FrameBg]; - return new() - { - Active = new ImColor() { Value = color }, - Hovered = new ImColor() { Value = color }, - Base = new ImColor() { Value = color }, - }; - } - } -} diff --git a/ImGui.Widgets/README.md b/ImGui.Widgets/README.md deleted file mode 100644 index 0728be3..0000000 --- a/ImGui.Widgets/README.md +++ /dev/null @@ -1,265 +0,0 @@ -# ktsu.ImGuiWidgets - -ImGuiWidgets is a library of custom widgets using ImGui.NET. This library provides a variety of widgets and utilities to enhance your ImGui-based applications. - -## Features - -- **Knobs**: Ported to .NET from [ImGui-works/ImGui-knobs-dial-gauge-meter](https://github.com/imgui-works/imgui-knobs-dial-gauge-meter) -- **Resizable Layout Dividers**: Draggable layout dividers for resizable layouts -- **TabPanel**: Tabbed interface with closable, reorderable tabs and dirty indicator support -- **Icons**: Customizable icons with various alignment options and event delegates -- **Grid**: Flexible grid layout for displaying items -- **Color Indicator**: An indicator that displays a color when enabled -- **Image**: An image widget with alignment options -- **Text**: A text widget with alignment options -- **Tree**: A tree widget for displaying hierarchical data -- **Scoped Id**: A utility class for creating scoped IDs -- **SearchBox**: A powerful search box with support for various filter types (Glob, Regex, Fuzzy) and matching options - -## Installation - -To install ImGuiWidgets, you can add the library to your .NET project using the following command: - -```bash -dotnet add package ktsu.ImGuiWidgets -``` - -## Usage - -To use ImGuiWidgets, you need to include the `ktsu.ImGuiWidgets` namespace in your code: - -```csharp -using ktsu.ImGuiWidgets; -``` - -Then, you can start using the widgets provided by ImGuiWidgets in your ImGui-based applications. - -## Examples - -Here are some examples of using ImGuiWidgets: - -### Knobs - -Knobs are useful for creating dial-like controls: - -```csharp -float value = 0.5f; -float minValue = 0.0f; - -ImGuiWidgets.Knob("Knob", ref value, minValue); -``` - -### SearchBox - -The SearchBox widget provides a powerful search interface with multiple filter type options: - -```csharp -// Static fields to maintain filter state between renders -private static string searchTerm = string.Empty; -private static TextFilterType filterType = TextFilterType.Glob; -private static TextFilterMatchOptions matchOptions = TextFilterMatchOptions.ByWholeString; - -// List of items to search -var items = new List { "Apple", "Banana", "Cherry", "Date", "Elderberry" }; - -// Basic search box with right-click context menu for filter options -ImGuiWidgets.SearchBox("##BasicSearch", ref searchTerm, ref filterType, ref matchOptions); - -// Display results -if (!string.IsNullOrEmpty(searchTerm)) -{ - ImGui.TextUnformatted($"Search results for: {searchTerm}"); -} - -// Search box that returns filtered results directly -var filteredResults = ImGuiWidgets.SearchBox( - "##FilteredSearch", - ref searchTerm, - items, // Collection to filter - item => item, // Selector function to extract string from each item - ref filterType, - ref matchOptions).ToList(); - -// Ranked search box for fuzzy matching and ranked results -var rankedResults = ImGuiWidgets.SearchBoxRanked( - "##RankedSearch", - ref searchTerm, - items, - item => item).ToList(); -``` - -### TabPanel - -TabPanel creates a tabbed interface with support for closable tabs, reordering, and dirty state indication: - -```csharp -// Create a tab panel with closable and reorderable tabs -var tabPanel = new ImGuiWidgets.TabPanel("MyTabPanel", true, true); - -// Add tabs with explicit IDs (recommended for stability when tabs are reordered) -string tab1Id = tabPanel.AddTab("tab1", "First Tab", RenderTab1Content); -string tab2Id = tabPanel.AddTab("tab2", "Second Tab", RenderTab2Content); -string tab3Id = tabPanel.AddTab("tab3", "Third Tab", RenderTab3Content); - -// Draw the tab panel in your render loop -tabPanel.Draw(); - -// Methods to render tab content -void RenderTab1Content() -{ - ImGui.Text("Tab 1 Content"); - - // Mark tab as dirty when content changes - if (ImGui.Button("Edit")) - { - tabPanel.MarkTabDirty(tab1Id); - } - - // Mark tab as clean when content is saved - if (ImGui.Button("Save")) - { - tabPanel.MarkTabClean(tab1Id); - } -} - -void RenderTab2Content() -{ - ImGui.Text("Tab 2 Content"); -} - -void RenderTab3Content() -{ - ImGui.Text("Tab 3 Content"); -} -``` - -### Icons - -Icons can be used to display images with various alignment options and event delegates: - -```csharp -float iconWidthEms = 7.5f; -float iconWidthPx = ImGuiApp.EmsToPx(iconWidthEms); - -uint textureId = ImGuiApp.GetOrLoadTexture("icon.png"); - -ImGuiWidgets.Icon("Click Me", textureId, iconWidthPx, Color.White.Value, ImGuiWidgets.IconAlignment.Vertical, new ImGuiWidgets.IconDelegates() -{ - OnClick = () => MessageOK.Open("Click", "You clicked") -}); - -ImGui.SameLine(); -ImGuiWidgets.Icon("Double Click Me", textureId, iconWidthPx, Color.White.Value, ImGuiWidgets.IconAlignment.Vertical, new ImGuiWidgets.IconDelegates() -{ - OnDoubleClick = () => MessageOK.Open("Double Click", "You clicked twice") -}); - -ImGui.SameLine(); -ImGuiWidgets.Icon("Right Click Me", textureId, iconWidthPx, Color.White.Value, ImGuiWidgets.IconAlignment.Vertical, new ImGuiWidgets.IconDelegates() -{ - OnContextMenu = () => - { - ImGui.MenuItem("Context Menu Item 1"); - ImGui.MenuItem("Context Menu Item 2"); - ImGui.MenuItem("Context Menu Item 3"); - }, -}); -``` - -### Grid - -The grid layout allows you to display items in a flexible grid: - -```csharp -float iconSizeEms = 7.5f; -float iconSizePx = ImGuiApp.EmsToPx(iconSizeEms); - -uint textureId = ImGuiApp.GetOrLoadTexture("icon.png"); - -ImGuiWidgets.Grid(items, i => ImGuiWidgets.CalcIconSize(i, iconSizePx), (item, cellSize, itemSize) => -{ - ImGuiWidgets.Icon(item, textureId, iconSizePx, Color.White.Value); -}); -``` - -### Color Indicator - -The color indicator widget displays a color when enabled: - -```csharp -bool enabled = true; -Color color = Color.Red; - -ImGuiWidgets.ColorIndicator("Color Indicator", enabled, color); -``` - -### Image - -The image widget allows you to display images with alignment options: - -```csharp -uint textureId = ImGuiApp.GetOrLoadTexture("image.png"); - -ImGuiWidgets.Image(textureId, new Vector2(100, 100)); -``` - -### Text - -The text widget allows you to display text with alignment options: - -```csharp -ImGuiWidgets.Text("Hello, ImGuiWidgets!"); -ImGuiWidgets.TextCentered("Hello, ImGuiWidgets!"); -ImGuiWidgets.TextCenteredWithin("Hello, ImGuiWidgets!", new Vector2(100, 100)); -``` - -### Tree - -The tree widget allows you to display hierarchical data: - -```csharp -using (var tree = new ImGuiWidgets.Tree()) -{ - for (int i = 0; i < 5; i++) - { - using (tree.Child) - { - ImGui.Button($"Hello, Child {i}!"); - using (var subtree = new ImGuiWidgets.Tree()) - { - using (subtree.Child) - { - ImGui.Button($"Hello, Grandchild!"); - } - } - } - } -} -``` - -### Scoped Id - -The scoped ID utility class helps in creating scoped IDs for ImGui elements and ensuring they get popped appropriatley: - -```csharp -using (new ImGuiWidgets.ScopedId()) -{ - ImGui.Button("Hello, Scoped ID!"); -} -``` - -## Contributing - -Contributions are welcome! For feature requests, bug reports, or questions, please open an issue on the GitHub repository. If you would like to contribute code, please open a pull request with your changes. - -## Acknowledgements - -ImGuiWidgets is inspired by the following projects: - -- [ocornut/ImGui](https://github.com/ocornut/imgui) -- [ImGui.NET](https://github.com/ImGuiNET/ImGui.NET) -- [ImGui-works/ImGui-knobs-dial-gauge-meter](https://github.com/imgui-works/imgui-knobs-dial-gauge-meter) - -## License - -ImGuiWidgets is licensed under the MIT License. See [LICENSE](LICENSE) for more information. diff --git a/ImGui.Widgets/ScopedDisable.cs b/ImGui.Widgets/ScopedDisable.cs deleted file mode 100644 index e4e6914..0000000 --- a/ImGui.Widgets/ScopedDisable.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using Hexa.NET.ImGui; - -using ScopedAction; - -/// -/// Represents a scoped disable action which will set Dear ImGui elements as functionally and visually disabled until -/// the class is disposed. -/// -public class ScopedDisable : ScopedAction -{ - /// - /// Note as per the Dear ImGui documentation: "Those can be nested, but it cannot - /// be used to enable an already disabled section (a single BeginDisabled(true) - /// in the stack is enough to keep everything disabled)" - /// - /// Should the elements within the scope be disabled - public ScopedDisable(bool enabled) - { - ImGui.BeginDisabled(enabled); - OnClose = ImGui.EndDisabled; - } -} diff --git a/ImGui.Widgets/ScopedId.cs b/ImGui.Widgets/ScopedId.cs deleted file mode 100644 index d8d9688..0000000 --- a/ImGui.Widgets/ScopedId.cs +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using Hexa.NET.ImGui; -using ktsu.ScopedAction; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// Represents a scoped ID for Dear ImGui. This class ensures that the ID is pushed when the object is created - /// and popped when the object is disposed. - /// - public class ScopedId : ScopedAction - { - /// - /// Initializes a new instance of the class with a string ID. - /// - /// The string ID to push to ImGui. - public ScopedId(string id) - { - ImGui.PushID(id); - OnClose = ImGui.PopID; - } - - /// - /// Initializes a new instance of the class with an integer ID. - /// - /// The integer ID to push to ImGui. - public ScopedId(int id) - { - ImGui.PushID(id); - OnClose = ImGui.PopID; - } - } -} diff --git a/ImGui.Widgets/SearchBox.cs b/ImGui.Widgets/SearchBox.cs deleted file mode 100644 index 1bc0f4e..0000000 --- a/ImGui.Widgets/SearchBox.cs +++ /dev/null @@ -1,164 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System; -using System.Collections.Generic; -using System.Linq; - -using Hexa.NET.ImGui; - -using ktsu.TextFilter; - -public static partial class ImGuiWidgets -{ - /// - /// A search box that filters items using ktsu.TextFilter. - /// - /// Label for display and id. - /// Current filter text. - /// How to match the filter text (default: WholeString). - /// Type of filter to use (default: Glob). - /// True if the filter text changed, otherwise false. - public static bool SearchBox( - string label, - ref string filterText, - ref TextFilterType filterType, - ref TextFilterMatchOptions matchOptions - ) - { - string hint = TextFilter.GetHint(filterType) + "\nRight-click for options"; - - bool changed = ImGui.InputTextWithHint(label, hint, ref filterText, 256); - bool isHovered = ImGui.IsItemHovered(); - bool isRightMouseClicked = ImGui.IsMouseClicked(ImGuiMouseButton.Right); - - if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled)) - { - ImGui.SetTooltip(hint); - } - - if (isHovered && isRightMouseClicked) - { - ImGui.OpenPopup(label + "##context"); - } - - if (ImGui.BeginPopup(label + "##context")) - { - bool isGlob = filterType == TextFilterType.Glob; - bool isRegex = filterType == TextFilterType.Regex; - bool isFuzzy = filterType == TextFilterType.Fuzzy; - - bool isWholeString = matchOptions == TextFilterMatchOptions.ByWholeString; - bool isAllWord = matchOptions == TextFilterMatchOptions.ByWordAll; - bool isAnyWord = matchOptions == TextFilterMatchOptions.ByWordAny; - - if (ImGui.MenuItem("Glob", "", ref isGlob)) - { - filterType = TextFilterType.Glob; - } - - if (ImGui.MenuItem("Regex", "", ref isRegex)) - { - filterType = TextFilterType.Regex; - } - - if (ImGui.MenuItem("Fuzzy", "", ref isFuzzy)) - { - filterType = TextFilterType.Fuzzy; - } - - ImGui.Separator(); - - if (ImGui.MenuItem("Whole String", "", ref isWholeString)) - { - matchOptions = TextFilterMatchOptions.ByWholeString; - } - - if (ImGui.MenuItem("All Words", "", ref isAllWord)) - { - matchOptions = TextFilterMatchOptions.ByWordAll; - } - - if (ImGui.MenuItem("Any Word", "", ref isAnyWord)) - { - matchOptions = TextFilterMatchOptions.ByWordAny; - } - - ImGui.EndPopup(); - } - - return changed; - } - - /// - /// A search box that filters items using ktsu.TextFilter and returns the filtered results. - /// - /// Type of items to filter. - /// Label for display and id. - /// Current filter text. - /// Collection of items to filter. - /// Function to extract the string to match against from each item. - /// How to match the filter text (default: WholeString). - /// Type of filter to use (default: Glob). - /// Filtered collection of items. - public static IEnumerable SearchBox( - string label, - ref string filterText, - IEnumerable items, - Func selector, - ref TextFilterType filterType, - ref TextFilterMatchOptions matchOptions - ) - { - ArgumentNullException.ThrowIfNull(items); - ArgumentNullException.ThrowIfNull(selector); - - SearchBox(label, ref filterText, ref filterType, ref matchOptions); - - if (string.IsNullOrWhiteSpace(filterText)) - { - return []; - } - - Dictionary keyedItems = items.ToDictionary(selector, item => item); - - return TextFilter.Filter(keyedItems.Keys, filterText, filterType, matchOptions) - .Select(x => keyedItems[x]); - } - - /// - /// A search box that ranks items using a fuzzy filter. - /// - /// Type of items to rank. - /// Label for display and id. - /// Current filter text. - /// Collection of items to rank. - /// Function to extract the string to match against from each item. - /// Ranked collection of items. - public static IEnumerable SearchBoxRanked( - string label, - ref string filterText, - IEnumerable items, - Func selector - ) - { - ArgumentNullException.ThrowIfNull(items); - ArgumentNullException.ThrowIfNull(selector); - - TextFilterType filterType = TextFilterType.Fuzzy; - TextFilterMatchOptions matchOptions = TextFilterMatchOptions.ByWholeString; - SearchBox(label, ref filterText, ref filterType, ref matchOptions); - - if (string.IsNullOrWhiteSpace(filterText)) - { - return items; - } - - Dictionary keyedItems = items.ToDictionary(selector, item => item); - return TextFilter.Rank(keyedItems.Keys, filterText) - .Select(x => keyedItems[x]); - } -} diff --git a/ImGui.Widgets/TabPanel.cs b/ImGui.Widgets/TabPanel.cs deleted file mode 100644 index bbaff4e..0000000 --- a/ImGui.Widgets/TabPanel.cs +++ /dev/null @@ -1,548 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System; -using System.Collections.ObjectModel; -using Hexa.NET.ImGui; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// A panel with tabs that can be used to organize content. - /// - public class TabPanel - { - /// - /// The unique identifier for this tab panel. - /// - public string Id { get; private set; } - - /// - /// The collection of tabs within this panel. - /// - public Collection Tabs { get; private set; } = []; - - /// - /// The index of the currently active tab. - /// - public int ActiveTabIndex { get; set; } - - /// - /// The ID of the currently active tab. - /// - public string? ActiveTabId => ActiveTabIndex >= 0 && ActiveTabIndex < Tabs.Count - ? Tabs[ActiveTabIndex].Id - : null; - - /// - /// Whether the tab bar is closable (allows closing tabs with an X button). - /// - public bool Closable { get; set; } - - /// - /// Whether the tab bar should be reorderable. - /// - public bool Reorderable { get; set; } - - /// - /// Gets the currently active tab or null if there are no tabs. - /// - public Tab? ActiveTab => Tabs.Count > 0 && ActiveTabIndex >= 0 && ActiveTabIndex < Tabs.Count - ? Tabs[ActiveTabIndex] - : null; - - private Action? TabChangedDelegate { get; } - private Action? TabChangedByIdDelegate { get; } - - /// - /// Create a new tab panel. - /// - /// The unique identifier for this tab panel. - public TabPanel(string id) => Id = id; - - /// - /// Create a new tab panel with options. - /// - /// The unique identifier for this tab panel. - /// Whether tabs can be closed. - /// Whether tabs can be reordered. - public TabPanel(string id, bool closable, bool reorderable) - { - Id = id; - Closable = closable; - Reorderable = reorderable; - } - - /// - /// Create a new tab panel with a callback for tab changes. - /// - /// The unique identifier for this tab panel. - /// The delegate to call when the active tab changes, passing the tab index. - public TabPanel(string id, Action tabChangedDelegate) - { - Id = id; - TabChangedDelegate = tabChangedDelegate; - } - - /// - /// Create a new tab panel with a callback for tab changes. - /// - /// The unique identifier for this tab panel. - /// The delegate to call when the active tab changes, passing the tab ID. - public TabPanel(string id, Action tabChangedDelegate) - { - Id = id; - TabChangedByIdDelegate = tabChangedDelegate; - } - - /// - /// Create a new tab panel with options and a callback for tab changes. - /// - /// The unique identifier for this tab panel. - /// Whether tabs can be closed. - /// Whether tabs can be reordered. - /// The delegate to call when the active tab changes, passing the tab index. - public TabPanel(string id, bool closable, bool reorderable, Action tabChangedDelegate) - { - Id = id; - Closable = closable; - Reorderable = reorderable; - TabChangedDelegate = tabChangedDelegate; - } - - /// - /// Create a new tab panel with options and a callback for tab changes. - /// - /// The unique identifier for this tab panel. - /// Whether tabs can be closed. - /// Whether tabs can be reordered. - /// The delegate to call when the active tab changes, passing the tab ID. - public TabPanel(string id, bool closable, bool reorderable, Action tabChangedDelegate) - { - Id = id; - Closable = closable; - Reorderable = reorderable; - TabChangedByIdDelegate = tabChangedDelegate; - } - - /// - /// Find a tab by its ID. - /// - /// The ID of the tab to find. - /// The tab if found, null otherwise. - public Tab? GetTabById(string tabId) - { - foreach (Tab tab in Tabs) - { - if (tab.Id == tabId) - { - return tab; - } - } - - return null; - } - - /// - /// Get the index of a tab by its ID. - /// - /// The ID of the tab to find. - /// The index of the tab if found, -1 otherwise. - public int GetTabIndex(string tabId) - { - for (int i = 0; i < Tabs.Count; i++) - { - if (Tabs[i].Id == tabId) - { - return i; - } - } - - return -1; - } - - /// - /// Add a new tab to the panel. - /// - /// The label of the tab. - /// The content drawing delegate for the tab. - /// The ID of the newly added tab. - public string AddTab(string label, Action content) - { - Tab tab = new(label, content); - Tabs.Add(tab); - return tab.Id; - } - - /// - /// Add a new tab to the panel with a specific ID. - /// - /// The unique ID for the tab. - /// The label of the tab. - /// The content drawing delegate for the tab. - /// The ID of the newly added tab. - public string AddTab(string id, string label, Action content) - { - Tab tab = new(id, label, content); - Tabs.Add(tab); - return tab.Id; - } - - /// - /// Add a new tab to the panel with specified dirty state. - /// - /// The label of the tab. - /// The content drawing delegate for the tab. - /// Initial dirty state of the tab. - /// The ID of the newly added tab. - public string AddTab(string label, Action content, bool isDirty) - { - Tab tab = new(label, content, isDirty); - Tabs.Add(tab); - return tab.Id; - } - - /// - /// Add a new tab to the panel with a specific ID and dirty state. - /// - /// The unique ID for the tab. - /// The label of the tab. - /// The content drawing delegate for the tab. - /// Initial dirty state of the tab. - /// The ID of the newly added tab. - public string AddTab(string id, string label, Action content, bool isDirty) - { - Tab tab = new(id, label, content, isDirty); - Tabs.Add(tab); - return tab.Id; - } - - /// - /// Mark a tab as dirty (having unsaved changes). - /// - /// The index of the tab to mark dirty. - /// True if successful, false if the index is out of range. - public bool MarkTabDirty(int index) - { - if (index >= 0 && index < Tabs.Count) - { - Tabs[index].MarkDirty(); - return true; - } - - return false; - } - - /// - /// Mark a tab as dirty (having unsaved changes). - /// - /// The ID of the tab to mark dirty. - /// True if successful, false if the tab was not found. - public bool MarkTabDirty(string tabId) - { - Tab? tab = GetTabById(tabId); - if (tab != null) - { - tab.MarkDirty(); - return true; - } - - return false; - } - - /// - /// Mark a tab as clean (having no unsaved changes). - /// - /// The index of the tab to mark clean. - /// True if successful, false if the index is out of range. - public bool MarkTabClean(int index) - { - if (index >= 0 && index < Tabs.Count) - { - Tabs[index].MarkClean(); - return true; - } - - return false; - } - - /// - /// Mark a tab as clean (having no unsaved changes). - /// - /// The ID of the tab to mark clean. - /// True if successful, false if the tab was not found. - public bool MarkTabClean(string tabId) - { - Tab? tab = GetTabById(tabId); - if (tab != null) - { - tab.MarkClean(); - return true; - } - - return false; - } - - /// - /// Mark the currently active tab as dirty. - /// - /// True if there is an active tab and it was marked dirty, false otherwise. - public bool MarkActiveTabDirty() - { - if (ActiveTab != null) - { - ActiveTab.MarkDirty(); - return true; - } - - return false; - } - - /// - /// Mark the currently active tab as clean. - /// - /// True if there is an active tab and it was marked clean, false otherwise. - public bool MarkActiveTabClean() - { - if (ActiveTab != null) - { - ActiveTab.MarkClean(); - return true; - } - - return false; - } - - /// - /// Check if the tab at the specified index is dirty. - /// - /// The index of the tab to check. - /// True if the tab is dirty, false otherwise or if the index is out of range. - public bool IsTabDirty(int index) => index >= 0 && index < Tabs.Count && Tabs[index].IsDirty; - - /// - /// Check if the tab with the specified ID is dirty. - /// - /// The ID of the tab to check. - /// True if the tab is dirty, false otherwise or if the tab was not found. - public bool IsTabDirty(string tabId) - { - Tab? tab = GetTabById(tabId); - return tab?.IsDirty ?? false; - } - - /// - /// Check if the active tab is dirty. - /// - /// True if the active tab is dirty, false otherwise or if there is no active tab. - public bool IsActiveTabDirty() => ActiveTab?.IsDirty ?? false; - - /// - /// Remove a tab from the panel by index. - /// - /// The index of the tab to remove. - /// True if the tab was removed, false otherwise. - public bool RemoveTab(int index) - { - if (index >= 0 && index < Tabs.Count) - { - Tabs.RemoveAt(index); - if (ActiveTabIndex >= Tabs.Count) - { - ActiveTabIndex = Math.Max(0, Tabs.Count - 1); - TabChangedDelegate?.Invoke(ActiveTabIndex); - TabChangedByIdDelegate?.Invoke(ActiveTabId ?? string.Empty); - } - - return true; - } - - return false; - } - - /// - /// Remove a tab from the panel by ID. - /// - /// The ID of the tab to remove. - /// True if the tab was removed, false otherwise. - public bool RemoveTab(string tabId) - { - int index = GetTabIndex(tabId); - return index >= 0 && RemoveTab(index); - } - - /// - /// Draw the tab panel. - /// - public void Draw() - { - if (Tabs.Count == 0) - { - return; - } - - ImGuiTabBarFlags flags = ImGuiTabBarFlags.None; - if (Reorderable) - { - flags |= ImGuiTabBarFlags.Reorderable; - } - - if (ImGui.BeginTabBar(Id, flags)) - { - for (int i = 0; i < Tabs.Count; i++) - { - Tab tab = Tabs[i]; - ImGuiTabItemFlags tabFlags = ImGuiTabItemFlags.None; - - // Use the UnsavedDocument flag for dirty indicator - if (tab.IsDirty) - { - tabFlags |= ImGuiTabItemFlags.UnsavedDocument; - } - - bool tabOpen = true; - - if (ImGui.BeginTabItem($"{tab.Label}##{tab.Id}", ref tabOpen, tabFlags)) - { - if (ActiveTabIndex != i) - { - ActiveTabIndex = i; - TabChangedDelegate?.Invoke(i); - TabChangedByIdDelegate?.Invoke(tab.Id); - } - - tab.Content?.Invoke(); - ImGui.EndTabItem(); - } - - if (Closable && !tabOpen) - { - RemoveTab(i); - i--; // Adjust index since we removed an item - } - } - - ImGui.EndTabBar(); - } - } - } - - /// - /// Represents a single tab within a TabPanel. - /// - public class Tab - { - private static int nextId = 1; - - /// - /// Gets a unique identifier for this tab. - /// - public string Id { get; } - - /// - /// The label displayed on the tab. - /// - public string Label { get; set; } - - /// - /// The action to invoke to draw the tab content. - /// - public Action? Content { get; set; } - - /// - /// Gets or sets whether this tab's content has unsaved changes. - /// - public bool IsDirty { get; set; } - - /// - /// Create a new tab with an auto-generated ID. - /// - /// The label of the tab. - public Tab(string label) - { - Id = $"tab_{nextId++}"; - Label = label; - } - - /// - /// Create a new tab with a specific ID. - /// - /// The unique ID for the tab. - /// The label of the tab. - public Tab(string id, string label) - { - Id = id; - Label = label; - } - - /// - /// Create a new tab with content and an auto-generated ID. - /// - /// The label of the tab. - /// The content drawing delegate for the tab. - public Tab(string label, Action content) - { - Id = $"tab_{nextId++}"; - Label = label; - Content = content; - } - - /// - /// Create a new tab with a specific ID and content. - /// - /// The unique ID for the tab. - /// The label of the tab. - /// The content drawing delegate for the tab. - public Tab(string id, string label, Action content) - { - Id = id; - Label = label; - Content = content; - } - - /// - /// Create a new tab with content, dirty state, and an auto-generated ID. - /// - /// The label of the tab. - /// The content drawing delegate for the tab. - /// Initial dirty state of the tab. - public Tab(string label, Action content, bool isDirty) - { - Id = $"tab_{nextId++}"; - Label = label; - Content = content; - IsDirty = isDirty; - } - - /// - /// Create a new tab with a specific ID, content, and dirty state. - /// - /// The unique ID for the tab. - /// The label of the tab. - /// The content drawing delegate for the tab. - /// Initial dirty state of the tab. - public Tab(string id, string label, Action content, bool isDirty) - { - Id = id; - Label = label; - Content = content; - IsDirty = isDirty; - } - - /// - /// Marks the tab as dirty (having unsaved changes). - /// - public void MarkDirty() => IsDirty = true; - - /// - /// Marks the tab as clean (no unsaved changes). - /// - public void MarkClean() => IsDirty = false; - } -} diff --git a/ImGui.Widgets/Text.cs b/ImGui.Widgets/Text.cs deleted file mode 100644 index 7996b73..0000000 --- a/ImGui.Widgets/Text.cs +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ImGui.Styler; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// Displays the specified text. - /// - /// The text to display. - public static void Text(string text) => TextImpl.Show(text); - - /// - /// Displays the specified text centered within the available space. - /// - /// The text to display. - public static void TextCentered(string text) => TextImpl.Centered(text); - - /// - /// Displays the specified text centered horizontally within the given bounds. - /// - /// The text to display. - /// The size of the container within which the text will be centered. - public static void TextCenteredWithin(string text, Vector2 containerSize) => TextImpl.CenteredWithin(text, containerSize); - - internal static class TextImpl - { - /// - /// Displays the specified text. - /// - /// The text to display. - public static void Show(string text) => ImGui.TextUnformatted(text); - - /// - /// Displays the specified text centered within the available space. - /// - /// The text to display. - public static void Centered(string text) - { - Vector2 textSize = ImGui.CalcTextSize(text); - using (new Alignment.Center(textSize)) - { - ImGui.TextUnformatted(text); - } - } - - /// - /// Displays the specified text centered horizontally within the given bounds. - /// - /// The text to display. - /// The size of the container within which the text will be centered. - public static void CenteredWithin(string text, Vector2 containerSize) => CenteredWithin(text, containerSize, false); - - /// - /// Displays the specified text centered horizontally within the given bounds, with an option to clip the text. - /// - /// The text to display. - /// The size of the container within which the text will be centered. - /// If true, the text will be clipped to fit within the container size. - public static void CenteredWithin(string text, Vector2 containerSize, bool clip) - { - if (clip) - { - text = Clip(text, containerSize); - } - - Vector2 textSize = ImGui.CalcTextSize(text); - using (new Alignment.CenterWithin(textSize, containerSize)) - { - ImGui.TextUnformatted(text); - } - } - - /// - /// Clips the specified text to fit within the given container size, adding an ellipsis if necessary. - /// - /// The text to clip. - /// The size of the container within which the text must fit. - /// The clipped text with an ellipsis if it exceeds the container size. - public static string Clip(string text, Vector2 containerSize) - { - float textWidth = ImGui.CalcTextSize(text).X; - if (textWidth <= containerSize.X) - { - return text; - } - - string ellipsis = "..."; - float ellipsisWidth = ImGui.CalcTextSize(ellipsis).X; - - while (textWidth + ellipsisWidth > containerSize.X && text.Length > 0) - { - text = text[..^1]; - textWidth = ImGui.CalcTextSize(text).X; - } - - return text + ellipsis; - } - } -} diff --git a/ImGui.Widgets/Tree.cs b/ImGui.Widgets/Tree.cs deleted file mode 100644 index 790a6a5..0000000 --- a/ImGui.Widgets/Tree.cs +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Widgets; - -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ImGui.Styler; -using ktsu.ScopedAction; - -/// -/// Provides custom ImGui widgets. -/// -public static partial class ImGuiWidgets -{ - /// - /// Represents a tree structure widget in ImGui with custom drawing logic. - /// - public class Tree : ScopedAction - { - private Vector2 CursorStart { get; init; } - private Vector2 CursorEnd { get; set; } - private float IndentWidth { get; init; } - private float HalfIndentWidth => IndentWidth / 2f; - private float FrameHeight { get; init; } - private float HalfFrameHeight => FrameHeight / 2f; - private float ItemSpacingY { get; init; } - private float Left { get; init; } - private float Top { get; init; } - private const float LineThickness = 2f; - private const float HalfLineThickness = LineThickness / 2f; - - /// - /// Initializes a new instance of the class. - /// Sets up the initial cursor position, indent width, item spacing, frame height, and drawing logic for the tree structure. - /// - public Tree() : base() - { - ImGui.Indent(); - CursorStart = ImGui.GetCursorScreenPos(); - IndentWidth = ImGui.GetStyle().IndentSpacing; - ItemSpacingY = ImGui.GetStyle().ItemSpacing.Y; - FrameHeight = ImGui.GetFrameHeight(); - Left = CursorStart.X - HalfIndentWidth; - Top = CursorStart.Y - ItemSpacingY - HalfLineThickness; - - OnClose = () => - { - ImGui.SameLine(); - float bottom = CursorEnd.Y + HalfFrameHeight + HalfLineThickness; - Vector2 a = new(Left, Top); - Vector2 b = new(Left, bottom); - ImGui.GetWindowDrawList().AddLine(a, b, ImGui.GetColorU32(Color.Palette.Neutral.Gray.Value), LineThickness); - ImGui.NewLine(); - ImGui.Unindent(); - }; - } - - /// - /// Gets a new instance of the class, representing a child node in the tree structure. - /// - public TreeChild Child => new(this); - - /// - /// Represents a child node in the tree structure. - /// - /// The parent tree node. - public class TreeChild(Tree parent) : ScopedAction( - onOpen: () => - { - Vector2 cursor = ImGui.GetCursorScreenPos(); - parent.CursorEnd = cursor; - float right = cursor.X; - float y = cursor.Y + parent.HalfFrameHeight; - - Vector2 a = new(parent.Left, y); - Vector2 b = new(right, y); - - ImGui.GetWindowDrawList().AddLine(a, b, ImGui.GetColorU32(Color.Palette.Neutral.Gray.Value), LineThickness); - }, - onClose: null) - { - } - } -} diff --git a/ImGui.sln b/ImGui.sln deleted file mode 100644 index f588717..0000000 --- a/ImGui.sln +++ /dev/null @@ -1,148 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGui.App", "ImGui.App\ImGui.App.csproj", "{EEC56BFB-F502-8810-5DC7-9E17B3D17435}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGui.Popups", "ImGui.Popups\ImGui.Popups.csproj", "{C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGui.Styler", "ImGui.Styler\ImGui.Styler.csproj", "{8B4C0E01-82D0-E523-C654-8D33E2554884}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGui.Widgets", "ImGui.Widgets\ImGui.Widgets.csproj", "{0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" - ProjectSection(SolutionItems) = preProject - examples\ImGuiPopupsDemo\ImGuiPopupsDemo.csproj = examples\ImGuiPopupsDemo\ImGuiPopupsDemo.csproj - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGuiAppDemo", "examples\ImGuiAppDemo\ImGuiAppDemo.csproj", "{D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGuiStylerDemo", "examples\ImGuiStylerDemo\ImGuiStylerDemo.csproj", "{74E901E1-ED27-2FA9-D58D-48A875D82102}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGuiWidgetsDemo", "examples\ImGuiWidgetsDemo\ImGuiWidgetsDemo.csproj", "{723D183E-B609-CD2B-CF5B-B6F81E9368B3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{5F0E6F1C-44C1-42B7-ADF4-770ABB471B40}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImGui.App.Tests", "tests\ImGui.App.Tests\ImGui.App.Tests.csproj", "{D1B3E399-F4E4-D537-46FE-2585AF4E9262}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Debug|x64.ActiveCfg = Debug|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Debug|x64.Build.0 = Debug|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Debug|x86.ActiveCfg = Debug|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Debug|x86.Build.0 = Debug|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Release|Any CPU.Build.0 = Release|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Release|x64.ActiveCfg = Release|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Release|x64.Build.0 = Release|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Release|x86.ActiveCfg = Release|Any CPU - {EEC56BFB-F502-8810-5DC7-9E17B3D17435}.Release|x86.Build.0 = Release|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Debug|x64.ActiveCfg = Debug|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Debug|x64.Build.0 = Debug|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Debug|x86.ActiveCfg = Debug|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Debug|x86.Build.0 = Debug|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Release|Any CPU.Build.0 = Release|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Release|x64.ActiveCfg = Release|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Release|x64.Build.0 = Release|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Release|x86.ActiveCfg = Release|Any CPU - {C7889AF0-481D-EF98-D6F1-8DD9C0A44AB7}.Release|x86.Build.0 = Release|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Debug|x64.ActiveCfg = Debug|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Debug|x64.Build.0 = Debug|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Debug|x86.ActiveCfg = Debug|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Debug|x86.Build.0 = Debug|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Release|Any CPU.Build.0 = Release|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Release|x64.ActiveCfg = Release|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Release|x64.Build.0 = Release|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Release|x86.ActiveCfg = Release|Any CPU - {8B4C0E01-82D0-E523-C654-8D33E2554884}.Release|x86.Build.0 = Release|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Debug|x64.ActiveCfg = Debug|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Debug|x64.Build.0 = Debug|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Debug|x86.ActiveCfg = Debug|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Debug|x86.Build.0 = Debug|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Release|Any CPU.Build.0 = Release|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Release|x64.ActiveCfg = Release|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Release|x64.Build.0 = Release|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Release|x86.ActiveCfg = Release|Any CPU - {0BA81D84-EB0C-FDB5-8748-90F03AD17AC0}.Release|x86.Build.0 = Release|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Debug|x64.ActiveCfg = Debug|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Debug|x64.Build.0 = Debug|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Debug|x86.ActiveCfg = Debug|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Debug|x86.Build.0 = Debug|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Release|Any CPU.Build.0 = Release|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Release|x64.ActiveCfg = Release|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Release|x64.Build.0 = Release|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Release|x86.ActiveCfg = Release|Any CPU - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961}.Release|x86.Build.0 = Release|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Debug|x64.ActiveCfg = Debug|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Debug|x64.Build.0 = Debug|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Debug|x86.ActiveCfg = Debug|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Debug|x86.Build.0 = Debug|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Release|Any CPU.Build.0 = Release|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Release|x64.ActiveCfg = Release|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Release|x64.Build.0 = Release|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Release|x86.ActiveCfg = Release|Any CPU - {74E901E1-ED27-2FA9-D58D-48A875D82102}.Release|x86.Build.0 = Release|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Debug|x64.ActiveCfg = Debug|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Debug|x64.Build.0 = Debug|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Debug|x86.ActiveCfg = Debug|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Debug|x86.Build.0 = Debug|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Release|Any CPU.Build.0 = Release|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Release|x64.ActiveCfg = Release|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Release|x64.Build.0 = Release|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Release|x86.ActiveCfg = Release|Any CPU - {723D183E-B609-CD2B-CF5B-B6F81E9368B3}.Release|x86.Build.0 = Release|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Debug|x64.ActiveCfg = Debug|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Debug|x64.Build.0 = Debug|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Debug|x86.ActiveCfg = Debug|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Debug|x86.Build.0 = Debug|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Release|Any CPU.Build.0 = Release|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Release|x64.ActiveCfg = Release|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Release|x64.Build.0 = Release|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Release|x86.ActiveCfg = Release|Any CPU - {D1B3E399-F4E4-D537-46FE-2585AF4E9262}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {D50ADE7F-2B62-EDB5-2F96-8E6E8D19B961} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {74E901E1-ED27-2FA9-D58D-48A875D82102} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {723D183E-B609-CD2B-CF5B-B6F81E9368B3} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {D1B3E399-F4E4-D537-46FE-2585AF4E9262} = {5F0E6F1C-44C1-42B7-ADF4-770ABB471B40} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {14515AC1-A74C-4CBB-98F2-9DA660E967EF} - EndGlobalSection -EndGlobal diff --git a/tests/ImGui.App.Tests/GlobalScaleTests.cs b/ImGuiApp.Test/GlobalScaleTests.cs similarity index 88% rename from tests/ImGui.App.Tests/GlobalScaleTests.cs rename to ImGuiApp.Test/GlobalScaleTests.cs index 88e841e..b37b8cf 100644 --- a/tests/ImGui.App.Tests/GlobalScaleTests.cs +++ b/ImGuiApp.Test/GlobalScaleTests.cs @@ -2,7 +2,7 @@ // All rights reserved. // Licensed under the MIT license. -namespace ktsu.ImGui.App.Tests; +namespace ktsu.ImGuiApp.Test; using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -101,21 +101,7 @@ public void SetGlobalScale_CallsCallback_WhenConfigured() } [TestMethod] - public void SetGlobalScale_NoCallback_DoesNotThrow() - { - // Arrange - ImGuiApp.Config = new ImGuiAppConfig - { - OnGlobalScaleChanged = null! - }; - - // Act & Assert - Should not throw - ImGuiApp.SetGlobalScale(1.5f); - Assert.AreEqual(1.5f, ImGuiApp.GlobalScale, 0.001f); - } - - [TestMethod] - public void SetGlobalScale_MultipleValues_CallbackInvokedEachTime() + public void SetGlobalScale_MultipleInvocations_CallsCallbackEachTime() { // Arrange int callbackCount = 0; diff --git a/ImGuiApp/ImGuiApp.cs b/ImGuiApp/ImGuiApp.cs index 3556468..1466f28 100644 --- a/ImGuiApp/ImGuiApp.cs +++ b/ImGuiApp/ImGuiApp.cs @@ -124,6 +124,12 @@ public static ImGuiAppWindowState WindowState ///

    W^oL`*XvEXb0YdTMHSw<(n? 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 s0Cz?ajjnCd+b8gf# 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 z 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 z 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 DLjBpc diff --git a/ImGui.App/Resources/NotoEmoji.ttf b/ImGui.App/Resources/NotoEmoji.ttf deleted file mode 100644 index 7f2463b5bd41bf32b9e2d004dbad29a8d7ea6a36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 890808 zcmeFa2Xs|M+ctd9>?!-46MAnF+6jU}dI*A&1Og~X3B`h7NDdGPNl2ln2zEh1Q4~~A zR1~|QhzNp+qM!&!QG*~LB8Z?!kq-YgdrlzW^Ss~led}HS`u_F5IqS-O&&)k{o3i&I zdp5*~s1i*ihYC7p^i3T_HCGcYjwG7?d5?_Nv6&63-Acq(KW>Ep^1Hc);9hy6CNXu6B*AVOW3q@SNc~~ej`^r=Iyo>%1 zqdjpLDylqP@kW$8pxkuW$l|dRzkK;Cun|Oc_vPkiWyXH@MSr4ej}kSQGct2*f!-Bp z3;9UMN9JXY49%Xp@-ZTgvYc6vUsU{CYQxuv223Zqb<${~e?aa1kk5vE)6vjBc)*b5 zL^awGRop;~*!lD1H;_D2x++H=prUw?Co zpa_5c%VbDZAXb@lnamxu&{ur949dosL#zBFQg;lh)b1DsT+hb#EeS&n^Yb=Vfg;Wg z@YmP%QFN_kaKayCM@b_7IQb0Ry~0xGdm6&4MpTlVIgFd1iO|neetFAuH^bMtM~}|b zf$02s>zmGn9xq<}hQIg~Nk06p$tuD#CJY}dZVK~^8jHj* tl9_AfNbPk7kQBFou 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

    !0Q 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

  • W^oL`*XvEXb0YdTMHSw<(n? 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 s0Cz?ajjnCd+b8gf# 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 z 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 z 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 DLjBpc diff --git a/ImGui.App/Resources/NotoEmoji.ttf b/ImGui.App/Resources/NotoEmoji.ttf deleted file mode 100644 index 7f2463b5bd41bf32b9e2d004dbad29a8d7ea6a36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 890808 zcmeFa2Xs|M+ctd9>?!-46MAnF+6jU}dI*A&1Og~X3B`h7NDdGPNl2ln2zEh1Q4~~A zR1~|QhzNp+qM!&!QG*~LB8Z?!kq-YgdrlzW^Ss~led}HS`u_F5IqS-O&&)k{o3i&I zdp5*~s1i*ihYC7p^i3T_HCGcYjwG7?d5?_Nv6&63-Acq(KW>Ep^1Hc);9hy6CNXu6B*AVOW3q@SNc~~ej`^r=Iyo>%1 zqdjpLDylqP@kW$8pxkuW$l|dRzkK;Cun|Oc_vPkiWyXH@MSr4ej}kSQGct2*f!-Bp z3;9UMN9JXY49%Xp@-ZTgvYc6vUsU{CYQxuv223Zqb<${~e?aa1kk5vE)6vjBc)*b5 zL^awGRop;~*!lD1H;_D2x++H=prUw?Co zpa_5c%VbDZAXb@lnamxu&{ur949dosL#zBFQg;lh)b1DsT+hb#EeS&n^Yb=Vfg;Wg z@YmP%QFN_kaKayCM@b_7IQb0Ry~0xGdm6&4MpTlVIgFd1iO|neetFAuH^bMtM~}|b zf$02s>zmGn9xq<}hQIg~Nk06p$tuD#CJY}dZVK~^8jHj* tl9_AfNbPk7kQBFou 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

    !0Q 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

  • public static float ScaleFactor { get; private set; } = 1; + /// + /// Gets the global UI scale factor for accessibility. + /// This scale is applied on top of DPI scaling and affects all UI elements. + /// + public static float GlobalScale { get; private set; } = 1.0f; + internal static ConcurrentDictionary Textures { get; } = []; /// @@ -140,6 +146,23 @@ public static void Stop() window.Close(); } + /// + /// Sets the global UI scale factor for accessibility. + /// This scale is applied on top of DPI scaling and affects all UI elements. + /// + /// The scale factor to set. Valid range is 0.5 to 3.0. + /// Thrown when scale is outside the valid range. + public static void SetGlobalScale(float scale) + { + if (scale is < 0.5f or > 3.0f) + { + throw new ArgumentOutOfRangeException(nameof(scale), scale, "Scale must be between 0.5 and 3.0"); + } + + GlobalScale = scale; + Config.OnGlobalScaleChanged?.Invoke(scale); + } + /// /// Opens the ImGui Demo window. /// @@ -444,7 +467,8 @@ internal static void RenderWithScaling(Action renderAction) { FindBestFontForAppearance(FontAppearance.DefaultFontName, FontAppearance.DefaultFontPointSize, out float bestFontSize); float scaleRatio = bestFontSize / FontAppearance.DefaultFontPointSize; - using (new UIScaler(scaleRatio)) + float combinedScale = scaleRatio * GlobalScale; + using (new UIScaler(combinedScale)) { RenderWithDefaultFont(renderAction); } @@ -743,6 +767,46 @@ internal static void RenderAppMenu(Action? menuDelegate) { menuDelegate(); + if (ImGui.BeginMenu("Scale")) + { + if (ImGui.MenuItem("50%", "", Math.Abs(GlobalScale - 0.5f) < 0.01f)) + { + SetGlobalScale(0.5f); + } + + if (ImGui.MenuItem("75%", "", Math.Abs(GlobalScale - 0.75f) < 0.01f)) + { + SetGlobalScale(0.75f); + } + + if (ImGui.MenuItem("100%", "", Math.Abs(GlobalScale - 1.0f) < 0.01f)) + { + SetGlobalScale(1.0f); + } + + if (ImGui.MenuItem("125%", "", Math.Abs(GlobalScale - 1.25f) < 0.01f)) + { + SetGlobalScale(1.25f); + } + + if (ImGui.MenuItem("150%", "", Math.Abs(GlobalScale - 1.5f) < 0.01f)) + { + SetGlobalScale(1.5f); + } + + if (ImGui.MenuItem("175%", "", Math.Abs(GlobalScale - 1.75f) < 0.01f)) + { + SetGlobalScale(1.75f); + } + + if (ImGui.MenuItem("200%", "", Math.Abs(GlobalScale - 2.0f) < 0.01f)) + { + SetGlobalScale(2.0f); + } + + ImGui.EndMenu(); + } + if (ImGui.BeginMenu("Debug")) { if (ImGui.MenuItem("Show ImGui Demo", "", isImGuiDemoVisible)) @@ -1349,6 +1413,7 @@ internal static void Reset() performanceLastFpsUpdateTime = 0; performanceFrameCount = 0; ScaleFactor = 1; + GlobalScale = 1.0f; Textures.Clear(); Config = new(); } diff --git a/ImGuiApp/ImGuiAppConfig.cs b/ImGuiApp/ImGuiAppConfig.cs index 6de715f..deab217 100644 --- a/ImGuiApp/ImGuiAppConfig.cs +++ b/ImGuiApp/ImGuiAppConfig.cs @@ -70,6 +70,12 @@ public class ImGuiAppConfig /// public Action OnMoveOrResize { get; init; } = () => { }; + /// + /// Gets or sets the action to be performed when the global scale factor changes. + /// This can be used to persist the scale preference. + /// + public Action OnGlobalScaleChanged { get; init; } = (scale) => { }; + /// /// Gets or sets the fonts to be used in the application. /// diff --git a/examples/ImGuiAppDemo/ImGuiAppDemo.cs b/examples/ImGuiAppDemo/ImGuiAppDemo.cs deleted file mode 100644 index 31a4cfe..0000000 --- a/examples/ImGuiAppDemo/ImGuiAppDemo.cs +++ /dev/null @@ -1,966 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Examples.App; - -using System.Numerics; -using System.Text; - -using Hexa.NET.ImGui; - -using ktsu.ImGui.App; -using ktsu.ImGui.Examples.App.Properties; -using ktsu.Semantics.Paths; -using ktsu.Semantics.Strings; - -internal static class ImGuiAppDemo -{ - private static bool showImGuiDemo; - private static bool showStyleEditor; - private static bool showMetrics; - private static bool showAbout; - - // Demo state - Basic Widgets - private static float sliderValue = 0.5f; - private static int counter; - private static bool checkboxState; - private static string inputText = "Type here..."; - private static Vector3 colorPickerValue = new(0.4f, 0.7f, 0.2f); - private static Vector4 color4Value = new(1.0f, 0.5f, 0.2f, 1.0f); - private static readonly Random random = new(); - private static readonly List plotValues = []; - private static float plotRefreshTime; - - // Advanced widget states - private static int comboSelection; - private static readonly string[] comboItems = ["Item 1", "Item 2", "Item 3", "Item 4"]; - private static int listboxSelection; - private static readonly string[] listboxItems = ["Apple", "Banana", "Cherry", "Date", "Elderberry"]; - private static float dragFloat = 1.0f; - private static int dragInt = 50; - private static Vector3 dragVector = new(1.0f, 2.0f, 3.0f); - private static float angle; - - // Table demo state - private static readonly List tableData = []; - private static bool showTableHeaders = true; - private static bool showTableBorders = true; - - // Text rendering state - private static readonly StringBuilder textBuffer = new(1024); - private static bool wrapText = true; - private static float textSpeed = 50.0f; - private static float animationTime; - - // Canvas drawing state - private static readonly List canvasPoints = []; - private static Vector4 drawColor = new(1.0f, 1.0f, 0.0f, 1.0f); - private static float brushSize = 5.0f; - - // Modal and popup states - private static bool showModal; - private static bool showPopup; - private static string modalResult = ""; - - // File operations - private static string filePath = ""; - private static string fileContent = ""; - - // Animation demo - private static float bounceOffset; - private static float pulseScale = 1.0f; - - // Additional UI state - private static int radioSelection; - private static string modalInputBuffer = ""; - - private sealed record DemoItem(int Id, string Name, string Category, float Value, bool Active); - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Security", "CA5394:Do not use insecure randomness", Justification = "")] - static ImGuiAppDemo() - { - // Initialize table data - for (int i = 0; i < 20; i++) - { - string[] categories = ["Category A", "Category B", "Category C"]; - tableData.Add(new DemoItem( - i, - $"Item {i + 1}", - categories[i % 3], - (float)(random.NextDouble() * 100), - random.NextDouble() > 0.5 - )); - } - - textBuffer.Append("This is a demonstration of ImGui text editing capabilities.\n"); - textBuffer.Append("You can edit this text, and it will update in real-time.\n"); - textBuffer.Append("ImGui supports multi-line text editing with syntax highlighting possibilities."); - } - - private static void Main() => ImGuiApp.Start(new() - { - Title = "ImGuiApp Demo", - IconPath = AppContext.BaseDirectory.As() / "icon.png".As(), - OnRender = OnRender, - OnAppMenu = OnAppMenu, - SaveIniSettings = false, - // Note: EnableUnicodeSupport = true by default, so Unicode and emojis are automatically enabled! - Fonts = new Dictionary - { - { nameof(Resources.CARDCHAR), Resources.CARDCHAR } - }, - // Example of handling global scale changes for accessibility - OnGlobalScaleChanged = (scale) => Console.WriteLine($"Global UI scale changed to {scale * 100:F0}% - This can be persisted to user preferences"), - // Example of configuring performance settings for throttled rendering - // Uses PID controller for accurate frame rate limiting instead of simple sleep-based approach - // VSync is disabled to allow frame limiting below monitor refresh rate - // Defaults: Kp=1.8, Ki=0.048, Kd=0.237 (from comprehensive auto-tuning) - PerformanceSettings = new() - { - EnableThrottledRendering = true, - // Using default values: Focused=30, Unfocused=5, Idle=10 FPS - // But with a shorter idle timeout for demo purposes - IdleTimeoutSeconds = 5.0, // Consider idle after 5 seconds (default is 30) - }, - }); - - private static void OnRender(float dt) - { - UpdateAnimations(dt); - RenderMainDemoWindow(); - - // Show additional windows based on menu toggles - if (showImGuiDemo) - { - ImGui.ShowDemoWindow(ref showImGuiDemo); - } - - if (showStyleEditor) - { - ImGui.Begin("Style Editor", ref showStyleEditor); - ImGui.ShowStyleEditor(); - ImGui.End(); - } - - if (showMetrics) - { - ImGui.ShowMetricsWindow(ref showMetrics); - } - - if (showAbout) - { - RenderAboutWindow(); - } - - // Handle modals and popups - RenderModalAndPopups(); - - // Update plot data - UpdatePlotData(dt); - } - - private static void RenderMainDemoWindow() - { - // Create tabs for different demo sections - if (ImGui.BeginTabBar("DemoTabs", ImGuiTabBarFlags.None)) - { - RenderBasicWidgetsTab(); - RenderAdvancedWidgetsTab(); - RenderLayoutTab(); - RenderGraphicsTab(); - RenderDataVisualizationTab(); - RenderInputHandlingTab(); - RenderAnimationTab(); - RenderUnicodeTab(); - RenderNerdFontTab(); - RenderUtilityTab(); - ImGui.EndTabBar(); - } - } - - private static void RenderBasicWidgetsTab() - { - if (ImGui.BeginTabItem("Basic Widgets")) - { - ImGui.TextWrapped("This tab demonstrates basic ImGui widgets and controls."); - ImGui.Separator(); - - // Buttons - ImGui.Text("Buttons:"); - if (ImGui.Button("Regular Button")) - { - counter++; - } - - ImGui.SameLine(); - if (ImGui.SmallButton("Small")) - { - counter++; - } - - ImGui.SameLine(); - if (ImGui.ArrowButton("##left", ImGuiDir.Left)) - { - counter--; - } - - ImGui.SameLine(); - if (ImGui.ArrowButton("##right", ImGuiDir.Right)) - { - counter++; - } - - ImGui.SameLine(); - ImGui.Text($"Counter: {counter}"); - - // Checkboxes and Radio buttons - ImGui.Separator(); - ImGui.Text("Selection Controls:"); - ImGui.Checkbox("Checkbox", ref checkboxState); - - ImGui.RadioButton("Option 1", ref radioSelection, 0); - ImGui.SameLine(); - ImGui.RadioButton("Option 2", ref radioSelection, 1); - ImGui.SameLine(); - ImGui.RadioButton("Option 3", ref radioSelection, 2); - - // Sliders - ImGui.Separator(); - ImGui.Text("Sliders:"); - ImGui.SliderFloat("Float Slider", ref sliderValue, 0.0f, 1.0f); - ImGui.SliderFloat("Angle", ref angle, 0.0f, 360.0f, "%.1f deg"); - ImGui.SliderInt("Int Slider", ref dragInt, 0, 100); - - // Input fields - ImGui.Separator(); - ImGui.Text("Input Fields:"); - ImGui.InputText("Text Input", ref inputText, 100); - ImGui.InputFloat("Float Input", ref dragFloat); - ImGui.InputFloat3("Vector3 Input", ref dragVector); - - // Combo boxes - ImGui.Separator(); - ImGui.Text("Dropdowns:"); - ImGui.Combo("Combo Box", ref comboSelection, comboItems, comboItems.Length); - ImGui.ListBox("List Box", ref listboxSelection, listboxItems, listboxItems.Length, 4); - - ImGui.EndTabItem(); - } - } - - private static void RenderAdvancedWidgetsTab() - { - if (ImGui.BeginTabItem("Advanced Widgets")) - { - // Color controls - ImGui.Text("Color Controls:"); - ImGui.ColorEdit3("Color RGB", ref colorPickerValue); - ImGui.ColorEdit4("Color RGBA", ref color4Value); - ImGui.SetNextItemWidth(200.0f); - ImGui.ColorPicker3("Color Picker", ref colorPickerValue); - - ImGui.Separator(); - - // Tree view - ImGui.Text("Tree View:"); - if (ImGui.TreeNode("Root Node")) - { - for (int i = 0; i < 5; i++) - { - string nodeName = $"Child Node {i}"; - bool nodeOpen = ImGui.TreeNode(nodeName); - - if (i == 2 && nodeOpen) - { - for (int j = 0; j < 3; j++) - { - if (ImGui.TreeNode($"Grandchild {j}")) - { - ImGui.Text($"Leaf item {j}"); - ImGui.TreePop(); - } - } - } - else if (nodeOpen) - { - ImGui.Text($"Content of {nodeName}"); - } - - if (nodeOpen) - { - ImGui.TreePop(); - } - } - ImGui.TreePop(); - } - - ImGui.Separator(); - - // Progress bars and loading indicators - ImGui.Text("Progress Indicators:"); - float progress = ((float)Math.Sin(animationTime * 2.0) * 0.5f) + 0.5f; - ImGui.ProgressBar(progress, new Vector2(-1, 0), $"{progress * 100:F1}%"); - - // Spinner-like effect - ImGui.Text("Loading..."); - ImGui.SameLine(); - for (int i = 0; i < 8; i++) - { - float rotation = (animationTime * 5.0f) + (i * MathF.PI / 4.0f); - float alpha = (MathF.Sin(rotation) + 1.0f) * 0.5f; - ImGui.TextColored(new Vector4(1, 1, 1, alpha), "●"); - if (i < 7) - { - ImGui.SameLine(); - } - } - - ImGui.EndTabItem(); - } - } - - private static void RenderLayoutTab() - { - if (ImGui.BeginTabItem("Layout & Tables")) - { - // Columns - ImGui.Text("Columns Layout:"); - ImGui.Columns(3, "DemoColumns"); - ImGui.Separator(); - - ImGui.Text("Column 1"); - ImGui.NextColumn(); - ImGui.Text("Column 2"); - ImGui.NextColumn(); - ImGui.Text("Column 3"); - ImGui.NextColumn(); - - for (int i = 0; i < 9; i++) - { - ImGui.Text($"Item {i + 1}"); - ImGui.NextColumn(); - } - - ImGui.Columns(1); - ImGui.Separator(); - - // Tables - ImGui.Text("Advanced Tables:"); - ImGui.Checkbox("Show Headers", ref showTableHeaders); - ImGui.SameLine(); - ImGui.Checkbox("Show Borders", ref showTableBorders); - - ImGuiTableFlags tableFlags = ImGuiTableFlags.Sortable | ImGuiTableFlags.Resizable; - if (showTableHeaders) - { - tableFlags |= ImGuiTableFlags.RowBg; - } - if (showTableBorders) - { - tableFlags |= ImGuiTableFlags.BordersOuter | ImGuiTableFlags.BordersV; - } - - if (ImGui.BeginTable("DemoTable", 5, tableFlags)) - { - if (showTableHeaders) - { - // Test flags without width parameters - ImGui.TableSetupColumn("ID", ImGuiTableColumnFlags.DefaultSort); - ImGui.TableSetupColumn("Name", ImGuiTableColumnFlags.None); - ImGui.TableSetupColumn("Category", ImGuiTableColumnFlags.None); - ImGui.TableSetupColumn("Value", ImGuiTableColumnFlags.None); - ImGui.TableSetupColumn("Active", ImGuiTableColumnFlags.None); - ImGui.TableHeadersRow(); - } - - for (int row = 0; row < Math.Min(tableData.Count, 10); row++) - { - DemoItem item = tableData[row]; - ImGui.TableNextRow(); - - ImGui.TableSetColumnIndex(0); - ImGui.Text(item.Id.ToString()); - - ImGui.TableSetColumnIndex(1); - ImGui.Text(item.Name); - - ImGui.TableSetColumnIndex(2); - ImGui.Text(item.Category); - - ImGui.TableSetColumnIndex(3); - ImGui.Text($"{item.Value:F2}"); - - ImGui.TableSetColumnIndex(4); - ImGui.Text(item.Active ? "✓" : "✗"); - } - - ImGui.EndTable(); - } - - ImGui.Separator(); - - // Child windows - ImGui.Text("Child Windows:"); - if (ImGui.BeginChild("ScrollableChild", new Vector2(0, 150))) - { - for (int i = 0; i < 50; i++) - { - ImGui.Text($"Scrollable line {i + 1}"); - } - } - ImGui.EndChild(); - - ImGui.EndTabItem(); - } - } - - private static void RenderGraphicsTab() - { - if (ImGui.BeginTabItem("Graphics & Drawing")) - { - // Image display - AbsoluteFilePath iconPath = AppContext.BaseDirectory.As() / "icon.png".As(); - ImGuiAppTextureInfo iconTexture = ImGuiApp.GetOrLoadTexture(iconPath); - - ImGui.Text("Image Display:"); - ImGui.Image(iconTexture.TextureRef, new Vector2(64, 64)); - ImGui.SameLine(); - ImGui.Image(iconTexture.TextureRef, new Vector2(32, 32)); - ImGui.SameLine(); - ImGui.Image(iconTexture.TextureRef, new Vector2(16, 16)); - - ImGui.Separator(); - - // Custom drawing with ImDrawList - ImGui.Text("Custom Drawing Canvas:"); - ImGui.ColorEdit4("Draw Color", ref drawColor); - ImGui.SliderFloat("Brush Size", ref brushSize, 1.0f, 20.0f); - - if (ImGui.Button("Clear Canvas")) - { - canvasPoints.Clear(); - } - - Vector2 canvasPos = ImGui.GetCursorScreenPos(); - Vector2 canvasSize = new(400, 200); - - // Draw canvas background - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - drawList.AddRectFilled(canvasPos, canvasPos + canvasSize, ImGui.ColorConvertFloat4ToU32(new Vector4(0.1f, 0.1f, 0.1f, 1.0f))); - drawList.AddRect(canvasPos, canvasPos + canvasSize, ImGui.ColorConvertFloat4ToU32(new Vector4(0.5f, 0.5f, 0.5f, 1.0f))); - - // Handle mouse input for drawing - ImGui.InvisibleButton("Canvas", canvasSize); - if (ImGui.IsItemActive() && ImGui.IsMouseDown(ImGuiMouseButton.Left)) - { - Vector2 mousePos = ImGui.GetMousePos() - canvasPos; - if (mousePos.X >= 0 && mousePos.Y >= 0 && mousePos.X <= canvasSize.X && mousePos.Y <= canvasSize.Y) - { - canvasPoints.Add(mousePos); - } - } - - // Draw points - uint color = ImGui.ColorConvertFloat4ToU32(drawColor); - foreach (Vector2 point in canvasPoints) - { - drawList.AddCircleFilled(canvasPos + point, brushSize, color); - } - - // Draw some simple shapes for demonstration - ImGui.Separator(); - ImGui.Text("Shape Examples:"); - Vector2 shapeStart = ImGui.GetCursorScreenPos(); - - // Simple animated circle - float t = animationTime; - Vector2 center = shapeStart + new Vector2(100, 50); - float radius = 20 + (MathF.Sin(t * 2) * 5); - drawList.AddCircle(center, radius, ImGui.ColorConvertFloat4ToU32(new Vector4(1, 0, 0, 1)), 16, 2.0f); - - // Moving rectangle - Vector2 rectPos = shapeStart + new Vector2(200 + (MathF.Sin(t) * 30), 30); - drawList.AddRectFilled(rectPos, rectPos + new Vector2(40, 40), ImGui.ColorConvertFloat4ToU32(new Vector4(0, 1, 0, 0.7f))); - - ImGui.Dummy(new Vector2(400, 100)); // Reserve space - - ImGui.EndTabItem(); - } - } - - private static void RenderDataVisualizationTab() - { - if (ImGui.BeginTabItem("Data Visualization")) - { - ImGui.Text("Real-time Data Plots:"); - - // Line plot - if (plotValues.Count > 0) - { - float[] values = [.. plotValues]; - ImGui.PlotLines("Random Values", ref values[0], values.Length, 0, - $"Current: {values[^1]:F2}", 0.0f, 1.0f, new Vector2(ImGui.GetContentRegionAvail().X, 100)); - - ImGui.PlotHistogram("Distribution", ref values[0], values.Length, 0, - "Histogram", 0.0f, 1.0f, new Vector2(ImGui.GetContentRegionAvail().X, 100)); - } - - ImGui.Separator(); - - // Performance note - ImGui.Text("Performance Metrics:"); - ImGui.TextWrapped("Performance monitoring is now available in the Debug menu! Use 'Debug > Show Performance Monitor' to see real-time FPS graphs and throttling state."); - - ImGui.Separator(); - - // Font demonstrations - ImGui.Text("Custom Font Rendering:"); - using (new FontAppearance(nameof(Resources.CARDCHAR), 16)) - { - ImGui.Text("Small custom font text"); - } - - using (new FontAppearance(nameof(Resources.CARDCHAR), 24)) - { - ImGui.Text("Medium custom font text"); - } - - using (new FontAppearance(nameof(Resources.CARDCHAR), 32)) - { - ImGui.Text("Large custom font text"); - } - - // Text formatting examples - ImGui.Separator(); - ImGui.Text("Text Formatting:"); - ImGui.TextColored(new Vector4(1, 0, 0, 1), "Red text"); - ImGui.TextColored(new Vector4(0, 1, 0, 1), "Green text"); - ImGui.TextColored(new Vector4(0, 0, 1, 1), "Blue text"); - ImGui.TextWrapped("This is a long line of text that should wrap to multiple lines when the window is not wide enough to contain it all on a single line."); - - ImGui.EndTabItem(); - } - } - - private static void RenderInputHandlingTab() - { - if (ImGui.BeginTabItem("Input & Interaction")) - { - ImGui.Text("Mouse Information:"); - Vector2 mousePos = ImGui.GetMousePos(); - Vector2 mouseDelta = ImGui.GetMouseDragDelta(ImGuiMouseButton.Left); - ImGui.Text($"Mouse Position: ({mousePos.X:F1}, {mousePos.Y:F1})"); - ImGui.Text($"Mouse Delta: ({mouseDelta.X:F1}, {mouseDelta.Y:F1})"); - ImGui.Text($"Left Button: {(ImGui.IsMouseDown(ImGuiMouseButton.Left) ? "DOWN" : "UP")}"); - ImGui.Text($"Right Button: {(ImGui.IsMouseDown(ImGuiMouseButton.Right) ? "DOWN" : "UP")}"); - - ImGui.Separator(); - - // Simple drag demonstration - ImGui.Text("Drag & Drop:"); - ImGui.Button("Drag Source", new Vector2(100, 50)); - ImGui.SameLine(); - ImGui.Button("Drop Target", new Vector2(100, 50)); - ImGui.Text("(Drag and drop functionality would require more complex implementation)"); - - ImGui.Separator(); - - // Text editing - ImGui.Text("Multi-line Text Editor:"); - ImGui.Checkbox("Word Wrap", ref wrapText); - ImGuiInputTextFlags textFlags = ImGuiInputTextFlags.AllowTabInput; - if (!wrapText) - { - textFlags |= ImGuiInputTextFlags.NoHorizontalScroll; - } - - string textContent = textBuffer.ToString(); - if (ImGui.InputTextMultiline("##TextEditor", ref textContent, 1024, new Vector2(-1, 150), textFlags)) - { - textBuffer.Clear(); - textBuffer.Append(textContent); - } - - ImGui.Separator(); - - // Popup and modal buttons - ImGui.Text("Popups and Modals:"); - if (ImGui.Button("Show Modal")) - { - showModal = true; - modalResult = ""; - } - - ImGui.SameLine(); - if (ImGui.Button("Show Popup")) - { - showPopup = true; - } - - if (!string.IsNullOrEmpty(modalResult)) - { - ImGui.Text($"Modal Result: {modalResult}"); - } - - ImGui.EndTabItem(); - } - } - - private static void RenderAnimationTab() - { - if (ImGui.BeginTabItem("Animation & Effects")) - { - ImGui.Text("Animation Examples:"); - - // Simple animations - ImGui.Text("Bouncing Animation:"); - Vector2 ballPos = ImGui.GetCursorScreenPos(); - ballPos.Y += bounceOffset; - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - drawList.AddCircleFilled(ballPos + new Vector2(50, 50), 20, ImGui.ColorConvertFloat4ToU32(new Vector4(1, 0.5f, 0, 1))); - ImGui.Dummy(new Vector2(100, 100)); - - // Pulsing element - ImGui.Text("Pulse Animation:"); - Vector2 pulsePos = ImGui.GetCursorScreenPos(); - float pulseSize = 20 * pulseScale; - drawList.AddCircleFilled(pulsePos + new Vector2(50, 50), pulseSize, - ImGui.ColorConvertFloat4ToU32(new Vector4(0.5f, 0, 1, 0.7f))); - ImGui.Dummy(new Vector2(100, 100)); - - ImGui.Separator(); - - // Animation controls - ImGui.Text("Animation Controls:"); - ImGui.SliderFloat("Text Speed", ref textSpeed, 10.0f, 200.0f); - - // Animated text (simplified) - ImGui.Text("Animated text effects:"); - for (int i = 0; i < 20; i++) - { - float wave = (MathF.Sin((animationTime * 3.0f) + (i * 0.5f)) * 0.5f) + 0.5f; - ImGui.TextColored(new Vector4(wave, 1.0f - wave, 0.5f, 1.0f), i % 5 == 4 ? " " : "▓"); - if (i % 5 != 4) - { - ImGui.SameLine(); - } - } - - ImGui.EndTabItem(); - } - } - - private static void RenderUtilityTab() - { - if (ImGui.BeginTabItem("Utilities & Tools")) - { - // File operations - ImGui.Text("File Operations:"); - ImGui.InputText("File Path", ref filePath, 256); - ImGui.SameLine(); - if (ImGui.Button("Load") && !string.IsNullOrEmpty(filePath)) - { - try - { - fileContent = File.ReadAllText(filePath); - } - catch (Exception ex) when (ex is FileNotFoundException or UnauthorizedAccessException) - { - // Handle file read errors gracefully - fileContent = $"Error loading file: {ex.Message}"; - } - } - - if (!string.IsNullOrEmpty(fileContent)) - { - ImGui.Text("File Content Preview:"); - ImGui.TextWrapped(fileContent.Length > 500 ? fileContent[..500] + "..." : fileContent); - } - - ImGui.Separator(); - - // System information - ImGui.Text("System Information:"); - unsafe - { - byte* ptr = ImGui.GetVersion(); - int length = 0; - while (ptr[length] != 0) - { - length++; - } - ImGui.Text($"ImGui Version: {Encoding.UTF8.GetString(ptr, length)}"); - } - ImGui.Text($"Display Size: {ImGui.GetIO().DisplaySize}"); - - ImGui.Separator(); - - // Debugging tools - ImGui.Text("Debug Tools:"); - if (ImGui.Button("Show ImGui Demo")) - { - showImGuiDemo = true; - } - ImGui.SameLine(); - if (ImGui.Button("Show Style Editor")) - { - showStyleEditor = true; - } - ImGui.SameLine(); - if (ImGui.Button("Show Metrics")) - { - showMetrics = true; - } - - ImGui.EndTabItem(); - } - } - - private static void RenderUnicodeTab() - { - if (ImGui.BeginTabItem("Unicode & Emojis")) - { - ImGui.TextWrapped("Unicode and Emoji Support (Enabled by Default)"); - ImGui.TextWrapped("ImGuiApp automatically includes support for Unicode characters and emojis. This feature works with your configured fonts."); - ImGui.Separator(); - - ImGui.Text("Basic ASCII: Hello World!"); - ImGui.Text("Accented characters: café, naïve, résumé"); - ImGui.Text("Mathematical symbols: ∞ ≠ ≈ ≤ ≥ ± × ÷ ∂ ∑ ∏ √ ∫"); - ImGui.Text("Currency symbols: $ € £ ¥ ₹ ₿"); - ImGui.Text("Arrows: ← → ↑ ↓ ↔ ↕ ⇐ ⇒ ⇑ ⇓"); - ImGui.Text("Geometric shapes: ■ □ ▲ △ ● ○ ◆ ◇ ★ ☆"); - ImGui.Text("Miscellaneous symbols: ♠ ♣ ♥ ♦ ☀ ☁ ☂ ☃ ♪ ♫"); - - ImGui.Separator(); - ImGui.Text("Full Emoji Range Support (if font supports them):"); - ImGui.Text("Faces: 😀 😃 😄 😁 😆 😅 😂 🤣 😊 😇 😍 😎 🤓 🧐 🤔 😴"); - ImGui.Text("Gestures: 👍 👎 👌 ✌️ 🤞 🤟 🤘 🤙 👈 👉 👆 👇 ☝️ ✋ 🤚 🖐"); - ImGui.Text("Objects: 🚀 💻 📱 🎸 🎨 🏆 🌟 💎 ⚡ 🔥 💡 🔧 ⚙️ 🔑 💰"); - ImGui.Text("Nature: 🌈 🌞 🌙 ⭐ 🌍 🌊 🌳 🌸 🦋 🐝 🐶 🐱 🦊 🐻 🐼"); - ImGui.Text("Food: 🍎 🍌 🍕 🍔 🍟 🍦 🎂 ☕ 🍺 🍷 🍓 🥑 🥨 🧀 🍯"); - ImGui.Text("Transport: 🚗 🚂 ✈️ 🚲 🚢 🚁 🚌 🏍️ 🛸 🚜 🏎️ 🚙 🚕 🚐"); - ImGui.Text("Activities: ⚽ 🏀 🏈 ⚾ 🎾 🏐 🏉 🎱 🏓 🏸 🥊 ⛳ 🎯 🎪"); - ImGui.Text("Weather: ☀️ ⛅ ☁️ 🌤️ ⛈️ 🌧️ ❄️ ☃️ ⛄ 🌬️ 💨 🌊 💧"); - ImGui.Text("Symbols: ❤️ 💚 💙 💜 🖤 💛 💔 ❣️ 💕 💖 💗 💘 💝 ✨"); - ImGui.Text("Arrows: ← → ↑ ↓ ↔ ↕ ↖ ↗ ↘ ↙ ⤴️ ⤵️ 🔀 🔁 🔂 🔄 🔃"); - ImGui.Text("Math: ± × ÷ = ≠ ≈ ≤ ≥ ∞ √ ∑ ∏ ∂ ∫ Ω π α β γ δ"); - ImGui.Text("Geometric: ■ □ ▲ △ ● ○ ◆ ◇ ★ ☆ ♠ ♣ ♥ ♦ ▪ ▫ ◾ ◽"); - ImGui.Text("Currency: $ € £ ¥ ₹ ₿ ¢ ₽ ₩ ₡ ₪ ₫ ₱ ₴ ₦ ₨ ₵"); - ImGui.Text("Dingbats: ✂ ✈ ☎ ⌚ ⏰ ⏳ ⌛ ⚡ ☔ ☂ ☀ ⭐ ☁ ⛅ ❄"); - ImGui.Text("Enclosed: ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ"); - - ImGui.Separator(); - ImGui.TextWrapped("Note: Character display depends on your configured font's Unicode support. " + - "If characters show as question marks, your font may not include those glyphs."); - - ImGui.Separator(); - ImGui.TextWrapped("To disable Unicode support (ASCII only), set EnableUnicodeSupport = false in your ImGuiAppConfig."); - - ImGui.EndTabItem(); - } - } - - private static void RenderNerdFontTab() - { - if (ImGui.BeginTabItem("Nerd Fonts")) - { - ImGui.TextWrapped("Nerd Font Icons (Patched Fonts)"); - ImGui.TextWrapped("This tab demonstrates Nerd Font icons if you're using a Nerd Font (like JetBrains Mono Nerd Font, Fira Code Nerd Font, etc.)."); - ImGui.Separator(); - - // Powerline symbols - ImGui.Text("Powerline Symbols:"); - ImGui.Text("Basic: \uE0A0 \uE0A1 \uE0A2 \uE0B0 \uE0B1 \uE0B2 \uE0B3"); - ImGui.Text("Extra: \uE0A3 \uE0B4 \uE0B5 \uE0B6 \uE0B7 \uE0B8 \uE0CA \uE0CC \uE0CD \uE0D0 \uE0D1 \uE0D4"); - - ImGui.Separator(); - - // Font Awesome icons - ImGui.Text("Font Awesome Icons:"); - ImGui.Text("Files & Folders: \uF07B \uF07C \uF15B \uF15C \uF016 \uF017 \uF019 \uF01A \uF093 \uF095"); - ImGui.Text("Git & Version Control: \uF1D3 \uF1D2 \uF126 \uF127 \uF128 \uF129 \uF12A \uF12B"); - ImGui.Text("Media & UI: \uF04B \uF04C \uF04D \uF050 \uF051 \uF048 \uF049 \uF067 \uF068 \uF00C \uF00D"); - - ImGui.Separator(); - - // Material Design icons - ImGui.Text("Material Design Icons:"); - ImGui.Text("Navigation: \uF52A \uF52B \uF544 \uF53F \uF540 \uF541 \uF542 \uF543"); - ImGui.Text("Actions: \uF8D5 \uF8D6 \uF8D7 \uF8D8 \uF8D9 \uF8DA \uF8DB \uF8DC"); - ImGui.Text("Content: \uF1C1 \uF1C2 \uF1C3 \uF1C4 \uF1C5 \uF1C6 \uF1C7 \uF1C8"); - - ImGui.Separator(); - - // Weather icons - ImGui.Text("Weather Icons:"); - ImGui.Text("Basic Weather: \uE30D \uE30E \uE30F \uE310 \uE311 \uE312 \uE313 \uE314"); - ImGui.Text("Temperature: \uE315 \uE316 \uE317 \uE318 \uE319 \uE31A \uE31B \uE31C"); - ImGui.Text("Wind & Pressure: \uE31D \uE31E \uE31F \uE320 \uE321 \uE322 \uE323 \uE324"); - - ImGui.Separator(); - - // Devicons - ImGui.Text("Developer Icons (Devicons):"); - ImGui.Text("Languages: \uE73C \uE73D \uE73E \uE73F \uE740 \uE741 \uE742 \uE743"); // Various programming languages - ImGui.Text("Frameworks: \uE744 \uE745 \uE746 \uE747 \uE748 \uE749 \uE74A \uE74B"); - ImGui.Text("Tools: \uE74C \uE74D \uE74E \uE74F \uE750 \uE751 \uE752 \uE753"); - - ImGui.Separator(); - - // Octicons - ImGui.Text("Octicons (GitHub Icons):"); - ImGui.Text("Version Control: \uF418 \uF419 \uF41A \uF41B \uF41C \uF41D \uF41E \uF41F"); - ImGui.Text("Issues & PRs: \uF420 \uF421 \uF422 \uF423 \uF424 \uF425 \uF426 \uF427"); - ImGui.Text("Social: \u2665 \u26A1 \uF428 \uF429 \uF42A \uF42B \uF42C \uF42D"); - - ImGui.Separator(); - - // Font Logos - ImGui.Text("Brand Logos (Font Logos):"); - ImGui.Text("Tech Brands: \uF300 \uF301 \uF302 \uF303 \uF304 \uF305 \uF306 \uF307"); - ImGui.Text("More Logos: \uF308 \uF309 \uF30A \uF30B \uF30C \uF30D \uF30E \uF30F"); - - ImGui.Separator(); - - // Pomicons - ImGui.Text("Pomicons:"); - ImGui.Text("Small Icons: \uE000 \uE001 \uE002 \uE003 \uE004 \uE005 \uE006 \uE007"); - ImGui.Text("More Icons: \uE008 \uE009 \uE00A \uE00B \uE00C \uE00D"); - - ImGui.Separator(); - ImGui.TextWrapped("Note: These icons will only display correctly if you're using a Nerd Font. " + - "If you see question marks or boxes, switch to a Nerd Font like 'JetBrains Mono Nerd Font' or 'Fira Code Nerd Font'."); - - ImGui.Separator(); - ImGui.TextWrapped("Popular Nerd Fonts: JetBrains Mono Nerd Font, Fira Code Nerd Font, Hack Nerd Font, " + - "Source Code Pro Nerd Font, DejaVu Sans Mono Nerd Font, and many more at nerdfonts.com"); - - ImGui.EndTabItem(); - } - } - - private static void RenderModalAndPopups() - { - // Modal dialog - if (showModal) - { - ImGui.OpenPopup("Demo Modal"); - showModal = false; - } - - if (ImGui.BeginPopupModal("Demo Modal", ref showModal)) - { - ImGui.Text("This is a modal dialog."); - ImGui.Text("It blocks interaction with the main window."); - ImGui.Separator(); - - ImGui.InputText("Input", ref modalInputBuffer, 100); - - if (ImGui.Button("OK")) - { - modalResult = $"You entered: {modalInputBuffer}"; - ImGui.CloseCurrentPopup(); - } - ImGui.SameLine(); - if (ImGui.Button("Cancel")) - { - modalResult = "Cancelled"; - ImGui.CloseCurrentPopup(); - } - - ImGui.EndPopup(); - } - - // Context popup - if (showPopup) - { - ImGui.OpenPopup("Demo Popup"); - showPopup = false; - } - - if (ImGui.BeginPopup("Demo Popup")) - { - ImGui.Text("This is a popup menu"); - if (ImGui.MenuItem("Option 1")) - { - // Handle option 1 - } - if (ImGui.MenuItem("Option 2")) - { - // Handle option 2 - } - ImGui.Separator(); - if (ImGui.MenuItem("Close")) - { - // Handle close - } - ImGui.EndPopup(); - } - } - - private static void UpdateAnimations(float dt) - { - animationTime += dt; - - // Bouncing animation - bounceOffset = (MathF.Abs(MathF.Sin(animationTime * 3)) * 50) - 25; - - // Pulse animation - pulseScale = 0.8f + (0.4f * MathF.Sin(animationTime * 4)); - } - - private static void RenderAboutWindow() - { - ImGui.Begin("About ImGuiApp Demo", ref showAbout); - ImGui.Text("ImGuiApp Demo Application"); - ImGui.Separator(); - ImGui.Text("This demo showcases extensive ImGui.NET features including:"); - ImGui.BulletText("Basic and advanced widgets"); - ImGui.BulletText("Layout systems (columns, tables, tabs)"); - ImGui.BulletText("Custom graphics and drawing"); - ImGui.BulletText("Data visualization and plotting"); - ImGui.BulletText("Input handling and interaction"); - ImGui.BulletText("Animations and effects"); - ImGui.BulletText("File operations and utilities"); - ImGui.Separator(); - ImGui.Text("Built with:"); - ImGui.BulletText("Hexa.NET.ImGui"); - ImGui.BulletText("Silk.NET"); - ImGui.BulletText("ktsu.ImGui Framework"); - ImGui.End(); - } - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Security", "CA5394:Do not use insecure randomness", Justification = "This is a demo application")] - private static void UpdatePlotData(float dt) - { - plotRefreshTime += dt; - if (plotRefreshTime >= 0.1f) // Update every 100ms - { - plotRefreshTime = 0; - plotValues.Add((float)random.NextDouble()); - if (plotValues.Count > 100) // Keep last 100 values - { - plotValues.RemoveAt(0); - } - } - } - - private static void OnAppMenu() - { - if (ImGui.BeginMenu("View")) - { - ImGui.MenuItem("ImGui Demo", string.Empty, ref showImGuiDemo); - ImGui.MenuItem("Style Editor", string.Empty, ref showStyleEditor); - ImGui.MenuItem("Metrics", string.Empty, ref showMetrics); - ImGui.EndMenu(); - } - - if (ImGui.BeginMenu("Help")) - { - ImGui.MenuItem("About", string.Empty, ref showAbout); - ImGui.EndMenu(); - } - } -} diff --git a/examples/ImGuiAppDemo/ImGuiAppDemo.csproj b/examples/ImGuiAppDemo/ImGuiAppDemo.csproj deleted file mode 100644 index 04e5f5d..0000000 --- a/examples/ImGuiAppDemo/ImGuiAppDemo.csproj +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - net9.0 - - true - - - - Always - - - - - - - - - - - - - True - True - Resources.resx - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - diff --git a/examples/ImGuiAppDemo/Properties/Resources.Designer.cs b/examples/ImGuiAppDemo/Properties/Resources.Designer.cs deleted file mode 100644 index 8a95982..0000000 --- a/examples/ImGuiAppDemo/Properties/Resources.Designer.cs +++ /dev/null @@ -1,73 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace ktsu.ImGui.Examples.App.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ktsu.examples.ImGuiAppDemo.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] CARDCHAR { - get { - object obj = ResourceManager.GetObject("CARDCHAR", resourceCulture); - return ((byte[])(obj)); - } - } - } -} diff --git a/examples/ImGuiAppDemo/Properties/Resources.resx b/examples/ImGuiAppDemo/Properties/Resources.resx deleted file mode 100644 index b4c27e0..0000000 --- a/examples/ImGuiAppDemo/Properties/Resources.resx +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\res\CARDCHAR.TTF;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - diff --git a/examples/ImGuiAppDemo/Properties/launchSettings.json b/examples/ImGuiAppDemo/Properties/launchSettings.json deleted file mode 100644 index c8b4046..0000000 --- a/examples/ImGuiAppDemo/Properties/launchSettings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "profiles": { - "ImGuiAppDemo": { - "commandName": "Project", - "nativeDebugging": true - } - } -} diff --git a/examples/ImGuiAppDemo/icon.png b/examples/ImGuiAppDemo/icon.png deleted file mode 100644 index 4372ef9..0000000 --- a/examples/ImGuiAppDemo/icon.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c4e44138de3ba76f7cb223da53de6bee3e72b9df281bec812b86b2da6f1aaf37 -size 16069 diff --git a/examples/ImGuiAppDemo/res/CARDCHAR.TTF b/examples/ImGuiAppDemo/res/CARDCHAR.TTF deleted file mode 100644 index 300bec5982a04379273e1141cf0260e377b4767a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39136 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 diff --git a/examples/ImGuiAppDemo/res/CARDCHAR.TXT b/examples/ImGuiAppDemo/res/CARDCHAR.TXT deleted file mode 100644 index 7a2c656..0000000 --- a/examples/ImGuiAppDemo/res/CARDCHAR.TXT +++ /dev/null @@ -1 +0,0 @@ -CARD CHARACTERS computer font v1.0 2003 Harold Lohner HLohner@aol.com www.haroldsfonts.com Based on the characters on a standard deck of Bicycle playing cards. Find the suits at [ diamond ] club { heart } spade \ No newline at end of file diff --git a/examples/ImGuiPopupsDemo/ImGuiPopupsDemo.cs b/examples/ImGuiPopupsDemo/ImGuiPopupsDemo.cs deleted file mode 100644 index 7c044d0..0000000 --- a/examples/ImGuiPopupsDemo/ImGuiPopupsDemo.cs +++ /dev/null @@ -1,489 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Examples.Popups; - -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ImGui.App; -using ktsu.ImGui.Popups; - -internal static class ImGuiPopupsDemo -{ - private static void Main() - { - ImGuiApp.Start(new() - { - Title = "ImGui Popups Demo", - OnAppMenu = OnAppMenu, - OnMoveOrResize = OnMoveOrResize, - OnStart = OnStart, - OnRender = OnRender, - SaveIniSettings = false, - }); - } - - // Demo state variables - private static string stringInputValue = "Hello World"; - private static int intInputValue = 42; - private static float floatInputValue = 3.14159f; - private static string selectedFriend = "None"; - private static string selectedColor = "None"; - private static string lastFileOpened = "None"; - private static string lastFileSaved = "None"; - private static string lastDirectoryChosen = "None"; - private static string lastPromptResult = "None"; - private static string lastCustomModalResult = "None"; - - // Sample data - private static readonly string[] Friends = ["Alice", "Bob", "Charlie", "Diana", "Eve", "Frank", "Grace", "Henry", "Ivy", "Jack"]; - private static readonly string[] Colors = ["Red", "Green", "Blue", "Yellow", "Purple", "Orange", "Pink", "Cyan", "Magenta", "Brown"]; - - // Custom modal state variables - private static bool customCheckbox; - private static float customSlider = 0.5f; - private static readonly string[] advancedModalItems = ["Option 1", "Option 2", "Option 3", "Option 4"]; - private static int advancedModalSelectedItem; - private static Vector3 advancedModalColorValue = new(1.0f, 0.5f, 0.0f); - private static readonly bool[] advancedModalFlags = [true, false, true, false]; - - // Popup instances - private static readonly ImGuiPopups.InputString popupInputString = new(); - private static readonly ImGuiPopups.InputInt popupInputInt = new(); - private static readonly ImGuiPopups.InputFloat popupInputFloat = new(); - private static readonly ImGuiPopups.FilesystemBrowser popupFilesystemBrowser = new(); - private static readonly ImGuiPopups.MessageOK popupMessageOK = new(); - private static readonly ImGuiPopups.SearchableList popupSearchableListFriends = new(); - private static readonly ImGuiPopups.SearchableList popupSearchableListColors = new(); - private static readonly ImGuiPopups.Prompt popupPrompt = new(); - private static readonly ImGuiPopups.Modal popupCustomModal = new(); - - private static void OnStart() - { - } - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "")] - private static void OnRender(float dt) - { - ImGui.Text("ImGui Popups Library - Demo"); - ImGui.Text("This demo showcases all popup types and configurations available in the library."); - ImGui.Separator(); - - RenderInputPopupsSection(); - RenderMessageAndPromptSection(); - RenderSearchableListsSection(); - RenderFileSystemBrowserSection(); - RenderCustomModalSection(); - RenderAdvancedExamplesSection(); - RenderTipsSection(); - - // Show all open popups - ShowAllPopups(); - } - - private static void RenderInputPopupsSection() - { - if (ImGui.CollapsingHeader("Input Popups", ImGuiTreeNodeFlags.DefaultOpen)) - { - ImGui.Text("Input popups allow users to enter different types of values."); - ImGui.Spacing(); - - // String Input - ImGui.Text($"Current String Value: {stringInputValue}"); - if (ImGui.Button("Edit String")) - { - popupInputString.Open("Edit String Value", "Enter a new string:", stringInputValue, result => stringInputValue = result); - } - - ImGui.SameLine(); - if (ImGui.Button("Edit String (Custom Size)")) - { - popupInputString.Open("Edit String Value", "Enter a new string:", stringInputValue, result => stringInputValue = result, new Vector2(400, 150)); - } - - // Integer Input - ImGui.Text($"Current Integer Value: {intInputValue}"); - if (ImGui.Button("Edit Integer")) - { - popupInputInt.Open("Edit Integer Value", "Enter a new integer:", intInputValue, result => intInputValue = result); - } - - // Float Input - ImGui.Text($"Current Float Value: {floatInputValue:F5}"); - if (ImGui.Button("Edit Float")) - { - popupInputFloat.Open("Edit Float Value", "Enter a new float:", floatInputValue, result => floatInputValue = result); - } - - ImGui.Spacing(); - } - } - - private static void RenderMessageAndPromptSection() - { - if (ImGui.CollapsingHeader("Message & Prompt Popups", ImGuiTreeNodeFlags.DefaultOpen)) - { - ImGui.Text("Display messages and custom prompts with various configurations."); - ImGui.Spacing(); - - // Simple Message - if (ImGui.Button("Show Simple Message")) - { - popupMessageOK.Open("Information", "This is a simple informational message popup."); - } - - ImGui.SameLine(); - if (ImGui.Button("Show Long Message")) - { - string longMessage = @"This is a very long message that demonstrates text wrapping capabilities. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."; - - popupMessageOK.Open("Long Message", longMessage, ImGuiPopups.PromptTextLayoutType.Wrapped, new Vector2(500, 300)); - } - - // Custom Prompt with Multiple Buttons - ImGui.Text($"Last Prompt Result: {lastPromptResult}"); - if (ImGui.Button("Show Custom Prompt")) - { - Dictionary buttons = new() - { - { "Yes", () => lastPromptResult = "User clicked Yes" }, - { "No", () => lastPromptResult = "User clicked No" }, - { "Maybe", () => lastPromptResult = "User clicked Maybe" }, - { "Cancel", () => lastPromptResult = "User clicked Cancel" } - }; - popupPrompt.Open("Confirmation", "Do you want to proceed with this action?", buttons); - } - - ImGui.SameLine(); - if (ImGui.Button("Show Warning Prompt")) - { - Dictionary buttons = new() - { - { "Delete", () => lastPromptResult = "User confirmed deletion" }, - { "Cancel", () => lastPromptResult = "User cancelled deletion" } - }; - string warning = "⚠️ WARNING: This action cannot be undone!\n\nAre you sure you want to delete all selected files?"; - popupPrompt.Open("Confirm Deletion", warning, buttons, ImGuiPopups.PromptTextLayoutType.Wrapped, new Vector2(400, 200)); - } - - ImGui.Spacing(); - } - } - - private static void RenderSearchableListsSection() - { - if (ImGui.CollapsingHeader("Searchable Lists", ImGuiTreeNodeFlags.DefaultOpen)) - { - ImGui.Text("Select items from searchable and filterable lists."); - ImGui.Spacing(); - - ImGui.Text($"Selected Friend: {selectedFriend}"); - if (ImGui.Button("Choose Friend")) - { - popupSearchableListFriends.Open("Choose Friend", "Select your best friend:", Friends, result => selectedFriend = result); - } - - ImGui.SameLine(); - if (ImGui.Button("Choose Friend (Custom Size)")) - { - popupSearchableListFriends.Open("Choose Friend", "Select your best friend:", Friends, null, null, result => selectedFriend = result, new Vector2(350, 400)); - } - - ImGui.Text($"Selected Color: {selectedColor}"); - if (ImGui.Button("Choose Color")) - { - popupSearchableListColors.Open("Choose Color", "Select your favorite color:", Colors, - item => $"🎨 {item}", result => selectedColor = result); - } - - ImGui.Spacing(); - } - } - - private static void RenderFileSystemBrowserSection() - { - if (ImGui.CollapsingHeader("File System Browser", ImGuiTreeNodeFlags.DefaultOpen)) - { - ImGui.Text("Browse and select files or directories with filtering support."); - ImGui.Spacing(); - - // File Operations - ImGui.Text($"Last File Opened: {lastFileOpened}"); - if (ImGui.Button("Open Any File")) - { - popupFilesystemBrowser.FileOpen("Open File", file => lastFileOpened = file.ToString()); - } - - ImGui.SameLine(); - if (ImGui.Button("Open C# File")) - { - popupFilesystemBrowser.FileOpen("Open C# File", file => lastFileOpened = file.ToString(), "*.cs"); - } - - ImGui.SameLine(); - if (ImGui.Button("Open Image File")) - { - popupFilesystemBrowser.FileOpen("Open Image File", file => lastFileOpened = file.ToString(), new Vector2(600, 500), "*.{png,jpg,jpeg,gif,bmp}"); - } - - ImGui.Text($"Last File Saved: {lastFileSaved}"); - if (ImGui.Button("Save Text File")) - { - popupFilesystemBrowser.FileSave("Save Text File", file => lastFileSaved = file.ToString(), "*.txt"); - } - - ImGui.SameLine(); - if (ImGui.Button("Save Any File")) - { - popupFilesystemBrowser.FileSave("Save File", file => lastFileSaved = file.ToString()); - } - - // Directory Operations - ImGui.Text($"Last Directory Chosen: {lastDirectoryChosen}"); - if (ImGui.Button("Choose Directory")) - { - popupFilesystemBrowser.ChooseDirectory("Choose Directory", directory => lastDirectoryChosen = directory.ToString()); - } - - ImGui.SameLine(); - if (ImGui.Button("Choose Directory (Large)")) - { - popupFilesystemBrowser.ChooseDirectory("Choose Directory", directory => lastDirectoryChosen = directory.ToString(), new Vector2(700, 600)); - } - - ImGui.Spacing(); - } - } - - private static void RenderCustomModalSection() - { - if (ImGui.CollapsingHeader("Custom Modal", ImGuiTreeNodeFlags.DefaultOpen)) - { - ImGui.Text("Create completely custom modal content with full control."); - ImGui.Spacing(); - - ImGui.Text($"Last Custom Modal Result: {lastCustomModalResult}"); - if (ImGui.Button("Show Custom Modal")) - { - popupCustomModal.Open("Custom Modal Example", ShowCustomModalContent); - } - - ImGui.SameLine(); - if (ImGui.Button("Show Custom Modal (Large)")) - { - popupCustomModal.Open("Advanced Custom Modal", ShowAdvancedCustomModalContent, new Vector2(600, 400)); - } - - ImGui.Spacing(); - } - } - - private static void RenderAdvancedExamplesSection() - { - if (ImGui.CollapsingHeader("Advanced Examples")) - { - ImGui.Text("Complex usage patterns and edge cases."); - ImGui.Spacing(); - - if (ImGui.Button("Nested Popup Example")) - { - popupMessageOK.Open("First Popup", "This popup will open another popup when you click OK."); - } - - ImGui.SameLine(); - if (ImGui.Button("Validation Example")) - { - popupInputString.Open("Enter Email", "Please enter a valid email address:", "", result => - { - if (result.Contains('@') && result.Contains('.')) - { - stringInputValue = result; - popupMessageOK.Open("Success", $"Email '{result}' is valid!"); - } - else - { - popupMessageOK.Open("Error", "Invalid email format! Please try again."); - } - }); - } - - if (ImGui.Button("Multi-Step Workflow")) - { - StartMultiStepWorkflow(); - } - - ImGui.Spacing(); - } - } - - private static void RenderTipsSection() - { - if (ImGui.CollapsingHeader("Tips & Features")) - { - ImGui.TextWrapped("• Press ESC to close any popup"); - ImGui.TextWrapped("• Use TAB to navigate between input fields"); - ImGui.TextWrapped("• Enter key confirms string inputs"); - ImGui.TextWrapped("• Double-click items in file browser to open/navigate"); - ImGui.TextWrapped("• Type to search in searchable lists"); - ImGui.TextWrapped("• All popups support custom sizing"); - ImGui.TextWrapped("• Text can be wrapped or unformatted"); - ImGui.TextWrapped("• File browser supports glob patterns for filtering"); - } - } - - private static void ShowCustomModalContent() - { - ImGui.Text("This is a custom modal with your own content!"); - ImGui.Separator(); - - ImGui.Checkbox("Custom Checkbox", ref customCheckbox); - ImGui.SliderFloat("Custom Slider", ref customSlider, 0.0f, 1.0f); - - ImGui.NewLine(); - - if (ImGui.Button("Set Result")) - { - lastCustomModalResult = $"Checkbox: {customCheckbox}, Slider: {customSlider:F2}"; - ImGui.CloseCurrentPopup(); - } - - ImGui.SameLine(); - if (ImGui.Button("Close")) - { - lastCustomModalResult = "User closed without setting result"; - ImGui.CloseCurrentPopup(); - } - } - - private static void ShowAdvancedCustomModalContent() - { - ImGui.Text("Advanced Custom Modal with Multiple Controls"); - ImGui.Separator(); - - ImGui.Combo("Select Option", ref advancedModalSelectedItem, advancedModalItems, advancedModalItems.Length); - ImGui.ColorEdit3("Color Picker", ref advancedModalColorValue); - - ImGui.Text("Flags:"); - for (int i = 0; i < advancedModalFlags.Length; i++) - { - ImGui.Checkbox($"Flag {i + 1}", ref advancedModalFlags[i]); - if (i < advancedModalFlags.Length - 1) - { - ImGui.SameLine(); - } - } - - ImGui.Separator(); - - if (ImGui.Button("Apply Settings")) - { - lastCustomModalResult = $"Selected: {advancedModalItems[advancedModalSelectedItem]}, Color: RGB({advancedModalColorValue.X:F2}, {advancedModalColorValue.Y:F2}, {advancedModalColorValue.Z:F2})"; - ImGui.CloseCurrentPopup(); - } - - ImGui.SameLine(); - if (ImGui.Button("Reset")) - { - advancedModalSelectedItem = 0; - advancedModalColorValue = new Vector3(1.0f, 0.5f, 0.0f); - for (int i = 0; i < advancedModalFlags.Length; i++) - { - advancedModalFlags[i] = i % 2 == 0; - } - } - - ImGui.SameLine(); - if (ImGui.Button("Cancel")) - { - lastCustomModalResult = "User cancelled"; - ImGui.CloseCurrentPopup(); - } - } - - private static void StartMultiStepWorkflow() - { - popupInputString.Open("Step 1: Enter Name", "What's your name?", "", name => - { - if (string.IsNullOrWhiteSpace(name)) - { - popupMessageOK.Open("Error", "Name cannot be empty!"); - return; - } - - popupSearchableListFriends.Open("Step 2: Choose Friend", $"Hi {name}! Who would you like to invite?", Friends, friend => - { - Dictionary buttons = new() - { - { "Send Invitation", () => - { - lastPromptResult = $"Invitation sent to {friend} from {name}"; - popupMessageOK.Open("Success", $"Invitation sent to {friend}!"); - } - }, - { "Cancel", () => lastPromptResult = "Workflow cancelled" } - }; - - popupPrompt.Open("Step 3: Confirm", $"{name}, send invitation to {friend}?", buttons); - }); - }); - } - - private static void ShowAllPopups() - { - // Show all popup instances - popupInputString.ShowIfOpen(); - popupInputInt.ShowIfOpen(); - popupInputFloat.ShowIfOpen(); - popupMessageOK.ShowIfOpen(); - popupSearchableListFriends.ShowIfOpen(); - popupSearchableListColors.ShowIfOpen(); - popupPrompt.ShowIfOpen(); - popupFilesystemBrowser.ShowIfOpen(); - popupCustomModal.ShowIfOpen(); - } - - private static void OnAppMenu() - { - if (ImGui.BeginMenu("Demo")) - { - if (ImGui.MenuItem("Reset All Values")) - { - stringInputValue = "Hello World"; - intInputValue = 42; - floatInputValue = 3.14159f; - selectedFriend = "None"; - selectedColor = "None"; - lastFileOpened = "None"; - lastFileSaved = "None"; - lastDirectoryChosen = "None"; - lastPromptResult = "None"; - lastCustomModalResult = "None"; - } - - if (ImGui.MenuItem("About")) - { - popupMessageOK.Open("About ImGui Popups Demo", - "ImGui Popups Library Demo\n\nThis comprehensive demo showcases all features of the ktsu.ImGuiPopups library, including:\n\n" + - "• Input popups for strings, integers, and floats\n" + - "• Message and confirmation prompts\n" + - "• Searchable list selection\n" + - "• File and directory browsers\n" + - "• Custom modal content\n" + - "• Advanced usage patterns\n\n" + - "Press ESC to close any popup, or use the provided buttons.", - ImGuiPopups.PromptTextLayoutType.Wrapped, - new Vector2(450, 350)); - } - - ImGui.EndMenu(); - } - } - - private static void OnMoveOrResize() - { - // Method intentionally left empty. - } -} diff --git a/examples/ImGuiPopupsDemo/ImGuiPopupsDemo.csproj b/examples/ImGuiPopupsDemo/ImGuiPopupsDemo.csproj deleted file mode 100644 index cb6779e..0000000 --- a/examples/ImGuiPopupsDemo/ImGuiPopupsDemo.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - net9.0 - - - - - - - - diff --git a/examples/ImGuiStylerDemo/ImGuiStylerDemo.cs b/examples/ImGuiStylerDemo/ImGuiStylerDemo.cs deleted file mode 100644 index 0a7535a..0000000 --- a/examples/ImGuiStylerDemo/ImGuiStylerDemo.cs +++ /dev/null @@ -1,972 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Examples.Styler; - -using System.Collections.Generic; -using System.Linq; -using System.Numerics; - -using Hexa.NET.ImGui; - -using ktsu.ImGui.App; -using ktsu.ImGui.Styler; -using ktsu.ThemeProvider; - -/// -/// Comprehensive demonstration of the ImGuiStyler library capabilities. -/// -internal sealed class ImGuiStylerDemo -{ - private static bool valueBool = true; - private static bool valueBool2; - private static int valueInt = 42; - private static string valueString = "Hello ImGuiStyler!"; - private static float valueFloat = 0.5f; - private static float valueFloat2 = 0.75f; - private static int selectedFamily; - private static readonly float[] colorValue = [0.4f, 0.7f, 0.0f, 1.0f]; - private static readonly string[] comboItems = ["Option A", "Option B", "Option C", "Option D"]; - private static int comboSelection; - private static int radioSelection = 1; - private static readonly float[] plotData = [0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f]; - - // Form validation fields - private static string formUsername = ""; - private static string formEmail = ""; - - // Use ThemeProvider registry for all available themes - private static readonly List availableThemes = [.. Theme.AllThemes]; - private static readonly List availableFamilies = [.. Theme.Families.OrderBy(f => f)]; - - // Store the currently selected theme instead of applying it globally - private static ThemeRegistry.ThemeInfo? currentSelectedTheme; - - private static void Main() - { - ImGuiStylerDemo demo = new(); - ImGuiApp.Start(new() - { - Title = "ImGuiStyler Demo - Comprehensive Theme & Color Showcase", - OnAppMenu = demo.OnAppMenu, - OnMoveOrResize = demo.OnMoveOrResize, - OnRender = demo.OnRender, - OnStart = demo.OnStart, - FrameWrapperFactory = () => currentSelectedTheme is null ? null : new ScopedTheme(currentSelectedTheme.CreateInstance()), - SaveIniSettings = false, - }); - } - - private void OnStart() - { - // Keep default ImGui styling - we'll use scoped themes for demonstration - // currentSelectedTheme starts as null, so we'll show default styling - } - - private void OnRender(float dt) - { - // Header with current theme info - if (currentSelectedTheme is not null) - { - ImGui.Text($"🎨 Current Theme: {currentSelectedTheme.Name}"); - ImGui.SameLine(); - ImGui.Text($"({(currentSelectedTheme.IsDark ? "Dark" : "Light")})"); - } - else - { - ImGui.Text("🎨 Current Theme: Default (Reset)"); - } - - ImGui.Separator(); - - // Render the library's theme selection dialog if it's open - // This now returns true if a theme was changed during modal interaction - if (Theme.RenderThemeSelector()) - { - // Theme was changed via the modal browser - respond to the change - if (Theme.CurrentThemeName is null) - { - Console.WriteLine("Theme reset to default via modal"); - currentSelectedTheme = null; // Update our local selection - } - else - { - Console.WriteLine($"Theme changed via modal to: {Theme.CurrentThemeName}"); - // Find and store the corresponding theme info - currentSelectedTheme = availableThemes.FirstOrDefault(t => t.Name == Theme.CurrentThemeName); - } - } - - if (ImGui.BeginTabBar("DemoTabs")) - { - if (ImGui.BeginTabItem("🎨 Theme Gallery")) - { - ShowThemeGallery(); - ImGui.EndTabItem(); - } - - if (ImGui.BeginTabItem("🎨 Color Palettes")) - { - ShowColorPalettesDemo(); - ImGui.EndTabItem(); - } - - if (ImGui.BeginTabItem("🔍 Complete Theme Palette")) - { - ShowCompleteThemePalette(); - ImGui.EndTabItem(); - } - - if (ImGui.BeginTabItem("🖱️ Widget Showcase")) - { - ShowWidgetShowcase(); - ImGui.EndTabItem(); - } - - if (ImGui.BeginTabItem("💡 Interactive Examples")) - { - ShowInteractiveExamples(); - ImGui.EndTabItem(); - } - - if (ImGui.BeginTabItem("📚 Documentation")) - { - ShowDocumentationDemo(); - ImGui.EndTabItem(); - } - - ImGui.EndTabBar(); - } - } - - private static void ShowThemeGallery() - { - ImGui.TextUnformatted("🎨 Theme Gallery"); - ImGui.Text("Explore all available themes from the ThemeProvider registry."); - ImGui.Separator(); - - // Theme family selector - ImGui.Text("Filter by Family:"); - if (ImGui.Combo("##Family", ref selectedFamily, ["All", .. availableFamilies], availableFamilies.Count + 1)) - { - // selectedTheme = 0; // Reset selection when family changes - } - - ImGui.Separator(); - - // Get filtered themes - IEnumerable filteredThemes = selectedFamily == 0 - ? availableThemes - : availableThemes.Where(t => t.Family == availableFamilies[selectedFamily - 1]); - - List themesToShow = [.. filteredThemes]; - - // Theme grid - ImGui.Text($"Available Themes ({themesToShow.Count}):"); - - // Add reset button - if (ImGui.Button("Reset to Default")) - { - currentSelectedTheme = null; - } - ImGui.SameLine(); - ImGui.Text("(or click a theme below to apply it)"); - - ImGui.BeginChild("ThemeGrid", new Vector2(0, 300), ImGuiChildFlags.Borders); - - // Use the new delegate-based ThemeCard widget from the library - ThemeCard.RenderGrid(themesToShow, selectedTheme => currentSelectedTheme = selectedTheme); - - ImGui.EndChild(); - - ImGui.Separator(); - - // Quick theme preview with widgets - ImGui.Text("Theme Preview:"); - ImGui.BeginChild("PreviewArea", new Vector2(0, 200), ImGuiChildFlags.Borders); - - ImGui.Text("Sample UI Elements:"); - if (ImGui.Button("Sample Button")) - { - // Button clicked - } - ImGui.SameLine(); - if (ImGui.SmallButton("Small")) - { - // Small button clicked - } - - ImGui.Checkbox("Sample Checkbox", ref valueBool); - ImGui.SliderFloat("Sample Slider", ref valueFloat, 0.0f, 1.0f); - ImGui.InputText("Sample Input", ref valueString, 128); - - ImGui.Text("Radio Buttons:"); - ImGui.RadioButton("Option 1", ref radioSelection, 0); - ImGui.SameLine(); - ImGui.RadioButton("Option 2", ref radioSelection, 1); - ImGui.SameLine(); - ImGui.RadioButton("Option 3", ref radioSelection, 2); - - ImGui.EndChild(); - } - - private static void ShowCompleteThemePalette() - { - ImGui.TextUnformatted("🔍 Complete Theme Palette"); - ImGui.Text("Explore every color available in the current theme using the new MakeCompletePalette API."); - ImGui.Separator(); - - // Check if a theme is active - IReadOnlyDictionary? completePalette = Theme.GetCurrentThemeCompletePalette(); - if (completePalette is null) - { - ImGui.TextWrapped("No theme is currently active. Select a theme from the Theme Gallery tab to see its complete palette."); - return; - } - - ImGui.Text($"Theme: {Theme.CurrentThemeName} - {completePalette.Count} colors available"); - ImGui.Separator(); - - // Help text moved above the table - ImGui.TextUnformatted("💡 Tip: Click on any color swatch to copy its hex value to clipboard"); - ImGui.TextUnformatted("💡 Hover over swatches to see detailed color information and usage examples"); - ImGui.TextUnformatted("⚙ Icon overlay shows contrast test using highest priority neutral color on all backgrounds"); - ImGui.TextUnformatted("📊 Table shows semantic meanings (rows) × priorities (columns, VeryLow→VeryHigh) for easy comparison"); - ImGui.Separator(); - - // Get all unique semantic meanings and priorities - HashSet allMeanings = [.. completePalette.Keys.Select(k => k.Meaning)]; - HashSet allPriorities = [.. completePalette.Keys.Select(k => k.Priority)]; - - // Sort meanings and priorities - List sortedMeanings = [.. allMeanings.OrderBy(m => m.ToString())]; - List sortedPriorities = [.. allPriorities.OrderBy(p => p)]; // Lowest first (inverted) - - // Find the highest priority neutral color for icon overlay - Priority? highestNeutralPriority = completePalette.Keys - .Where(k => k.Meaning == SemanticMeaning.Neutral) - .Select(k => k.Priority) - .DefaultIfEmpty() - .Max(); - - ImColor? neutralIconColor = null; - if (highestNeutralPriority.HasValue && - completePalette.TryGetValue(new(SemanticMeaning.Neutral, highestNeutralPriority.Value), out PerceptualColor neutralColor)) - { - neutralIconColor = Color.FromPerceptualColor(neutralColor); - } - - // Create table with semantic meanings as rows and priorities as columns - const float swatchWidth = 90.0f; - const float swatchHeight = 45.0f; - - // Calculate exact column count to avoid mismatches - int totalColumns = sortedPriorities.Count + 1; // +1 for semantic name column - - ImGui.BeginGroup(); - if (ImGui.BeginTable("ColorPaletteTable", totalColumns, ImGuiTableFlags.Borders | ImGuiTableFlags.RowBg)) - { - // Set up columns - ImGui.TableSetupColumn("Semantic", ImGuiTableColumnFlags.WidthFixed, 120.0f); - foreach (Priority priority in sortedPriorities) - { - ImGui.TableSetupColumn(priority.ToString(), ImGuiTableColumnFlags.WidthFixed, swatchWidth); - } - ImGui.TableHeadersRow(); - - // Create rows for each semantic meaning - be explicit about row count - for (int rowIndex = 0; rowIndex < sortedMeanings.Count; rowIndex++) - { - SemanticMeaning meaning = sortedMeanings[rowIndex]; - ImGui.TableNextRow(); - - // Column 0: Semantic meaning name - ImGui.TableSetColumnIndex(0); - ImGui.Text(meaning.ToString()); - - // Columns 1 to N: Color swatches for each priority - for (int colIndex = 0; colIndex < sortedPriorities.Count; colIndex++) - { - Priority priority = sortedPriorities[colIndex]; - ImGui.TableSetColumnIndex(colIndex + 1); // +1 because column 0 is semantic name - - SemanticColorRequest request = new(meaning, priority); - if (completePalette.TryGetValue(request, out PerceptualColor color)) - { - ImColor imColor = Color.FromPerceptualColor(color); - - // Color swatch button - Vector2 swatchButtonSize = new(swatchWidth, swatchHeight); - if (ImGui.ColorButton($"##swatch_{meaning}_{priority}", - imColor.Value, ImGuiColorEditFlags.None, swatchButtonSize)) - { - // Copy to clipboard on click - string hexColor = $"#{(int)(imColor.Value.X * 255):X2}{(int)(imColor.Value.Y * 255):X2}{(int)(imColor.Value.Z * 255):X2}"; - ImGui.SetClipboardText(hexColor); - } - - // Add icon overlay on all colors using highest priority neutral color - if (neutralIconColor.HasValue) - { - // Draw a test icon (gear/settings icon) over the color to show contrast - Vector2 swatchMin = ImGui.GetItemRectMin(); - Vector2 swatchMax = ImGui.GetItemRectMax(); - Vector2 iconPos = new( - swatchMin.X + ((swatchMax.X - swatchMin.X) * 0.5f), - swatchMin.Y + ((swatchMax.Y - swatchMin.Y) * 0.5f) - ); - - ImDrawListPtr drawList = ImGui.GetWindowDrawList(); - - // Draw a simple gear-like icon using text - string iconText = "⚙"; - Vector2 textSize = ImGui.CalcTextSize(iconText); - Vector2 textPos = new( - iconPos.X - (textSize.X * 0.5f), - iconPos.Y - (textSize.Y * 0.5f) - ); - - // Use the highest priority neutral color for the icon - drawList.AddText(textPos, ImGui.ColorConvertFloat4ToU32(neutralIconColor.Value.Value), iconText); - } - - // Tooltip - if (ImGui.IsItemHovered()) - { - Vector4 c = imColor.Value; - ImGui.SetTooltip($"Meaning: {meaning}\n" + - $"Priority: {priority}\n" + - $"RGBA: ({c.X:F3}, {c.Y:F3}, {c.Z:F3}, {c.W:F3})\n" + - $"Hex: #{(int)(c.X * 255):X2}{(int)(c.Y * 255):X2}{(int)(c.Z * 255):X2}\n" + - $"Usage: Theme.GetColor(new SemanticColorRequest(SemanticMeaning.{meaning}, Priority.{priority}))\n" + - $"Click to copy to clipboard"); - } - } - else - { - // Empty cell for missing color combinations - ensure we still occupy the cell space - ImGui.Dummy(new Vector2(swatchWidth, swatchHeight)); - } - } - } - - ImGui.EndTable(); - } - ImGui.EndGroup(); - } - - private static void ShowColorPalettesDemo() - { - ImGui.TextUnformatted("🎨 Color Palette System"); - ImGui.Text("Comprehensive color palette with theme-aware colors."); - ImGui.Separator(); - - // Basic Colors Palette - RenderColorPaletteSection("Basic Colors", [ - ("Red", Color.Palette.Basic.Red), - ("Green", Color.Palette.Basic.Green), - ("Blue", Color.Palette.Basic.Blue), - ("Yellow", Color.Palette.Basic.Yellow), - ("Cyan", Color.Palette.Basic.Cyan), - ("Magenta", Color.Palette.Basic.Magenta), - ("Orange", Color.Palette.Basic.Orange), - ("Pink", Color.Palette.Basic.Pink), - ("Lime", Color.Palette.Basic.Lime), - ("Purple", Color.Palette.Basic.Purple), - ]); - - // Semantic Colors Palette - RenderColorPaletteSection("Semantic Colors", [ - ("Error", Color.Palette.Semantic.Error), - ("Warning", Color.Palette.Semantic.Warning), - ("Success", Color.Palette.Semantic.Success), - ("Info", Color.Palette.Semantic.Info), - ("Primary", Color.Palette.Semantic.Primary), - ("Secondary", Color.Palette.Semantic.Secondary), - ]); - - // Neutral Colors Palette - RenderColorPaletteSection("Neutral Colors", [ - ("White", Color.Palette.Neutral.White), - ("Light Gray", Color.Palette.Neutral.LightGray), - ("Gray", Color.Palette.Neutral.Gray), - ("Dark Gray", Color.Palette.Neutral.DarkGray), - ("Black", Color.Palette.Neutral.Black), - ]); - - // Natural Colors Palette - RenderColorPaletteSection("Natural Colors", [ - ("Brown", Color.Palette.Natural.Brown), - ("Olive", Color.Palette.Natural.Olive), - ("Maroon", Color.Palette.Natural.Maroon), - ("Navy", Color.Palette.Natural.Navy), - ("Teal", Color.Palette.Natural.Teal), - ("Indigo", Color.Palette.Natural.Indigo), - ]); - - // Vibrant Colors Palette - RenderColorPaletteSection("Vibrant Colors", [ - ("Coral", Color.Palette.Vibrant.Coral), - ("Salmon", Color.Palette.Vibrant.Salmon), - ("Turquoise", Color.Palette.Vibrant.Turquoise), - ("Violet", Color.Palette.Vibrant.Violet), - ("Gold", Color.Palette.Vibrant.Gold), - ("Silver", Color.Palette.Vibrant.Silver), - ]); - - // Pastel Colors Palette - RenderColorPaletteSection("Pastel Colors", [ - ("Beige", Color.Palette.Pastel.Beige), - ("Peach", Color.Palette.Pastel.Peach), - ("Mint", Color.Palette.Pastel.Mint), - ("Lavender", Color.Palette.Pastel.Lavender), - ("Khaki", Color.Palette.Pastel.Khaki), - ("Plum", Color.Palette.Pastel.Plum), - ]); - - ImGui.Separator(); - - // Interactive color manipulation - ImGui.Text("🔧 Interactive Color Tools:"); - ImGui.ColorEdit4("Custom Color", ref colorValue[0]); - - // Show color variations - ImColor baseColor = Color.FromRGBA(colorValue[0], colorValue[1], colorValue[2], colorValue[3]); - ImGui.Text("Color Variations:"); - - ImGui.BeginGroup(); - RenderColorSwatch("Original", baseColor); - RenderColorSwatch("Darker", baseColor.MultiplyLuminance(0.7f)); - RenderColorSwatch("Lighter", baseColor.MultiplyLuminance(1.3f)); - RenderColorSwatch("Desaturated", baseColor.MultiplySaturation(0.5f)); - RenderColorSwatch("Saturated", baseColor.MultiplySaturation(1.5f)); - ImGui.EndGroup(); - } - - private static void RenderColorPaletteSection(string title, (string Name, ImColor Color)[] colors) - { - ImGui.Text($"• {title}:"); - ImGui.BeginGroup(); - - foreach ((string name, ImColor color) in colors) - { - RenderColorSwatch(name, color); - } - - ImGui.EndGroup(); - ImGui.Separator(); - } - - private static void RenderColorSwatch(string name, ImColor color) - { - Vector2 swatchSize = new(30, 25); - ImGui.ColorButton($"##{name}Swatch", color.Value, ImGuiColorEditFlags.None, swatchSize); - - if (ImGui.IsItemHovered()) - { - Vector4 c = color.Value; - ImGui.SetTooltip($"{name}\nRGBA: ({c.X:F2}, {c.Y:F2}, {c.Z:F2}, {c.W:F2})\nHex: #{(int)(c.X * 255):X2}{(int)(c.Y * 255):X2}{(int)(c.Z * 255):X2}"); - } - - ImGui.SameLine(); - ImGui.Text(name); - } - - private static void ShowWidgetShowcase() - { - ImGui.TextUnformatted("🖱️ Comprehensive Widget Showcase"); - ImGui.Text("All ImGui widgets styled with the current theme."); - ImGui.Separator(); - - // Layout in columns for better organization - ImGui.Columns(2, "WidgetColumns", true); - - // Column 1: Input widgets - ImGui.Text("📝 Input Widgets:"); - - ImGui.Button("Standard Button"); - ImGui.SameLine(); - ImGui.SmallButton("Small"); - - if (ImGui.ArrowButton("##left", ImGuiDir.Left)) - { - // Left arrow clicked - } - ImGui.SameLine(); - if (ImGui.ArrowButton("##right", ImGuiDir.Right)) - { - // Right arrow clicked - } - - ImGui.Checkbox("Checkbox", ref valueBool); - ImGui.Checkbox("Checkbox 2", ref valueBool2); - - ImGui.RadioButton("Radio A", ref radioSelection, 0); - ImGui.RadioButton("Radio B", ref radioSelection, 1); - ImGui.RadioButton("Radio C", ref radioSelection, 2); - - ImGui.SliderFloat("Slider", ref valueFloat, 0.0f, 1.0f); - ImGui.SliderFloat("Slider 2", ref valueFloat2, -10.0f, 10.0f); - ImGui.SliderInt("Int Slider", ref valueInt, 0, 100); - - ImGui.InputText("Text Input", ref valueString, 128); - - if (ImGui.BeginCombo("Combo", comboItems[comboSelection])) - { - for (int i = 0; i < comboItems.Length; i++) - { - bool isSelected = comboSelection == i; - if (ImGui.Selectable(comboItems[i], isSelected)) - { - comboSelection = i; - } - if (isSelected) - { - ImGui.SetItemDefaultFocus(); - } - } - ImGui.EndCombo(); - } - - ImGui.ColorEdit3("Color", ref colorValue[0]); - - ImGui.NextColumn(); - - // Column 2: Display widgets - ImGui.Text("📊 Display Widgets:"); - - ImGui.Text($"Current Values:"); - ImGui.BulletText($"Bool: {valueBool}"); - ImGui.BulletText($"Int: {valueInt}"); - ImGui.BulletText($"Float: {valueFloat:F2}"); - ImGui.BulletText($"String: {valueString}"); - - unsafe - { - fixed (float* plotPtr = plotData) - { - ImGui.PlotLines("##Plot"u8, plotPtr, plotData.Length, 0, "Sample Plot"u8, 0.0f, 1.0f, new Vector2(0, 80)); - } - } - - ImGui.ProgressBar(valueFloat, new Vector2(-1, 0), $"{valueFloat * 100:F0}%"); - - // Separator - ImGui.Separator(); - - // Tree node - if (ImGui.TreeNode("Tree Node"u8)) - { - ImGui.Text("Tree content"); - if (ImGui.TreeNode("Nested Node"u8)) - { - ImGui.Text("Nested content"); - ImGui.TreePop(); - } - ImGui.TreePop(); - } - - // Collapsing header - if (ImGui.CollapsingHeader("Collapsing Header"u8)) - { - ImGui.Text("Header content"); - ImGui.Indent(); - ImGui.Text("Indented text"); - ImGui.Unindent(); - } - - ImGui.Columns(1); - - // Full-width section - ImGui.Separator(); - ImGui.Text("📋 Tables & Lists:"); - - if (ImGui.BeginTable("DemoTable"u8, 3, ImGuiTableFlags.Borders | ImGuiTableFlags.Resizable | ImGuiTableFlags.RowBg)) - { - ImGui.TableSetupColumn("Column A"u8); - ImGui.TableSetupColumn("Column B"u8); - ImGui.TableSetupColumn("Column C"u8); - ImGui.TableHeadersRow(); - - for (int row = 0; row < 5; row++) - { - ImGui.TableNextRow(); - for (int col = 0; col < 3; col++) - { - ImGui.TableSetColumnIndex(col); - ImGui.Text($"Row {row}, Col {col}"); - } - } - ImGui.EndTable(); - } - } - - private static void ShowInteractiveExamples() - { - ImGui.TextUnformatted("💡 Interactive Theme Examples"); - ImGui.Text("See how themes affect real UI components and workflows."); - ImGui.Separator(); - - // Theme-aware text colors demonstration - ImGui.Text("🎨 Semantic Text Colors in Action:"); - ImGui.BeginChild("TextColorDemo", new Vector2(0, 120), ImGuiChildFlags.Borders); - - using (Text.Color.Error()) - { - ImGui.TextUnformatted("❌ Error: Connection failed!"); - } - - using (Text.Color.Warning()) - { - ImGui.TextUnformatted("⚠️ Warning: Low disk space"); - } - - using (Text.Color.Success()) - { - ImGui.TextUnformatted("✅ Success: File saved successfully"); - } - - using (Text.Color.Info()) - { - ImGui.TextUnformatted("ℹ️ Info: 5 items processed"); - } - - ImGui.EndChild(); - - ImGui.Separator(); - - // Scoped theming demonstration - ImGui.Text("🎯 Scoped Theme Applications:"); - - ImGui.Text("Normal themed section:"); - ImGui.Button("Normal Button"); - ImGui.SliderFloat("Normal Slider", ref valueFloat, 0.0f, 1.0f); - - ImGui.Separator(); - - ImGui.Text("Scoped color themes:"); - using (Theme.FromColor(Color.Palette.Semantic.Error)) - { - ImGui.Text("Error-themed section:"); - ImGui.Button("Danger Button"); - ImGui.ProgressBar(0.8f, new Vector2(-1, 0), "80% Critical"); - } - - using (Theme.FromColor(Color.Palette.Semantic.Success)) - { - ImGui.Text("Success-themed section:"); - ImGui.Button("Success Button"); - ImGui.ProgressBar(0.9f, new Vector2(-1, 0), "90% Complete"); - } - - ImGui.Separator(); - - // Form example with validation - ImGui.Text("📋 Form Example with Validation:"); - ImGui.BeginChild("FormExample", new Vector2(0, 150), ImGuiChildFlags.Borders); - - ImGui.Text("User Registration:"); - ImGui.InputText("Username", ref formUsername, 64); - - if (string.IsNullOrWhiteSpace(formUsername)) - { - using ScopedColor errorText = new(Color.Palette.Basic.Red); - ImGui.Text("❌ Required"); - } - else if (formUsername.Length < 3) - { - using ScopedColor warningText = new(Color.Palette.Basic.Yellow); - ImGui.Text("⚠ Username should be at least 3 characters"); - } - else - { - using ScopedColor successText = new(Color.Palette.Basic.Green); - ImGui.Text("✓ Username looks good"); - } - - ImGui.InputText("Email", ref formEmail, 128); - - bool validEmail = formEmail.Contains('@') && formEmail.Contains('.'); - if (!string.IsNullOrWhiteSpace(formEmail) && !validEmail) - { - using ScopedColor errorText = new(Color.Palette.Basic.Red); - ImGui.Text("⚠ Invalid email format"); - } - else if (validEmail) - { - using ScopedColor successText = new(Color.Palette.Basic.Green); - ImGui.Text("✓ Email looks valid"); - } - - bool canSubmit = !string.IsNullOrWhiteSpace(formUsername) && formUsername.Length >= 3 && validEmail; - - if (!canSubmit) - { - using (Theme.DisabledFromColor(Color.Palette.Neutral.Gray)) - { - ImGui.Button("Submit (Complete form first)"); - } - } - else - { - using (Theme.FromColor(Color.Palette.Semantic.Success)) - { - if (ImGui.Button("Submit Registration")) - { - // Handle submission - } - } - } - - ImGui.EndChild(); - - // Form validation example with basic colors - ImGui.Text("📝 Form with Validation:"); - ImGui.InputText("Username", ref formUsername, 64); - ImGui.SameLine(); - if (string.IsNullOrWhiteSpace(formUsername)) - { - using ScopedColor errorText = new(Color.Palette.Basic.Red); - ImGui.Text("❌ Required"); - } - else - { - using ScopedColor successText = new(Color.Palette.Basic.Green); - ImGui.Text("✅ Valid"); - } - - ImGui.InputText("Email", ref formEmail, 64); - ImGui.SameLine(); - if (string.IsNullOrWhiteSpace(formEmail) || !formEmail.Contains('@')) - { - using ScopedColor errorText = new(Color.Palette.Basic.Red); - ImGui.Text("❌ Invalid"); - } - else - { - using ScopedColor successText = new(Color.Palette.Basic.Green); - ImGui.Text("✅ Valid"); - } - - ImGui.Separator(); - - // Scoped Theme example - ImGui.Text("🎨 Scoped Theme Example:"); - ImGui.TextWrapped("The ScopedTheme class applies a complete semantic theme temporarily within a 'using' block, then automatically reverts to the original styling when the scope ends."); - - ImGui.Separator(); - ImGui.Text("Normal styling here..."); - - if (ImGui.Button("Normal Button")) - { - // Normal button styling - } - - // Apply a temporary theme for this section - if (availableThemes.Count > 0) - { - ThemeRegistry.ThemeInfo demoTheme = availableThemes[0]; // Use first available theme - - ImGui.Separator(); - ImGui.Text($"Section with {demoTheme.Name} theme applied using ScopedTheme:"); - - // This 'using' block applies the theme temporarily - using (new ScopedTheme(demoTheme.CreateInstance())) - { - if (ImGui.Button("Themed Button")) - { - // This button uses the scoped theme - } - - ImGui.SameLine(); - if (ImGui.SmallButton("Small Themed")) - { - // This button also uses the scoped theme - } - - ImGui.Checkbox("Themed Checkbox", ref valueBool2); - ImGui.SliderFloat("Themed Slider", ref valueFloat2, 0.0f, 1.0f); - - ImGui.Text("All UI elements in this block use the scoped theme colors!"); - } - // Theme automatically reverts here when the 'using' block ends - } - - ImGui.Separator(); - ImGui.Text("Back to normal styling automatically..."); - if (ImGui.Button("Normal Button Again")) - { - // Back to normal styling - } - - ImGui.TextWrapped("💡 Usage: using (new ScopedTheme(myTheme)) { /* themed UI here */ }"); - - ImGui.Separator(); - } - - private void OnAppMenu() - { - // Use the library's improved theme selector menu - if (Theme.RenderThemeSelectorMenu()) - { - // Theme changed - this is where you would save the current theme to settings - // For example: Settings.Theme = Theme.CurrentThemeName; - if (Theme.CurrentThemeName is null) - { - Console.WriteLine("Theme reset to default"); - currentSelectedTheme = null; // Update our local selection - } - else - { - Console.WriteLine($"Theme changed to: {Theme.CurrentThemeName}"); - // Find and store the corresponding theme info - currentSelectedTheme = availableThemes.FirstOrDefault(t => t.Name == Theme.CurrentThemeName); - } - } - - if (ImGui.BeginMenu("Help")) - { - if (ImGui.MenuItem("About ImGuiStyler")) - { - // Show about dialog - placeholder for demonstration - } - ImGui.EndMenu(); - } - } - - private static void ShowDocumentationDemo() - { - ImGui.TextUnformatted("📚 ImGuiStyler Documentation & Examples"); - ImGui.Separator(); - - ImGui.TextWrapped("ImGuiStyler provides comprehensive theming and styling capabilities for Dear ImGui applications. It integrates with ThemeProvider to offer semantic theming with consistent color meanings across different themes."); - - ImGui.Separator(); - ImGui.Text("Usage Examples:"); - - ImGui.BeginChild("CodeExamples", new Vector2(0, 0), ImGuiChildFlags.Borders); - - ImGui.Text("// Apply semantic themes using ScopedTheme (recommended)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "var theme = ThemeRegistry.FindTheme(\"Dracula\");"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "using (new ScopedTheme(theme.CreateInstance()))"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " // All UI rendering in this block uses the theme"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " // Color mappings are cached for performance"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " ImGui.Button(\"Themed Button\");"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Clear cache if needed (rarely required)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "ScopedTheme.ClearCache();"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Or apply themes globally (affects all subsequent UI)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "Theme.Apply(\"Nord\");"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "Theme.Apply(\"Catppuccin Mocha\");"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Reset to default ImGui styling"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "Theme.ResetToDefault();"); - ImGui.Text("// or via property"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "Theme.CurrentThemeName = null;"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Render theme selection menu in your main menu bar"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "if (Theme.RenderThemeSelectorMenu())"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " // Theme was changed - save current theme to settings"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " Settings.Theme = Theme.CurrentThemeName;"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Render the theme browser modal (call in main render loop)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "if (Theme.RenderThemeSelector()) // Returns true if theme changed"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " // Theme was changed via modal - respond to change"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " Settings.Theme = Theme.CurrentThemeName;"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Programmatically open the theme browser modal"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "Theme.ShowThemeSelector(); // Opens the modal dialog"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "Theme.ShowThemeSelector(\"Custom Title\", new Vector2(900, 700));"); - ImGui.TextUnformatted(""); - - ImGui.Text("// The ThemeBrowser uses ktsu.ImGuiPopups for proper modal behavior"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "// - Blocks interaction with underlying UI"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "// - ESC to close, centered positioning"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "// - Follows established ktsu.dev modal patterns"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Restore theme on application start"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "Theme.CurrentThemeName = Settings.Theme; // null restores default"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Use semantic text colors"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "using (Text.Color.Error())"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " ImGui.Text(\"Error message\");"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Render theme preview cards"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "if (ThemeCard.Render(theme))"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " Theme.Apply(theme.Name);"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Render a grid of theme cards with delegate callback (recommended)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "ThemeCard.RenderGrid(themes, selectedTheme =>"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " // Handle theme selection via delegate"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " currentSelectedTheme = selectedTheme;"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "});"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Or use the return value approach (still supported)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "var clicked = ThemeCard.RenderGrid(themes);"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "if (clicked != null)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " Theme.Apply(clicked.Name);"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Use color palette (theme-aware)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "ImColor primaryColor = Color.Palette.Semantic.Primary;"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "ImColor errorColor = Color.Palette.Semantic.Error;"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "ImColor customRed = Color.Palette.Basic.Red; // Adapts to theme"); - ImGui.TextUnformatted(""); - - ImGui.Text("// NEW: Use complete theme palette API (powered by MakeCompletePalette)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "var palette = Theme.GetCurrentThemeCompletePalette();"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "var primaryHigh = new SemanticColorRequest(SemanticMeaning.Primary, Priority.High);"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "if (palette?.TryGetValue(primaryHigh, out var color) == true)"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " ImColor myColor = Color.FromPerceptualColor(color);"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Or use the simpler helper methods"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "var request = new SemanticColorRequest(SemanticMeaning.Error, Priority.VeryHigh);"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "if (Theme.TryGetColor(request, out var errorColor))"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " // Use the specific error color from theme"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - ImGui.TextUnformatted(""); - - ImGui.Text("// Scoped theme colors for UI sections"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "using (Theme.FromColor(Color.Palette.Semantic.Success))"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "{"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), " ImGui.Button(\"Success Button\");"); - ImGui.TextColored(new Vector4(0.6f, 0.8f, 0.6f, 1.0f), "}"); - - ImGui.EndChild(); - } - - private void OnMoveOrResize() - { - // Handle window resize if needed - } -} diff --git a/examples/ImGuiStylerDemo/ImGuiStylerDemo.csproj b/examples/ImGuiStylerDemo/ImGuiStylerDemo.csproj deleted file mode 100644 index c1e0a6a..0000000 --- a/examples/ImGuiStylerDemo/ImGuiStylerDemo.csproj +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - net9.0 - - true - - - - - - - diff --git a/examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.cs b/examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.cs deleted file mode 100644 index f7009d7..0000000 --- a/examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.cs +++ /dev/null @@ -1,834 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.Examples.Widgets; - -using System.Collections.ObjectModel; -using System.Numerics; -using Hexa.NET.ImGui; -using ktsu.ImGui.App; -using ktsu.ImGui.Popups; -using ktsu.ImGui.Styler; -using ktsu.ImGui.Widgets; -using ktsu.Semantics.Paths; -using ktsu.Semantics.Strings; -using ktsu.TextFilter; - -/// -/// Demo strong string example. -/// -public sealed record class StrongStringExample : SemanticString { } - -/// -/// Demo enum values. -/// -public enum EnumValues -{ - /// - /// First enum value. - /// - Value1, - /// - /// Second enum value. - /// - ValueB, - /// - /// Third enum value. - /// - ValueIII, -} - -internal static class ImGuiWidgetsDemo -{ - private static void Main() - { - ImGuiApp.Start(new() - { - Title = "ImGuiWidgets - Complete Library Demo", - OnStart = OnStart, - OnAppMenu = OnAppMenu, - OnMoveOrResize = OnMoveOrResize, - OnRender = OnRender, - }); - } - - private static float value = 0.5f; - private static float tab2Value = 0.5f; - - private static ImGuiWidgets.DividerContainer DividerContainer { get; } = new("DemoDividerContainer"); - private static ImGuiPopups.MessageOK MessageOK { get; } = new(); - private static ImGuiWidgets.TabPanel DemoTabPanel { get; } = new("DemoTabPanel", true, true); - private static Dictionary TabIds { get; } = []; - private static int NextDynamicTabId { get; set; } = 1; - - private static List GridStrings { get; } = []; - private static int InitialGridItemCount { get; } = 32; - private static int GridItemsToShow { get; set; } = InitialGridItemCount; - private static float GridHeight { get; set; } = 500f; - private static ImGuiWidgets.GridOrder GridOrder { get; set; } = ImGuiWidgets.GridOrder.RowMajor; - private static ImGuiWidgets.IconAlignment GridIconAlignment { get; set; } = ImGuiWidgets.IconAlignment.Vertical; - private static bool GridIconSizeBig { get; set; } = true; - private static bool GridIconCenterWithinCell { get; set; } = true; - private static bool GridFitToContents { get; set; } - private static EnumValues selectedEnumValue = EnumValues.Value1; - private static string selectedStringValue = "Hello"; - private static readonly Collection possibleStringValues = ["Hello", "World", "Goodbye"]; - private static StrongStringExample selectedStrongString = "Strong Hello".As(); - private static readonly Collection possibleStrongStringValues = ["Strong Hello".As(), - "Strong World".As(), "Strong Goodbye".As()]; - - // Static fields for SearchBox filter persistence - private static string BasicSearchTerm = string.Empty; - private static TextFilterType BasicFilterType = TextFilterType.Glob; - private static TextFilterMatchOptions BasicMatchOptions = TextFilterMatchOptions.ByWholeString; - - private static string FilteredSearchTerm = string.Empty; - private static TextFilterType FilteredFilterType = TextFilterType.Glob; - private static TextFilterMatchOptions FilteredMatchOptions = TextFilterMatchOptions.ByWholeString; - - private static string RankedSearchTerm = string.Empty; - - private static string GlobSearchTerm = string.Empty; - private static TextFilterType GlobFilterType = TextFilterType.Glob; - private static TextFilterMatchOptions GlobMatchOptions = TextFilterMatchOptions.ByWholeString; - - private static string RegexSearchTerm = string.Empty; - private static TextFilterType RegexFilterType = TextFilterType.Regex; - private static TextFilterMatchOptions RegexMatchOptions = TextFilterMatchOptions.ByWholeString; - -#pragma warning disable CA5394 //Do not use insecure randomness - private static void OnStart() - { - // Create main layout with dedicated demo sections - DividerContainer.Add(new("Widget Demos", 0.6f, ShowWidgetDemos)); - DividerContainer.Add(new("Advanced Demos", 0.4f, ShowAdvancedDemos)); - - // Initialize TabPanel demo - TabIds["tab1"] = DemoTabPanel.AddTab("tab1", "Tab 1", ShowTab1Content); - TabIds["tab2"] = DemoTabPanel.AddTab("tab2", "Tab 2", ShowTab2Content); - TabIds["tab3"] = DemoTabPanel.AddTab("tab3", "Tab 3", ShowTab3Content); - - // Generate test data for grid demos - for (int i = 0; i < InitialGridItemCount; i++) - { - string randomString = $"{i}:"; - int randomAmount = new Random().Next(2, 32); - for (int j = 0; j < randomAmount; j++) - { - randomString += (char)new Random().Next(32, 127); - } - - GridStrings.Add(randomString); - } - } -#pragma warning restore CA5394 //Do not use insecure randomness - - private static void OnRender(float dt) => DividerContainer.Tick(dt); - - private static void OnAppMenu() - { - // Method intentionally left empty. - } - - private static void OnMoveOrResize() - { - // Method intentionally left empty. - } - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0063:Use simple 'using' statement", Justification = "")] - private static void ShowWidgetDemos(float size) - { - ImGui.TextUnformatted("ImGuiWidgets Library - Comprehensive Demo"); - ImGui.Separator(); - - ShowKnobDemo(); - ShowColorIndicatorDemo(); - ShowComboDemo(); - ShowTextDemo(); - ShowScopedWidgetsDemo(); - ShowTreeDemo(); - } - - private static void ShowAdvancedDemos(float size) - { - AbsoluteFilePath ktsuIconPath = Environment.CurrentDirectory.As() / "ktsu.png".As(); - ImGuiAppTextureInfo ktsuTexture = ImGuiApp.GetOrLoadTexture(ktsuIconPath); - - ImGui.TextUnformatted("Advanced Widget Demos"); - ImGui.Separator(); - - ShowImageAndIconDemo(ktsuTexture); - ShowTabPanelDemo(); - ShowSearchBoxDemo(); - ShowGridDemo(ktsuTexture); - ShowDividerDemo(); - - MessageOK.ShowIfOpen(); - } - - private static void ShowTabPanelDemo() - { - if (ImGui.CollapsingHeader("TabPanel")) - { - ImGui.TextUnformatted("Tabbed interface with dirty state tracking:"); - ImGui.Separator(); - - // Tab Panel controls - ImGui.TextUnformatted("Tab Management:"); - if (ImGui.Button("Mark Active Tab Dirty")) - { - DemoTabPanel.MarkActiveTabDirty(); - } - ImGui.SameLine(); - if (ImGui.Button("Mark Active Tab Clean")) - { - DemoTabPanel.MarkActiveTabClean(); - } - ImGui.SameLine(); - if (ImGui.Button("Add New Tab")) - { - int tabIndex = NextDynamicTabId++; - string tabKey = $"dynamic{tabIndex}"; - string tabId = $"dyntab_{tabIndex}"; - TabIds[tabKey] = DemoTabPanel.AddTab(tabId, $"Extra Tab {tabIndex}", () => ShowDynamicTabContent(tabIndex)); - } - - ImGui.Separator(); - ImGui.TextUnformatted("Features demonstrated:"); - ImGui.BulletText("Closeable tabs (X button)"); - ImGui.BulletText("Dirty state indicators (*)"); - ImGui.BulletText("Dynamic tab addition"); - ImGui.BulletText("Per-tab state management"); - - ImGui.Separator(); - - // Display tab panel - DemoTabPanel.Draw(); - } - } - - private static void ShowSearchBoxDemo() - { - if (ImGui.CollapsingHeader("SearchBox")) - { - ImGui.TextUnformatted("Powerful search functionality with multiple filter types:"); - ImGui.Separator(); - - ImGui.TextUnformatted("Basic SearchBox (UI only):"); - ImGuiWidgets.SearchBox("##BasicSearch", ref BasicSearchTerm, ref BasicFilterType, ref BasicMatchOptions); - ImGui.TextUnformatted($"Search term: '{BasicSearchTerm}' | Type: {BasicFilterType} | Match: {BasicMatchOptions}"); - - ImGui.Separator(); - ImGui.TextUnformatted("SearchBox with Filtering:"); - - // Using the SearchBox that returns filtered results - List filteredResults = [.. ImGuiWidgets.SearchBox( - "##FilteredSearch", - ref FilteredSearchTerm, - GridStrings, - s => s, - ref FilteredFilterType, - ref FilteredMatchOptions)]; - - if (!string.IsNullOrEmpty(FilteredSearchTerm)) - { - ImGui.TextUnformatted($"Results: {filteredResults.Count} matches for '{FilteredSearchTerm}'"); - ImGui.BeginChild("FilteredResults", new Vector2(0, 100), ImGuiChildFlags.Borders); - foreach (string item in filteredResults.Take(20)) - { - ImGui.TextUnformatted($"• {item}"); - } - if (filteredResults.Count > 20) - { - ImGui.TextUnformatted($"... and {filteredResults.Count - 20} more"); - } - ImGui.EndChild(); - } - - ImGui.Separator(); - ImGui.TextUnformatted("Ranked SearchBox (Fuzzy Matching):"); - - List rankedResults = [.. ImGuiWidgets.SearchBoxRanked("##RankedSearch", - ref RankedSearchTerm, - GridStrings, - s => s)]; - - if (!string.IsNullOrEmpty(RankedSearchTerm)) - { - ImGui.TextUnformatted($"Fuzzy Results: {rankedResults.Count} matches for '{RankedSearchTerm}'"); - ImGui.BeginChild("RankedResults", new Vector2(0, 100), ImGuiChildFlags.Borders); - foreach (string item in rankedResults.Take(20)) - { - ImGui.TextUnformatted($"• {item}"); - } - if (rankedResults.Count > 20) - { - ImGui.TextUnformatted($"... and {rankedResults.Count - 20} more"); - } - ImGui.EndChild(); - } - - ImGui.Separator(); - ImGui.TextUnformatted("Filter Type Comparison:"); - - ImGui.Columns(2, "SearchComparison"); - - ImGui.TextUnformatted("Glob Pattern (*,?):"); - List globResults = [.. ImGuiWidgets.SearchBox("##GlobSearch", - ref GlobSearchTerm, - GridStrings, - s => s, - ref GlobFilterType, - ref GlobMatchOptions)]; - - if (!string.IsNullOrEmpty(GlobSearchTerm)) - { - ImGui.TextUnformatted($"{globResults.Count} matches"); - ImGui.BeginChild("GlobResults", new Vector2(0, 80), ImGuiChildFlags.Borders); - foreach (string item in globResults.Take(10)) - { - ImGui.TextUnformatted($"• {item}"); - } - ImGui.EndChild(); - } - else - { - ImGui.TextUnformatted("Try: *1*, ?:*, [0-9]*"); - } - - ImGui.NextColumn(); - - ImGui.TextUnformatted("Regex Pattern:"); - List regexResults = [.. ImGuiWidgets.SearchBox("##RegexSearch", - ref RegexSearchTerm, - GridStrings, - s => s, - ref RegexFilterType, - ref RegexMatchOptions)]; - - if (!string.IsNullOrEmpty(RegexSearchTerm)) - { - ImGui.TextUnformatted($"{regexResults.Count} matches"); - ImGui.BeginChild("RegexResults", new Vector2(0, 80), ImGuiChildFlags.Borders); - foreach (string item in regexResults.Take(10)) - { - ImGui.TextUnformatted($"• {item}"); - } - ImGui.EndChild(); - } - else - { - ImGui.TextUnformatted("Try: ^\\d+, [A-Z]+, .*[aeiou].*"); - } - - ImGui.Columns(1); - } - } - - private static void ShowGridDemo(ImGuiAppTextureInfo ktsuTexture) - { - if (ImGui.CollapsingHeader("Grid Layout")) - { - ImGui.TextUnformatted("Flexible grid layouts with automatic sizing:"); - ImGui.Separator(); - - // Grid settings - inline controls - ImGui.TextUnformatted("Grid Configuration:"); - - bool showGridDebug = ImGuiWidgets.EnableGridDebugDraw; - if (ImGui.Checkbox("Show Grid Debug Draw", ref showGridDebug)) - { - ImGuiWidgets.EnableGridDebugDraw = showGridDebug; - } - ImGui.SameLine(); - - bool showIconDebug = ImGuiWidgets.EnableIconDebugDraw; - if (ImGui.Checkbox("Show Icon Debug Draw", ref showIconDebug)) - { - ImGuiWidgets.EnableIconDebugDraw = showIconDebug; - } - - ImGui.Columns(3, "GridSettings"); - - bool gridIconSizeBig = GridIconSizeBig; - if (ImGui.Checkbox("Big Icons", ref gridIconSizeBig)) - { - GridIconSizeBig = gridIconSizeBig; - } - - bool gridIconCenterWithinCell = GridIconCenterWithinCell; - if (ImGui.Checkbox("Center in Cell", ref gridIconCenterWithinCell)) - { - GridIconCenterWithinCell = gridIconCenterWithinCell; - } - - bool gridFitToContents = GridFitToContents; - if (ImGui.Checkbox("Fit to Contents", ref gridFitToContents)) - { - GridFitToContents = gridFitToContents; - } - - ImGui.NextColumn(); - - int gridItemsToShow = GridItemsToShow; - if (ImGui.SliderInt("Items", ref gridItemsToShow, 0, GridStrings.Count)) - { - GridItemsToShow = gridItemsToShow; - } - - ImGuiWidgets.GridOrder gridOrder = GridOrder; - if (ImGuiWidgets.Combo("Order", ref gridOrder)) - { - GridOrder = gridOrder; - } - - ImGui.NextColumn(); - - ImGuiWidgets.IconAlignment gridIconAlignment = GridIconAlignment; - if (ImGuiWidgets.Combo("Icon Layout", ref gridIconAlignment)) - { - GridIconAlignment = gridIconAlignment; - } - - float gridHeight = GridHeight; - if (ImGui.SliderFloat("Height", ref gridHeight, 100f, 800f)) - { - GridHeight = gridHeight; - } - - ImGui.Columns(1); - ImGui.Separator(); - - // Grid display - float iconSizePx = ImGuiApp.EmsToPx(2.5f); - float bigIconSizePx = iconSizePx * 2; - float gridIconSize = GridIconSizeBig ? bigIconSizePx : iconSizePx; - - Vector2 MeasureGridSize(string item) => ImGuiWidgets.CalcIconSize(item, gridIconSize, GridIconAlignment); - void DrawGridCell(string item, Vector2 cellSize, Vector2 itemSize) - { - if (GridIconCenterWithinCell) - { - using (new Alignment.CenterWithin(itemSize, cellSize)) - { - ImGuiWidgets.Icon(item, ktsuTexture.TextureId, gridIconSize, GridIconAlignment); - } - } - else - { - ImGuiWidgets.Icon(item, ktsuTexture.TextureId, gridIconSize, GridIconAlignment); - } - } - - ImGuiWidgets.GridOptions gridOptions = new() - { - GridSize = new Vector2(ImGui.GetContentRegionAvail().X, GridHeight), - FitToContents = GridFitToContents, - }; - - ImGui.TextUnformatted($"Showing {GridItemsToShow} items in {GridOrder} order:"); - - switch (GridOrder) - { - case ImGuiWidgets.GridOrder.RowMajor: - ImGuiWidgets.RowMajorGrid("demoRowMajorGrid", GridStrings.Take(GridItemsToShow), MeasureGridSize, DrawGridCell, gridOptions); - break; - - case ImGuiWidgets.GridOrder.ColumnMajor: - ImGuiWidgets.ColumnMajorGrid("demoColumnMajorGrid", GridStrings.Take(GridItemsToShow), MeasureGridSize, DrawGridCell, gridOptions); - break; - - default: - throw new NotImplementedException(); - } - } - } - - // Individual widget demo methods - private static void ShowKnobDemo() - { - if (ImGui.CollapsingHeader("Knobs")) - { - ImGui.TextUnformatted("All knob variants with interactive controls:"); - ImGui.Separator(); - - // Show all knob variants - ImGui.Columns(3, "KnobColumns"); - - ImGuiWidgets.Knob("Wiper", ref value, 0, 1, 0, null, ImGuiKnobVariant.Wiper); - ImGui.NextColumn(); - ImGuiWidgets.Knob("Wiper Only", ref value, 0, 1, 0, null, ImGuiKnobVariant.WiperOnly); - ImGui.NextColumn(); - ImGuiWidgets.Knob("Wiper Dot", ref value, 0, 1, 0, null, ImGuiKnobVariant.WiperDot); - ImGui.NextColumn(); - - ImGuiWidgets.Knob("Tick", ref value, 0, 1, 0, null, ImGuiKnobVariant.Tick); - ImGui.NextColumn(); - ImGuiWidgets.Knob("Stepped", ref value, 0, 1, 0, null, ImGuiKnobVariant.Stepped); - ImGui.NextColumn(); - ImGuiWidgets.Knob("Space", ref value, 0, 1, 0, null, ImGuiKnobVariant.Space); - - ImGui.Columns(1); - - ImGui.Separator(); - ImGui.TextUnformatted($"Current Value: {value:F3}"); - - if (ImGui.Button("Reset to 0.5")) - { - value = 0.5f; - } - } - } - - private static void ShowColorIndicatorDemo() - { - if (ImGui.CollapsingHeader("Color Indicators")) - { - ImGui.TextUnformatted("Color indicators show enabled/disabled states:"); - ImGui.Separator(); - - ImGui.TextUnformatted("Status Lights:"); - ImGuiWidgets.ColorIndicator(Color.Palette.Semantic.Success, true); - ImGui.SameLine(); - ImGui.TextUnformatted("System OK"); - ImGuiWidgets.ColorIndicator(Color.Palette.Semantic.Warning, true); - ImGui.SameLine(); - ImGui.TextUnformatted("Warning"); - ImGuiWidgets.ColorIndicator(Color.Palette.Semantic.Error, true); - ImGui.SameLine(); - ImGui.TextUnformatted("Error"); - ImGuiWidgets.ColorIndicator(Color.Palette.Semantic.Info, true); - ImGui.SameLine(); - ImGui.TextUnformatted("Info"); - - ImGui.Separator(); - ImGui.TextUnformatted("Enabled vs Disabled:"); - ImGuiWidgets.ColorIndicator(Color.Palette.Semantic.Success, true); - ImGui.SameLine(); - ImGui.TextUnformatted("Enabled"); - ImGuiWidgets.ColorIndicator(Color.Palette.Semantic.Success, false); - ImGui.SameLine(); - ImGui.TextUnformatted("Disabled"); - } - } - - private static void ShowComboDemo() - { - if (ImGui.CollapsingHeader("Combo Boxes")) - { - ImGui.TextUnformatted("Type-safe combo boxes for enums and collections:"); - ImGui.Separator(); - - ImGuiWidgets.Combo("Enum Combo", ref selectedEnumValue); - ImGui.TextUnformatted($"Selected: {selectedEnumValue}"); - - ImGui.Separator(); - ImGuiWidgets.Combo("String Combo", ref selectedStringValue, possibleStringValues); - ImGui.TextUnformatted($"Selected: {selectedStringValue}"); - - ImGui.Separator(); - ImGuiWidgets.Combo("Strong String Combo", ref selectedStrongString, possibleStrongStringValues); - ImGui.TextUnformatted($"Selected: {selectedStrongString}"); - } - } - - private static void ShowTextDemo() - { - if (ImGui.CollapsingHeader("Text Utilities")) - { - ImGui.TextUnformatted("Enhanced text rendering with alignment and clipping:"); - ImGui.Separator(); - - // Regular text - ImGuiWidgets.Text("Regular text"); - - ImGui.Separator(); - - // Centered text - ImGui.TextUnformatted("Centered text in available space:"); - ImGuiWidgets.TextCentered("This text is centered!"); - - ImGui.Separator(); - - // Text centered within bounds - ImGui.TextUnformatted("Text centered within 200px container:"); - Vector2 containerSize = new(200, 50); - ImGui.GetWindowDrawList().AddRect( - ImGui.GetCursorScreenPos(), - ImGui.GetCursorScreenPos() + containerSize, - ImGui.GetColorU32(ImGuiCol.Border) - ); - ImGuiWidgets.TextCenteredWithin("Centered within bounds", containerSize); - ImGui.SetCursorPosY(ImGui.GetCursorPosY() + containerSize.Y); - - ImGui.Separator(); - - // Clipped text - ImGui.TextUnformatted("Text clipping demo (150px width):"); - Vector2 clipSize = new(150, 30); - ImGui.GetWindowDrawList().AddRect( - ImGui.GetCursorScreenPos(), - ImGui.GetCursorScreenPos() + clipSize, - ImGui.GetColorU32(ImGuiCol.Border) - ); - // Demonstrate text clipping by manually truncating long text - string longText = "This is a very long text that will be clipped with ellipsis"; - float textWidth = ImGui.CalcTextSize(longText).X; - string displayText = longText; - if (textWidth > clipSize.X) - { - // Manually clip the text for demo purposes - while (ImGui.CalcTextSize(displayText + "...").X > clipSize.X && displayText.Length > 0) - { - displayText = displayText[..^1]; - } - displayText += "..."; - } - ImGuiWidgets.TextCenteredWithin(displayText, clipSize); - ImGui.SetCursorPosY(ImGui.GetCursorPosY() + clipSize.Y); - } - } - - private static void ShowScopedWidgetsDemo() - { - if (ImGui.CollapsingHeader("Scoped Utilities")) - { - ImGui.TextUnformatted("Scoped helpers for ImGui state management:"); - ImGui.Separator(); - - // ScopedDisable demo - ImGui.TextUnformatted("ScopedDisable - disables widgets within scope:"); - using (new ScopedDisable(true)) - { - bool dummyBool = true; - int dummyInt = 0; - string[] items = ["Item 1", "Item 2", "Item 3"]; - - ImGui.Checkbox("Disabled Checkbox", ref dummyBool); - ImGui.Combo("Disabled Combo", ref dummyInt, items, items.Length); - ImGui.Button("Disabled Button"); - } - - ImGui.Separator(); - - // ScopedId demo - ImGui.TextUnformatted("ScopedId - manages ImGui ID stack automatically:"); - for (int i = 0; i < 3; i++) - { - using (new ImGuiWidgets.ScopedId(i)) - { - bool state = false; - ImGui.Checkbox("Same Label", ref state); - } - } - ImGui.TextUnformatted("↑ Three checkboxes with same label using ScopedId"); - } - } - - private static void ShowTreeDemo() - { - if (ImGui.CollapsingHeader("Tree View")) - { - ImGui.TextUnformatted("Hierarchical tree structure with automatic cleanup:"); - ImGui.Separator(); - - using ImGuiWidgets.Tree tree = new(); - for (int i = 0; i < 3; i++) - { - using (tree.Child) - { - ImGui.Button($"Parent Node {i + 1}"); - - using ImGuiWidgets.Tree subtree = new(); - for (int j = 0; j < 2; j++) - { - using (subtree.Child) - { - ImGui.Button($"Child {j + 1}"); - - if (i == 0 && j == 0) // Show deeper nesting for first item - { - using ImGuiWidgets.Tree deepTree = new(); - using (deepTree.Child) - { - ImGui.Button("Grandchild"); - } - } - } - } - } - } - } - } - - private static void ShowImageAndIconDemo(ImGuiAppTextureInfo ktsuTexture) - { - if (ImGui.CollapsingHeader("Images & Icons")) - { - ImGui.TextUnformatted("Interactive images and icons with events:"); - ImGui.Separator(); - - // Image demo with color tinting - ImGui.TextUnformatted("Clickable Image (with alpha-preserved tinting):"); - Vector4 tintColor = new(1.0f, 0.8f, 0.8f, 1.0f); // Light red tint - if (ImGuiWidgets.Image(ktsuTexture.TextureId, new Vector2(64, 64), tintColor)) - { - MessageOK.Open("Image Clicked", "You clicked the tinted image!"); - } - - ImGui.SameLine(); - if (ImGuiWidgets.Image(ktsuTexture.TextureId, new Vector2(64, 64))) // No tint - { - MessageOK.Open("Image Clicked", "You clicked the normal image!"); - } - - ImGui.Separator(); - - // Icon demos - ImGui.TextUnformatted("Interactive Icons:"); - - float iconSize = ImGuiApp.EmsToPx(4.0f); - - ImGuiWidgets.Icon("Click Me", ktsuTexture.TextureId, iconSize, ImGuiWidgets.IconAlignment.Vertical, - new ImGuiWidgets.IconOptions() - { - OnClick = () => MessageOK.Open("Click", "Single click detected!") - }); - - ImGui.SameLine(); - ImGuiWidgets.Icon("Double Click", ktsuTexture.TextureId, iconSize, ImGuiWidgets.IconAlignment.Vertical, - new ImGuiWidgets.IconOptions() - { - OnDoubleClick = () => MessageOK.Open("Double Click", "Double click detected!") - }); - - ImGui.SameLine(); - ImGuiWidgets.Icon("Right Click", ktsuTexture.TextureId, iconSize, ImGuiWidgets.IconAlignment.Vertical, - new ImGuiWidgets.IconOptions() - { - OnContextMenu = () => - { - if (ImGui.MenuItem("Context Item 1")) - { - MessageOK.Open("Menu", "Context Item 1 selected"); - } - - if (ImGui.MenuItem("Context Item 2")) - { - MessageOK.Open("Menu", "Context Item 2 selected"); - } - - ImGui.Separator(); - if (ImGui.MenuItem("Context Item 3")) - { - MessageOK.Open("Menu", "Context Item 3 selected"); - } - }, - }); - - ImGui.SameLine(); - ImGuiWidgets.Icon("Hover Me", ktsuTexture.TextureId, iconSize, ImGuiWidgets.IconAlignment.Vertical, - new ImGuiWidgets.IconOptions() - { - Tooltip = "This is a tooltip that appears when you hover over the icon!" - }); - - ImGui.Separator(); - - ImGui.TextUnformatted("Horizontal Layout Icons:"); - ImGuiWidgets.Icon("Horizontal 1", ktsuTexture.TextureId, iconSize, ImGuiWidgets.IconAlignment.Horizontal); - ImGuiWidgets.Icon("Horizontal 2", ktsuTexture.TextureId, iconSize, ImGuiWidgets.IconAlignment.Horizontal); - } - } - - private static void ShowDividerDemo() - { - if (ImGui.CollapsingHeader("Divider Container")) - { - ImGui.TextUnformatted("This entire demo uses a DividerContainer!"); - ImGui.TextUnformatted("The resizable divider between 'Widget Demos' and 'Advanced Demos'"); - ImGui.TextUnformatted("is created using ImGuiWidgets.DividerContainer."); - - ImGui.Separator(); - ImGui.TextUnformatted("DividerContainer features:"); - ImGui.BulletText("Resizable panes with drag handle"); - ImGui.BulletText("Persistent sizing ratios"); - ImGui.BulletText("Automatic content management"); - ImGui.BulletText("Nested dividers support"); - } - } - - // Tab content methods - private static void ShowTab1Content() - { - ImGui.TextUnformatted("This is the content of Tab 1"); - - if (ImGui.Button("Edit Content")) - { - DemoTabPanel.MarkTabDirty(TabIds["tab1"]); - } - - if (ImGui.Button("Save Content")) - { - DemoTabPanel.MarkTabClean(TabIds["tab1"]); - } - - ImGui.TextUnformatted("Dirty State: " + (DemoTabPanel.IsTabDirty(TabIds["tab1"]) ? "Modified" : "Unchanged")); - } - - private static void ShowTab2Content() - { - ImGui.TextUnformatted("This is the content of Tab 2"); - - if (ImGui.SliderFloat("Value", ref tab2Value, 0.0f, 1.0f)) - { - // Mark tab as dirty when slider value changes - DemoTabPanel.MarkTabDirty(TabIds["tab2"]); - } - - if (ImGui.Button("Reset")) - { - tab2Value = 0.5f; - DemoTabPanel.MarkTabClean(TabIds["tab2"]); - } - } - - private static void ShowTab3Content() - { - ImGui.TextUnformatted("This is the content of Tab 3"); - ImGui.TextUnformatted("Try clicking 'Mark Active Tab Dirty' button above"); - ImGui.TextUnformatted("to see the dirty indicator (*) appear next to the tab name."); - - if (ImGui.Button("Toggle Dirty State")) - { - if (DemoTabPanel.IsTabDirty(TabIds["tab3"])) - { - DemoTabPanel.MarkTabClean(TabIds["tab3"]); - } - else - { - DemoTabPanel.MarkTabDirty(TabIds["tab3"]); - } - } - } - - private static void ShowDynamicTabContent(int tabIndex) - { - string tabKey = $"dynamic{tabIndex}"; - ImGui.TextUnformatted($"This is a dynamically added tab ({tabIndex})"); - ImGui.TextUnformatted("The (*) indicator shows when content has been modified."); - - if (ImGui.Button("Toggle Dirty State")) - { - if (DemoTabPanel.IsTabDirty(TabIds[tabKey])) - { - DemoTabPanel.MarkTabClean(TabIds[tabKey]); - } - else - { - DemoTabPanel.MarkTabDirty(TabIds[tabKey]); - } - } - } -} diff --git a/examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.csproj b/examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.csproj deleted file mode 100644 index dd28c44..0000000 --- a/examples/ImGuiWidgetsDemo/ImGuiWidgetsDemo.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - net9.0 - - - - - - - - diff --git a/examples/ImGuiWidgetsDemo/ktsu.png b/examples/ImGuiWidgetsDemo/ktsu.png deleted file mode 100644 index 916c2a3..0000000 --- a/examples/ImGuiWidgetsDemo/ktsu.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3c680b0e20d577e840fb3b41e7fc3a7604b06f279346310755aa252abd1959e9 -size 15183 diff --git a/tests/ImGui.App.Tests/AdvancedCoverageTests.cs b/tests/ImGui.App.Tests/AdvancedCoverageTests.cs deleted file mode 100644 index 3037cfc..0000000 --- a/tests/ImGui.App.Tests/AdvancedCoverageTests.cs +++ /dev/null @@ -1,284 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using System; -using Hexa.NET.ImGui; -using ktsu.ImGui.App.ImGuiController; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using ktsu.Semantics.Paths; - -/// -/// Advanced tests targeting specific low-coverage areas including OpenGL functionality, shader management, and texture operations. -/// -[TestClass] -public class AdvancedCoverageTests -{ - #region ImGuiFontConfig Advanced Tests - - [TestMethod] - public void ImGuiFontConfig_Properties_GettersReturnCorrectValues() - { - const string testPath = "arial.ttf"; - const int testSize = 18; - static IntPtr TestGlyphRange(ImGuiIOPtr io) => IntPtr.Zero; - - ImGuiFontConfig config = new(testPath, testSize, TestGlyphRange); - - // Exercise all property getters - string fontPath = config.FontPath; - int fontSize = config.FontSize; - Func? glyphRange = config.GetGlyphRange; - - Assert.AreEqual(testPath, fontPath); - Assert.AreEqual(testSize, fontSize); - Assert.IsNotNull(glyphRange); - Assert.AreSame(TestGlyphRange, glyphRange); - } - - [TestMethod] - public void ImGuiFontConfig_GetHashCode_ConsistentResults() - { - ImGuiFontConfig config1 = new("test.ttf", 16); - ImGuiFontConfig config2 = new("test.ttf", 16); - - int hash1 = config1.GetHashCode(); - int hash2 = config2.GetHashCode(); - - Assert.AreEqual(hash1, hash2); - } - - [TestMethod] - public void ImGuiFontConfig_GetHashCode_DifferentForDifferentConfigs() - { - ImGuiFontConfig config1 = new("test1.ttf", 16); - ImGuiFontConfig config2 = new("test2.ttf", 16); - - int hash1 = config1.GetHashCode(); - int hash2 = config2.GetHashCode(); - - Assert.AreNotEqual(hash1, hash2); - } - - [TestMethod] - public void ImGuiFontConfig_EqualsObject_WithNullObject_ReturnsFalse() - { - ImGuiFontConfig config = new("test.ttf", 16); - bool result = config.Equals(null); - Assert.IsFalse(result); - } - - [TestMethod] - public void ImGuiFontConfig_EqualsObject_WithDifferentType_ReturnsFalse() - { - ImGuiFontConfig config = new("test.ttf", 16); - bool result = config.Equals("not a font config"); - Assert.IsFalse(result); - } - - [TestMethod] - public void ImGuiFontConfig_EqualsObject_WithSameConfig_ReturnsTrue() - { - ImGuiFontConfig config1 = new("test.ttf", 16); - ImGuiFontConfig config2 = new("test.ttf", 16); - bool result = config1.Equals(config2); - Assert.IsTrue(result); - } - - [TestMethod] - public void ImGuiFontConfig_EqualityOperators_WorkCorrectly() - { - ImGuiFontConfig config1 = new("test.ttf", 16); - ImGuiFontConfig config2 = new("test.ttf", 16); - ImGuiFontConfig config3 = new("other.ttf", 16); - - // Test equality - bool equal1 = config1 == config2; - bool equal2 = config1 == config3; - - // Test inequality - bool notEqual1 = config1 != config2; - bool notEqual2 = config1 != config3; - - Assert.IsTrue(equal1); - Assert.IsFalse(equal2); - Assert.IsFalse(notEqual1); - Assert.IsTrue(notEqual2); - } - - [TestMethod] - public void ImGuiFontConfig_EqualsTyped_WithDifferentGlyphRange_ReturnsFalse() - { - static IntPtr GlyphRange1(ImGuiIOPtr io) => IntPtr.Zero; - static IntPtr GlyphRange2(ImGuiIOPtr io) => new(1); - - ImGuiFontConfig config1 = new("test.ttf", 16, GlyphRange1); - ImGuiFontConfig config2 = new("test.ttf", 16, GlyphRange2); - - bool result = config1.Equals(config2); - Assert.IsFalse(result); - } - - #endregion - - #region UniformFieldInfo Tests - - [TestMethod] - public void UniformFieldInfo_DefaultConstructor_InitializesFields() - { - UniformFieldInfo uniformInfo = new(); - - Assert.AreEqual(0, uniformInfo.Location); - Assert.IsNull(uniformInfo.Name); - Assert.AreEqual(0, uniformInfo.Size); - Assert.AreEqual(default, uniformInfo.Type); - } - - [TestMethod] - public void UniformFieldInfo_FieldAssignment_WorksCorrectly() - { - UniformFieldInfo uniformInfo = new() - { - Location = 5, - Name = "testUniform", - Size = 1, - Type = Silk.NET.OpenGL.UniformType.Float - }; - - Assert.AreEqual(5, uniformInfo.Location); - Assert.AreEqual("testUniform", uniformInfo.Name); - Assert.AreEqual(1, uniformInfo.Size); - Assert.AreEqual(Silk.NET.OpenGL.UniformType.Float, uniformInfo.Type); - } - - #endregion - - #region ImGuiApp Advanced Scenarios - - [TestMethod] - public void ImGuiApp_DeleteTexture_WithNullTextureInfo_ThrowsArgumentNullException() - { - Exception exception = Assert.ThrowsExactly(() => ImGuiApp.DeleteTexture(null!)); - - Assert.IsInstanceOfType(exception); - } - - [TestMethod] - public void ImGuiApp_WindowState_MultipleAccess_ReturnsConsistentValues() - { - ImGuiAppWindowState state1 = ImGuiApp.WindowState; - ImGuiAppWindowState state2 = ImGuiApp.WindowState; - - // Should return consistent values (not necessarily same reference) - Assert.AreEqual(state1.Size, state2.Size); - Assert.AreEqual(state1.Pos, state2.Pos); - Assert.AreEqual(state1.LayoutState, state2.LayoutState); - } - - [TestMethod] - public void ImGuiApp_Textures_MultipleAccess_ReturnsSameInstance() - { - System.Collections.Concurrent.ConcurrentDictionary textures1 = ImGuiApp.Textures; - System.Collections.Concurrent.ConcurrentDictionary textures2 = ImGuiApp.Textures; - - // Should return the same collection instance - Assert.AreSame(textures1, textures2); - } - - #endregion - - #region Performance Settings Edge Cases - - [TestMethod] - public void ImGuiAppPerformanceSettings_AllProperties_CanBeSetToZero() - { - ImGuiAppPerformanceSettings settings = new() - { - FocusedFps = 0.0, - UnfocusedFps = 0.0, - IdleFps = 0.0, - NotVisibleFps = 0.0, - IdleTimeoutSeconds = 0.0, - EnableThrottledRendering = false, - EnableIdleDetection = false - }; - - Assert.AreEqual(0.0, settings.FocusedFps); - Assert.AreEqual(0.0, settings.UnfocusedFps); - Assert.AreEqual(0.0, settings.IdleFps); - Assert.AreEqual(0.0, settings.NotVisibleFps); - Assert.AreEqual(0.0, settings.IdleTimeoutSeconds); - Assert.IsFalse(settings.EnableThrottledRendering); - Assert.IsFalse(settings.EnableIdleDetection); - } - - [TestMethod] - public void ImGuiAppPerformanceSettings_AllProperties_CanBeSetToNegativeValues() - { - ImGuiAppPerformanceSettings settings = new() - { - FocusedFps = -1.0, - UnfocusedFps = -2.0, - IdleFps = -3.0, - NotVisibleFps = -4.0, - IdleTimeoutSeconds = -5.0, - EnableThrottledRendering = true, - EnableIdleDetection = true - }; - - Assert.AreEqual(-1.0, settings.FocusedFps); - Assert.AreEqual(-2.0, settings.UnfocusedFps); - Assert.AreEqual(-3.0, settings.IdleFps); - Assert.AreEqual(-4.0, settings.NotVisibleFps); - Assert.AreEqual(-5.0, settings.IdleTimeoutSeconds); - Assert.IsTrue(settings.EnableThrottledRendering); - Assert.IsTrue(settings.EnableIdleDetection); - } - - #endregion - - #region ImGuiAppConfig Advanced Tests - - [TestMethod] - public void ImGuiAppConfig_AllCallbacks_CanBeSetToNull() - { - ImGuiAppConfig config = new(); - - // Test that the default values are not null (they are default empty delegates) - Assert.IsNotNull(config.OnStart); - Assert.IsNotNull(config.OnUpdate); - Assert.IsNotNull(config.OnRender); - Assert.IsNotNull(config.OnAppMenu); - Assert.IsNotNull(config.OnMoveOrResize); - } - - [TestMethod] - public void ImGuiAppConfig_Fonts_CanBeCleared() - { - ImGuiAppConfig config = new(); - config.Fonts.Add("test", [1, 2, 3]); - Assert.AreEqual(1, config.Fonts.Count); - - config.Fonts.Clear(); - Assert.AreEqual(0, config.Fonts.Count); - } - - [TestMethod] - public void ImGuiAppConfig_Fonts_SupportsMultipleFonts() - { - ImGuiAppConfig config = new(); - byte[] font1 = [1, 2, 3]; - byte[] font2 = [4, 5, 6]; - - config.Fonts.Add("Arial", font1); - config.Fonts.Add("Times", font2); - - Assert.AreEqual(2, config.Fonts.Count); - Assert.AreSame(font1, config.Fonts["Arial"]); - Assert.AreSame(font2, config.Fonts["Times"]); - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/ErrorHandlingAndEdgeCaseTests.cs b/tests/ImGui.App.Tests/ErrorHandlingAndEdgeCaseTests.cs deleted file mode 100644 index dccecd9..0000000 --- a/tests/ImGui.App.Tests/ErrorHandlingAndEdgeCaseTests.cs +++ /dev/null @@ -1,365 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using System; -using System.Collections.Generic; -using ktsu.ImGui.App.ImGuiController; -using ktsu.ImGui.App; -using Microsoft.VisualStudio.TestTools.UnitTesting; - -/// -/// Tests for error handling, edge cases, and boundary conditions to maximize code coverage. -/// -[TestClass] -public class ErrorHandlingAndEdgeCaseTests -{ - [TestInitialize] - public void Setup() - { - ImGuiApp.Reset(); - } - - #region ImGuiFontConfig Error Handling - - [TestMethod] - public void ImGuiFontConfig_Constructor_EmptyPath_DoesNotThrow() - { - // Empty string is a valid font path, should not throw - ImGuiFontConfig config = new("", 16); - Assert.AreEqual("", config.FontPath); - Assert.AreEqual(16, config.FontSize); - } - - [TestMethod] - public void ImGuiFontConfig_Constructor_WhitespacePath_DoesNotThrow() - { - // Whitespace is a valid path, should not throw - ImGuiFontConfig config = new(" ", 16); - Assert.AreEqual(" ", config.FontPath); - } - - [TestMethod] - public void ImGuiFontConfig_Constructor_MaxIntSize_DoesNotThrow() - { - ImGuiFontConfig config = new("test.ttf", int.MaxValue); - Assert.AreEqual(int.MaxValue, config.FontSize); - } - - [TestMethod] - public void ImGuiFontConfig_Constructor_MinValidSize_DoesNotThrow() - { - ImGuiFontConfig config = new("test.ttf", 1); - Assert.AreEqual(1, config.FontSize); - } - - #endregion - - #region Texture Coordinate Edge Cases - - [TestMethod] - public void TextureCoordinate_CastToInt_ReturnsCorrectValues() - { - int noneValue = (int)TextureCoordinate.None; - int sValue = (int)TextureCoordinate.S; - int tValue = (int)TextureCoordinate.T; - int rValue = (int)TextureCoordinate.R; - - Assert.AreEqual(0, noneValue); - Assert.AreNotEqual(0, sValue); - Assert.AreNotEqual(0, tValue); - Assert.AreNotEqual(0, rValue); - } - - [TestMethod] - public void TextureCoordinate_AllValues_AreUnique() - { - TextureCoordinate[] values = Enum.GetValues(); - HashSet uniqueValues = []; - - foreach (TextureCoordinate coord in values) - { - int intValue = (int)coord; - Assert.IsTrue(uniqueValues.Add(intValue), $"Duplicate value found: {intValue}"); - } - } - - #endregion - - #region ImGuiApp Edge Cases - - [TestMethod] - public void ImGuiApp_OnUserInput_CalledRapidly_UpdatesTime() - { - DateTime startTime = DateTime.UtcNow; - - for (int i = 0; i < 100; i++) - { - ImGuiApp.OnUserInput(); - } - - // Verify that the internal time was updated using direct access - DateTime lastTime = ImGuiApp.lastInputTime; - - Assert.IsTrue(lastTime >= startTime); - } - - [TestMethod] - public void ImGuiApp_Reset_CalledMultipleTimes_DoesNotThrow() - { - try - { - // Should be safe to call Reset multiple times - ImGuiApp.Reset(); - ImGuiApp.Reset(); - ImGuiApp.Reset(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void ImGuiApp_Properties_AfterReset_HaveConsistentValues() - { - ImGuiApp.Reset(); - bool focused1 = ImGuiApp.IsFocused; - bool idle1 = ImGuiApp.IsIdle; - float scale1 = ImGuiApp.ScaleFactor; - - ImGuiApp.Reset(); - bool focused2 = ImGuiApp.IsFocused; - bool idle2 = ImGuiApp.IsIdle; - float scale2 = ImGuiApp.ScaleFactor; - - Assert.AreEqual(focused1, focused2); - Assert.AreEqual(idle1, idle2); - Assert.AreEqual(scale1, scale2); - } - - #endregion - - #region Data Structure Boundary Tests - - [TestMethod] - public void ImGuiAppTextureInfo_MaxValues_CanBeSet() - { - ImGuiAppTextureInfo textureInfo = new() - { - TextureId = uint.MaxValue, - Width = int.MaxValue, - Height = int.MaxValue - }; - - Assert.AreEqual(uint.MaxValue, textureInfo.TextureId); - Assert.AreEqual(int.MaxValue, textureInfo.Width); - Assert.AreEqual(int.MaxValue, textureInfo.Height); - } - - [TestMethod] - public void ImGuiAppTextureInfo_MinValues_CanBeSet() - { - ImGuiAppTextureInfo textureInfo = new() - { - TextureId = uint.MinValue, - Width = int.MinValue, - Height = int.MinValue - }; - - Assert.AreEqual(uint.MinValue, textureInfo.TextureId); - Assert.AreEqual(int.MinValue, textureInfo.Width); - Assert.AreEqual(int.MinValue, textureInfo.Height); - } - - [TestMethod] - public void ImGuiAppWindowState_ExtremeValues_CanBeSet() - { - ImGuiAppWindowState windowState = new() - { - Size = new System.Numerics.Vector2(float.MaxValue, float.MaxValue), - Pos = new System.Numerics.Vector2(float.MinValue, float.MinValue) - }; - - Assert.AreEqual(float.MaxValue, windowState.Size.X); - Assert.AreEqual(float.MaxValue, windowState.Size.Y); - Assert.AreEqual(float.MinValue, windowState.Pos.X); - Assert.AreEqual(float.MinValue, windowState.Pos.Y); - } - - #endregion - - #region Performance Settings Extreme Values - - [TestMethod] - public void ImGuiAppPerformanceSettings_ExtremeValues_CanBeSet() - { - ImGuiAppPerformanceSettings settings = new() - { - FocusedFps = double.MaxValue, - UnfocusedFps = double.MinValue, - IdleFps = double.PositiveInfinity, - NotVisibleFps = double.NegativeInfinity, - IdleTimeoutSeconds = double.NaN, - EnableThrottledRendering = true, - EnableIdleDetection = false - }; - - Assert.AreEqual(double.MaxValue, settings.FocusedFps); - Assert.AreEqual(double.MinValue, settings.UnfocusedFps); - Assert.AreEqual(double.PositiveInfinity, settings.IdleFps); - Assert.AreEqual(double.NegativeInfinity, settings.NotVisibleFps); - Assert.IsTrue(double.IsNaN(settings.IdleTimeoutSeconds)); - Assert.IsTrue(settings.EnableThrottledRendering); - Assert.IsFalse(settings.EnableIdleDetection); - } - - #endregion - - #region Config Edge Cases - - [TestMethod] - public void ImGuiAppConfig_EmptyStrings_CanBeSet() - { - ImGuiAppConfig config = new() - { - Title = "", - IconPath = "" - }; - - Assert.AreEqual("", config.Title); - Assert.AreEqual("", config.IconPath); - } - - [TestMethod] - public void ImGuiAppConfig_VeryLongStrings_CanBeSet() - { - string longTitle = new('A', 10000); - string longIconPath = new('B', 10000); - - ImGuiAppConfig config = new() - { - Title = longTitle, - IconPath = longIconPath - }; - - Assert.AreEqual(longTitle, config.Title); - Assert.AreEqual(longIconPath, config.IconPath); - } - - [TestMethod] - public void ImGuiAppConfig_Fonts_WithEmptyKey_CanBeAdded() - { - ImGuiAppConfig config = new(); - byte[] fontData = [1, 2, 3, 4, 5]; - - config.Fonts.Add("", fontData); - - Assert.AreEqual(1, config.Fonts.Count); - Assert.IsTrue(config.Fonts.ContainsKey("")); - Assert.AreSame(fontData, config.Fonts[""]); - } - - [TestMethod] - public void ImGuiAppConfig_Fonts_WithEmptyArray_CanBeAdded() - { - ImGuiAppConfig config = new(); - byte[] emptyFont = []; - - config.Fonts.Add("empty", emptyFont); - - Assert.AreEqual(1, config.Fonts.Count); - Assert.AreSame(emptyFont, config.Fonts["empty"]); - Assert.AreEqual(0, config.Fonts["empty"].Length); - } - - [TestMethod] - public void ImGuiAppConfig_Fonts_WithLargeArray_CanBeAdded() - { - ImGuiAppConfig config = new(); - byte[] largeFont = new byte[1000000]; // 1MB font - - config.Fonts.Add("large", largeFont); - - Assert.AreEqual(1, config.Fonts.Count); - Assert.AreSame(largeFont, config.Fonts["large"]); - Assert.AreEqual(1000000, config.Fonts["large"].Length); - } - - #endregion - - #region Static Class Verification - - [TestMethod] - public void NativeMethods_HasOnlyStaticMembers() - { - // Test NativeMethods through direct access instead of reflection - // Since NativeMethods is an internal static partial class, - // the fact that this compiles means it's accessible and static - Assert.IsNotNull(typeof(NativeMethods)); - Assert.IsTrue(typeof(NativeMethods).IsClass); - Assert.IsTrue(typeof(NativeMethods).IsAbstract && typeof(NativeMethods).IsSealed); - } - - [TestMethod] - public void GdiPlusHelper_HasOnlyStaticMembers() - { - // Test GdiPlusHelper through direct access instead of reflection - // Since GdiPlusHelper is an internal static class, - // the fact that this compiles means it's accessible and static - Assert.IsNotNull(typeof(GdiPlusHelper)); - Assert.IsTrue(typeof(GdiPlusHelper).IsClass); - Assert.IsTrue(typeof(GdiPlusHelper).IsAbstract && typeof(GdiPlusHelper).IsSealed); - } - - [TestMethod] - public void FontHelper_HasOnlyStaticMembers() - { - // Test FontHelper through direct access instead of reflection - // Since FontHelper is a public static class, - // the fact that this compiles means it's accessible and static - Assert.IsNotNull(typeof(FontHelper)); - Assert.IsTrue(typeof(FontHelper).IsClass); - Assert.IsTrue(typeof(FontHelper).IsAbstract && typeof(FontHelper).IsSealed); - } - - #endregion - - #region DPI Awareness Edge Cases - - [TestMethod] - public void ForceDpiAware_GetWindowScaleFactor_ConsistentResults() - { - double scale1 = ForceDpiAware.GetWindowScaleFactor(); - double scale2 = ForceDpiAware.GetWindowScaleFactor(); - - // Should return consistent results when called multiple times - Assert.AreEqual(scale1, scale2); - } - - [TestMethod] - public void ForceDpiAware_GetActualScaleFactor_ConsistentResults() - { - double scale1 = ForceDpiAware.GetActualScaleFactor(); - double scale2 = ForceDpiAware.GetActualScaleFactor(); - - // Should return consistent results when called multiple times - Assert.AreEqual(scale1, scale2); - } - - [TestMethod] - public void ForceDpiAware_ScaleFactors_ArePositive() - { - double windowScale = ForceDpiAware.GetWindowScaleFactor(); - double actualScale = ForceDpiAware.GetActualScaleFactor(); - - Assert.IsTrue(windowScale > 0, "Window scale factor should be positive"); - Assert.IsTrue(actualScale > 0, "Actual scale factor should be positive"); - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/FontAndUITests.cs b/tests/ImGui.App.Tests/FontAndUITests.cs deleted file mode 100644 index 8645c7b..0000000 --- a/tests/ImGui.App.Tests/FontAndUITests.cs +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using Microsoft.VisualStudio.TestTools.UnitTesting; - -/// -/// Tests for font management and UI scaling functionality including FontHelper, FontAppearance, and UIScaler. -/// -[TestClass] -public class FontAndUITests -{ - [TestInitialize] - public void Setup() - { - ImGuiApp.Reset(); - } - - #region FontHelper Tests - - [TestMethod] - public void FontHelper_IsStaticClass() - { - Type fontHelperType = typeof(FontHelper); - Assert.IsTrue(fontHelperType.IsAbstract && fontHelperType.IsSealed); - } - - [TestMethod] - public void FontHelper_CleanupCustomFonts_DoesNotThrow() - { - try - { - FontHelper.CleanupCustomFonts(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void FontHelper_CleanupGlyphRanges_DoesNotThrow() - { - try - { - FontHelper.CleanupGlyphRanges(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void FontHelper_CleanupMethods_CanBeCalledMultipleTimes() - { - try - { - FontHelper.CleanupCustomFonts(); - FontHelper.CleanupGlyphRanges(); - FontHelper.CleanupCustomFonts(); - FontHelper.CleanupGlyphRanges(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - #endregion - - #region FontAppearance Tests - - [TestMethod] - public void FontAppearance_InheritsScopedAction() - { - Assert.IsTrue(typeof(FontAppearance).IsSubclassOf(typeof(ScopedAction.ScopedAction))); - } - - [TestMethod] - public void FontAppearance_Constants_HaveExpectedValues() - { - // Access FontAppearance constants directly using internal access - Assert.AreEqual("default", FontAppearance.DefaultFontName); - Assert.AreEqual(14, FontAppearance.DefaultFontPointSize); - } - - #endregion - - #region UIScaler Tests - - [TestMethod] - public void UIScaler_InheritsScopedAction() - { - Assert.IsTrue(typeof(UIScaler).IsSubclassOf(typeof(ScopedAction.ScopedAction))); - } - - #endregion - - #region Util Tests - - [TestMethod] - public void Util_IsStaticClass() - { - Type utilType = typeof(ImGuiController.Util); - Assert.IsTrue(utilType.IsAbstract && utilType.IsSealed); - } - - [TestMethod] - public void Util_Clamp_WorksCorrectly() - { - // Test clamping at minimum - Assert.AreEqual(5.0f, ImGuiController.Util.Clamp(3.0f, 5.0f, 10.0f)); - - // Test clamping at maximum - Assert.AreEqual(10.0f, ImGuiController.Util.Clamp(15.0f, 5.0f, 10.0f)); - - // Test value in range - Assert.AreEqual(7.0f, ImGuiController.Util.Clamp(7.0f, 5.0f, 10.0f)); - - // Test edge cases - Assert.AreEqual(5.0f, ImGuiController.Util.Clamp(5.0f, 5.0f, 10.0f)); - Assert.AreEqual(10.0f, ImGuiController.Util.Clamp(10.0f, 5.0f, 10.0f)); - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/ForceDpiAwareTests.cs b/tests/ImGui.App.Tests/ForceDpiAwareTests.cs deleted file mode 100644 index 3e35c79..0000000 --- a/tests/ImGui.App.Tests/ForceDpiAwareTests.cs +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using Microsoft.VisualStudio.TestTools.UnitTesting; - -[TestClass] -public class ForceDpiAwareTests -{ - [TestMethod] - public void GetWindowScaleFactor_ReturnsValidValue() - { - // Act - double scaleFactor = ForceDpiAware.GetWindowScaleFactor(); - - // Assert - Assert.IsTrue(scaleFactor > 0); - Assert.IsTrue(scaleFactor <= 10.25); // MaxScaleFactor - } - - [TestMethod] - public void GetActualScaleFactor_ReturnsValidValue() - { - // Act - double actualScale = ForceDpiAware.GetActualScaleFactor(); - - // Assert - Assert.IsTrue(actualScale > 0); - } -} diff --git a/tests/ImGui.App.Tests/ImGui.App.Tests.csproj b/tests/ImGui.App.Tests/ImGui.App.Tests.csproj deleted file mode 100644 index c14b0a6..0000000 --- a/tests/ImGui.App.Tests/ImGui.App.Tests.csproj +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - true - net9.0 - - true - true - true - true - ktsu.ImGui.App.Tests - $(RootNamespace) - - - - - - - - - - diff --git a/tests/ImGui.App.Tests/ImGuiAppCoreTests.cs b/tests/ImGui.App.Tests/ImGuiAppCoreTests.cs deleted file mode 100644 index bc021e4..0000000 --- a/tests/ImGui.App.Tests/ImGuiAppCoreTests.cs +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using ktsu.Semantics.Paths; -using ktsu.Semantics.Strings; -using System.Collections.Concurrent; -using Microsoft.VisualStudio.TestTools.UnitTesting; - -/// -/// Tests for core ImGuiApp functionality including properties, state management, and basic operations. -/// -[TestClass] -public class ImGuiAppCoreTests -{ - [TestInitialize] - public void Setup() - { - ImGuiApp.Reset(); - } - - #region Property Tests - - [TestMethod] - public void IsFocused_AfterReset_ReturnsTrue() - { - Assert.IsTrue(ImGuiApp.IsFocused); - } - - [TestMethod] - public void IsIdle_AfterReset_ReturnsFalse() - { - Assert.IsFalse(ImGuiApp.IsIdle); - } - - [TestMethod] - public void IsVisible_WithNullWindow_ReturnsFalse() - { - bool isVisible = ImGuiApp.IsVisible; - Assert.IsFalse(isVisible); - } - - [TestMethod] - public void ScaleFactor_AfterReset_ReturnsOne() - { - Assert.AreEqual(1.0f, ImGuiApp.ScaleFactor); - } - - [TestMethod] - public void Invoker_AfterReset_IsNull() - { - Assert.IsNull(ImGuiApp.Invoker); - } - - [TestMethod] - public void WindowState_IsNeverNull() - { - ImGuiAppWindowState windowState = ImGuiApp.WindowState; - Assert.IsNotNull(windowState); - Assert.IsInstanceOfType(windowState); - } - - [TestMethod] - public void Textures_IsNeverNull() - { - ConcurrentDictionary textures = ImGuiApp.Textures; - Assert.IsNotNull(textures); - } - - [TestMethod] - public void Textures_AfterReset_IsEmpty() - { - ConcurrentDictionary textures = ImGuiApp.Textures; - Assert.AreEqual(0, textures.Count); - } - - #endregion - - #region Method Tests - - [TestMethod] - public void OnUserInput_UpdatesLastInputTime() - { - DateTime before = ImGuiApp.lastInputTime; - ImGuiApp.OnUserInput(); - DateTime after = ImGuiApp.lastInputTime; - - Assert.IsTrue(after >= before); - } - - [TestMethod] - public void OnUserInput_CanBeCalledMultipleTimes() - { - try - { - ImGuiApp.OnUserInput(); - ImGuiApp.OnUserInput(); - ImGuiApp.OnUserInput(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void Stop_WithNullWindow_ThrowsInvalidOperationException() - { - Assert.ThrowsExactly(ImGuiApp.Stop); - } - - [TestMethod] - public void Reset_ResetsStateCorrectly() - { - ImGuiApp.Reset(); - - Assert.IsFalse(ImGuiApp.IsIdle); - Assert.IsTrue(ImGuiApp.IsFocused); - Assert.IsNotNull(ImGuiApp.WindowState); - Assert.AreEqual(0, ImGuiApp.Textures.Count); - } - - #endregion - - #region Texture Management Tests - - [TestMethod] - public void TryGetTexture_WithAbsolutePath_NonExistentTexture_ReturnsFalse() - { - AbsoluteFilePath testPath = Path.GetFullPath("nonexistent_texture.png").As(); - bool result = ImGuiApp.TryGetTexture(testPath, out ImGuiAppTextureInfo? textureInfo); - - Assert.IsFalse(result); - Assert.IsNull(textureInfo); - } - - [TestMethod] - public void TryGetTexture_WithStringPath_NonExistentTexture_ReturnsFalse() - { - string testPath = Path.GetFullPath("nonexistent_texture.png"); - bool result = ImGuiApp.TryGetTexture(testPath, out ImGuiAppTextureInfo? textureInfo); - - Assert.IsFalse(result); - Assert.IsNull(textureInfo); - } - - [TestMethod] - public void DeleteTexture_WithNullTextureInfo_ThrowsArgumentNullException() - { - Assert.ThrowsExactly(() => ImGuiApp.DeleteTexture(null!)); - } - - #endregion - - #region Property Accessibility Tests - - [TestMethod] - public void CoreProperties_AreReadOnly() - { - // Test that these properties can be accessed directly and have expected default values - Assert.IsTrue(ImGuiApp.IsFocused); - Assert.IsFalse(ImGuiApp.IsIdle); - Assert.AreEqual(1.0f, ImGuiApp.ScaleFactor); - - // Test properties are read-only by attempting direct access (compilation test) - // The fact that this compiles and runs means they are readable - bool focusedValue = ImGuiApp.IsFocused; - bool idleValue = ImGuiApp.IsIdle; - float scaleValue = ImGuiApp.ScaleFactor; - - Assert.IsTrue(focusedValue || !focusedValue); // Tautology to use the values - Assert.IsTrue(idleValue || !idleValue); - Assert.IsTrue(scaleValue >= 0); - } - - #endregion - - #region Internal Structure Tests - - [TestMethod] - public void CommonFontSizes_ContainsExpectedValues() - { - int[] sizes = ImGuiApp.CommonFontSizes; - Assert.IsNotNull(sizes); - - int[] expectedSizes = [10, 12, 14, 16, 18, 20, 24, 32, 48]; - CollectionAssert.AreEqual(expectedSizes, sizes); - } - - [TestMethod] - public void DebugLogger_IsInternalStaticClass() - { - // Test DebugLogger functionality through direct access - // The fact that this compiles means DebugLogger is accessible as internal - Assert.IsNotNull(typeof(DebugLogger)); - Assert.IsTrue(typeof(DebugLogger).IsClass); - Assert.IsTrue(typeof(DebugLogger).IsAbstract && typeof(DebugLogger).IsSealed); - } - - [TestMethod] - public void DebugLogger_LogMethod_CanBeCalled() - { - try - { - // Test DebugLogger.Log method through direct access - // Should not throw when called directly - DebugLogger.Log("Test message from ImGuiAppCoreTests"); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/ImGuiAppDataStructureTests.cs b/tests/ImGui.App.Tests/ImGuiAppDataStructureTests.cs deleted file mode 100644 index 386965f..0000000 --- a/tests/ImGui.App.Tests/ImGuiAppDataStructureTests.cs +++ /dev/null @@ -1,221 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using System.Numerics; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using Silk.NET.Windowing; -using ktsu.Semantics.Paths; -using ktsu.Semantics.Strings; - -/// -/// Tests for ImGuiApp data structures including texture info, window state, configuration, and performance settings. -/// -[TestClass] -public class ImGuiAppDataStructureTests -{ - [TestInitialize] - public void Setup() - { - ImGuiApp.Reset(); - } - - #region ImGuiAppTextureInfo Tests - - [TestMethod] - public void ImGuiAppTextureInfo_DefaultConstructor_InitializesCorrectly() - { - ImGuiAppTextureInfo textureInfo = new(); - - Assert.AreEqual(new AbsoluteFilePath(), textureInfo.Path); - Assert.AreEqual(0u, textureInfo.TextureId); - Assert.AreEqual(0, textureInfo.Width); - Assert.AreEqual(0, textureInfo.Height); - } - - [TestMethod] - public void ImGuiAppTextureInfo_Properties_CanBeSet() - { - ImGuiAppTextureInfo textureInfo = new(); - AbsoluteFilePath testPath = Path.GetFullPath("test_texture.png").As(); - - textureInfo.Path = testPath; - textureInfo.TextureId = 123u; - textureInfo.Width = 256; - textureInfo.Height = 512; - - Assert.AreEqual(testPath, textureInfo.Path); - Assert.AreEqual(123u, textureInfo.TextureId); - Assert.AreEqual(256, textureInfo.Width); - Assert.AreEqual(512, textureInfo.Height); - } - - [TestMethod] - public void ImGuiAppTextureInfo_IsPublicClass() - { - Type textureInfoType = typeof(ImGuiAppTextureInfo); - Assert.IsTrue(textureInfoType.IsClass); - Assert.IsTrue(textureInfoType.IsPublic); - } - - #endregion - - #region ImGuiAppWindowState Tests - - [TestMethod] - public void ImGuiAppWindowState_DefaultConstructor_HasCorrectDefaults() - { - ImGuiAppWindowState windowState = new(); - - Assert.AreEqual(new Vector2(1280, 720), windowState.Size); - Assert.AreEqual(new Vector2(-short.MinValue, -short.MinValue), windowState.Pos); - Assert.AreEqual(WindowState.Normal, windowState.LayoutState); - } - - [TestMethod] - public void ImGuiAppWindowState_Properties_CanBeSet() - { - ImGuiAppWindowState windowState = new(); - Vector2 testSize = new(1920, 1080); - Vector2 testPos = new(100, 200); - - windowState.Size = testSize; - windowState.Pos = testPos; - windowState.LayoutState = WindowState.Maximized; - - Assert.AreEqual(testSize, windowState.Size); - Assert.AreEqual(testPos, windowState.Pos); - Assert.AreEqual(WindowState.Maximized, windowState.LayoutState); - } - - [TestMethod] - public void ImGuiAppWindowState_IsPublicClass() - { - Type windowStateType = typeof(ImGuiAppWindowState); - Assert.IsTrue(windowStateType.IsClass); - Assert.IsTrue(windowStateType.IsPublic); - } - - #endregion - - #region ImGuiAppConfig Tests - - [TestMethod] - public void ImGuiAppConfig_DefaultConstructor_InitializesAllProperties() - { - ImGuiAppConfig config = new(); - - Assert.IsNotNull(config.Title); - Assert.IsNotNull(config.IconPath); - Assert.IsNotNull(config.InitialWindowState); - Assert.IsNotNull(config.OnStart); - Assert.IsNotNull(config.OnUpdate); - Assert.IsNotNull(config.OnRender); - Assert.IsNotNull(config.OnAppMenu); - Assert.IsNotNull(config.OnMoveOrResize); - Assert.IsNotNull(config.Fonts); - Assert.IsNotNull(config.PerformanceSettings); - } - - [TestMethod] - public void ImGuiAppConfig_InitializerSyntax_WorksCorrectly() - { - ImGuiAppConfig config = new() - { - Title = "Test App", - IconPath = "test.ico", - TestMode = true, - EnableUnicodeSupport = false, - SaveIniSettings = false - }; - - Assert.AreEqual("Test App", config.Title); - Assert.AreEqual("test.ico", config.IconPath); - Assert.IsTrue(config.TestMode); - Assert.IsFalse(config.EnableUnicodeSupport); - Assert.IsFalse(config.SaveIniSettings); - } - - [TestMethod] - public void ImGuiAppConfig_Fonts_CanBeModified() - { - ImGuiAppConfig config = new(); - byte[] testFontData = [0x01, 0x02, 0x03, 0x04]; - - config.Fonts.Add("TestFont", testFontData); - - Assert.AreEqual(1, config.Fonts.Count); - Assert.IsTrue(config.Fonts.ContainsKey("TestFont")); - Assert.AreSame(testFontData, config.Fonts["TestFont"]); - } - - [TestMethod] - public void ImGuiAppConfig_EmojiFont_ReturnsValue() - { - byte[]? emojiFont = ImGuiAppConfig.EmojiFont; - - // The font may or may not be available depending on the build configuration - Assert.IsTrue(emojiFont is null || emojiFont.Length > 0); - } - - [TestMethod] - public void ImGuiAppConfig_IsPublicClass() - { - Type configType = typeof(ImGuiAppConfig); - Assert.IsTrue(configType.IsClass); - Assert.IsTrue(configType.IsPublic); - } - - #endregion - - #region ImGuiAppPerformanceSettings Tests - - [TestMethod] - public void ImGuiAppPerformanceSettings_DefaultValues_AreCorrect() - { - ImGuiAppPerformanceSettings settings = new(); - - Assert.IsTrue(settings.EnableThrottledRendering); - Assert.AreEqual(30.0, settings.FocusedFps); - Assert.AreEqual(5.0, settings.UnfocusedFps); - Assert.AreEqual(10.0, settings.IdleFps); - Assert.AreEqual(2.0, settings.NotVisibleFps); - Assert.IsTrue(settings.EnableIdleDetection); - Assert.AreEqual(30.0, settings.IdleTimeoutSeconds); - } - - [TestMethod] - public void ImGuiAppPerformanceSettings_Properties_CanBeSet() - { - ImGuiAppPerformanceSettings settings = new() - { - EnableThrottledRendering = false, - FocusedFps = 60.0, - UnfocusedFps = 15.0, - IdleFps = 5.0, - NotVisibleFps = 1.0, - EnableIdleDetection = false, - IdleTimeoutSeconds = 60.0 - }; - - Assert.IsFalse(settings.EnableThrottledRendering); - Assert.AreEqual(60.0, settings.FocusedFps); - Assert.AreEqual(15.0, settings.UnfocusedFps); - Assert.AreEqual(5.0, settings.IdleFps); - Assert.AreEqual(1.0, settings.NotVisibleFps); - Assert.IsFalse(settings.EnableIdleDetection); - Assert.AreEqual(60.0, settings.IdleTimeoutSeconds); - } - - [TestMethod] - public void ImGuiAppPerformanceSettings_IsPublicClass() - { - Type settingsType = typeof(ImGuiAppPerformanceSettings); - Assert.IsTrue(settingsType.IsClass); - Assert.IsTrue(settingsType.IsPublic); - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/ImGuiAppTests.cs b/tests/ImGui.App.Tests/ImGuiAppTests.cs deleted file mode 100644 index 857e89b..0000000 --- a/tests/ImGui.App.Tests/ImGuiAppTests.cs +++ /dev/null @@ -1,516 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -[assembly: DoNotParallelize] - -namespace ktsu.ImGui.App.Tests; - -using System.Numerics; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using Moq; -using Silk.NET.Core.Contexts; -using Silk.NET.Maths; -using Silk.NET.Windowing; -using ktsu.Semantics.Strings; -using ktsu.Semantics.Paths; - -[TestClass] -public sealed class ImGuiAppTests : IDisposable -{ - private Mock? _mockWindow; - private Mock? _mockMonitor; - private TestGL? _testGL; - private MockGL? _mockGL; - private Mock? _mockContext; - private TestOpenGLProvider? _glProvider; - - [TestInitialize] - public void Setup() - { - ResetState(); - _mockWindow = new Mock(); - _mockMonitor = new Mock(); - _testGL = new TestGL(); - _mockGL = new MockGL(_testGL); - _mockContext = new Mock(); - _glProvider = new TestOpenGLProvider(_mockGL); - - // Setup default window properties - _mockWindow.Setup(w => w.Size).Returns(new Vector2D(1280, 720)); - _mockWindow.Setup(w => w.Position).Returns(new Vector2D(0, 0)); - _mockWindow.Setup(w => w.Monitor).Returns(_mockMonitor.Object); - _mockWindow.Setup(w => w.GLContext).Returns(_mockContext.Object); - - // Setup monitor bounds - Rectangle bounds = new(0, 0, 1920, 1080); - _mockMonitor.Setup(m => m.Bounds).Returns(bounds); - } - - [TestCleanup] - public void Cleanup() - { - ResetState(); - _glProvider?.Dispose(); - _mockGL?.Dispose(); - _testGL?.Dispose(); - } - - public void Dispose() - { - Cleanup(); - } - - private static void ResetState() - { - ImGuiApp.Reset(); - } - - [TestMethod] - public void EmsToPx_WithValidInput_ReturnsCorrectPixels() - { - const float ems = 1.5f; - int expected = (int)(ems * FontAppearance.DefaultFontPointSize); - int actual = ImGuiApp.EmsToPx(ems); - Assert.AreEqual(expected, actual); - } - - [TestMethod] - public void PtsToPx_WithValidInput_ReturnsCorrectPixels() - { - const float pts = 12.0f; - float expected = pts; - int actual = ImGuiApp.PtsToPx((int)pts); - Assert.AreEqual(expected, actual); - } - - [TestMethod] - public void ImGuiAppWindowState_DefaultValues_AreCorrect() - { - ImGuiAppWindowState state = new(); - Assert.AreEqual(new Vector2(1280, 720), state.Size); - Assert.AreEqual(new Vector2(-short.MinValue, -short.MinValue), state.Pos); - Assert.AreEqual(WindowState.Normal, state.LayoutState); - } - - [TestMethod] - public void ImGuiAppConfig_DefaultValues_AreCorrect() - { - ImGuiAppConfig config = new(); - Assert.AreEqual("ImGuiApp", config.Title); - Assert.AreEqual(string.Empty, config.IconPath); - Assert.IsNotNull(config.InitialWindowState); - Assert.IsNotNull(config.OnStart); - Assert.IsNotNull(config.OnUpdate); - Assert.IsNotNull(config.OnRender); - Assert.IsNotNull(config.OnAppMenu); - Assert.IsNotNull(config.OnMoveOrResize); - Assert.IsNotNull(config.Fonts); - Assert.IsNotNull(config.PerformanceSettings); - } - - [TestMethod] - public void Start_WithNullConfig_ThrowsArgumentNullException() - { - Assert.ThrowsExactly(() => ImGuiApp.Start(null!)); - } - - [TestMethod] - public void Start_WithInvalidIconPath_ThrowsFileNotFoundException() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(iconPath: "nonexistent.png"); - Assert.ThrowsExactly(() => ImGuiApp.Start(config)); - } - - [TestMethod] - public void Stop_WhenNotRunning_ThrowsInvalidOperationException() - { - Assert.ThrowsExactly(ImGuiApp.Stop); - } - - [TestMethod] - public void EnsureWindowPositionIsValid_WithInvalidPosition_MovesToValidPosition() - { - // Reset state to ensure clean test environment - ResetState(); - - // Set up window field using direct access to internal member - Mock mockWindow = new(); - Mock mockMonitor = new(); - - // Set up monitor bounds - Rectangle monitorBounds = new(0, 0, 1920, 1080); - mockMonitor.Setup(m => m.Bounds).Returns(monitorBounds); - - // Set up window in an invalid position (off screen) - Vector2D windowSize = new(800, 600); - Vector2D offScreenPosition = new(-1000, -1000); - mockWindow.Setup(w => w.Size).Returns(windowSize); - mockWindow.Setup(w => w.Position).Returns(offScreenPosition); - mockWindow.Setup(w => w.Monitor).Returns(mockMonitor.Object); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - - // Allow position and size to be set - Vector2D finalPosition = offScreenPosition; - Vector2D finalSize = windowSize; - mockWindow.SetupSet(w => w.Position = It.IsAny>()) - .Callback>(pos => finalPosition = pos); - mockWindow.SetupSet(w => w.Size = It.IsAny>()) - .Callback>(size => finalSize = size); - mockWindow.SetupSet(w => w.WindowState = It.IsAny()); - - // Set the mock window directly using internal field - ImGuiApp.window = mockWindow.Object; - - // Call EnsureWindowPositionIsValid directly using internal method - ImGuiApp.EnsureWindowPositionIsValid(); - - // Verify the window was moved to a valid position - Assert.IsTrue(monitorBounds.Contains(finalPosition), - "Window position should be within monitor bounds"); - - // Verify the window size was preserved (improvement from new logic) - Assert.AreEqual(windowSize, finalSize, "Window size should be preserved when it fits"); - } - - [TestMethod] - public void EnsureWindowPositionIsValid_WithPerformanceOptimization_SkipsUnnecessaryChecks() - { - // Reset state to ensure clean test environment - ResetState(); - - Mock mockWindow = new(); - Mock mockMonitor = new(); - - Rectangle monitorBounds = new(0, 0, 1920, 1080); - mockMonitor.Setup(m => m.Bounds).Returns(monitorBounds); - - Vector2D validPosition = new(100, 100); - Vector2D validSize = new(800, 600); - mockWindow.Setup(w => w.Size).Returns(validSize); - mockWindow.Setup(w => w.Position).Returns(validPosition); - mockWindow.Setup(w => w.Monitor).Returns(mockMonitor.Object); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - - ImGuiApp.window = mockWindow.Object; - - // First call should perform validation - ImGuiApp.EnsureWindowPositionIsValid(); - int boundsCallsAfterFirst = mockMonitor.Invocations.Count; - - // Second call with same position/size should skip validation (performance optimization) - ImGuiApp.EnsureWindowPositionIsValid(); - int boundsCallsAfterSecond = mockMonitor.Invocations.Count; - - // Should have made no additional calls on second invocation due to caching - Assert.AreEqual(boundsCallsAfterFirst, boundsCallsAfterSecond, - "Second call should skip validation due to performance optimization"); - } - - [TestMethod] - public void EnsureWindowPositionIsValid_WithPartiallyVisibleWindow_RelocatesWhenInsufficientlyVisible() - { - // Reset state to ensure clean test environment - ResetState(); - - Mock mockWindow = new(); - Mock mockMonitor = new(); - - Rectangle monitorBounds = new(0, 0, 1920, 1080); - mockMonitor.Setup(m => m.Bounds).Returns(monitorBounds); - - // Window with only small corner visible (less than 25% visibility requirement) - Vector2D windowSize = new(800, 600); - Vector2D barelyVisiblePosition = new(1870, 1030); // Only 50x50 pixels visible - mockWindow.Setup(w => w.Size).Returns(windowSize); - mockWindow.Setup(w => w.Position).Returns(barelyVisiblePosition); - mockWindow.Setup(w => w.Monitor).Returns(mockMonitor.Object); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - - Vector2D finalPosition = barelyVisiblePosition; - mockWindow.SetupSet(w => w.Position = It.IsAny>()) - .Callback>(pos => finalPosition = pos); - mockWindow.SetupSet(w => w.Size = It.IsAny>()); - mockWindow.SetupSet(w => w.WindowState = It.IsAny()); - - ImGuiApp.window = mockWindow.Object; - ImGuiApp.EnsureWindowPositionIsValid(); - - // Window should be relocated since it's insufficiently visible - Assert.AreNotEqual(barelyVisiblePosition, finalPosition, - "Window should be relocated when insufficiently visible"); - Assert.IsTrue(monitorBounds.Contains(finalPosition), - "Relocated window should be fully within monitor bounds"); - } - - [TestMethod] - public void EnsureWindowPositionIsValid_WithSufficientlyVisibleWindow_LeavesWindowAlone() - { - // Reset state to ensure clean test environment - ResetState(); - - Mock mockWindow = new(); - Mock mockMonitor = new(); - - Rectangle monitorBounds = new(0, 0, 1920, 1080); - mockMonitor.Setup(m => m.Bounds).Returns(monitorBounds); - - // Window with significant visibility (more than 25%) - // Window 800x600 = 480,000 pixels total - // Visible portion: 400x300 = 120,000 pixels (25% exactly) - Vector2D windowSize = new(800, 600); - Vector2D partiallyVisiblePosition = new(1520, 780); // 400x300 pixels visible - mockWindow.Setup(w => w.Size).Returns(windowSize); - mockWindow.Setup(w => w.Position).Returns(partiallyVisiblePosition); - mockWindow.Setup(w => w.Monitor).Returns(mockMonitor.Object); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - - mockWindow.SetupSet(w => w.Position = It.IsAny>()); - - ImGuiApp.window = mockWindow.Object; - ImGuiApp.EnsureWindowPositionIsValid(); - - // Window position should not be changed since it has sufficient visibility - mockWindow.VerifySet(w => w.Position = It.IsAny>(), Times.Never, - "Window should not be moved when sufficiently visible"); - } - - [TestMethod] - public void EnsureWindowPositionIsValid_WithOversizedWindow_FitsToMonitor() - { - // Reset state to ensure clean test environment - ResetState(); - - Mock mockWindow = new(); - Mock mockMonitor = new(); - - // Small monitor - Rectangle smallMonitorBounds = new(0, 0, 1024, 768); - mockMonitor.Setup(m => m.Bounds).Returns(smallMonitorBounds); - - // Oversized window completely off-screen - Vector2D oversizedSize = new(2000, 1500); - Vector2D offScreenPosition = new(-2500, -2000); // Completely off-screen - mockWindow.Setup(w => w.Size).Returns(oversizedSize); - mockWindow.Setup(w => w.Position).Returns(offScreenPosition); - mockWindow.Setup(w => w.Monitor).Returns(mockMonitor.Object); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - - Vector2D finalSize = oversizedSize; - mockWindow.SetupSet(w => w.Position = It.IsAny>()); - mockWindow.SetupSet(w => w.Size = It.IsAny>()) - .Callback>(size => finalSize = size); - mockWindow.SetupSet(w => w.WindowState = It.IsAny()); - - ImGuiApp.window = mockWindow.Object; - ImGuiApp.EnsureWindowPositionIsValid(); - - // Debug: Check if window was relocated at all - mockWindow.VerifySet(w => w.Position = It.IsAny>(), Times.AtLeastOnce, - "Window should have been relocated when completely off-screen"); - - // Window should be resized to fit monitor (with 100px margin) - Assert.IsTrue(finalSize.X <= smallMonitorBounds.Size.X - 100, - $"Window width {finalSize.X} should be <= {smallMonitorBounds.Size.X - 100} to fit monitor"); - Assert.IsTrue(finalSize.Y <= smallMonitorBounds.Size.Y - 100, - $"Window height {finalSize.Y} should be <= {smallMonitorBounds.Size.Y - 100} to fit monitor"); - Assert.IsTrue(finalSize.X >= 640 && finalSize.Y >= 480, - $"Window size {finalSize} should maintain minimum size of 640x480"); - } - - [TestMethod] - public void ForceWindowPositionValidation_ForcesNextValidation() - { - // Reset state to ensure clean test environment - ResetState(); - - Mock mockWindow = new(); - Mock mockMonitor = new(); - - Rectangle monitorBounds = new(0, 0, 1920, 1080); - mockMonitor.Setup(m => m.Bounds).Returns(monitorBounds); - - Vector2D validPosition = new(100, 100); - Vector2D validSize = new(800, 600); - mockWindow.Setup(w => w.Size).Returns(validSize); - mockWindow.Setup(w => w.Position).Returns(validPosition); - mockWindow.Setup(w => w.Monitor).Returns(mockMonitor.Object); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - - ImGuiApp.window = mockWindow.Object; - - // First validation - ImGuiApp.EnsureWindowPositionIsValid(); - int callsAfterFirst = mockMonitor.Invocations.Count; - - // Force validation should make next call perform validation even with same position - ImGuiApp.ForceWindowPositionValidation(); - ImGuiApp.EnsureWindowPositionIsValid(); - int callsAfterForced = mockMonitor.Invocations.Count; - - // Should have made additional calls after forcing validation - Assert.IsTrue(callsAfterForced > callsAfterFirst, - "Forced validation should cause additional monitor access"); - } - - [TestMethod] - public void OpenGLProvider_GetGL_ReturnsSameInstance() - { - // Setup test GL provider - using TestGL testGL = new(); - using MockGL mockGL = new(testGL); - using TestOpenGLProvider provider = new(mockGL); - - // Get GL instances - ImGuiController.IGL gl1 = provider.GetGL(); - ImGuiController.IGL gl2 = provider.GetGL(); - - // Verify same instance is returned - Assert.AreSame(gl1, gl2, "OpenGLProvider should return the same GL instance on subsequent calls"); - } - - [TestMethod] - public void DeleteTexture_WithNullGL_ThrowsInvalidOperationException() - { - // Reset state to ensure clean test environment - ResetState(); - - // Set up a basic invoker that executes actions immediately using direct access - ImGuiApp.Invoker = new Invoker.Invoker(); - - // Now test the DeleteTexture method - Assert.ThrowsExactly(() => ImGuiApp.DeleteTexture(1)); - } - - [TestMethod] - public void GetOrLoadTexture_WithInvalidPath_ThrowsArgumentException() - { - AbsoluteFilePath invalidPath = new(); - Assert.ThrowsExactly(() => ImGuiApp.GetOrLoadTexture(invalidPath)); - } - - [TestMethod] - public void TextureReloading_AfterDeletion_CreatesNewTexture() - { - // Reset state to ensure clean test environment - ResetState(); - - // Set up a path for testing - use a proper absolute path format - AbsoluteFilePath mockTexturePath = Path.GetFullPath("test_texture.png").As(); - - // We need to initialize minimal parts of ImGuiApp for the test - ImGuiApp.Invoker = new Invoker.Invoker(); - - // We'll test using the public API (TryGetTexture) rather than direct access - // First, verify there's no texture initially - bool initialTextureExists = ImGuiApp.TryGetTexture(mockTexturePath, out _); - Assert.IsFalse(initialTextureExists, "Should not have any textures initially"); - - // Manually add a texture through direct access to internal property - System.Collections.Concurrent.ConcurrentDictionary texturesDict = ImGuiApp.Textures; - Assert.IsNotNull(texturesDict, "Textures dictionary should not be null"); - - // First texture - ImGuiAppTextureInfo firstTextureInfo = new() - { - Path = mockTexturePath, - TextureId = 1001, - Width = 100, - Height = 100 - }; - - // Add the texture directly to the dictionary - texturesDict.TryAdd(mockTexturePath, firstTextureInfo); - - // Verify it can be accessed via the public API - bool textureExists = ImGuiApp.TryGetTexture(mockTexturePath, out ImGuiAppTextureInfo? retrievedTexture); - Assert.IsTrue(textureExists, "Texture should exist after adding"); - Assert.IsNotNull(retrievedTexture, "Retrieved texture should not be null"); - Assert.AreEqual(1001u, retrievedTexture!.TextureId, "Texture ID should match"); - - // Remove the texture to simulate deletion - texturesDict.TryRemove(mockTexturePath, out _); - - // Verify it's removed - textureExists = ImGuiApp.TryGetTexture(mockTexturePath, out _); - Assert.IsFalse(textureExists, "Texture should be removed after deletion"); - - // Create a second texture - ImGuiAppTextureInfo secondTextureInfo = new() - { - Path = mockTexturePath, - TextureId = 1002, - Width = 100, - Height = 100 - }; - - // Add the second texture to the dictionary - texturesDict.TryAdd(mockTexturePath, secondTextureInfo); - - // Verify the newly loaded texture - textureExists = ImGuiApp.TryGetTexture(mockTexturePath, out ImGuiAppTextureInfo? reloadedTexture); - Assert.IsTrue(textureExists, "Texture should exist after reloading"); - Assert.IsNotNull(reloadedTexture, "Reloaded texture should not be null"); - Assert.AreEqual(1002u, reloadedTexture!.TextureId, "New texture ID should match"); - Assert.AreNotEqual(firstTextureInfo.TextureId, reloadedTexture.TextureId, "Reloaded texture should have a different ID"); - } - - [TestMethod] - public void PerformanceSettings_DefaultValues_AreCorrect() - { - // Arrange & Act - ImGuiAppPerformanceSettings settings = new(); - - // Assert - Assert.IsTrue(settings.EnableThrottledRendering); - Assert.AreEqual(30.0, settings.FocusedFps); - Assert.AreEqual(5.0, settings.UnfocusedFps); - Assert.AreEqual(10.0, settings.IdleFps); - Assert.AreEqual(2.0, settings.NotVisibleFps); - Assert.IsTrue(settings.EnableIdleDetection); - Assert.AreEqual(30.0, settings.IdleTimeoutSeconds); - } - - [TestMethod] - public void Reset_ResetsPerformanceFields_Correctly() - { - // Arrange - Simulate some state changes that would occur during normal operation - // Note: We can't directly set IsIdle since it has a private setter, but we can verify it's reset - // We also can't directly access lastInputTime, but we can verify the Reset behavior - - // Act - Reset the application state - ImGuiApp.Reset(); - - // Assert - Verify that performance-related fields are reset to their default values - Assert.IsFalse(ImGuiApp.IsIdle, "IsIdle should be reset to false"); - Assert.IsTrue(ImGuiApp.IsFocused, "IsFocused should be reset to true"); - - // Note: lastInputTime is private so we can't directly test it, but the Reset() method - // should set it to DateTime.UtcNow, which will be tested implicitly through the idle detection logic - } - - [TestMethod] - public void Reset_PreventesStatePollutionBetweenTests() - { - // Arrange - First call Reset to ensure clean state - ImGuiApp.Reset(); - - // Verify initial clean state - Assert.IsTrue(ImGuiApp.IsFocused, "IsFocused should start as true"); - Assert.IsFalse(ImGuiApp.IsIdle, "IsIdle should start as false"); - - // Act - Simulate some state changes that could happen during a test - // We can call OnUserInput to update lastInputTime - ImGuiApp.OnUserInput(); - - // Call Reset again to simulate what happens between test runs - ImGuiApp.Reset(); - - // Assert - Verify that Reset properly restored the default state - Assert.IsTrue(ImGuiApp.IsFocused, "IsFocused should be reset to true"); - Assert.IsFalse(ImGuiApp.IsIdle, "IsIdle should be reset to false"); - - // The lastInputTime should be reset to DateTime.UtcNow (current time) - // We can't test this directly, but the behavior should be consistent - } -} diff --git a/tests/ImGui.App.Tests/ImGuiAppWindowManagementTests.cs b/tests/ImGui.App.Tests/ImGuiAppWindowManagementTests.cs deleted file mode 100644 index 59f9489..0000000 --- a/tests/ImGui.App.Tests/ImGuiAppWindowManagementTests.cs +++ /dev/null @@ -1,620 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using System.Numerics; - -using Microsoft.VisualStudio.TestTools.UnitTesting; -using Moq; -using Silk.NET.Windowing; -using ktsu.Semantics.Paths; - -/// -/// Tests for ImGuiApp window management functionality including initialization, configuration validation, and event handling. -/// -[TestClass] -public sealed class ImGuiAppWindowManagementTests -{ - [TestInitialize] - public void Setup() - { - ImGuiApp.Reset(); - } - - [TestCleanup] - public void Cleanup() - { - ImGuiApp.Reset(); - } - - #region ValidateConfig Tests - - [TestMethod] - public void ValidateConfig_WithValidConfig_DoesNotThrow() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(); - - try - { - ImGuiApp.ValidateConfig(config); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void AdjustConfigForStartup_WithMinimizedState_ConvertsToNormal() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(); - config.InitialWindowState.LayoutState = WindowState.Minimized; - - ImGuiApp.AdjustConfigForStartup(config); - - Assert.AreEqual(WindowState.Normal, config.InitialWindowState.LayoutState); - } - - [TestMethod] - public void ValidateConfig_WithNonExistentIconPath_ThrowsFileNotFoundException() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(iconPath: "nonexistent_icon.png"); - - Assert.ThrowsExactly(() => ImGuiApp.ValidateConfig(config)); - } - - [TestMethod] - public void ValidateConfig_WithEmptyIconPath_DoesNotThrow() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(iconPath: ""); - - try - { - ImGuiApp.ValidateConfig(config); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void ValidateConfig_WithNullFontKey_ThrowsArgumentNullException() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(); - - // This will throw ArgumentNullException when trying to add null key to dictionary - Assert.ThrowsExactly(() => config.Fonts[null!] = [1, 2, 3]); - } - - [TestMethod] - public void ValidateConfig_WithEmptyFontKey_ThrowsArgumentException() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(); - config.Fonts[""] = [1, 2, 3]; - - Assert.ThrowsExactly(() => ImGuiApp.ValidateConfig(config)); - } - - [TestMethod] - public void ValidateConfig_WithNullFontData_ThrowsArgumentException() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(); - config.Fonts["TestFont"] = null!; - - Assert.ThrowsExactly(() => ImGuiApp.ValidateConfig(config)); - } - - [TestMethod] - public void ValidateConfig_WithEmptyDefaultFonts_ThrowsArgumentException() - { - // Create a config with empty default fonts - ImGuiAppConfig config = new() - { - Title = "Test", - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(800, 600), - Pos = new Vector2(100, 100), - LayoutState = WindowState.Normal - }, - DefaultFonts = [] // Empty default fonts should cause validation error - }; - - Assert.ThrowsExactly(() => ImGuiApp.ValidateConfig(config)); - } - - #endregion - - #region InitializeWindow Tests - - [TestMethod] - public void InitializeWindow_InTestMode_UsesTestWindow() - { - Mock mockWindow = TestHelpers.CreateMockWindow(); - ImGuiAppConfig config = new() - { - Title = "Test", - TestMode = true, - TestWindow = mockWindow.Object, - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(800, 600), - Pos = new Vector2(100, 100), - LayoutState = WindowState.Normal - } - }; - - ImGuiApp.InitializeWindow(config); - - Assert.AreSame(mockWindow.Object, ImGuiApp.window); - } - - [TestMethod] - public void InitializeWindow_InTestModeWithNullTestWindow_ThrowsInvalidOperationException() - { - ImGuiAppConfig config = new() - { - Title = "Test", - TestMode = true, - TestWindow = null, - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(800, 600), - Pos = new Vector2(100, 100), - LayoutState = WindowState.Normal - } - }; - - Assert.ThrowsExactly(() => ImGuiApp.InitializeWindow(config)); - } - - [TestMethod] - public void InitializeWindow_WithValidConfig_DoesNotThrow() - { - ImGuiAppConfig config = TestHelpers.CreateTestConfig(); - - try - { - ImGuiApp.InitializeWindow(config); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - #endregion - - #region Window State Management Tests - - [TestMethod] - public void WindowState_WithNullWindow_ReturnsDefaultState() - { - // Ensure window is null - ImGuiApp.window = null; - - ImGuiAppWindowState state = ImGuiApp.WindowState; - - Assert.IsNotNull(state); - Assert.AreEqual(WindowState.Normal, state.LayoutState); - } - - [TestMethod] - public void CaptureWindowNormalState_WithNormalWindow_UpdatesLastNormalWindowState() - { - Mock mockWindow = TestHelpers.CreateMockWindow(); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - mockWindow.Setup(w => w.Size).Returns(new Silk.NET.Maths.Vector2D(1024, 768)); - mockWindow.Setup(w => w.Position).Returns(new Silk.NET.Maths.Vector2D(200, 150)); - - ImGuiApp.window = mockWindow.Object; - - ImGuiApp.CaptureWindowNormalState(); - - Assert.AreEqual(new Vector2(1024, 768), ImGuiApp.LastNormalWindowState.Size); - Assert.AreEqual(new Vector2(200, 150), ImGuiApp.LastNormalWindowState.Pos); - Assert.AreEqual(WindowState.Normal, ImGuiApp.LastNormalWindowState.LayoutState); - } - - [TestMethod] - public void CaptureWindowNormalState_WithMaximizedWindow_DoesNotUpdateLastNormalWindowState() - { - Mock mockWindow = TestHelpers.CreateMockWindow(); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Maximized); - - ImGuiApp.window = mockWindow.Object; - - Vector2 originalSize = ImGuiApp.LastNormalWindowState.Size; - Vector2 originalPos = ImGuiApp.LastNormalWindowState.Pos; - - ImGuiApp.CaptureWindowNormalState(); - - // Should not change when window is maximized - Assert.AreEqual(originalSize, ImGuiApp.LastNormalWindowState.Size); - Assert.AreEqual(originalPos, ImGuiApp.LastNormalWindowState.Pos); - } - - #endregion - - #region Window Position Validation Tests - - [TestMethod] - public void EnsureWindowPositionIsValid_WithNullWindow_DoesNotThrow() - { - ImGuiApp.window = null; - - try - { - ImGuiApp.EnsureWindowPositionIsValid(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void EnsureWindowPositionIsValid_WithNullMonitor_DoesNotThrow() - { - Mock mockWindow = TestHelpers.CreateMockWindow(); - mockWindow.Setup(w => w.Monitor).Returns((IMonitor?)null); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - - ImGuiApp.window = mockWindow.Object; - - try - { - ImGuiApp.EnsureWindowPositionIsValid(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void EnsureWindowPositionIsValid_WithMinimizedWindow_DoesNotThrow() - { - Mock mockWindow = TestHelpers.CreateMockWindow(); - Mock mockMonitor = new(); - mockWindow.Setup(w => w.Monitor).Returns(mockMonitor.Object); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Minimized); - - ImGuiApp.window = mockWindow.Object; - - try - { - ImGuiApp.EnsureWindowPositionIsValid(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - #endregion - - #region Performance Settings Tests - - [TestMethod] - public void UpdateWindowPerformance_WithThrottlingDisabled_DoesNotUpdateTargetFrameTime() - { - ImGuiAppConfig config = new() - { - Title = "Test", - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(800, 600), - Pos = new Vector2(100, 100), - LayoutState = WindowState.Normal - }, - PerformanceSettings = new ImGuiAppPerformanceSettings - { - EnableThrottledRendering = false - } - }; - ImGuiApp.Config = config; - - double originalTargetFrameTime = ImGuiApp.targetFrameTimeMs; - - ImGuiApp.UpdateWindowPerformance(); - - Assert.AreEqual(originalTargetFrameTime, ImGuiApp.targetFrameTimeMs); - } - - [TestMethod] - public void UpdateWindowPerformance_WithIdleDetectionDisabled_SetsIdleToFalse() - { - ImGuiAppConfig config = new() - { - Title = "Test", - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(800, 600), - Pos = new Vector2(100, 100), - LayoutState = WindowState.Normal - }, - PerformanceSettings = new ImGuiAppPerformanceSettings - { - EnableIdleDetection = false - } - }; - ImGuiApp.Config = config; - - ImGuiApp.UpdateWindowPerformance(); - - Assert.IsFalse(ImGuiApp.IsIdle); - } - - [TestMethod] - public void UpdateWindowPerformance_WithFocusedWindow_DoesNotThrow() - { - ImGuiAppConfig config = new() - { - Title = "Test", - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(800, 600), - Pos = new Vector2(100, 100), - LayoutState = WindowState.Normal - }, - PerformanceSettings = new ImGuiAppPerformanceSettings - { - FocusedFps = 60.0 - } - }; - ImGuiApp.Config = config; - - try - { - ImGuiApp.UpdateWindowPerformance(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void UpdateWindowPerformance_WithUnfocusedWindow_DoesNotThrow() - { - ImGuiAppConfig config = new() - { - Title = "Test", - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(800, 600), - Pos = new Vector2(100, 100), - LayoutState = WindowState.Normal - }, - PerformanceSettings = new ImGuiAppPerformanceSettings - { - UnfocusedFps = 10.0 - } - }; - ImGuiApp.Config = config; - - try - { - ImGuiApp.UpdateWindowPerformance(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - #endregion - - #region Window Icon Tests - - [TestMethod] - public void SetWindowIcon_WithNonExistentFile_ThrowsFileNotFoundException() - { - Assert.ThrowsExactly(() => ImGuiApp.SetWindowIcon("nonexistent_icon.png")); - } - - [TestMethod] - public void SetWindowIcon_WithEmptyPath_ThrowsArgumentException() - { - Assert.ThrowsExactly(() => ImGuiApp.SetWindowIcon("")); - } - - #endregion - - #region Texture Management Integration Tests - - [TestMethod] - public void UseImageBytes_WithNullImage_ThrowsArgumentNullException() - { - Assert.ThrowsExactly(() => ImGuiApp.UseImageBytes(null!, _ => { })); - } - - [TestMethod] - public void UseImageBytes_WithNullAction_ThrowsArgumentNullException() - { - using SixLabors.ImageSharp.Image image = new(100, 100); - Assert.ThrowsExactly(() => ImGuiApp.UseImageBytes(image, null!)); - } - - [TestMethod] - public void GetOrLoadTexture_WithInvalidPath_ThrowsArgumentException() - { - AbsoluteFilePath invalidPath = new(); - Assert.ThrowsExactly(() => ImGuiApp.GetOrLoadTexture(invalidPath)); - } - - #endregion - - #region Cleanup Tests - - [TestMethod] - public void CleanupPinnedFontData_DoesNotThrow() - { - try - { - ImGuiApp.CleanupPinnedFontData(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void CleanupController_DoesNotThrow() - { - try - { - ImGuiApp.CleanupController(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void CleanupInputContext_DoesNotThrow() - { - try - { - ImGuiApp.CleanupInputContext(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void CleanupOpenGL_DoesNotThrow() - { - try - { - ImGuiApp.CleanupOpenGL(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - #endregion - - #region Utility Method Tests - - [TestMethod] - public void EmsToPx_WithNullController_UsesDefaultFontSize() - { - ImGuiApp.controller = null; - - int result = ImGuiApp.EmsToPx(2.0f); - int expected = (int)(2.0f * FontAppearance.DefaultFontPointSize); - - Assert.AreEqual(expected, result); - } - - [TestMethod] - public void PtsToPx_WithScaleFactor_ReturnsScaledValue() - { - // Use reflection to set ScaleFactor - typeof(ImGuiApp).GetProperty("ScaleFactor")?.SetValue(null, 2.0f); - - int result = ImGuiApp.PtsToPx(12); - - Assert.AreEqual(24, result); - } - - [TestMethod] - public void CommonFontSizes_ContainsExpectedSizes() - { - int[] expectedSizes = [10, 12, 14, 16, 18, 20, 24, 32, 48]; - - CollectionAssert.AreEqual(expectedSizes, ImGuiApp.CommonFontSizes); - } - - #endregion - - #region Context Change Tests - - [TestMethod] - public void CheckAndHandleContextChange_WithNullGL_DoesNotThrow() - { - ImGuiApp.gl = null; - - try - { - ImGuiApp.CheckAndHandleContextChange(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void ReloadAllTextures_WithNullGL_DoesNotThrow() - { - ImGuiApp.gl = null; - - try - { - ImGuiApp.ReloadAllTextures(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void CleanupAllTextures_WithNullGL_DoesNotThrow() - { - ImGuiApp.gl = null; - - try - { - ImGuiApp.CleanupAllTextures(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/ImGuiControllerComponentTests.cs b/tests/ImGui.App.Tests/ImGuiControllerComponentTests.cs deleted file mode 100644 index bf1dd33..0000000 --- a/tests/ImGui.App.Tests/ImGuiControllerComponentTests.cs +++ /dev/null @@ -1,257 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using System; -using Hexa.NET.ImGui; -using ktsu.ImGui.App.ImGuiController; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using Moq; -using Silk.NET.Windowing; - -/// -/// Tests for ImGuiController components including font configuration, factories, and providers. -/// -[TestClass] -public class ImGuiControllerComponentTests -{ - #region ImGuiFontConfig Tests - - [TestMethod] - public void ImGuiFontConfig_Constructor_ValidParameters_InitializesCorrectly() - { - const string testPath = "test.ttf"; - const int testSize = 16; - - ImGuiFontConfig config = new(testPath, testSize); - - // These calls should hit the property getters - string actualPath = config.FontPath; - int actualSize = config.FontSize; - Func? actualGlyphRange = config.GetGlyphRange; - - Assert.AreEqual(testPath, actualPath); - Assert.AreEqual(testSize, actualSize); - Assert.IsNull(actualGlyphRange); - } - - [TestMethod] - public void ImGuiFontConfig_Constructor_WithGlyphRange_InitializesCorrectly() - { - const string testPath = "test.ttf"; - const int testSize = 16; - static IntPtr TestGlyphRange(ImGuiIOPtr io) => IntPtr.Zero; - - ImGuiFontConfig config = new(testPath, testSize, TestGlyphRange); - - Assert.AreEqual(testPath, config.FontPath); - Assert.AreEqual(testSize, config.FontSize); - Assert.IsNotNull(config.GetGlyphRange); - Assert.AreSame(TestGlyphRange, config.GetGlyphRange); - } - - [TestMethod] - public void ImGuiFontConfig_Constructor_ZeroFontSize_ThrowsException() - { - Assert.ThrowsExactly(() => new ImGuiFontConfig("test.ttf", 0)); - } - - [TestMethod] - public void ImGuiFontConfig_Constructor_NegativeFontSize_ThrowsException() - { - Assert.ThrowsExactly(() => new ImGuiFontConfig("test.ttf", -1)); - } - - [TestMethod] - public void ImGuiFontConfig_Constructor_NullFontPath_ThrowsException() - { - Assert.ThrowsExactly(() => new ImGuiFontConfig(null!, 16)); - } - - [TestMethod] - public void ImGuiFontConfig_Equals_SameValues_ReturnsTrue() - { - ImGuiFontConfig config1 = new("test.ttf", 16); - ImGuiFontConfig config2 = new("test.ttf", 16); - - Assert.IsTrue(config1.Equals(config2)); - Assert.IsTrue(config1 == config2); - Assert.IsFalse(config1 != config2); - } - - [TestMethod] - public void ImGuiFontConfig_Equals_DifferentValues_ReturnsFalse() - { - ImGuiFontConfig config1 = new("test1.ttf", 16); - ImGuiFontConfig config2 = new("test2.ttf", 16); - ImGuiFontConfig config3 = new("test1.ttf", 18); - - Assert.IsFalse(config1.Equals(config2)); - Assert.IsFalse(config1.Equals(config3)); - Assert.IsFalse(config1 == config2); - Assert.IsTrue(config1 != config2); - } - - [TestMethod] - public void ImGuiFontConfig_GetHashCode_SameValues_ReturnsSameHash() - { - ImGuiFontConfig config1 = new("test.ttf", 16); - ImGuiFontConfig config2 = new("test.ttf", 16); - - Assert.AreEqual(config1.GetHashCode(), config2.GetHashCode()); - } - - [TestMethod] - public void ImGuiFontConfig_Equals_WithObject_WorksCorrectly() - { - ImGuiFontConfig config1 = new("test.ttf", 16); - ImGuiFontConfig config2 = new("test.ttf", 16); - object config2AsObject = config2; - - Assert.IsTrue(config1.Equals(config2AsObject)); - Assert.IsFalse(config1.Equals("not a font config")); - Assert.IsFalse(config1.Equals(null)); - } - - [TestMethod] - public void ImGuiFontConfig_IsStruct() - { - Type configType = typeof(ImGuiFontConfig); - Assert.IsTrue(configType.IsValueType); - Assert.IsFalse(configType.IsClass); - } - - [TestMethod] - public void ImGuiFontConfig_ImplementsIEquatable() - { - Type configType = typeof(ImGuiFontConfig); - Type equatableType = typeof(IEquatable); - Assert.IsTrue(equatableType.IsAssignableFrom(configType)); - } - - #endregion - - #region WindowOpenGLFactory Tests - - [TestMethod] - public void WindowOpenGLFactory_Constructor_ValidWindow_InitializesCorrectly() - { - Mock mockWindow = new(); - WindowOpenGLFactory factory = new(mockWindow.Object); - - Assert.IsNotNull(factory); - } - - [TestMethod] - public void WindowOpenGLFactory_Constructor_NullWindow_ThrowsException() - { - Assert.ThrowsExactly(() => new WindowOpenGLFactory(null!)); - } - - [TestMethod] - public void WindowOpenGLFactory_ImplementsIOpenGLFactory() - { - Type factoryType = typeof(WindowOpenGLFactory); - Assert.IsTrue(typeof(IOpenGLFactory).IsAssignableFrom(factoryType)); - } - - #endregion - - #region OpenGLProvider Tests - - [TestMethod] - public void OpenGLProvider_Constructor_ValidFactory_InitializesCorrectly() - { - Mock mockFactory = new(); - using OpenGLProvider provider = new(mockFactory.Object); - - Assert.IsNotNull(provider); - } - - [TestMethod] - public void OpenGLProvider_Constructor_NullFactory_ThrowsException() - { - Assert.ThrowsExactly(() => new OpenGLProvider(null!)); - } - - [TestMethod] - public void OpenGLProvider_Dispose_CanBeCalledMultipleTimes() - { - try - { - Mock mockFactory = new(); - OpenGLProvider provider = new(mockFactory.Object); - - provider.Dispose(); - provider.Dispose(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void OpenGLProvider_GetGL_AfterDispose_ThrowsException() - { - Mock mockFactory = new(); - using OpenGLProvider provider = new(mockFactory.Object); - - provider.Dispose(); - Assert.ThrowsExactly(provider.GetGL); - } - - [TestMethod] - public void OpenGLProvider_ImplementsIDisposable() - { - Type providerType = typeof(OpenGLProvider); - Assert.IsTrue(typeof(IDisposable).IsAssignableFrom(providerType)); - } - - #endregion - - #region Texture and TextureCoordinate Tests - - [TestMethod] - public void TextureCoordinate_EnumValues_HaveCorrectMappings() - { - Assert.AreEqual(0, (int)TextureCoordinate.None); - Assert.AreEqual((int)Silk.NET.OpenGL.TextureParameterName.TextureWrapS, (int)TextureCoordinate.S); - Assert.AreEqual((int)Silk.NET.OpenGL.TextureParameterName.TextureWrapT, (int)TextureCoordinate.T); - Assert.AreEqual((int)Silk.NET.OpenGL.TextureParameterName.TextureWrapR, (int)TextureCoordinate.R); - } - - [TestMethod] - public void TextureCoordinate_AllEnumValues_AreDefined() - { - TextureCoordinate[] values = Enum.GetValues(); - - Assert.IsTrue(values.Length >= 4); - Assert.IsTrue(values.Contains(TextureCoordinate.None)); - Assert.IsTrue(values.Contains(TextureCoordinate.S)); - Assert.IsTrue(values.Contains(TextureCoordinate.T)); - Assert.IsTrue(values.Contains(TextureCoordinate.R)); - } - - [TestMethod] - public void TextureCoordinate_IsEnum() - { - Type coordType = typeof(TextureCoordinate); - Assert.IsTrue(coordType.IsEnum); - Assert.AreEqual(typeof(int), Enum.GetUnderlyingType(coordType)); - } - - [TestMethod] - public void Texture_Constants_HaveExpectedValues() - { - Assert.AreEqual((Silk.NET.OpenGL.SizedInternalFormat)Silk.NET.OpenGL.GLEnum.Srgb8Alpha8, Texture.Srgb8Alpha8); - Assert.AreEqual((Silk.NET.OpenGL.SizedInternalFormat)Silk.NET.OpenGL.GLEnum.Rgb32f, Texture.Rgb32F); - Assert.AreEqual((Silk.NET.OpenGL.GLEnum)0x84FF, Texture.MaxTextureMaxAnisotropy); - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/MockGL.cs b/tests/ImGui.App.Tests/MockGL.cs deleted file mode 100644 index 50727d8..0000000 --- a/tests/ImGui.App.Tests/MockGL.cs +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using ktsu.ImGui.App.ImGuiController; -using Silk.NET.Maths; -using Silk.NET.OpenGL; -using Color = System.Drawing.Color; - -/// -/// A mock GL implementation that delegates to TestGL. -/// -public sealed unsafe class MockGL(TestGL testGL) : IGL -{ - private readonly TestGL _testGL = testGL ?? throw new ArgumentNullException(nameof(testGL)); - private bool _disposed; - - private void ThrowIfDisposed() - { - ObjectDisposedException.ThrowIf(_disposed, this); - } - - public void GetInteger(GLEnum pname, out int data) - { - ThrowIfDisposed(); - _testGL.GetInteger(pname, out data); - } - - public float GetFloat(GLEnum pname) - { - ThrowIfDisposed(); - return _testGL.GetFloat(pname); - } - - public void Enable(GLEnum cap) - { - ThrowIfDisposed(); - _testGL.Enable(cap); - } - - public void Disable(GLEnum cap) - { - ThrowIfDisposed(); - _testGL.Disable(cap); - } - - public void BlendEquation(GLEnum mode) - { - ThrowIfDisposed(); - _testGL.BlendEquation(mode); - } - - public void BlendFuncSeparate(GLEnum srcRGB, GLEnum dstRGB, GLEnum srcAlpha, GLEnum dstAlpha) - { - ThrowIfDisposed(); - _testGL.BlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); - } - - public void Viewport(Vector2D size) - { - ThrowIfDisposed(); - _testGL.Viewport(size); - } - - public void ClearColor(Color color) - { - ThrowIfDisposed(); - _testGL.ClearColor(color); - } - - public void Clear(uint mask) - { - ThrowIfDisposed(); - _testGL.Clear(mask); - } - - public void BindTexture(GLEnum target, uint texture) - { - ThrowIfDisposed(); - _testGL.BindTexture(target, texture); - } - - public void DeleteTexture(uint texture) - { - ThrowIfDisposed(); - _testGL.DeleteTexture(texture); - } - - public uint GenTexture() - { - ThrowIfDisposed(); - return _testGL.GenTexture(); - } - - public void TexParameter(GLEnum target, GLEnum pname, int param) - { - ThrowIfDisposed(); - _testGL.TexParameter(target, pname, param); - } - - public void TexImage2D(GLEnum target, int level, int internalformat, uint width, uint height, int border, GLEnum format, GLEnum type, void* pixels) - { - ThrowIfDisposed(); - _testGL.TexImage2D(target, level, internalformat, width, height, border, format, type, pixels); - } - - public void Dispose() - { - if (!_disposed) - { - _testGL.Dispose(); - _disposed = true; - } - } -} diff --git a/tests/ImGui.App.Tests/PidFrameLimiterTests.cs b/tests/ImGui.App.Tests/PidFrameLimiterTests.cs deleted file mode 100644 index 7560f18..0000000 --- a/tests/ImGui.App.Tests/PidFrameLimiterTests.cs +++ /dev/null @@ -1,565 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using Microsoft.VisualStudio.TestTools.UnitTesting; - -using ktsu.ImGui.App; - -/// -/// Tests for PidFrameLimiter class covering frame rate limiting, PID controller logic, and auto-tuning functionality. -/// -[TestClass] -public sealed class PidFrameLimiterTests -{ - private PidFrameLimiter? _frameLimiter; - - [TestInitialize] - public void Setup() - { - _frameLimiter = new PidFrameLimiter(); - } - - [TestCleanup] - public void Cleanup() - { - _frameLimiter?.StopAutoTuning(); - } - - #region Constructor Tests - - [TestMethod] - public void Constructor_WithDefaultParameters_InitializesCorrectly() - { - PidFrameLimiter limiter = new(); - (double kp, double ki, double kd) = limiter.GetCurrentParameters(); - - Assert.AreEqual(1.8, kp, 0.001); - Assert.AreEqual(0.048, ki, 0.001); - Assert.AreEqual(0.237, kd, 0.001); - } - - [TestMethod] - public void Constructor_WithCustomParameters_InitializesCorrectly() - { - const double testKp = 2.0; - const double testKi = 0.1; - const double testKd = 0.3; - - PidFrameLimiter limiter = new(testKp, testKi, testKd); - (double kp, double ki, double kd) = limiter.GetCurrentParameters(); - - Assert.AreEqual(testKp, kp, 0.001); - Assert.AreEqual(testKi, ki, 0.001); - Assert.AreEqual(testKd, kd, 0.001); - } - - #endregion - - #region Basic Functionality Tests - - [TestMethod] - public void Reset_ClearsInternalState() - { - Assert.IsNotNull(_frameLimiter); - - // Simulate some frame limiting to build internal state - _frameLimiter.LimitFrameRate(33.33); // 30 FPS - Thread.Sleep(50); - _frameLimiter.LimitFrameRate(33.33); - - // Reset should clear the state - _frameLimiter.Reset(); - - // After reset, the limiter should behave as if newly created - string diagnosticInfo = _frameLimiter.GetDiagnosticInfo(); - Assert.IsNotNull(diagnosticInfo); - Assert.IsTrue(diagnosticInfo.Contains("Sleep: 0")); - } - - [TestMethod] - public void LimitFrameRate_WithValidTargetTime_DoesNotThrow() - { - Assert.IsNotNull(_frameLimiter); - - try - { - _frameLimiter.LimitFrameRate(16.67); // 60 FPS - _frameLimiter.LimitFrameRate(33.33); // 30 FPS - _frameLimiter.LimitFrameRate(100.0); // 10 FPS - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void LimitFrameRate_WithZeroTargetTime_HandlesGracefully() - { - Assert.IsNotNull(_frameLimiter); - - try - { - _frameLimiter.LimitFrameRate(0.0); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void LimitFrameRate_WithNegativeTargetTime_HandlesGracefully() - { - Assert.IsNotNull(_frameLimiter); - - try - { - _frameLimiter.LimitFrameRate(-10.0); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void GetDiagnosticInfo_ReturnsValidString() - { - Assert.IsNotNull(_frameLimiter); - - string diagnosticInfo = _frameLimiter.GetDiagnosticInfo(); - - Assert.IsNotNull(diagnosticInfo); - Assert.IsTrue(diagnosticInfo.Contains("PID State")); - Assert.IsTrue(diagnosticInfo.Contains("Sleep")); - Assert.IsTrue(diagnosticInfo.Contains("Error")); - Assert.IsTrue(diagnosticInfo.Contains("Frame Time")); - } - - #endregion - - #region Manual PID Parameter Tests - - [TestMethod] - public void SetManualPidParameters_DoesNotThrow() - { - Assert.IsNotNull(_frameLimiter); - - const double newKp = 1.5; - const double newKi = 0.08; - const double newKd = 0.2; - - try - { - _frameLimiter.SetManualPidParameters(newKp, newKi, newKd); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void SetManualPidParameters_StopsAutoTuning() - { - Assert.IsNotNull(_frameLimiter); - - _frameLimiter.StartAutoTuning(); - (bool isActive, _, _, _, _) = _frameLimiter.GetTuningStatus(); - Assert.IsTrue(isActive); - - _frameLimiter.SetManualPidParameters(1.0, 0.1, 0.2); - - (isActive, _, _, _, _) = _frameLimiter.GetTuningStatus(); - Assert.IsFalse(isActive); - } - - #endregion - - #region Auto-Tuning Tests - - [TestMethod] - public void StartAutoTuning_ActivatesTuning() - { - Assert.IsNotNull(_frameLimiter); - - _frameLimiter.StartAutoTuning(); - - (bool isActive, int currentStep, int totalSteps, double progress, _) = _frameLimiter.GetTuningStatus(); - - Assert.IsTrue(isActive); - Assert.IsTrue(currentStep > 0); - Assert.IsTrue(totalSteps > 0); - Assert.IsTrue(progress is >= 0.0 and <= 100.0); - } - - [TestMethod] - public void StopAutoTuning_DeactivatesTuning() - { - Assert.IsNotNull(_frameLimiter); - - _frameLimiter.StartAutoTuning(); - _frameLimiter.StopAutoTuning(); - - (bool isActive, _, _, _, _) = _frameLimiter.GetTuningStatus(); - - Assert.IsFalse(isActive); - } - - [TestMethod] - public void GetTuningStatusDetailed_ReturnsValidPhaseInfo() - { - Assert.IsNotNull(_frameLimiter); - - _frameLimiter.StartAutoTuning(); - - (bool isActive, int currentStep, int totalSteps, double progress, _, string phase) = _frameLimiter.GetTuningStatusDetailed(); - - Assert.IsTrue(isActive); - Assert.IsTrue(currentStep > 0); - Assert.IsTrue(totalSteps > 0); - Assert.IsTrue(progress is >= 0.0 and <= 100.0); - Assert.IsNotNull(phase); - Assert.IsTrue(phase.Contains("Tuning")); - } - - [TestMethod] - public void GetTuningStatus_WhenNotTuning_ReturnsInactiveStatus() - { - Assert.IsNotNull(_frameLimiter); - - (bool isActive, int currentStep, int totalSteps, double progress, _) = _frameLimiter.GetTuningStatus(); - - Assert.IsFalse(isActive); - Assert.AreEqual(0, currentStep); - Assert.AreEqual(0, totalSteps); - Assert.AreEqual(0.0, progress); - } - - #endregion - - #region Frame Time History Tests - - [TestMethod] - public void UpdateFrameTimeHistory_MaintainsCorrectHistorySize() - { - Assert.IsNotNull(_frameLimiter); - - // Add more frame times than the history size - for (int i = 0; i < 20; i++) - { - _frameLimiter.UpdateFrameTimeHistory(16.67); - } - - // The internal queue should not exceed FrameHistorySize (10) - double smoothedTime = _frameLimiter.GetSmoothedFrameTime(); - Assert.AreEqual(16.67, smoothedTime, 0.1); - } - - [TestMethod] - public void GetSmoothedFrameTime_WithNoHistory_ReturnsZero() - { - Assert.IsNotNull(_frameLimiter); - - double smoothedTime = _frameLimiter.GetSmoothedFrameTime(); - - Assert.AreEqual(0.0, smoothedTime); - } - - [TestMethod] - public void GetSmoothedFrameTime_WithHistory_ReturnsAverage() - { - Assert.IsNotNull(_frameLimiter); - - _frameLimiter.UpdateFrameTimeHistory(10.0); - _frameLimiter.UpdateFrameTimeHistory(20.0); - _frameLimiter.UpdateFrameTimeHistory(30.0); - - double smoothedTime = _frameLimiter.GetSmoothedFrameTime(); - - Assert.AreEqual(20.0, smoothedTime, 0.1); - } - - #endregion - - #region High-Precision Sleep Tests - - [TestMethod] - public void ApplyHighPrecisionSleep_WithZeroTime_ReturnsImmediately() - { - DateTime start = DateTime.UtcNow; - PidFrameLimiter.ApplyHighPrecisionSleep(0.0); - DateTime end = DateTime.UtcNow; - - double elapsedMs = (end - start).TotalMilliseconds; - Assert.IsTrue(elapsedMs < 5.0, $"Expected immediate return, but took {elapsedMs}ms"); - } - - [TestMethod] - public void ApplyHighPrecisionSleep_WithNegativeTime_ReturnsImmediately() - { - DateTime start = DateTime.UtcNow; - PidFrameLimiter.ApplyHighPrecisionSleep(-10.0); - DateTime end = DateTime.UtcNow; - - double elapsedMs = (end - start).TotalMilliseconds; - Assert.IsTrue(elapsedMs < 5.0, $"Expected immediate return, but took {elapsedMs}ms"); - } - - [TestMethod] - public void ApplyHighPrecisionSleep_WithSmallTime_SleepsApproximately() - { - const double targetSleepMs = 2.0; - DateTime start = DateTime.UtcNow; - PidFrameLimiter.ApplyHighPrecisionSleep(targetSleepMs); - DateTime end = DateTime.UtcNow; - - double elapsedMs = (end - start).TotalMilliseconds; - - // Allow for some tolerance in timing due to OS scheduling - Assert.IsTrue(elapsedMs >= targetSleepMs * 0.8, $"Sleep was too short: {elapsedMs}ms vs target {targetSleepMs}ms"); - Assert.IsTrue(elapsedMs <= targetSleepMs * 2.0, $"Sleep was too long: {elapsedMs}ms vs target {targetSleepMs}ms"); - } - - #endregion - - #region Tuning Algorithm Tests - - [TestMethod] - public void CalculateStability_WithEmptyList_ReturnsZero() - { - List emptyErrors = []; - double stability = PidFrameLimiter.CalculateStability(emptyErrors); - Assert.AreEqual(0.0, stability); - } - - [TestMethod] - public void CalculateStability_WithSingleValue_ReturnsZero() - { - List singleError = [5.0]; - double stability = PidFrameLimiter.CalculateStability(singleError); - Assert.AreEqual(0.0, stability); - } - - [TestMethod] - public void CalculateStability_WithVariedValues_ReturnsPositiveStability() - { - List variedErrors = [1.0, 5.0, 3.0, 7.0, 2.0]; - double stability = PidFrameLimiter.CalculateStability(variedErrors); - Assert.IsTrue(stability > 0.0); - } - - [TestMethod] - public void CalculateStability_WithIdenticalValues_ReturnsZero() - { - List identicalErrors = [3.0, 3.0, 3.0, 3.0]; - double stability = PidFrameLimiter.CalculateStability(identicalErrors); - Assert.AreEqual(0.0, stability, 0.001); - } - - [TestMethod] - public void CalculateScore_WithLowErrors_ReturnsHighScore() - { - double score = PidFrameLimiter.CalculateScore(0.1, 0.2, 0.05); - Assert.IsTrue(score > 0.5, $"Expected high score for low errors, got {score}"); - } - - [TestMethod] - public void CalculateScore_WithHighErrors_ReturnsLowScore() - { - double score = PidFrameLimiter.CalculateScore(10.0, 20.0, 5.0); - Assert.IsTrue(score < 0.1, $"Expected low score for high errors, got {score}"); - } - - [TestMethod] - public void CalculateScore_IsAlwaysPositive() - { - double score1 = PidFrameLimiter.CalculateScore(0.0, 0.0, 0.0); - double score2 = PidFrameLimiter.CalculateScore(100.0, 200.0, 50.0); - - Assert.IsTrue(score1 > 0.0); - Assert.IsTrue(score2 > 0.0); - } - - #endregion - - #region Integration Tests - - [TestMethod] - public void FrameLimiter_ConsecutiveCalls_MaintainsStableState() - { - Assert.IsNotNull(_frameLimiter); - - const double targetFrameTime = 33.33; // 30 FPS - - try - { - for (int i = 0; i < 5; i++) - { - _frameLimiter.LimitFrameRate(targetFrameTime); - Thread.Sleep(10); // Simulate some frame processing time - } - - string diagnosticInfo = _frameLimiter.GetDiagnosticInfo(); - Assert.IsNotNull(diagnosticInfo); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected stable operation, but got: {ex.Message}"); - } - } - - [TestMethod] - public void FrameLimiter_ChangingTargetFrameRate_AdaptsCorrectly() - { - Assert.IsNotNull(_frameLimiter); - - try - { - // Start with 60 FPS - _frameLimiter.LimitFrameRate(16.67); - Thread.Sleep(20); - - // Change to 30 FPS - _frameLimiter.LimitFrameRate(33.33); - Thread.Sleep(40); - - // Change to 10 FPS - _frameLimiter.LimitFrameRate(100.0); - Thread.Sleep(110); - - string diagnosticInfo = _frameLimiter.GetDiagnosticInfo(); - Assert.IsNotNull(diagnosticInfo); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected adaptive behavior, but got: {ex.Message}"); - } - } - - #endregion - - #region Edge Case Tests - - [TestMethod] - public void FrameLimiter_VeryHighFrameRate_HandlesCorrectly() - { - Assert.IsNotNull(_frameLimiter); - - try - { - _frameLimiter.LimitFrameRate(1.0); // 1000 FPS - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected to handle very high frame rate, but got: {ex.Message}"); - } - } - - [TestMethod] - public void FrameLimiter_VeryLowFrameRate_HandlesCorrectly() - { - Assert.IsNotNull(_frameLimiter); - - try - { - _frameLimiter.LimitFrameRate(1000.0); // 1 FPS - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected to handle very low frame rate, but got: {ex.Message}"); - } - } - - [TestMethod] - public void AutoTuning_MultipleStartStop_HandlesCorrectly() - { - Assert.IsNotNull(_frameLimiter); - - try - { - _frameLimiter.StartAutoTuning(); - _frameLimiter.StopAutoTuning(); - _frameLimiter.StartAutoTuning(); - _frameLimiter.StopAutoTuning(); - - (bool isActive, _, _, _, _) = _frameLimiter.GetTuningStatus(); - Assert.IsFalse(isActive); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected to handle multiple start/stop cycles, but got: {ex.Message}"); - } - } - - #endregion - - #region Internal State Validation Tests - - [TestMethod] - public void ValidateCurrentTuningState_WhenNotTuning_DoesNotThrow() - { - Assert.IsNotNull(_frameLimiter); - - try - { - _frameLimiter.ValidateCurrentTuningState(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - [TestMethod] - public void GetCurrentTuningDuration_ReturnsValidDuration() - { - Assert.IsNotNull(_frameLimiter); - - double duration = _frameLimiter.GetCurrentTuningDuration(); - Assert.IsTrue(duration > 0.0); - } - - [TestMethod] - public void GetCurrentTuningParameters_WhenNotTuning_DoesNotThrow() - { - Assert.IsNotNull(_frameLimiter); - - try - { - _frameLimiter.GetCurrentTuningParameters(); - } -#pragma warning disable CA1031 // Do not catch general exception types - catch (Exception ex) -#pragma warning restore CA1031 // Do not catch general exception types - { - Assert.Fail($"Expected no exception, but got: {ex.Message}"); - } - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/PlatformSpecificTests.cs b/tests/ImGui.App.Tests/PlatformSpecificTests.cs deleted file mode 100644 index 6c74a25..0000000 --- a/tests/ImGui.App.Tests/PlatformSpecificTests.cs +++ /dev/null @@ -1,168 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using Microsoft.VisualStudio.TestTools.UnitTesting; -using ktsu.ImGui.App.ImGuiController; - -/// -/// Tests for platform-specific functionality including DPI awareness, native methods, and GDI+ helpers. -/// -[TestClass] -public class PlatformSpecificTests -{ - #region ForceDpiAware Tests - - [TestMethod] - public void ForceDpiAware_GetWindowScaleFactor_ReturnsValidValue() - { - double scaleFactor = ForceDpiAware.GetWindowScaleFactor(); - - Assert.IsTrue(scaleFactor > 0); - Assert.IsTrue(scaleFactor <= 10.25); // MaxScaleFactor - } - - [TestMethod] - public void ForceDpiAware_GetActualScaleFactor_ReturnsValidValue() - { - double actualScale = ForceDpiAware.GetActualScaleFactor(); - - Assert.IsTrue(actualScale > 0); - } - - #endregion - - #region GdiPlusHelper Tests - - [TestMethod] - public void GdiPlusHelper_IsStaticClass() - { - Type gdiPlusHelperType = typeof(GdiPlusHelper); - Assert.IsTrue(gdiPlusHelperType.IsAbstract && gdiPlusHelperType.IsSealed); - } - - #endregion - - #region NativeMethods Tests - - [TestMethod] - public void NativeMethods_IsStaticClass() - { - Type nativeMethodsType = typeof(NativeMethods); - Assert.IsTrue(nativeMethodsType.IsAbstract && nativeMethodsType.IsSealed); - } - - [TestMethod] - public void NativeMethods_IsInternalClass() - { - Type nativeMethodsType = typeof(NativeMethods); - Assert.IsTrue(nativeMethodsType.IsClass); - Assert.IsFalse(nativeMethodsType.IsPublic); - } - - #endregion - - #region Type System Tests - - [TestMethod] - public void UniformFieldInfo_IsStruct() - { - Type type = typeof(UniformFieldInfo); - Assert.IsTrue(type.IsValueType); - Assert.IsFalse(type.IsClass); - } - - [TestMethod] - public void UniformFieldInfo_HasExpectedFields() - { - // Test UniformFieldInfo through direct access using internal visibility - UniformFieldInfo uniformInfo = new() - { - Location = 1, - Name = "test", - Size = 10, - Type = Silk.NET.OpenGL.UniformType.Float - }; - - // Verify field types by accessing them directly - Assert.AreEqual(1, uniformInfo.Location); - Assert.AreEqual("test", uniformInfo.Name); - Assert.AreEqual(10, uniformInfo.Size); - Assert.AreEqual(Silk.NET.OpenGL.UniformType.Float, uniformInfo.Type); - - // Verify field types match expected types - Assert.IsInstanceOfType(uniformInfo.Location); - Assert.IsInstanceOfType(uniformInfo.Name); - Assert.IsInstanceOfType(uniformInfo.Size); - Assert.IsInstanceOfType(uniformInfo.Type); - } - - [TestMethod] - public void Shader_IsInternalClass() - { - Type shaderType = typeof(Shader); - Assert.IsTrue(shaderType.IsClass); - Assert.IsFalse(shaderType.IsPublic); - } - - [TestMethod] - public void Texture_IsInternalClass() - { - Type textureType = typeof(Texture); - Assert.IsTrue(textureType.IsClass); - Assert.IsFalse(textureType.IsPublic); - } - - #endregion - - #region Interface Tests - - [TestMethod] - public void IGL_IsInterface() - { - Type iglType = typeof(IGL); - Assert.IsTrue(iglType.IsInterface); - Assert.IsTrue(iglType.IsPublic); - } - - [TestMethod] - public void IGL_InheritsFromIDisposable() - { - Type iglType = typeof(IGL); - Assert.IsTrue(typeof(IDisposable).IsAssignableFrom(iglType)); - } - - [TestMethod] - public void IOpenGLFactory_IsInterface() - { - Type factoryType = typeof(IOpenGLFactory); - Assert.IsTrue(factoryType.IsInterface); - Assert.IsTrue(factoryType.IsPublic); - } - - [TestMethod] - public void IOpenGLProvider_IsInterface() - { - Type providerType = typeof(IOpenGLProvider); - Assert.IsTrue(providerType.IsInterface); - Assert.IsTrue(providerType.IsPublic); - } - - [TestMethod] - public void IOpenGLProvider_InheritsFromIDisposable() - { - Type providerType = typeof(IOpenGLProvider); - Assert.IsTrue(typeof(IDisposable).IsAssignableFrom(providerType)); - } - - [TestMethod] - public void GLWrapper_ImplementsIGL() - { - Type wrapperType = typeof(GLWrapper); - Assert.IsTrue(typeof(IGL).IsAssignableFrom(wrapperType)); - } - - #endregion -} diff --git a/tests/ImGui.App.Tests/TestGL.cs b/tests/ImGui.App.Tests/TestGL.cs deleted file mode 100644 index f4deac0..0000000 --- a/tests/ImGui.App.Tests/TestGL.cs +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using ktsu.ImGui.App.ImGuiController; -using Silk.NET.Maths; -using Silk.NET.OpenGL; -using Color = System.Drawing.Color; - -/// -/// A test implementation of IGL for testing purposes. -/// -public sealed unsafe class TestGL : IGL -{ - private bool _disposed; - - private void ThrowIfDisposed() - { - ObjectDisposedException.ThrowIf(_disposed, this); - } - - public void GetInteger(GLEnum pname, out int data) - { - ThrowIfDisposed(); - data = 0; - } - - public float GetFloat(GLEnum pname) - { - ThrowIfDisposed(); - return 0; - } - - public void Enable(GLEnum cap) - { - ThrowIfDisposed(); - } - - public void Disable(GLEnum cap) - { - ThrowIfDisposed(); - } - - public void BlendEquation(GLEnum mode) - { - ThrowIfDisposed(); - } - - public void BlendFuncSeparate(GLEnum srcRGB, GLEnum dstRGB, GLEnum srcAlpha, GLEnum dstAlpha) - { - ThrowIfDisposed(); - } - - public void Viewport(Vector2D size) - { - ThrowIfDisposed(); - } - - public void ClearColor(Color color) - { - ThrowIfDisposed(); - } - - public void Clear(uint mask) - { - ThrowIfDisposed(); - } - - public void BindTexture(GLEnum target, uint texture) - { - ThrowIfDisposed(); - } - - public void DeleteTexture(uint texture) - { - ThrowIfDisposed(); - } - - public uint GenTexture() - { - ThrowIfDisposed(); - return 1; - } - - public void TexParameter(GLEnum target, GLEnum pname, int param) - { - ThrowIfDisposed(); - } - - public void TexImage2D(GLEnum target, int level, int internalformat, uint width, uint height, int border, GLEnum format, GLEnum type, void* pixels) - { - ThrowIfDisposed(); - } - - public void Dispose() - { - if (!_disposed) - { - _disposed = true; - } - } -} diff --git a/tests/ImGui.App.Tests/TestHelpers.cs b/tests/ImGui.App.Tests/TestHelpers.cs deleted file mode 100644 index 3b5a566..0000000 --- a/tests/ImGui.App.Tests/TestHelpers.cs +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using System.Numerics; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using Moq; -using Silk.NET.Maths; -using Silk.NET.Windowing; - -/// -/// Provides helper methods for testing ImGuiApp components. -/// -public static class TestHelpers -{ - /// - /// Creates a mock window with default settings. - /// - /// A mock IWindow instance. - public static Mock CreateMockWindow() - { - Mock mockWindow = new(); - mockWindow.Setup(w => w.Size).Returns(new Vector2D(1280, 720)); - mockWindow.Setup(w => w.Position).Returns(new Vector2D(0, 0)); - mockWindow.Setup(w => w.WindowState).Returns(WindowState.Normal); - - // Set up window lifecycle events - WindowEventHandlers handlers = new(); - - // Setup event raising capabilities - mockWindow.SetupAdd(x => x.Load += It.IsAny()) - .Callback(handlers.LoadHandlers.Add); - mockWindow.SetupAdd(x => x.Update += It.IsAny>()) - .Callback>(handlers.UpdateHandlers.Add); - mockWindow.SetupAdd(x => x.Render += It.IsAny>()) - .Callback>(handlers.RenderHandlers.Add); - mockWindow.SetupAdd(x => x.Closing += It.IsAny()) - .Callback(handlers.CloseHandlers.Add); - - // Store the handlers in a static dictionary - WindowHandlers[mockWindow.Object] = handlers; - - // Setup IsClosing property - mockWindow.SetupProperty(w => w.IsClosing, false); - - return mockWindow; - } - - // Static dictionary to store handlers for each mock window - private static readonly Dictionary WindowHandlers = []; - - /// - /// Creates a test configuration with optional customization. - /// - /// The window title. - /// The path to the window icon. - /// An ImGuiAppConfig instance. - public static ImGuiAppConfig CreateTestConfig(string title = "Test Window", string iconPath = "") - { - Mock mockWindow = CreateMockWindow(); - - return new ImGuiAppConfig - { - Title = title, - IconPath = iconPath, - TestMode = true, - TestWindow = mockWindow.Object, - InitialWindowState = new ImGuiAppWindowState - { - Size = new Vector2(800, 600), - Pos = new Vector2(100, 100), - LayoutState = WindowState.Normal - } - }; - } - - /// - /// Helper class to store window event handlers for testing. - /// - internal sealed class WindowEventHandlers - { - public List LoadHandlers { get; } = []; - public List> UpdateHandlers { get; } = []; - public List> RenderHandlers { get; } = []; - public List CloseHandlers { get; } = []; - } - - /// - /// Simulates a window lifecycle for testing. - /// - /// The mock window to simulate. - /// Thrown when window is null. - /// Thrown when window is not a mock window created by CreateMockWindow. - public static void SimulateWindowLifecycle(IWindow window) - { - ArgumentNullException.ThrowIfNull(window); - - if (!WindowHandlers.TryGetValue(window, out WindowEventHandlers? handlers)) - { - throw new ArgumentException("Window is not a mock window created by CreateMockWindow", nameof(window)); - } - - // Trigger Load - foreach (Action handler in handlers.LoadHandlers) - { - handler(); - } - - // Simulate a few frames - for (int i = 0; i < 3; i++) - { - foreach (Action handler in handlers.UpdateHandlers) - { - handler(0.016); // ~60 FPS - } - - foreach (Action handler in handlers.RenderHandlers) - { - handler(0.016); - } - } - - // Trigger Close - window.IsClosing = true; - foreach (Action handler in handlers.CloseHandlers) - { - handler(); - } - - // Clean up - WindowHandlers.Remove(window); - } - - /// - /// Verifies that a window's properties match the expected values. - /// - /// The window to verify. - /// The expected window size. - /// The expected window position. - /// The expected window state. - /// Thrown when window is null. - public static void VerifyWindowProperties( - IWindow window, - Vector2D expectedSize, - Vector2D expectedPosition, - WindowState expectedState) - { - ArgumentNullException.ThrowIfNull(window); - - Assert.AreEqual(expectedSize, window.Size); - Assert.AreEqual(expectedPosition, window.Position); - Assert.AreEqual(expectedState, window.WindowState); - } -} diff --git a/tests/ImGui.App.Tests/TestOpenGLProvider.cs b/tests/ImGui.App.Tests/TestOpenGLProvider.cs deleted file mode 100644 index 2d795ff..0000000 --- a/tests/ImGui.App.Tests/TestOpenGLProvider.cs +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) ktsu.dev -// All rights reserved. -// Licensed under the MIT license. - -namespace ktsu.ImGui.App.Tests; - -using ktsu.ImGui.App.ImGuiController; -using Silk.NET.OpenGL; - -/// -/// A test implementation of IOpenGLProvider that returns a mock GL instance. -/// -public sealed class TestOpenGLProvider(IGL mockGL) : IOpenGLProvider -{ - private readonly IGL _mockGL = mockGL ?? throw new ArgumentNullException(nameof(mockGL)); - private bool _disposed; - - public IGL GetGL() - { - ObjectDisposedException.ThrowIf(_disposed, this); - return _mockGL; - } - - public void Dispose() - { - if (!_disposed) - { - _mockGL.Dispose(); - _disposed = true; - } - } - - GL IOpenGLProvider.GetGL() => throw new NotImplementedException(); -}