1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-19 14:05:06 +00:00
serenity/Userland/Libraries/LibCore/Debounce.h
MacDue cdcdc095df LibCore: Add Core::debounce(function, timeout)
This is a simple helper to debounce a function call, such as
an event handler. It avoids the function being called until
the event as settled down (i.e. after the timeout).
2022-07-19 11:10:02 +01:00

29 lines
632 B
C++

/*
* Copyright (c) 2022, MacDue <macdue@dueutil.tech>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibCore/Timer.h>
namespace Core {
template<typename TFunction>
auto debounce(TFunction function, int timeout)
{
RefPtr<Core::Timer> timer;
return [=]<typename... T>(T... args) mutable {
auto apply_function = [=] { function(args...); };
if (timer) {
timer->stop();
timer->on_timeout = move(apply_function);
} else {
timer = Core::Timer::create_single_shot(timeout, move(apply_function));
}
timer->start();
};
};
}