diff options
author | Delan Azabani <dazabani@igalia.com> | 2023-12-12 14:36:27 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-12 06:36:27 +0000 |
commit | 8a226fdb1975ae1df8d1a673eb3dca9f2bb771aa (patch) | |
tree | 086be8a112b7f1fdec4c96035327acfa69fce856 /components/shared | |
parent | 676c170b07551deabb9947f1f7ce6e0d1ec50974 (diff) | |
download | servo-8a226fdb1975ae1df8d1a673eb3dca9f2bb771aa.tar.gz servo-8a226fdb1975ae1df8d1a673eb3dca9f2bb771aa.zip |
constellation: notify embedder when events are hit-tested to browsers (#30841)
* constellation: notify embedder when events are hit-tested to browsers
* fix compile error in libsimpleservo
* impl From<&CompositorEvent> for CompositorEventVariant
* remove msg temporaries in Constellation::forward_event
* use single wildcard arm in EventDelivered case in handle_servo_events
Diffstat (limited to 'components/shared')
-rw-r--r-- | components/shared/embedder/lib.rs | 16 | ||||
-rw-r--r-- | components/shared/script/lib.rs | 17 |
2 files changed, 32 insertions, 1 deletions
diff --git a/components/shared/embedder/lib.rs b/components/shared/embedder/lib.rs index ecaf57a14bb..d3e67bd9d24 100644 --- a/components/shared/embedder/lib.rs +++ b/components/shared/embedder/lib.rs @@ -208,6 +208,21 @@ pub enum EmbedderMsg { OnDevtoolsStarted(Result<u16, ()>, String), /// Compositing done, but external code needs to present. ReadyToPresent, + /// The given event was delivered to a pipeline in the given browser. + EventDelivered(CompositorEventVariant), +} + +/// The variant of CompositorEvent that was delivered to a pipeline. +#[derive(Debug, Deserialize, Serialize)] +pub enum CompositorEventVariant { + ResizeEvent, + MouseButtonEvent, + MouseMoveEvent, + TouchEvent, + WheelEvent, + KeyboardEvent, + CompositionEvent, + IMEDismissedEvent, } impl Debug for EmbedderMsg { @@ -245,6 +260,7 @@ impl Debug for EmbedderMsg { EmbedderMsg::OnDevtoolsStarted(..) => write!(f, "OnDevtoolsStarted"), EmbedderMsg::ShowContextMenu(..) => write!(f, "ShowContextMenu"), EmbedderMsg::ReadyToPresent => write!(f, "ReadyToPresent"), + EmbedderMsg::EventDelivered(..) => write!(f, "HitTestedEvent"), } } } diff --git a/components/shared/script/lib.rs b/components/shared/script/lib.rs index 77782255a4c..fac68c03745 100644 --- a/components/shared/script/lib.rs +++ b/components/shared/script/lib.rs @@ -27,7 +27,7 @@ use canvas_traits::webgl::WebGLPipeline; use compositor::ScrollTreeNodeId; use crossbeam_channel::{Receiver, RecvTimeoutError, Sender}; use devtools_traits::{DevtoolScriptControlMsg, ScriptToDevtoolsControlMsg, WorkerId}; -use embedder_traits::Cursor; +use embedder_traits::{CompositorEventVariant, Cursor}; use euclid::default::Point2D; use euclid::{Length, Rect, Scale, Size2D, UnknownUnit, Vector2D}; use gfx_traits::Epoch; @@ -571,6 +571,21 @@ pub enum CompositorEvent { IMEDismissedEvent, } +impl From<&CompositorEvent> for CompositorEventVariant { + fn from(value: &CompositorEvent) -> Self { + match value { + CompositorEvent::ResizeEvent(..) => CompositorEventVariant::ResizeEvent, + CompositorEvent::MouseButtonEvent(..) => CompositorEventVariant::MouseButtonEvent, + CompositorEvent::MouseMoveEvent(..) => CompositorEventVariant::MouseMoveEvent, + CompositorEvent::TouchEvent(..) => CompositorEventVariant::TouchEvent, + CompositorEvent::WheelEvent(..) => CompositorEventVariant::WheelEvent, + CompositorEvent::KeyboardEvent(..) => CompositorEventVariant::KeyboardEvent, + CompositorEvent::CompositionEvent(..) => CompositorEventVariant::CompositionEvent, + CompositorEvent::IMEDismissedEvent => CompositorEventVariant::IMEDismissedEvent, + } + } +} + /// Requests a TimerEvent-Message be sent after the given duration. #[derive(Debug, Deserialize, Serialize)] pub struct TimerEventRequest( |