Events and delegates
The event system of Yue heavily relies on std::function, it is strongly
recommended to know more about std::function before continue.
Event
Yue uses the signal/slot pattern for the event system, each event is a signal that can be connected by multiple slots, and event handlers are slots that can connect to multiple signals.
In Yue signal is represented as the nu::Signal<Sig>
template class, while slot is represented as the std::function<Sig> template
class. Sig is the signature of slot.
void Main() {
nu::App::GetCurrent()->on_ready.Connect([] {
LOG(ERROR) << "OnReady";
});
}
Preventing the default behavior
Certain events have default behaviors that can be prevented, which require the
slots to return bool.
Returning true means preventing the default behavior, and other slots of the
event will not be executed. While returning false means the slot is only
observing the event.
bool OnMouseDown(nu::Responder* self, const nu::MouseEvent& event) {
return true;
}
void Main(nu::View* view) {
view->on_mouse_down.Connect(&OnMouseDown);
}
Delegate
Unlike event that can have multiple handlers connected, a delegate is a single
std::function<Sig> data member that can only be assigned by one function.
void Main(nu::Window* window) {
window->should_close = [](nu::Responder* self) { return false; };
}
The delegates are usually used over events when the library is requesting data dynamically.