pub(crate) struct DocumentEventHandler {Show 19 fields
window: Dom<Window>,
pending_input_events: DomRefCell<Vec<ConstellationInputEvent>>,
mouse_move_event_index: DomRefCell<Option<usize>>,
coalesced_move_event_ids: DomRefCell<Vec<InputEventId>>,
wheel_event_index: DomRefCell<Option<usize>>,
coalesced_wheel_event_ids: DomRefCell<Vec<InputEventId>>,
click_counting_info: DomRefCell<ClickCountingInfo>,
last_mouse_button_down_point: Cell<Option<Point2D<f32, CSSPixel>>>,
down_button_count: Cell<u32>,
current_hover_target: MutNullableDom<Element>,
most_recently_clicked_element: MutNullableDom<Element>,
most_recent_mousemove_point: Cell<Option<Point2D<f32, CSSPixel>>>,
current_cursor: Cell<Option<Cursor>>,
active_touch_points: DomRefCell<Vec<Dom<Touch>>>,
active_keyboard_modifiers: Cell<Modifiers>,
active_pointer_ids: DomRefCell<FxHashMap<i32, i32>>,
next_touch_pointer_id: Cell<i32>,
access_key_handlers: DomRefCell<FxHashMap<NoTrace<Code>, Dom<HTMLElement>>>,
sequential_focus_navigation_starting_point: MutNullableDom<Node>,
}Expand description
The DocumentEventHandler is a structure responsible for handling input events for
the [crate::Document] and storing data related to event handling. It exists to
decrease the size of the [crate::Document] structure.
Fields§
§window: Dom<Window>The Window element for this DocumentEventHandler.
pending_input_events: DomRefCell<Vec<ConstellationInputEvent>>Pending input events, to be handled at the next rendering opportunity.
mouse_move_event_index: DomRefCell<Option<usize>>The index of the last mouse move event in the pending input events queue.
coalesced_move_event_ids: DomRefCell<Vec<InputEventId>>The InputEventIds of mousemove events that have been coalesced.
wheel_event_index: DomRefCell<Option<usize>>The index of the last wheel event in the pending input events queue.
This is non-standard behaviour.
According to https://www.w3.org/TR/pointerevents/#dfn-coalesced-events,
we should only coalesce pointermove events.
coalesced_wheel_event_ids: DomRefCell<Vec<InputEventId>>The InputEventIds of wheel events that have been coalesced.
click_counting_info: DomRefCell<ClickCountingInfo>The number of currently down buttons, used to decide which kind of pointer event to dispatch on MouseDown/MouseUp.
current_hover_target: MutNullableDom<Element>The element that is currently hovered by the cursor.
most_recently_clicked_element: MutNullableDom<Element>The element that was most recently clicked.
most_recent_mousemove_point: Cell<Option<Point2D<f32, CSSPixel>>>The most recent mouse movement point, used for processing mouseleave events.
current_cursor: Cell<Option<Cursor>>The currently set Cursor or None if the Document isn’t being hovered
by the cursor.
active_touch_points: DomRefCell<Vec<Dom<Touch>>>§active_keyboard_modifiers: Cell<Modifiers>The active keyboard modifiers for the WebView. This is updated when receiving any input event.
active_pointer_ids: DomRefCell<FxHashMap<i32, i32>>Map from touch identifier to pointer ID for active touch points
next_touch_pointer_id: Cell<i32>Counter for generating unique pointer IDs for touch inputs
access_key_handlers: DomRefCell<FxHashMap<NoTrace<Code>, Dom<HTMLElement>>>A map holding information about currently registered access key handlers.
Implementations§
Source§impl DocumentEventHandler
impl DocumentEventHandler
pub(crate) fn new(window: &Window) -> Self
Sourcepub(crate) fn note_pending_input_event(&self, event: ConstellationInputEvent)
pub(crate) fn note_pending_input_event(&self, event: ConstellationInputEvent)
Note a pending input event, to be processed at the next update_the_rendering task.
Sourcepub(crate) fn has_pending_input_events(&self) -> bool
pub(crate) fn has_pending_input_events(&self) -> bool
Whether or not this [Document] has any pending input events to be processed during
“update the rendering.”
pub(crate) fn alternate_action_keyboard_modifier_active(&self) -> bool
pub(crate) fn handle_pending_input_events(&self, can_gc: CanGc)
fn notify_embedder_that_events_were_handled( &self, input_event_outcomes: Vec<InputEventOutcome>, )
pub(crate) fn set_cursor(&self, cursor: Option<Cursor>)
fn handle_mouse_left_viewport_event( &self, input_event: &ConstellationInputEvent, mouse_leave_event: &MouseLeftViewportEvent, can_gc: CanGc, )
fn handle_mouse_enter_leave_event( &self, event_target: DomRoot<Node>, related_target: Option<DomRoot<Node>>, event_type: FireMouseEventType, hit_test_result: &HitTestResult, input_event: &ConstellationInputEvent, can_gc: CanGc, )
Sourcefn handle_native_mouse_move_event(
&self,
input_event: &ConstellationInputEvent,
can_gc: CanGc,
)
fn handle_native_mouse_move_event( &self, input_event: &ConstellationInputEvent, can_gc: CanGc, )
fn update_current_hover_target_and_status( &self, new_hover_target: Option<DomRoot<Element>>, )
pub(crate) fn handle_refresh_cursor(&self)
fn element_for_activation(&self, element: DomRoot<Element>) -> DomRoot<Element>
https://w3c.github.io/uievents/#mouseevent-algorithms Handles native mouse down, mouse up, mouse click.
fn handle_touch_event( &self, event: EmbedderTouchEvent, input_event: &ConstellationInputEvent, can_gc: CanGc, ) -> InputEventResult
Sourcefn update_active_touch_points_when_early_return(
&self,
event: EmbedderTouchEvent,
)
fn update_active_touch_points_when_early_return( &self, event: EmbedderTouchEvent, )
Updates the active touch points when a hit test fails early.
- For
Down: No action needed; a failed down event won’t create an active point. - For
Move: No action needed; position information is unavailable, so we cannot update. - For
Up/Cancel: Remove the corresponding touch point and its pointer ID mapping.
When a touchup or touchcancel occurs at that touch point, a warning is triggered: Received touchup/touchcancel event for a non-active touch point.
Sourcefn handle_keyboard_event(
&self,
keyboard_event: EmbedderKeyboardEvent,
can_gc: CanGc,
) -> InputEventResult
fn handle_keyboard_event( &self, keyboard_event: EmbedderKeyboardEvent, can_gc: CanGc, ) -> InputEventResult
The entry point for all key processing for web content
fn handle_ime_event(&self, event: ImeEvent, can_gc: CanGc) -> InputEventResult
fn handle_wheel_event( &self, event: EmbedderWheelEvent, input_event: &ConstellationInputEvent, can_gc: CanGc, ) -> InputEventResult
fn handle_gamepad_event(&self, gamepad_event: EmbedderGamepadEvent)
Sourcefn handle_gamepad_connect(
&self,
_index: usize,
name: String,
axis_bounds: (f64, f64),
button_bounds: (f64, f64),
supported_haptic_effects: GamepadSupportedHapticEffects,
)
fn handle_gamepad_connect( &self, _index: usize, name: String, axis_bounds: (f64, f64), button_bounds: (f64, f64), supported_haptic_effects: GamepadSupportedHapticEffects, )
Sourcefn handle_gamepad_disconnect(&self, index: usize)
fn handle_gamepad_disconnect(&self, index: usize)
Sourcepub(crate) fn handle_editing_action(
&self,
element: Option<DomRoot<Element>>,
action: EditingActionEvent,
can_gc: CanGc,
) -> InputEventResult
pub(crate) fn handle_editing_action( &self, element: Option<DomRoot<Element>>, action: EditingActionEvent, can_gc: CanGc, ) -> InputEventResult
Sourcepub(crate) fn fire_clipboard_event(
&self,
target: Option<DomRoot<Element>>,
clipboard_event_type: ClipboardEventType,
can_gc: CanGc,
) -> DomRoot<ClipboardEvent>
pub(crate) fn fire_clipboard_event( &self, target: Option<DomRoot<Element>>, clipboard_event_type: ClipboardEventType, can_gc: CanGc, ) -> DomRoot<ClipboardEvent>
Sourcefn write_content_to_the_clipboard(&self, drag_data_store: &DragDataStore)
fn write_content_to_the_clipboard(&self, drag_data_store: &DragDataStore)
Sourcepub(crate) fn handle_embedder_scroll_event(
&self,
scrolled_node: ExternalScrollId,
)
pub(crate) fn handle_embedder_scroll_event( &self, scrolled_node: ExternalScrollId, )
Handle a scroll event triggered by user interactions from the embedder. https://drafts.csswg.org/cssom-view/#scrolling-events
Sourcepub(crate) fn maybe_dispatch_simulated_click(
&self,
node: &Node,
event: &KeyboardEvent,
can_gc: CanGc,
) -> bool
pub(crate) fn maybe_dispatch_simulated_click( &self, node: &Node, event: &KeyboardEvent, can_gc: CanGc, ) -> bool
https://w3c.github.io/uievents/#keydown
If the key is the Enter or (Space) key and the current focus is on a state-changing element, the default action MUST be to dispatch a click event, and a DOMActivate event if that event type is supported by the user agent.
pub(crate) fn run_default_keyboard_event_handler( &self, node: &Node, event: &KeyboardEvent, can_gc: CanGc, )
fn find_element_for_tab_focus_following_element( &self, direction: SequentialFocusDirection, starting_point: DomRoot<Node>, ) -> Option<DomRoot<Element>>
fn find_first_tab_focusable_element( &self, direction: SequentialFocusDirection, ) -> Option<DomRoot<Element>>
pub(crate) fn do_keyboard_scroll(&self, scroll: KeyboardScroll)
Sourcefn get_or_create_pointer_id_for_touch(&self, touch_id: i32) -> i32
fn get_or_create_pointer_id_for_touch(&self, touch_id: i32) -> i32
Get or create a pointer ID for the given touch identifier. Returns the pointer ID to use for this touch.
Sourcefn remove_pointer_id_for_touch(&self, touch_id: i32)
fn remove_pointer_id_for_touch(&self, touch_id: i32)
Remove the pointer ID mapping for the given touch identifier.
Sourcefn is_primary_pointer(&self, pointer_id: i32) -> bool
fn is_primary_pointer(&self, pointer_id: i32) -> bool
Check if this is the primary pointer (for touch events). The first touch to make contact is the primary pointer.
Sourcefn fire_pointer_event_for_touch(
&self,
target_element: &Element,
touch: &Touch,
pointer_id: i32,
event_name: &str,
is_primary: bool,
input_event: &ConstellationInputEvent,
hit_test_result: &HitTestResult,
can_gc: CanGc,
)
fn fire_pointer_event_for_touch( &self, target_element: &Element, touch: &Touch, pointer_id: i32, event_name: &str, is_primary: bool, input_event: &ConstellationInputEvent, hit_test_result: &HitTestResult, can_gc: CanGc, )
Fire pointerenter events hierarchically from topmost ancestor to target element. Fire pointerleave events hierarchically from target element to topmost ancestor. Used for touch devices that don’t support hover.
pub(crate) fn has_assigned_access_key(&self, element: &HTMLElement) -> bool
pub(crate) fn unassign_access_key(&self, element: &HTMLElement)
pub(crate) fn assign_access_key(&self, element: &HTMLElement, code: Code)
fn maybe_handle_accesskey(&self, event: &KeyboardEvent, can_gc: CanGc) -> bool
fn focus_and_scroll_to_element_for_key_event( &self, element: &Element, can_gc: CanGc, )
Trait Implementations§
Source§impl MallocSizeOf for DocumentEventHandler
impl MallocSizeOf for DocumentEventHandler
Source§fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize
Auto Trait Implementations§
impl !Freeze for DocumentEventHandler
impl !RefUnwindSafe for DocumentEventHandler
impl !Send for DocumentEventHandler
impl !Sync for DocumentEventHandler
impl Unpin for DocumentEventHandler
impl !UnwindSafe for DocumentEventHandler
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more