跳到主要内容

xui

立即模式 (Immediate Mode) GUI 库。提供声明式 UI 编程范式,无需维护窗口和控件状态,每帧通过 API 调用绘制界面。

核心概念

立即模式 GUI 的特点:

  • 无状态:UI 代码每帧从头执行,不维护控件树
  • 声明式xui_button() 返回点击状态,无需注册回调
  • 命令缓冲:UI 调用记录到命令列表,批量渲染到 Surface
  • 池化管理:窗口、弹簧动画等保留状态通过 ID 池自动管理

典型用法

void ui_frame(struct xui_context_t * ctx)
{
if(xui_begin_window(ctx, "My Window", &(struct region_t){ 50, 50, 400, 300 }))
{
if(xui_button(ctx, "Click Me"))
{
/* 按钮被点击 */
}

xui_text(ctx, "Hello, XUI!");
xui_end_window(ctx);
}
}

/* 主循环 */
xui_loop(ctx, ui_frame);

创建与销毁

/* 创建上下文 */
struct xui_context_t * xui_context_alloc(fb, input, orientation, data);

/* 设置窗口变换矩阵 */
void xui_set_matrix(ctx, matrix);

/* 加载主题样式(JSON) */
void xui_load_style(ctx, json, len);

/* 加载多语言翻译表(JSON) */
void xui_load_lang(ctx, json, len);

/* 加载图像到 LRU 缓存 */
struct surface_t * xui_load_surface(ctx, path);

/* 主循环,每帧调用用户函数 */
void xui_loop(ctx, func);

/* 销毁上下文 */
void xui_context_free(ctx);

帧开始/结束

/* 开始一帧(清除命令列表、处理输入) */
void xui_begin(ctx);

/* 结束一帧(提交命令列表到 Surface 并呈现) */
void xui_end(ctx);

/* 退出主循环 */
void xui_exit(ctx);

容器

函数说明
xui_begin_window_ex(ctx, title, rect, opt)开始窗口,返回是否可见
xui_end_window(ctx)结束窗口
xui_begin_panel_ex(ctx, title, opt)开始面板
xui_end_panel(ctx)结束面板
xui_begin_popup(ctx, rect)开始弹出框
xui_end_popup(ctx)结束弹出框

窗口选项

选项说明
XUI_WINDOW_FULLSCREEN全屏
XUI_WINDOW_TRANSPARENT透明背景
XUI_WINDOW_NOTITLE无标题栏
XUI_WINDOW_NOCLOSE无关闭按钮
XUI_WINDOW_NORESIZE不可调整大小
XUI_WINDOW_POPUP弹出模式

控件

函数说明
xui_button(ctx, label)按钮,点击返回 TRUE
xui_button_ex(ctx, icon, label, opt)按钮(带图标和选项)
xui_checkbox(ctx, label, state)复选框,返回修改后的状态
xui_toggle(ctx, label, state)开关,返回修改后的状态
xui_radio(ctx, label, state, index)单选按钮,选中时返回 index
xui_slider(ctx, value, low, high, step)滑块,返回调整后的值
xui_number(ctx, value, step)数字输入框,返回修改后的值
xui_textedit(ctx, buf, len)文本编辑框,需要缓冲区和长度
xui_colorpicker(ctx, color)颜色选择器,返回选择的颜色
xui_progress(ctx, value, low, high)进度条
xui_radialbar(ctx, value, low, high)径向进度条
xui_spinner(ctx)旋转加载指示器
xui_collapse(ctx, title, opt)折叠面板,返回展开状态
xui_tree(ctx, name)树节点,返回展开状态
xui_tabbar(ctx, labels, n)标签栏,返回当前选中索引

按钮样式选项

选项说明
XUI_BUTTON_PRIMARY/SECONDARY/SUCCESS/INFO/WARNING/DANGER颜色样式
XUI_BUTTON_ROUNDED圆角
XUI_BUTTON_OUTLINE边框模式

标签与文本

函数说明
xui_label(ctx, fmt, ...)静态标签
xui_text(ctx, fmt, ...)自动换行文本
xui_text_ex(ctx, opt, fmt, ...)文本(带对齐等选项)

图标与图像

函数说明
xui_icon(ctx, family, code)图标
xui_image(ctx, s, m)图像显示
xui_badge(ctx, fmt, ...)徽章
xui_chart(ctx, values, n)图表
xui_split(ctx, vertical, fix)分隔条(返回拖动调整后的值)
xui_cursor(ctx, x, y)光标位置
xui_glass(ctx, x, y, w, h, radius)毛玻璃效果

布局

函数说明
xui_layout_row(ctx, items, widths, height)设置行布局
xui_layout_width(ctx, width)设置控件宽度
xui_layout_height(ctx, height)设置控件高度
xui_layout_begin_column(ctx)开始列布局
xui_layout_end_column(ctx)结束列布局
xui_layout_set_next(ctx, rect, relative)设置下一个控件位置
xui_layout_next(ctx)获取下一个控件区域

样式系统

通过 xui_load_style(ctx, json, len) 加载 JSON 样式配置,可定制:

类别可定制项
主题色primary/secondary/success/info/warning/danger/cancel 各含 normal/hover/active 三态
字体icon_family, font_family, style, color, size
布局width, height, padding, spacing, indent
窗口border_radius, border_width, shadow_radius, title_height
面板border_radius, border_width, shadow_radius
按钮border_radius, border_width, outline_width
输入框border_radius, border_width, outline_width
滚动条width, radius, color
分隔条width

Shell 命令

overview 命令展示所有 XUI 控件的交互演示。

overview

选项标志

标志说明
XUI_OPT_NOINTERACT禁止交互
XUI_OPT_NOSCROLL禁止滚动
XUI_OPT_HOLDFOCUS保持焦点
XUI_OPT_CLOSED默认关闭
XUI_OPT_TEXT_LEFT/RIGHT/TOP/BOTTOM/CENTER文本对齐
XUI_OPT_TEXT_SCROLL文本可滚动

输入事件

枚举说明
XUI_KEY_UP/DOWN/LEFT/RIGHT方向键
XUI_KEY_ENTER/BACK/HOME/MENU功能键
XUI_KEY_VOLUME_UP/DOWN/MUTE音量键
XUI_MOUSE_LEFT/RIGHT/MIDDLE鼠标键

命令列表 (Command List)

UI 每帧的绘制命令记录到命令列表,结束后批量渲染。支持的命令类型:

命令说明
xui_draw_line/polyline/curve线
xui_draw_triangle/rectangle/polygon
xui_draw_circle/ellipse/arc圆/弧
xui_draw_surface/icon/text图像/文本
xui_draw_ripple/glass/shadow效果
xui_draw_gradient/checkerboard填充

线程安全

/* 格式字符串(线程安全) */
const char * xui_format(ctx, fmt, ...);

多语言

/* 加载翻译表(JSON 格式:{"key": "translation"}) */
xui_load_lang(ctx, json, len);

/* 在 UI 中使用翻译(宏) */
T("hello") /* 查找翻译,找不到返回原字符串 */