ktsu.ImGui.Popups 2.3.0

ImGuiPopups

Version License

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: 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

Install-Package ktsu.ImGuiPopups

.NET CLI

dotnet add package ktsu.ImGuiPopups

PackageReference

<PackageReference Include="ktsu.ImGuiPopups" Version="1.3.5" />

Quick Start

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<string> 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.

var messageOK = new ImGuiPopups.MessageOK();
messageOK.Open("Title", "Your message here");

Input Components

Get validated input from users:

// 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:

var searchableList = new ImGuiPopups.SearchableList<MyClass>();
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:

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:

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:

// 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:

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:

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:

git clone https://github.com/ktsu-dev/ImGuiPopups.git
cd ImGuiPopups
dotnet run --project ImGuiPopupsDemo

Dependencies

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 file for details.

Changelog

See CHANGELOG.md for a detailed history of changes.


ktsu.dev - Building tools for developers

Showing the top 20 packages that depend on ktsu.ImGui.Popups.

Packages Downloads
ktsu.ImGui.Styler
Package Description
150
ktsu.ImGui.Styler
Package Description
147
ktsu.ImGui.Styler
Package Description
145
ktsu.ImGui.Styler
Package Description
143
ktsu.ImGui.Styler
Package Description
142
ktsu.ImGui.Styler
Package Description
89
ktsu.ImGui.Styler
Package Description
61
ktsu.ImGui.Styler
Package Description
60
ktsu.ImGui.Styler
Package Description
59
ktsu.ImGui.Styler
A library for expressively styling ImGui.NET interfaces.
59
ktsu.ImGui.Styler
Package Description
58
ktsu.ImGui.Styler
A library for expressively styling ImGui.NET interfaces.
58
ktsu.ImGui.Styler
Package Description
57
ktsu.ImGui.Styler
A library for expressively styling ImGui.NET interfaces.
57
ktsu.ImGui.Styler
Package Description
56

## v2.3.0 (minor) Changes since v2.2.0: - Add compatibility suppressions for DynamicallyAccessedMemberTypes and ExperimentalAttribute in ImGui.Popups, ImGui.Styler, and ImGui.Widgets for .NET 10.0 ([@matt-edmondson](https://github.com/matt-edmondson)) - [minor] Add NodeGraph test suite with 106 tests covering attributes, pins, type system, and validation ([@matt-edmondson](https://github.com/matt-edmondson)) - [patch] Guard BeginFrame against calling native extensions without ImGui context ([@matt-edmondson](https://github.com/matt-edmondson)) - Add CLAUDE.md for project guidance and architecture overview ([@matt-edmondson](https://github.com/matt-edmondson)) - [minor] Add unit tests for ImGuiExtensionManager ([@matt-edmondson](https://github.com/matt-edmondson)) - Add visibility control for tabs in TabPanel ([@matt-edmondson](https://github.com/matt-edmondson)) - Dont show the close button on tabs inside a non-closable tab bar ([@matt-edmondson](https://github.com/matt-edmondson)) - [minor] Add Hexa.NET.ImGuizmo, ImNodes, and ImPlot package references ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor null checks to use Ensure.NotNull for improved readability and consistency ([@matt-edmondson](https://github.com/matt-edmondson)) - Remove .github\workflows\project.yml ([@matt-edmondson](https://github.com/matt-edmondson)) - [minor] Add CleanImNodesDemo with physics simulation and attribute-based node editor ([@matt-edmondson](https://github.com/matt-edmondson)) - [minor] Add ImGuiNodeEditor with physics simulation and attribute-based node factory ([@matt-edmondson](https://github.com/matt-edmondson)) - Refine glyph area calculations and atlas fitting checks for improved memory management ([@matt-edmondson](https://github.com/matt-edmondson)) - migrate to dotnet 10 ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor null argument checks to use Ensure.NotNull for improved readability ([@matt-edmondson](https://github.com/matt-edmondson)) - [minor] Refactor demo app with modular tab-based architecture and extension demos ([@matt-edmondson](https://github.com/matt-edmondson)) - Enhance CalculateOptimalPixelSize to consider global accessibility scale for improved rendering ([@matt-edmondson](https://github.com/matt-edmondson)) - [minor] Integrate ImGuiExtensionManager into ImGuiController lifecycle ([@matt-edmondson](https://github.com/matt-edmondson)) - Add compatibility suppressions for DefaultInterpolatedStringHandler in multiple modules ([@matt-edmondson](https://github.com/matt-edmondson)) - [minor] Add ImGuiExtensionManager for optional ImGuizmo, ImNodes, and ImPlot support ([@matt-edmondson](https://github.com/matt-edmondson)) - Improve search box hint display logic based on available width ([@matt-edmondson](https://github.com/matt-edmondson)) - Exclude test projects from packaging and publishing processes in Invoke-DotNetPack and Invoke-DotNetPublish functions ([@matt-edmondson](https://github.com/matt-edmondson)) - Enhance project name matching to handle variations in repository naming conventions ([@matt-edmondson](https://github.com/matt-edmondson)) - [minor] Add NodeGraph library with attribute-based node definitions ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.2.12-pre.1 (prerelease) Changes since v2.2.11: - Update README example function name to follow conventions ([@copilot-swe-agent[bot]](https://github.com/copilot-swe-agent[bot])) - Fix all formatting errors to make build green ([@copilot-swe-agent[bot]](https://github.com/copilot-swe-agent[bot])) - Add input validation and optimize string allocation ([@copilot-swe-agent[bot]](https://github.com/copilot-swe-agent[bot])) - Add RadialProgressBar widget implementation and demo ([@copilot-swe-agent[bot]](https://github.com/copilot-swe-agent[bot])) - Fix clockwise/counter-clockwise logic and remove empty if block ([@copilot-swe-agent[bot]](https://github.com/copilot-swe-agent[bot])) - Change default direction to clockwise and add StartAtBottom option ([@copilot-swe-agent[bot]](https://github.com/copilot-swe-agent[bot])) - Initial plan ([@copilot-swe-agent[bot]](https://github.com/copilot-swe-agent[bot])) ## v2.2.11 (patch) Changes since v2.2.10: - Add visibility control for tabs in TabPanel ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.2.11-pre.2 (prerelease) Changes since v2.2.11-pre.1: - Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot])) - Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot])) ## v2.2.11-pre.1 (prerelease) Incremental prerelease update. ## v2.2.10 (patch) Changes since v2.2.9: - Exclude test projects from packaging and publishing processes in Invoke-DotNetPack and Invoke-DotNetPublish functions ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.2.10-pre.2 (prerelease) Changes since v2.2.10-pre.1: - Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot])) - Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot])) ## v2.2.10-pre.1 (prerelease) Incremental prerelease update. ## v2.2.9 (patch) Changes since v2.2.8: - Add compatibility suppressions for DefaultInterpolatedStringHandler in multiple modules ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.2.9-pre.2 (prerelease) Changes since v2.2.9-pre.1: - Merge remote-tracking branch 'refs/remotes/origin/main' ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync COPYRIGHT.md ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync global.json ([@ktsu[bot]](https://github.com/ktsu[bot])) ## v2.2.9-pre.1 (prerelease) Incremental prerelease update. ## v2.2.8 (patch) Changes since v2.2.7: - Add compatibility suppressions for DynamicallyAccessedMemberTypes and ExperimentalAttribute in ImGui.Popups, ImGui.Styler, and ImGui.Widgets for .NET 10.0 ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor null checks to use Ensure.NotNull for improved readability and consistency ([@matt-edmondson](https://github.com/matt-edmondson)) - Refine glyph area calculations and atlas fitting checks for improved memory management ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.2.7 (patch) Changes since v2.2.6: - Remove .github\workflows\project.yml ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.2.6 (patch) Changes since v2.2.5: - Enhance project name matching to handle variations in repository naming conventions ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.2.5 (patch) Changes since v2.2.4: - Enhance CalculateOptimalPixelSize to consider global accessibility scale for improved rendering ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.2.4 (patch) Changes since v2.2.3: - Refactor null argument checks to use Ensure.NotNull for improved readability ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.2.3 (patch) Changes since v2.2.2: - Add CLAUDE.md for project guidance and architecture overview ([@matt-edmondson](https://github.com/matt-edmondson)) - Improve search box hint display logic based on available width ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.2.2 (patch) Changes since v2.2.1: - migrate to dotnet 10 ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.2.1 (patch) Changes since v2.2.0: - Dont show the close button on tabs inside a non-closable tab bar ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.2.1-pre.1 (prerelease) Incremental prerelease update. ## v2.2.0 (minor) Changes since v2.1.0: - [minor] Add dynamic atlas sizing and glyph limit calculation ([@matt-edmondson](https://github.com/matt-edmondson)) - Add Ktsu package key support in build configuration: Updated the .NET CI workflow and PowerShell script to include an optional Ktsu package key for publishing. Enhanced documentation for the new parameter and added conditional publishing logic for Ktsu.dev. ([@matt-edmondson](https://github.com/matt-edmondson)) - Implement modern DPI awareness handling in Windows: Updated ForceDpiAware to utilize the latest DPI awareness APIs for better compatibility with windowing libraries. Added fallback mechanisms for older Windows versions and enhanced NativeMethods with new DPI awareness context functions. ([@matt-edmondson](https://github.com/matt-edmondson)) - Fix gpu detection priority ([@matt-edmondson](https://github.com/matt-edmondson)) - Enhance project structure and testing: Added new dependencies in Directory.Packages.props, introduced a new Tests project in the solution, and updated project references. Refactored namespaces for consistency across multiple files. Updated test configurations and example projects to align with the new structure. ([@matt-edmondson](https://github.com/matt-edmondson)) - Enhance font initialization with memory management features ([@matt-edmondson](https://github.com/matt-edmondson)) - Additional tests ([@matt-edmondson](https://github.com/matt-edmondson)) - Move debug logger into its own file and make it output to the appdata dir ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor glyph calculation for improved readability ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor SonarQube conditional checks in GitHub Actions: Updated syntax for SONAR_TOKEN checks to use the correct expression format, ensuring proper execution of caching and installation steps. ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor SonarQube token handling in GitHub Actions: Updated conditional checks to use environment variables for SONAR_TOKEN, ensuring consistent access across caching and installation steps. ([@matt-edmondson](https://github.com/matt-edmondson)) - Initial combined commit ([@matt-edmondson](https://github.com/matt-edmondson)) - Fix missing package references ([@matt-edmondson](https://github.com/matt-edmondson)) - Fix NuGet package source URL in Invoke-NuGetPublish function: Updated the source URL to ensure correct package publishing to packages.ktsu.dev. ([@matt-edmondson](https://github.com/matt-edmondson)) - Enhance SonarQube integration in GitHub Actions: Added conditional checks for SONAR_TOKEN to ensure caching and installation steps only execute when the token is available, improving workflow reliability. ([@matt-edmondson](https://github.com/matt-edmondson)) - Enhance window position validation logic: Implemented performance optimizations to skip unnecessary checks when window position and size remain unchanged. Added methods for better multi-monitor support, ensuring windows are relocated when insufficiently visible. Updated tests to verify new behavior and performance improvements. ([@matt-edmondson](https://github.com/matt-edmondson)) - Move debug logger into its own file and make it output to the appdata dir ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor ImGuiApp configuration handling: Introduced AdjustConfigForStartup method to automatically convert minimized window state to normal during startup, improving application reliability. Updated tests to validate this new behavior. ([@matt-edmondson](https://github.com/matt-edmondson)) - Update ImGuiApp configuration validation: Automatically convert minimized and fullscreen window states to normal during startup to prevent issues. Updated tests to reflect this change, ensuring proper state handling without exceptions. ([@matt-edmondson](https://github.com/matt-edmondson)) - Add manual trigger support to GitHub Actions workflow: Enabled workflow_dispatch to allow manual execution of the .NET CI pipeline. ([@matt-edmondson](https://github.com/matt-edmondson)) - Enhance .NET CI workflow: Added support for skipped releases in the GitHub Actions workflow. Updated conditions for SonarQube execution, coverage report upload, and Winget manifest updates to account for skipped releases, improving control over the release process. ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.1.10 (patch) Changes since v2.1.9: - Fix gpu detection priority ([@matt-edmondson](https://github.com/matt-edmondson)) - Enhance font initialization with memory management features ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.1.10-pre.2 (prerelease) Changes since v2.1.10-pre.1: - Sync .github\workflows\dotnet.yml ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync .github\dependabot.yml ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync scripts\update-winget-manifests.ps1 ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync scripts\PSBuild.psm1 ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync .runsettings ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync .editorconfig ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync .github\workflows\update-sdks.yml ([@ktsu[bot]](https://github.com/ktsu[bot])) - Sync .gitattributes ([@ktsu[bot]](https://github.com/ktsu[bot])) ## v2.1.10-pre.1 (prerelease) Incremental prerelease update. ## v2.1.9 (patch) Changes since v2.1.8: - Fix missing package references ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.1.8 (patch) Changes since v2.1.7: - Enhance project structure and testing: Added new dependencies in Directory.Packages.props, introduced a new Tests project in the solution, and updated project references. Refactored namespaces for consistency across multiple files. Updated test configurations and example projects to align with the new structure. ([@matt-edmondson](https://github.com/matt-edmondson)) - Initial combined commit ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.1.7 (patch) Changes since v2.1.6: - Fix NuGet package source URL in Invoke-NuGetPublish function: Updated the source URL to ensure correct package publishing to packages.ktsu.dev. ([@matt-edmondson](https://github.com/matt-edmondson)) - Enhance .NET CI workflow: Added support for skipped releases in the GitHub Actions workflow. Updated conditions for SonarQube execution, coverage report upload, and Winget manifest updates to account for skipped releases, improving control over the release process. ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.1.6 (patch) Changes since v2.1.5: - Add Ktsu package key support in build configuration: Updated the .NET CI workflow and PowerShell script to include an optional Ktsu package key for publishing. Enhanced documentation for the new parameter and added conditional publishing logic for Ktsu.dev. ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.1.5 (patch) Changes since v2.1.4: - Implement modern DPI awareness handling in Windows: Updated ForceDpiAware to utilize the latest DPI awareness APIs for better compatibility with windowing libraries. Added fallback mechanisms for older Windows versions and enhanced NativeMethods with new DPI awareness context functions. ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.1.4 (patch) Changes since v2.1.3: - Enhance window position validation logic: Implemented performance optimizations to skip unnecessary checks when window position and size remain unchanged. Added methods for better multi-monitor support, ensuring windows are relocated when insufficiently visible. Updated tests to verify new behavior and performance improvements. ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.1.3 (patch) Changes since v2.1.2: - Add manual trigger support to GitHub Actions workflow: Enabled workflow_dispatch to allow manual execution of the .NET CI pipeline. ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.1.2 (patch) Changes since v2.1.1: - Refactor SonarQube conditional checks in GitHub Actions: Updated syntax for SONAR_TOKEN checks to use the correct expression format, ensuring proper execution of caching and installation steps. ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor SonarQube token handling in GitHub Actions: Updated conditional checks to use environment variables for SONAR_TOKEN, ensuring consistent access across caching and installation steps. ([@matt-edmondson](https://github.com/matt-edmondson)) - Enhance SonarQube integration in GitHub Actions: Added conditional checks for SONAR_TOKEN to ensure caching and installation steps only execute when the token is available, improving workflow reliability. ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor ImGuiApp configuration handling: Introduced AdjustConfigForStartup method to automatically convert minimized window state to normal during startup, improving application reliability. Updated tests to validate this new behavior. ([@matt-edmondson](https://github.com/matt-edmondson)) - Update ImGuiApp configuration validation: Automatically convert minimized and fullscreen window states to normal during startup to prevent issues. Updated tests to reflect this change, ensuring proper state handling without exceptions. ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.1.1 (patch) Changes since v2.1.0: - Additional tests ([@matt-edmondson](https://github.com/matt-edmondson)) - Move debug logger into its own file and make it output to the appdata dir ([@matt-edmondson](https://github.com/matt-edmondson)) - Move debug logger into its own file and make it output to the appdata dir ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.1.0 (minor) Changes since v2.0.0: - Add Nerd Font tab to ImGuiAppDemo, showcasing various icon sets including Powerline, Font Awesome, Material Design, Weather, Devicons, Octicons, and Brand Logos. Enhanced user guidance for using Nerd Fonts effectively. ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor demo app with tabbed interface and improved Unicode/emoji display ([@Cursor Agent](https://github.com/Cursor Agent)) - Checkpoint before follow-up message ([@Cursor Agent](https://github.com/Cursor Agent)) - Checkpoint before follow-up message ([@Cursor Agent](https://github.com/Cursor Agent)) - Improve font memory management with custom font handle tracking ([@Cursor Agent](https://github.com/Cursor Agent)) - Add NotoEmoji font support to ImGuiApp. Introduced NotoEmoji.ttf as a resource for emoji display and updated related resource files. Enhanced PowerShell script to preserve manually placed emoji fonts during Nerd Font installation, ensuring full emoji support in the application. ([@matt-edmondson](https://github.com/matt-edmondson)) - Enable Unicode and emoji support by default in ImGuiApp ([@Cursor Agent](https://github.com/Cursor Agent)) - Enhance ImGuiApp configuration with debugging options ([@matt-edmondson](https://github.com/matt-edmondson)) - Enhance ImGuiApp documentation and features: Updated project overview, added detailed descriptions for performance optimization, debug logging, and Unicode support. Introduced performance monitoring capabilities with real-time FPS tracking and throttling visualization. Improved font management and DPI handling. Refactored configuration settings for better usability. Updated demo application to showcase new features. ([@matt-edmondson](https://github.com/matt-edmondson)) - Fix scissor rectangle calculations in ImGuiController to ensure non-negative dimensions, preventing potential rendering issues. ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor ImGuiAppDemo to streamline tab rendering and remove redundant performance tab code ([@matt-edmondson](https://github.com/matt-edmondson)) - Add launch settings for ImGuiAppDemo with native debugging enabled ([@matt-edmondson](https://github.com/matt-edmondson)) - Add NotVisibleFps setting for ultra-low frame rate when minimized ([@Cursor Agent](https://github.com/Cursor Agent)) - Enhance Invoke-DotNetPack function in PSBuild script to handle release notes exceeding NuGet's 35,000 character limit. Added logic to truncate long release notes and create a temporary file for compliance, with appropriate logging and cleanup of temporary files after packaging. ([@matt-edmondson](https://github.com/matt-edmondson)) - Improve performance throttling with multi-condition rate selection ([@Cursor Agent](https://github.com/Cursor Agent)) - Update ImGuiFontConfig test to allow empty font path ([@Cursor Agent](https://github.com/Cursor Agent)) - Enhance FontHelper by adding support for extended Unicode and emoji glyph ranges. Introduced initialization flags and cleanup methods to manage memory more effectively. This refactor improves glyph range handling and prevents memory deallocation issues. ([@matt-edmondson](https://github.com/matt-edmondson)) - Implement deferred performance updates to prevent mid-cycle rate changes ([@Cursor Agent](https://github.com/Cursor Agent)) - Improve window focus detection and add debug logging for throttling ([@Cursor Agent](https://github.com/Cursor Agent)) - Refactor Performance tab into separate method and reorder tabs ([@Cursor Agent](https://github.com/Cursor Agent)) - Refactor FontHelper for flexible Unicode support with user-configured fonts ([@Cursor Agent](https://github.com/Cursor Agent)) - Remove blank lines ([@matt-edmondson](https://github.com/matt-edmondson)) - Improve rendering precision and pixel-perfect techniques in ImGui rendering ([@Cursor Agent](https://github.com/Cursor Agent)) - Enhance emoji font support in ImGuiApp. Introduced LoadEmojiFont method to merge emoji fonts with main fonts, ensuring proper display of emojis. Updated FontHelper to manage emoji-specific glyph ranges separately, improving clarity and avoiding conflicts with main font symbols. Updated ImGuiAppDemo to showcase full emoji range support. ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor FontHelper to modularize glyph range additions for Latin Extended and emoji characters. Updated ImGuiApp to utilize the new methods for improved clarity and maintainability. ([@matt-edmondson](https://github.com/matt-edmondson)) - Fix VSync to prevent resource spikes when unfocused; update .NET SDK. ([@Cursor Agent](https://github.com/Cursor Agent)) - Improve VSync handling during frame rate throttling ([@Cursor Agent](https://github.com/Cursor Agent)) - Remove documentation for deferred FPS/UPS update fix. ([@Cursor Agent](https://github.com/Cursor Agent)) - Refactor ImGuiApp tests to use Assert.ThrowsException method ([@Cursor Agent](https://github.com/Cursor Agent)) - Fix test paths using Path.GetFullPath for consistent texture testing ([@Cursor Agent](https://github.com/Cursor Agent)) - Add emoji support to Unicode character ranges in ImGuiApp ([@Cursor Agent](https://github.com/Cursor Agent)) - Add comprehensive unit tests for ImGuiApp and related classes ([@Cursor Agent](https://github.com/Cursor Agent)) - Checkpoint before follow-up message ([@Cursor Agent](https://github.com/Cursor Agent)) - Remove focus checks from input event handlers ([@Cursor Agent](https://github.com/Cursor Agent)) - Add test for preventing multiple ImGuiApp starts ([@Cursor Agent](https://github.com/Cursor Agent)) - Implement lowest frame rate throttling with comprehensive condition evaluation ([@Cursor Agent](https://github.com/Cursor Agent)) - Merge branch 'cursor/address-question-mark-glyphs-8940' of https://github.com/ktsu-dev/ImGuiApp into cursor/address-question-mark-glyphs-8940 ([@matt-edmondson](https://github.com/matt-edmondson)) - Cleanup ([@matt-edmondson](https://github.com/matt-edmondson)) - Fix scissor rectangle calculations in ImGuiController to ensure non-negative dimensions, preventing potential rendering issues. ([@matt-edmondson](https://github.com/matt-edmondson)) - Simplify performance update logic and remove unnecessary tracking ([@Cursor Agent](https://github.com/Cursor Agent)) - Refactor FontHelper to simplify glyph range additions by removing unnecessary type casting to ushort. This change enhances the handling of character ranges for emoji and Latin Extended characters, improving code clarity and maintainability. ([@matt-edmondson](https://github.com/matt-edmondson)) - Update default performance settings for better resource efficiency ([@Cursor Agent](https://github.com/Cursor Agent)) - Simplify VSync management and remove unnecessary context checks ([@Cursor Agent](https://github.com/Cursor Agent)) - Add Reset method tests and reset performance-related state fields ([@Cursor Agent](https://github.com/Cursor Agent)) - Cleanup ([@matt-edmondson](https://github.com/matt-edmondson)) - Add window visibility throttling for ultra-low resource usage ([@Cursor Agent](https://github.com/Cursor Agent)) - Add test coverage for ImGuiApp and related components ([@Cursor Agent](https://github.com/Cursor Agent)) - Improve VSync and resource management for unfocused application states ([@Cursor Agent](https://github.com/Cursor Agent)) - Auto-commit pending changes before rebase - PR synchronize ([@Cursor Agent](https://github.com/Cursor Agent)) - Add performance throttling with configurable rendering and idle detection ([@Cursor Agent](https://github.com/Cursor Agent)) - Use PackageReleaseNotesFile to handle changelog release notes more robustly ([@Cursor Agent](https://github.com/Cursor Agent)) - Checkpoint before follow-up message ([@Cursor Agent](https://github.com/Cursor Agent)) - Checkpoint before follow-up message ([@Cursor Agent](https://github.com/Cursor Agent)) - Improve rendering precision and pixel-perfect techniques in ImGui rendering ([@Cursor Agent](https://github.com/Cursor Agent)) - Implement sleep-based frame rate throttling and remove UPS settings ([@Cursor Agent](https://github.com/Cursor Agent)) - Merge main into feature branch and integrate performance tab ([@Cursor Agent](https://github.com/Cursor Agent)) - Add comprehensive test coverage for ImGuiApp components and edge cases ([@Cursor Agent](https://github.com/Cursor Agent)) - Enhance Test-IsLibraryOnlyProject function in update-winget-manifests.ps1 ([@matt-edmondson](https://github.com/matt-edmondson)) - Fix merge conflict in performance tab text and update FPS description ([@Cursor Agent](https://github.com/Cursor Agent)) - Improve VSync handling during frame rate throttling ([@Cursor Agent](https://github.com/Cursor Agent)) - Refactor Invoke-DotNetPack function in PSBuild script to improve handling of release notes. Updated logic to create a temporary file for truncated content exceeding NuGet's 35,000 character limit, ensuring compliance and enhancing logging for better traceability. ([@matt-edmondson](https://github.com/matt-edmondson)) - Fix input focus detection to prevent incorrect idle state management ([@Cursor Agent](https://github.com/Cursor Agent)) - Add Reset method tests and reset performance-related state fields ([@Cursor Agent](https://github.com/Cursor Agent)) - Cleanup ([@matt-edmondson](https://github.com/matt-edmondson)) - Add Unicode and emoji support with configurable font rendering ([@Cursor Agent](https://github.com/Cursor Agent)) - [minor] Implement PID-based frame limiting in ImGuiApp: Introduced a new PidFrameLimiter class for precise frame rate control, enhancing performance optimization. Updated documentation to reflect new features, including auto-tuning capabilities and real-time diagnostics. Adjusted rendering settings to disable VSync for improved frame limiting accuracy. ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor test suite into focused, organized test classes ([@Cursor Agent](https://github.com/Cursor Agent)) - Enhance ImGuiApp configuration with debugging options ([@matt-edmondson](https://github.com/matt-edmondson)) - Add performance throttling with configurable rendering and idle detection ([@Cursor Agent](https://github.com/Cursor Agent)) - Refactor performance settings: remove Ups, add NotVisibleFps and flags ([@Cursor Agent](https://github.com/Cursor Agent)) - Style cleanup ([@matt-edmondson](https://github.com/matt-edmondson)) - Enhance ImGuiAppDemo with new features and UI updates ([@matt-edmondson](https://github.com/matt-edmondson)) - Cleanup ([@matt-edmondson](https://github.com/matt-edmondson)) - Enhance performance throttling with lowest-rate selection logic ([@Cursor Agent](https://github.com/Cursor Agent)) - Update default font point size in FontAppearance to 14 for improved readability. ([@matt-edmondson](https://github.com/matt-edmondson)) - Add launch settings for ImGuiAppDemo with native debugging enabled ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor ImGuiFontConfig to enhance Unicode support by consolidating glyph range additions and improving code clarity. Removed redundant comments and streamlined the builder initialization process. ([@matt-edmondson](https://github.com/matt-edmondson)) - Remove debug throttling properties and simplify focus handling ([@Cursor Agent](https://github.com/Cursor Agent)) - Enhance New-Changelog function in PSBuild script to truncate release notes exceeding NuGet's 35,000 character limit. This addition ensures compliance with NuGet requirements while providing informative logging about truncation. ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor font loading in ImGuiApp to utilize pre-allocated memory for both main and emoji fonts. This change improves memory management by reusing allocated handles, enhancing performance and reducing memory overhead during font loading. Updated related methods to reflect the new memory handling approach. ([@matt-edmondson](https://github.com/matt-edmondson)) - Changes from background agent bc-34f5e701-6497-49ba-b614-0b4bc857f398 ([@Cursor Agent](https://github.com/Cursor Agent)) - Cleanup ([@matt-edmondson](https://github.com/matt-edmondson)) - Increase NotVisibleFps from 0.2 to 2.0 for better background performance ([@Cursor Agent](https://github.com/Cursor Agent)) - Update default font size check in ImGuiApp to use FontAppearance.DefaultFontPointSize for improved consistency in font handling. ([@matt-edmondson](https://github.com/matt-edmondson)) - Add Unicode and emoji font support with cross-platform detection ([@Cursor Agent](https://github.com/Cursor Agent)) - Refactor ImGuiController for improved code clarity ([@matt-edmondson](https://github.com/matt-edmondson)) - Add real-time FPS graph with throttling state visualization ([@Cursor Agent](https://github.com/Cursor Agent)) - Fix input focus detection and add throttling debug info ([@Cursor Agent](https://github.com/Cursor Agent)) - Fix performance rate sync and update throttling to prevent ImGui crashes ([@Cursor Agent](https://github.com/Cursor Agent)) - Cleanup ([@matt-edmondson](https://github.com/matt-edmondson)) - Add support for Nerd Font icon ranges in FontHelper. Introduced AddNerdFontRanges method to include various icon sets such as Font Awesome, Material Design Icons, and Weather Icons, enhancing glyph range management. ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor ImGuiController for improved code clarity ([@matt-edmondson](https://github.com/matt-edmondson)) - Refactor FontHelper and ImGuiApp to simplify character addition and update default font key for compatibility. Removed unnecessary type checks in FontHelper for character ranges and adjusted font index storage in ImGuiApp to dynamically reflect the default font point size. ([@matt-edmondson](https://github.com/matt-edmondson)) - Add GitHub Actions workflow for automatic SDK updates ([@matt-edmondson](https://github.com/matt-edmondson)) - Checkpoint before follow-up message ([@Cursor Agent](https://github.com/Cursor Agent)) - Adjust not visible frame rate to 0.2 FPS for better resource conservation ([@Cursor Agent](https://github.com/Cursor Agent)) - Checkpoint before follow-up message ([@Cursor Agent](https://github.com/Cursor Agent)) - Refactor FontHelper to streamline Unicode and emoji range handling. Removed unused methods and improved memory management for glyph ranges. Updated ImGuiApp to utilize FontHelper for extended Unicode support. ([@matt-edmondson](https://github.com/matt-edmondson)) - Remove VSync throttling configuration and related code ([@Cursor Agent](https://github.com/Cursor Agent)) - Merge remote-tracking branch 'origin/main' into cursor/increase-imguiapp-test-coverage-c9d4 ([@matt-edmondson](https://github.com/matt-edmondson)) - Merge branch 'cursor/investigate-unfocused-app-resource-usage-045c' of https://github.com/ktsu-dev/ImGuiApp into cursor/investigate-unfocused-app-resource-usage-045c ([@matt-edmondson](https://github.com/matt-edmondson)) - Merge remote-tracking branch 'origin/main' into cursor/address-question-mark-glyphs-d05e ([@matt-edmondson](https://github.com/matt-edmondson)) - Replace RobotoMonoNerdFont with NerdFont in ImGuiApp configuration. Add PowerShell script for interactive Nerd Font installation and management, including backup and recovery features. Update resource files to reflect new font integration. ([@matt-edmondson](https://github.com/matt-edmondson)) - Update CLAUDE.md with additional testing and build instructions; enhance PSBuild script to improve release notes truncation logic for compliance with NuGet character limits, including detailed logging for better traceability. ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.0.12 (patch) Changes since v2.0.11: - Update ImGuiFontConfig test to allow empty font path ([@Cursor Agent](https://github.com/Cursor Agent)) - Refactor ImGuiApp tests to use Assert.ThrowsException method ([@Cursor Agent](https://github.com/Cursor Agent)) - Fix test paths using Path.GetFullPath for consistent texture testing ([@Cursor Agent](https://github.com/Cursor Agent)) - Add comprehensive unit tests for ImGuiApp and related classes ([@Cursor Agent](https://github.com/Cursor Agent)) - Add test for preventing multiple ImGuiApp starts ([@Cursor Agent](https://github.com/Cursor Agent)) - Add test coverage for ImGuiApp and related components ([@Cursor Agent](https://github.com/Cursor Agent)) - Auto-commit pending changes before rebase - PR synchronize ([@Cursor Agent](https://github.com/Cursor Agent)) - Checkpoint before follow-up message ([@Cursor Agent](https://github.com/Cursor Agent)) - Add comprehensive test coverage for ImGuiApp components and edge cases ([@Cursor Agent](https://github.com/Cursor Agent)) - Refactor test suite into focused, organized test classes ([@Cursor Agent](https://github.com/Cursor Agent)) - Refactor performance settings: remove Ups, add NotVisibleFps and flags ([@Cursor Agent](https://github.com/Cursor Agent)) - Merge remote-tracking branch 'origin/main' into cursor/increase-imguiapp-test-coverage-c9d4 ([@matt-edmondson](https://github.com/matt-edmondson)) ## v2.0.11 (patch) Changes sinc... (truncated due to NuGet length limits)

Version Downloads Last updated
2.3.3 13 02/14/2026
2.3.2 13 02/14/2026
2.3.1 55 02/10/2026
2.3.0 54 02/10/2026
2.2.12-pre.1 54 02/10/2026
2.2.11 54 02/10/2026
2.2.11-pre.2 56 02/06/2026
2.2.11-pre.1 54 02/05/2026
2.2.10 55 02/03/2026
2.2.10-pre.2 54 02/01/2026
2.2.10-pre.1 56 01/31/2026
2.2.9 56 01/31/2026
2.2.9-pre.2 56 01/31/2026
2.2.9-pre.1 53 01/31/2026
2.2.8 57 01/31/2026
2.2.7 56 01/30/2026
2.2.6 55 01/29/2026
2.2.5 57 01/29/2026
2.2.4 56 01/29/2026
2.2.3 59 01/27/2026
2.2.2 58 01/27/2026
2.2.1 87 01/09/2026
2.2.1-pre.1 142 11/24/2025
2.2.0 143 11/23/2025
2.1.10 139 11/23/2025
2.1.10-pre.2 140 11/23/2025
2.1.10-pre.1 141 11/19/2025
2.1.9 142 09/09/2025
2.1.8 149 09/08/2025