diff --git a/packages/web/src/events/animation.rs b/packages/web/src/events/animation.rs index a1ed2c71c4..29f245c7f4 100644 --- a/packages/web/src/events/animation.rs +++ b/packages/web/src/events/animation.rs @@ -17,7 +17,7 @@ impl HasAnimationData for Synthetic { } fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } } diff --git a/packages/web/src/events/clipboard.rs b/packages/web/src/events/clipboard.rs index 9eeb7791a0..1b9a2bce36 100644 --- a/packages/web/src/events/clipboard.rs +++ b/packages/web/src/events/clipboard.rs @@ -11,7 +11,7 @@ impl From<&Event> for Synthetic { impl HasClipboardData for Synthetic { fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } } diff --git a/packages/web/src/events/composition.rs b/packages/web/src/events/composition.rs index 221caf9ae9..5c44be6ab0 100644 --- a/packages/web/src/events/composition.rs +++ b/packages/web/src/events/composition.rs @@ -9,7 +9,7 @@ impl HasCompositionData for Synthetic { } fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } } diff --git a/packages/web/src/events/drag.rs b/packages/web/src/events/drag.rs index 6379dbd29e..2be122cfb7 100644 --- a/packages/web/src/events/drag.rs +++ b/packages/web/src/events/drag.rs @@ -1,84 +1,84 @@ +use super::{Synthetic, WebEventExt}; use dioxus_html::{ + geometry::{ClientPoint, ElementPoint, PagePoint, ScreenPoint}, + input_data::{decode_mouse_button_set, MouseButton}, prelude::{ - InteractionElementOffset, InteractionLocation, ModifiersInteraction, PointerInteraction, + InteractionElementOffset, InteractionLocation, Modifiers, ModifiersInteraction, + PointerInteraction, }, HasDragData, HasFileData, HasMouseData, }; -use web_sys::MouseEvent; - -use super::{Synthetic, WebEventExt}; +use web_sys::DragEvent; -pub(crate) struct WebDragData { - raw: Synthetic, -} +impl InteractionLocation for Synthetic { + fn client_coordinates(&self) -> ClientPoint { + ClientPoint::new(self.event.client_x().into(), self.event.client_y().into()) + } -impl WebDragData { - pub fn new(raw: MouseEvent) -> Self { - Self { - raw: Synthetic::new(raw), - } + fn page_coordinates(&self) -> PagePoint { + PagePoint::new(self.event.page_x().into(), self.event.page_y().into()) } -} -impl HasDragData for WebDragData { - fn as_any(&self) -> &dyn std::any::Any { - &self.raw as &dyn std::any::Any + fn screen_coordinates(&self) -> ScreenPoint { + ScreenPoint::new(self.event.screen_x().into(), self.event.screen_y().into()) } } -impl HasMouseData for WebDragData { - fn as_any(&self) -> &dyn std::any::Any { - &self.raw as &dyn std::any::Any +impl InteractionElementOffset for Synthetic { + fn element_coordinates(&self) -> ElementPoint { + ElementPoint::new(self.event.offset_x().into(), self.event.offset_y().into()) } } -impl PointerInteraction for WebDragData { - fn trigger_button(&self) -> Option { - self.raw.trigger_button() - } +impl ModifiersInteraction for Synthetic { + fn modifiers(&self) -> Modifiers { + let mut modifiers = Modifiers::empty(); - fn held_buttons(&self) -> dioxus_html::input_data::MouseButtonSet { - self.raw.held_buttons() - } -} + if self.event.alt_key() { + modifiers.insert(Modifiers::ALT); + } + if self.event.ctrl_key() { + modifiers.insert(Modifiers::CONTROL); + } + if self.event.meta_key() { + modifiers.insert(Modifiers::META); + } + if self.event.shift_key() { + modifiers.insert(Modifiers::SHIFT); + } -impl ModifiersInteraction for WebDragData { - fn modifiers(&self) -> dioxus_html::prelude::Modifiers { - self.raw.modifiers() + modifiers } } -impl InteractionElementOffset for WebDragData { - fn coordinates(&self) -> dioxus_html::geometry::Coordinates { - self.raw.coordinates() +impl PointerInteraction for Synthetic { + fn held_buttons(&self) -> dioxus_html::input_data::MouseButtonSet { + decode_mouse_button_set(self.event.buttons()) } - fn element_coordinates(&self) -> dioxus_html::geometry::ElementPoint { - self.raw.element_coordinates() + fn trigger_button(&self) -> Option { + Some(MouseButton::from_web_code(self.event.button())) } } -impl InteractionLocation for WebDragData { - fn client_coordinates(&self) -> dioxus_html::geometry::ClientPoint { - self.raw.client_coordinates() - } - - fn screen_coordinates(&self) -> dioxus_html::geometry::ScreenPoint { - self.raw.screen_coordinates() +impl HasMouseData for Synthetic { + fn as_any(&self) -> &dyn std::any::Any { + &self.event } +} - fn page_coordinates(&self) -> dioxus_html::geometry::PagePoint { - self.raw.page_coordinates() +impl HasDragData for Synthetic { + fn as_any(&self) -> &dyn std::any::Any { + &self.event } } -impl HasFileData for WebDragData { +impl HasFileData for Synthetic { #[cfg(feature = "file_engine")] fn files(&self) -> Option> { use wasm_bindgen::JsCast; let files = self - .raw .event .dyn_ref::() .and_then(|drag_event| { @@ -97,12 +97,11 @@ impl HasFileData for WebDragData { } impl WebEventExt for dioxus_html::DragData { - type WebEvent = web_sys::MouseEvent; + type WebEvent = web_sys::DragEvent; #[inline(always)] - fn try_as_web_event(&self) -> Option { - self.downcast::() - .map(|data| &data.raw.event) - .cloned() + fn try_as_web_event(&self) -> Option { + self.downcast::>() + .map(|data| data.event.clone()) } } diff --git a/packages/web/src/events/focus.rs b/packages/web/src/events/focus.rs index befaadfab9..6089783891 100644 --- a/packages/web/src/events/focus.rs +++ b/packages/web/src/events/focus.rs @@ -4,7 +4,7 @@ use super::{Synthetic, WebEventExt}; impl HasFocusData for Synthetic { fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } } diff --git a/packages/web/src/events/keyboard.rs b/packages/web/src/events/keyboard.rs index 03a8bbded9..bbc99f98e7 100644 --- a/packages/web/src/events/keyboard.rs +++ b/packages/web/src/events/keyboard.rs @@ -31,7 +31,7 @@ impl HasKeyboardData for Synthetic { } fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } } diff --git a/packages/web/src/events/load.rs b/packages/web/src/events/load.rs index a797941458..07879c2b2a 100644 --- a/packages/web/src/events/load.rs +++ b/packages/web/src/events/load.rs @@ -23,7 +23,7 @@ impl HasImageData for WebImageEvent { } fn as_any(&self) -> &dyn Any { - &self.raw as &dyn Any + &self.raw } } diff --git a/packages/web/src/events/media.rs b/packages/web/src/events/media.rs index bfd3d33a35..b33116ac2e 100644 --- a/packages/web/src/events/media.rs +++ b/packages/web/src/events/media.rs @@ -1,10 +1,9 @@ -use dioxus_html::HasMediaData; - use super::{Synthetic, WebEventExt}; +use dioxus_html::HasMediaData; impl HasMediaData for Synthetic { fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } } diff --git a/packages/web/src/events/mod.rs b/packages/web/src/events/mod.rs index 98d3e3bbed..d38d024b28 100644 --- a/packages/web/src/events/mod.rs +++ b/packages/web/src/events/mod.rs @@ -1,7 +1,6 @@ use dioxus_html::{ DragData, FormData, HtmlEventConverter, ImageData, MountedData, PlatformEventData, }; -use drag::WebDragData; use form::WebFormData; use load::WebImageEvent; use wasm_bindgen::JsCast; @@ -78,7 +77,9 @@ impl HtmlEventConverter for WebEventConverter { #[inline(always)] fn convert_drag_data(&self, event: &dioxus_html::PlatformEventData) -> dioxus_html::DragData { let event = downcast_event(event); - DragData::new(WebDragData::new(event.raw.clone().unchecked_into())) + DragData::new(Synthetic::new( + event.raw.clone().unchecked_into::(), + )) } #[inline(always)] diff --git a/packages/web/src/events/mounted.rs b/packages/web/src/events/mounted.rs index bf0dafc1a6..5044a09eb0 100644 --- a/packages/web/src/events/mounted.rs +++ b/packages/web/src/events/mounted.rs @@ -61,7 +61,7 @@ impl dioxus_html::RenderedElementBacking for Synthetic { } fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } fn scroll_to( diff --git a/packages/web/src/events/mouse.rs b/packages/web/src/events/mouse.rs index 22b181174c..accb9e9dbd 100644 --- a/packages/web/src/events/mouse.rs +++ b/packages/web/src/events/mouse.rs @@ -5,7 +5,7 @@ use dioxus_html::{ InteractionElementOffset, InteractionLocation, Modifiers, ModifiersInteraction, PointerInteraction, }, - HasDragData, HasFileData, HasMouseData, + HasMouseData, }; use web_sys::MouseEvent; @@ -64,15 +64,7 @@ impl PointerInteraction for Synthetic { impl HasMouseData for Synthetic { fn as_any(&self) -> &dyn std::any::Any { - self - } -} - -impl HasFileData for Synthetic {} - -impl HasDragData for Synthetic { - fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } } diff --git a/packages/web/src/events/pointer.rs b/packages/web/src/events/pointer.rs index abc9d7d85a..8513bcc1bf 100644 --- a/packages/web/src/events/pointer.rs +++ b/packages/web/src/events/pointer.rs @@ -53,7 +53,7 @@ impl HasPointerData for Synthetic { } fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } } diff --git a/packages/web/src/events/resize.rs b/packages/web/src/events/resize.rs index 028abe69d1..77ac93f9f8 100644 --- a/packages/web/src/events/resize.rs +++ b/packages/web/src/events/resize.rs @@ -22,7 +22,7 @@ impl From<&Event> for Synthetic { impl HasResizeData for Synthetic { fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } fn get_border_box_size(&self) -> ResizeResult { diff --git a/packages/web/src/events/selection.rs b/packages/web/src/events/selection.rs index d68a6ec96e..16a87f0555 100644 --- a/packages/web/src/events/selection.rs +++ b/packages/web/src/events/selection.rs @@ -1,10 +1,9 @@ -use dioxus_html::HasSelectionData; - use super::{Synthetic, WebEventExt}; +use dioxus_html::HasSelectionData; impl HasSelectionData for Synthetic { fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } } diff --git a/packages/web/src/events/toggle.rs b/packages/web/src/events/toggle.rs index 67d2f76b3c..24a5727284 100644 --- a/packages/web/src/events/toggle.rs +++ b/packages/web/src/events/toggle.rs @@ -1,10 +1,9 @@ -use dioxus_html::HasToggleData; - use super::{Synthetic, WebEventExt}; +use dioxus_html::HasToggleData; impl HasToggleData for Synthetic { fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } } diff --git a/packages/web/src/events/touch.rs b/packages/web/src/events/touch.rs index 4a108e4f7a..d8fcfc015e 100644 --- a/packages/web/src/events/touch.rs +++ b/packages/web/src/events/touch.rs @@ -60,7 +60,7 @@ impl dioxus_html::events::HasTouchData for Synthetic { } fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } } @@ -82,7 +82,7 @@ impl HasTouchPointData for Synthetic { } fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } } diff --git a/packages/web/src/events/transition.rs b/packages/web/src/events/transition.rs index ee0638cbc2..d0156de02e 100644 --- a/packages/web/src/events/transition.rs +++ b/packages/web/src/events/transition.rs @@ -17,6 +17,6 @@ impl HasTransitionData for Synthetic { } fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } } diff --git a/packages/web/src/events/wheel.rs b/packages/web/src/events/wheel.rs index c32889cd85..f21f6907ba 100644 --- a/packages/web/src/events/wheel.rs +++ b/packages/web/src/events/wheel.rs @@ -22,13 +22,13 @@ impl HasWheelData for Synthetic { } fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } } impl HasMouseData for Synthetic { fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } } @@ -85,7 +85,7 @@ impl PointerInteraction for Synthetic { impl HasScrollData for Synthetic { fn as_any(&self) -> &dyn std::any::Any { - self + &self.event } }