Toast 提示

当前实现更新

以下说明以当前代码实现为准:

  • Toast 必须在 egui_toast_init(self, core) / egui_toast_std_init(self, core) 时直接带上目标 core

  • egui_toast_set_as_default(self)egui_toast_show(self, text)egui_toast_show_info(self, text) 都只使用对象自身在 init 时保存的 core

  • egui_view_show_toast_info(...)egui_page_base_show_toast_info(...)egui_activity_show_toast_info(...)egui_dialog_show_toast_info(...) 也只依赖对象自己已经绑定好的 core

bind_core 相关旧接口已经删除,多屏场景下应从初始化开始就把对象构造在正确屏幕上。

Toast 是 EmbeddedGUI 中的轻量级提示组件,用于在屏幕底部短暂显示一条文本信息,一段时间后自动消失。

基本用法

最简单的使用方式,一行代码即可显示提示:

egui_toast_show_info((egui_toast_t *)&toast, "Hello World");

前提是已经初始化并注册了 Toast 实例(通常在 uicode_disp0_init 中完成)。

初始化

EmbeddedGUI 提供了标准 Toast 实现 egui_toast_std_t,初始化流程:

static egui_toast_std_t toast;

void uicode_disp0_init(egui_core_t *core)
{
    // 初始化标准 Toast
    egui_toast_std_init((egui_toast_t *)&toast, core);

    // 基于 Toast 初始化时绑定的 core 设为默认 Toast
    egui_toast_set_as_default((egui_toast_t *)&toast);
}

核心 API

// 注册/清理默认 Toast
void egui_toast_set_as_default(egui_toast_t *self);
void egui_toast_clear_as_default(egui_toast_t *self);

// 直接操作 Toast 实例
void egui_toast_show(egui_toast_t *self, const char *text);
void egui_toast_show_info(egui_toast_t *self, const char *text);
void egui_toast_show_info_with_duration(egui_toast_t *self, const char *text, uint16_t duration);

// 通过已绑定 core 的对象快捷显示 Toast
void egui_view_show_toast_info(egui_view_t *self, const char *text);
void egui_page_base_show_toast_info(egui_page_base_t *self, const char *text);
void egui_activity_show_toast_info(egui_activity_t *self, const char *text);
void egui_dialog_show_toast_info(egui_dialog_t *self, const char *text);

// 设置显示持续时间(毫秒)
void egui_toast_set_duration(egui_toast_t *self, uint16_t duration);
char *egui_toast_get_str_buf(egui_toast_t *self);

持续时间配置

默认显示时间为 1000ms(1 秒),可通过两种方式修改:

// 方式 1:运行时修改
egui_toast_set_duration((egui_toast_t *)&toast, 2000);  // 2 秒

// 方式 2:编译时修改默认值(在 app_egui_config.h 中)
#define EGUI_CONFIG_PARAM_TOAST_DEFAULT_SHOW_TIME 2000

Toast 内部使用 egui_timer_t 实现自动隐藏,到时间后调用 on_hide 回调。

格式化文本

如果需要显示动态内容,可以借助 Toast 内置的字符串缓冲区:

char *p_str = egui_toast_get_str_buf((egui_toast_t *)&toast);
egui_api_sprintf(p_str, "Page %d loaded", page_index);
egui_toast_show_info((egui_toast_t *)&toast, p_str);

标准 Toast (egui_toast_std_t) 提供了 100 字节的内置缓冲区。

标准 Toast 样式

egui_toast_std_t 的默认样式:

  • 位置:屏幕底部居中,距底边 20 像素

  • 背景:黑色半透明圆角矩形(alpha=50%,圆角半径 30)

  • 文字:白色,使用默认字体,居中对齐

  • 内边距:左右 10px,上下 5px

  • 宽度:根据文本内容自适应

自定义 Toast

如需自定义样式,可以继承 egui_toast_t 并重写虚函数:

struct egui_toast_api
{
    void (*on_show)(egui_toast_t *self, const char *text);  // 显示时回调
    void (*on_hide)(egui_toast_t *self);                    // 隐藏时回调
    char *(*get_str_buf)(egui_toast_t *self);               // 获取字符串缓冲区
};

参考 src/app/egui_toast_std.c 中的实现。

相关文件

  • src/app/egui_toast.h - Toast 基类定义

  • src/app/egui_toast.c - Toast 基类实现

  • src/app/egui_toast_std.h - 标准 Toast 定义

  • src/app/egui_toast_std.c - 标准 Toast 实现

Core 解析说明

在常规单屏流程下,egui_toast_set_as_default(self)egui_toast_show(self, text)egui_toast_show_info(self, text) 等对象式入口, 当前实现中要求 Toast 在初始化时直接带上目标 core,这里不再自动绑定。

对于 egui_view_show_toast_info(...)egui_page_base_show_toast_info(...)egui_activity_show_toast_info(...)egui_dialog_show_toast_info(...) 这类对象式 helper,则会优先使用对象自己已经绑定的 core

  1. view 直接使用 view->core

  2. page/activity/dialog 优先使用各自 root_view 已绑定的 core

因此在单屏常规流程下,只要对象在初始化时已经带上正确的 core, 这些 helper 就不需要再额外传入 core 参数,也不依赖当前 active core。

只有在多屏场景下、需要操作不同屏幕对象时, 才需要从一开始就用目标屏幕的 core 去初始化对应对象。