wip: fix some event stuff for web and core
This commit is contained in:
1 parent
dfe9f86bff
commit
725b4a1d7f
8 files changed
+101
-57
No files matched your search
@@ -1,7 +1,7 @@
|
||||
use std::{collections::HashMap, fmt::Debug, rc::Rc, sync::Arc};
|
||||
|
||||
use dioxus_core::{
|
||||
events::{on::GenericEventInner, SyntheticEvent, UiEvent},
|
||||
events::{on::GenericEventInner, SyntheticEvent, UserEvent},
|
||||
mutations::NodeRefMutation,
|
||||
scheduler::SchedulerMsg,
|
||||
DomEdit, ElementId, ScopeId,
|
||||
@@ -458,7 +458,7 @@ fn virtual_event_from_websys_event(event: web_sys::Event) -> SyntheticEvent {
|
||||
}
|
||||
"change" => {
|
||||
let evt = event.dyn_into().unwrap();
|
||||
SyntheticEvent::UIEvent(UIEvent(Rc::new(WebsysGenericUiEvent(evt))))
|
||||
SyntheticEvent::GenericEvent(GenericEvent(Rc::new(WebsysGenericUiEvent(evt))))
|
||||
}
|
||||
"input" | "invalid" | "reset" | "submit" => {
|
||||
let evt: web_sys::InputEvent = event.clone().dyn_into().unwrap();
|
||||
@@ -485,7 +485,7 @@ fn virtual_event_from_websys_event(event: web_sys::Event) -> SyntheticEvent {
|
||||
}
|
||||
"scroll" => {
|
||||
let evt: web_sys::UiEvent = event.clone().dyn_into().unwrap();
|
||||
SyntheticEvent::UIEvent(UIEvent(Rc::new(WebsysGenericUiEvent(evt))))
|
||||
SyntheticEvent::GenericEvent(GenericEvent(Rc::new(WebsysGenericUiEvent(evt))))
|
||||
}
|
||||
"wheel" => {
|
||||
let evt: web_sys::WheelEvent = event.clone().dyn_into().unwrap();
|
||||
@@ -512,14 +512,14 @@ fn virtual_event_from_websys_event(event: web_sys::Event) -> SyntheticEvent {
|
||||
}
|
||||
_ => {
|
||||
let evt: web_sys::UiEvent = event.clone().dyn_into().unwrap();
|
||||
SyntheticEvent::UIEvent(UIEvent(Rc::new(WebsysGenericUiEvent(evt))))
|
||||
SyntheticEvent::GenericEvent(GenericEvent(Rc::new(WebsysGenericUiEvent(evt))))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// This function decodes a websys event and produces an EventTrigger
|
||||
/// With the websys implementation, we attach a unique key to the nodes
|
||||
fn decode_trigger(event: &web_sys::Event) -> anyhow::Result<UiEvent> {
|
||||
fn decode_trigger(event: &web_sys::Event) -> anyhow::Result<UserEvent> {
|
||||
log::debug!("Handling event!");
|
||||
|
||||
let target = event
|
||||
@@ -561,7 +561,7 @@ fn decode_trigger(event: &web_sys::Event) -> anyhow::Result<UiEvent> {
|
||||
let triggered_scope = gi_id;
|
||||
// let triggered_scope: ScopeId = KeyData::from_ffi(gi_id).into();
|
||||
log::debug!("Triggered scope is {:#?}", triggered_scope);
|
||||
Ok(UiEvent {
|
||||
Ok(UserEvent {
|
||||
name: event_name_from_typ(&typ),
|
||||
event: virtual_event_from_websys_event(event.clone()),
|
||||
mounted_dom_id: Some(ElementId(real_id as usize)),
|
||||
|
||||
@@ -171,11 +171,71 @@ impl KeyboardEventInner for WebsysKeyboardEvent {
|
||||
}
|
||||
|
||||
pub struct WebsysGenericUiEvent(pub UiEvent);
|
||||
impl GenericEventInner for WebsysGenericUiEvent {
|
||||
fn raw_event(&self) -> &dyn std::any::Any {
|
||||
// self.0.raw_event()
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn bubbles(&self) -> bool {
|
||||
self.0.bubbles()
|
||||
}
|
||||
|
||||
fn cancel_bubble(&self) {
|
||||
self.0.cancel_bubble();
|
||||
}
|
||||
|
||||
fn cancelable(&self) -> bool {
|
||||
self.0.cancelable()
|
||||
}
|
||||
|
||||
fn composed(&self) -> bool {
|
||||
self.0.composed()
|
||||
}
|
||||
|
||||
fn current_target(&self) {
|
||||
// self.0.current_target()
|
||||
}
|
||||
|
||||
fn default_prevented(&self) -> bool {
|
||||
self.0.default_prevented()
|
||||
}
|
||||
|
||||
fn event_phase(&self) -> u16 {
|
||||
self.0.event_phase()
|
||||
}
|
||||
|
||||
fn is_trusted(&self) -> bool {
|
||||
self.0.is_trusted()
|
||||
}
|
||||
|
||||
fn prevent_default(&self) {
|
||||
self.0.prevent_default()
|
||||
}
|
||||
|
||||
fn stop_immediate_propagation(&self) {
|
||||
self.0.stop_immediate_propagation()
|
||||
}
|
||||
|
||||
fn stop_propagation(&self) {
|
||||
self.0.stop_propagation()
|
||||
}
|
||||
|
||||
fn target(&self) {
|
||||
// self.0.target()
|
||||
}
|
||||
|
||||
fn time_stamp(&self) -> f64 {
|
||||
self.0.time_stamp()
|
||||
}
|
||||
}
|
||||
|
||||
impl UIEventInner for WebsysGenericUiEvent {
|
||||
fn detail(&self) -> i32 {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
impl SelectionEventInner for WebsysGenericUiEvent {}
|
||||
|
||||
pub struct WebsysFocusEvent(pub web_sys::FocusEvent);
|
||||
|
||||
Reference in new issue
Block a user