What do you think of defining the callback to `std::function<void(EventMouse* event)>` to avoid cast?