MicroUI: 一个基于 ANSI C 的极简立即模式 UI 库

概述

MicroUI 是一个用 ANSI C 编写的微型、可移植的立即模式 UI 库。它专为那些需要极简图形界面且不想承担大型框架开销的开发者而设计。该库的特点是极致的极简主义,仅包含约 1,100 行源代码 (SLOC),并且能够在固定大小的内存区域内运行,无需额外的内存分配。

核心特性与技术规范

MicroUI 提供了一套内置控件和灵活的布局系统,同时严格遵守 ANSI C 标准以实现最大的可移植性。

内置 UI 控件

MicroUI 包括几个标准界面元素:

  • 窗口 (Windows)
  • 可滚动面板 (Scrollable panels)
  • 按钮 (Buttons)
  • 滑块 (Sliders)
  • 文本框 (Textboxes)
  • 标签 (Labels)
  • 复选框 (Checkboxes)
  • 自动换行文本 (Word-wrapped text)

技术约束

  • 内存管理: 该库在固定大小的内存区域内工作,这意味着在运行时不会分配额外的内存。
  • 渲染无关性: MicroUI 不包含内置的图形后端。它可以与任何能够绘制矩形和文本的渲染系统配合使用,只需用户提供渲染器后端函数即可。
  • 定制化: 该库旨在允许用户轻松实现并添加他们自己的自定义控件。

性能与占用对比

与其他立即模式 GUI (IMGUI) 库相比,MicroUI 展示了显著更小的二进制文件大小。在基于 sokol headers 运行的演示中,压缩后的下载大小如下:

  • MicroUI: 79.6 KBytes
  • Nuklear: 155 KB
  • Dear ImGui: 491 KB

这使得 MicroUI 成为二进制文件大小受限项目的理想高效选择。

集成与生态系统

MicroUI 已被集成到各种环境中,并用于各种技术概念验证 (PoC)。

语言与框架支持

  • Odin: MicroUI 已包含在 Odin vendor libraries 中,并经常用于在 Raylib 中创建调试菜单。
  • WebAssembly (WASM): 该库可以被编译为 WASM,从而允许在浏览器环境中渲染 UI 界面。
  • 跨平台二进制文件: 它已与 Cosmopolitan Libc 结合使用,用于创建“一次构建,到处运行”的图形应用程序,使其能够在 Linux、Windows 和 BSDs 上运行。

实现要求

由于 MicroUI 是渲染无关的,开发者必须处理与实际窗口系统(如 X11、Win32 或 TUI)的接口,并提供绘制基本原语(矩形和文本)所需的函数。

社区洞察与局限性

虽然因其极简主义而受到称赞,但社区也指出了若干权衡与技术障碍。

已知问题

一些用户报告称,该库目前处于“弃置软件 (abandonware)”状态,其中一个特定的 draw call 迭代器 Bug 会导致指针访问不对齐。这在具有严格对齐要求的环境(如 Zig)中可能会导致 panic。

权衡

  • 无障碍支持: 该库缺乏内置的无障碍支持,这被一些开发者视为生产级软件的必要条件。

  • 复杂度: 由于它仅提供基础功能,需要更多“花哨功能”的开发者可能会发现该库对于复杂的应用需求来说过于受限。

  • 与保留模式的对比: 与保留模式 GUI(如 libagar)不同,MicroUI 不维护 UI 树的持久状态,这是立即模式范式的典型特征。

Sources