listener handles, auto-clean destroyed listeners, minor refactor

This commit is contained in:
Aleksander
2025-07-06 20:53:40 +02:00
parent 92444bb5c4
commit 857c5ec865
16 changed files with 348 additions and 182 deletions

View File

@@ -6,7 +6,7 @@ use crate::{
drawing,
event::{
CallbackData, CallbackDataCommon, CallbackMetadata, Event, EventAlterables, EventListener,
EventListenerKind, EventRefs, MouseWheelEvent,
EventListenerCollection, EventListenerKind, EventListenerVec, EventRefs, MouseWheelEvent,
},
layout::{Layout, WidgetID},
transform_stack::TransformStack,
@@ -135,9 +135,10 @@ impl EventParams<'_> {
}
pub enum EventResult {
Pass,
Consumed,
Outside,
Pass, // widget acknowledged it and allows the event to pass to the children
Consumed, // widget triggered an action, do not pass to children
Outside, // widget acknowledged this event but ignores it due the fact the mouse is not hovered over it
Unused, // widget doesn't have any events attached
}
fn get_scroll_enabled(style: &taffy::Style) -> (bool, bool) {
@@ -184,7 +185,7 @@ impl dyn WidgetObj {
macro_rules! call_event {
($self:ident, $listeners:ident, $widget_id:ident, $node_id:ident, $params:ident, $kind:ident, $user_data:expr, $metadata:expr) => {
for listener in $listeners {
for listener in $listeners.iter() {
if let Some(callback) = listener.callback_for_kind(EventListenerKind::$kind) {
let mut data = CallbackData {
obj: $self.obj.as_mut(),
@@ -318,7 +319,7 @@ impl WidgetState {
pub fn process_event<'a, U1, U2>(
&mut self,
widget_id: WidgetID,
listeners: &[EventListener<U1, U2>],
listeners: &EventListenerVec<U1, U2>,
node_id: taffy::NodeId,
event: &Event,
user_data: &mut (&mut U1, &mut U2),