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.