mirror of
https://github.com/slint-ui/slint.git
synced 2025-09-28 12:54:45 +00:00
runtime: Add a Signal class
Not very functional yet
This commit is contained in:
parent
4f22e2c341
commit
83d206ea39
5 changed files with 158 additions and 2 deletions
33
api/sixtyfps-cpp/include/sixtyfps_signals.h
Normal file
33
api/sixtyfps-cpp/include/sixtyfps_signals.h
Normal file
|
@ -0,0 +1,33 @@
|
|||
#pragma once
|
||||
#include <string_view>
|
||||
#include "sixtyfps_signals_internal.h"
|
||||
|
||||
namespace sixtyfps {
|
||||
|
||||
// template<typename... Args>
|
||||
struct Signal
|
||||
{
|
||||
Signal() { internal::sixtyfps_signal_init(&inner); }
|
||||
~Signal() { internal::sixtyfps_signal_drop(&inner); }
|
||||
Signal(const Signal &) = delete;
|
||||
Signal(Signal &&) = delete;
|
||||
Signal &operator=(const Signal &) = delete;
|
||||
|
||||
template<typename F>
|
||||
void set_handler(F binding)
|
||||
{
|
||||
internal::sixtyfps_signal_set_handler(
|
||||
&inner,
|
||||
[](const void *user_data, const void *value) {
|
||||
(*reinterpret_cast<F *>(user_data))(value);
|
||||
},
|
||||
new F(binding),
|
||||
[](const void *user_data) { delete reinterpret_cast<F *>(user_data); });
|
||||
}
|
||||
|
||||
void emit(void *data) const { internal::sixtyfps_signal_emit(&inner, data); }
|
||||
|
||||
private:
|
||||
internal::SignalOpaque inner;
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue