Implement idiomatic accessors for WheelData
This commit is contained in:
1 parent
0ac5e76d98
commit
d7e4fcda80
5 files changed
+165
-11
No files matched your search
@@ -5,10 +5,14 @@ use dioxus_core::*;
|
||||
pub mod on {
|
||||
//! Input events and associated data
|
||||
|
||||
use crate::geometry::{ClientPoint, Coordinates, ElementPoint, PagePoint, ScreenPoint};
|
||||
use crate::geometry::{
|
||||
ClientPoint, Coordinates, ElementPoint, LinesVector, PagePoint, PagesVector, PixelsVector,
|
||||
ScreenPoint, WheelDelta,
|
||||
};
|
||||
use crate::input_data::{
|
||||
decode_mouse_button_set, encode_mouse_button_set, MouseButton, MouseButtonSet,
|
||||
};
|
||||
use euclid::UnknownUnit;
|
||||
use keyboard_types::Modifiers;
|
||||
use std::collections::HashMap;
|
||||
|
||||
@@ -740,12 +744,62 @@ pub mod on {
|
||||
#[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))]
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct WheelData {
|
||||
#[deprecated(since = "0.3.0", note = "use delta() instead")]
|
||||
pub delta_mode: u32,
|
||||
#[deprecated(since = "0.3.0", note = "use delta() instead")]
|
||||
pub delta_x: f64,
|
||||
#[deprecated(since = "0.3.0", note = "use delta() instead")]
|
||||
pub delta_y: f64,
|
||||
#[deprecated(since = "0.3.0", note = "use delta() instead")]
|
||||
pub delta_z: f64,
|
||||
}
|
||||
|
||||
impl WheelData {
|
||||
pub fn new(delta: WheelDelta) -> Self {
|
||||
let (delta_mode, vector) = match delta {
|
||||
WheelDelta::Pixels(v) => (0, v.cast_unit::<UnknownUnit>()),
|
||||
WheelDelta::Lines(v) => (1, v.cast_unit::<UnknownUnit>()),
|
||||
WheelDelta::Pages(v) => (2, v.cast_unit::<UnknownUnit>()),
|
||||
};
|
||||
|
||||
#[allow(deprecated)]
|
||||
WheelData {
|
||||
delta_mode,
|
||||
delta_x: vector.x,
|
||||
delta_y: vector.y,
|
||||
delta_z: vector.z,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn from_web_attributes(
|
||||
delta_mode: u32,
|
||||
delta_x: f64,
|
||||
delta_y: f64,
|
||||
delta_z: f64,
|
||||
) -> Self {
|
||||
#[allow(deprecated)]
|
||||
Self {
|
||||
delta_mode,
|
||||
delta_x,
|
||||
delta_y,
|
||||
delta_z,
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(deprecated)]
|
||||
pub fn delta(&self) -> WheelDelta {
|
||||
let x = self.delta_x;
|
||||
let y = self.delta_y;
|
||||
let z = self.delta_z;
|
||||
match self.delta_mode {
|
||||
0 => WheelDelta::Pixels(PixelsVector::new(x, y, z)),
|
||||
1 => WheelDelta::Lines(LinesVector::new(x, y, z)),
|
||||
2 => WheelDelta::Pages(PagesVector::new(x, y, z)),
|
||||
_ => panic!("Invalid delta mode, {:?}", self.delta_mode),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub type MediaEvent = UiEvent<MediaData>;
|
||||
#[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))]
|
||||
#[derive(Debug, Clone)]
|
||||
|
||||
Reference in new issue
Block a user