用途
Makepad Event/Action Skill 用于 Makepad 框架(makepad-widgets,dev 分支)中的事件与动作处理。它面向需要处理用户交互、组件通信和事件传播的 Makepad 开发者,提供事件系统与动作系统的模式参考。
主要能力
- 处理事件:鼠标、键盘、触摸、生命周期事件。
- 创建动作:实现组件到父级的通信。
- 理解事件流:掌握事件传播机制。
- 提供本地参考文档:./references/event-system.md(Event 枚举与处理)、./references/action-system.md(Action trait 与模式)。
使用方式
技能要求在使用前检查文档完整性:先阅读上述参考文件;若文件读取失败或为空,应提示“本地文档不完整,建议运行 /sync-crate-skills makepad --force 更新文档”,并仍基于 SKILL.md 模式与内置知识作答;若参考文件存在,则将其内容纳入回答。
事件处理:在 Widget 的 handle_event 中使用 event.hits(cx, self.area()) 判断事件是否命中组件区域,再匹配 Hit 枚举(如 FingerDown、FingerUp、FingerHoverIn、FingerHoverOut、KeyDown 等)执行相应逻辑,并通过 cx.action() 发出动作。
动作系统:使用 #[derive(Clone, Debug, DefaultNone)] 定义动作枚举(DefaultNone 自动为枚举实现 Default 并返回 None 变体);在主线程通过 cx.action() 发出动作,在任意线程通过线程安全的 Cx::post_action() 发出动作;父级通过 cx.capture_actions() 捕获子组件动作,并使用组件动作辅助方法(如 ButtonRef 的 clicked/pressed/released,TextInputRef 的 changed/returned)或遍历 actions 进行判断。
事件流:事件从平台层到达,根组件先接收,再通过 handle_event 向下传播到子组件;组件通过 cx.action() 发出动作,父级通过 cx.capture_actions() 捕获,应用处理剩余动作。
定时器与帧回调:使用 cx.start_timer(1.0) 启动定时器,在 handle_event 中匹配 Event::Timer 并比较 timer_id;使用 cx.new_next_frame() 请求下一帧回调,匹配 Event::NextFrame 并比较 frame_id。
适用场景
适用于使用 Makepad 构建 UI 时需要实现交互逻辑的场景,包括鼠标/触摸点击与悬停、键盘输入与提交、组件向父级传递动作、事件传播控制、定时器与逐帧更新等。
限制
资料未提供该技能的收费、价格、平台支持范围或效果保证等信息。文档完整性依赖本地参考文件,缺失时需运行同步命令更新。版本为 makepad-widgets(dev 分支),最后更新日期 2026-01-19,更新检查地址为 https://crates.io/crates/makepad-widgets。