#事件处理 #防抖 #事件 #fltk #控件 #节流 #频率

debounce_fltk

适用于 FLTK 应用的简单防抖和节流工具。可用于控制 UI 事件处理的频率或控制其他非 UI 事件的函数调用频率。支持在预设计时器到期后一次性或重复执行任务。非宏处理,纯代码控制。依赖 tokio 实现。

8 个版本 (4 个重大更新)

0.5.0 2024 年 3 月 28 日
0.4.2 2024 年 3 月 1 日
0.3.0 2024 年 3 月 1 日
0.2.2 2024 年 2 月 25 日
0.1.0 2024 年 2 月 24 日

#418 in GUI

每月下载 48
fltkrs-richdisplay 中使用

MIT 许可证

36KB
403

debounce_fltk

适用于 FLTK 应用的简单防抖和节流工具。可用于控制 UI 事件处理的频率或控制其他非 UI 事件的函数调用频率。它还支持在预设计时器到期后一次性或重复执行任务。非宏处理,纯代码控制。依赖 tokio 实现。

使用示例

    let mut debounce_update = TokioDebounce::new_debounce({
        let vp = version_package.clone();
        let mut script_editor = script_editor.clone();
        let tree = tree.clone();
        let editor_window = editor_window.clone();
        move |_| {
            // debug!("tree callback, {:?}", tree.first_selected_item());
            update_level_record(tree.clone(), vp.clone(), script_editor.clone(), editor_window.clone());
            update_tree_stat(tree.clone(), &mut script_editor);
        }
    }, Duration::from_millis(100), true);

    tree.set_callback({
        let mut script_editor = script_editor.clone();
        move |tree| {
            // debug!("tree callback, {:?}", tree.first_selected_item());

            if let Some(sel) = tree.first_selected_item() {
                let depth = sel.depth();
                if depth == 2 {
                    if let Err(_e) = script_editor.config_tabs.set_value(&script_editor.config_trigger_flex) {
                        // error!("切换触发器标签页时出错:{:?}", e);
                    }
                } else if depth == 3 {
                    if let Err(_e) = script_editor.config_tabs.set_value(&script_editor.config_expr_flex) {
                        // error!("切换触发器标签页时出错:{:?}", e);
                    }
                }
            }

            /*
            当鼠标点选某个树节点时,Changed事件会连续发生两次:第一次取消选择状态,第二次选中某个节点。
            因此这里需要做防抖处理,只处理有限时段内最后一次事件即可。
             */
            debounce_update.update_param(());
        }
    });

依赖项

~17–24MB
~381K SLoC