diff --git a/packages/html/src/events.rs b/packages/html/src/events.rs
index 38ae75407..4cb7c6fb1 100644
--- a/packages/html/src/events.rs
+++ b/packages/html/src/events.rs
@@ -755,6 +755,7 @@ pub mod on {
}
impl WheelData {
+ /// Construct a new WheelData with the specified wheel movement delta
pub fn new(delta: WheelDelta) -> Self {
let (delta_mode, vector) = match delta {
WheelDelta::Pixels(v) => (0, v.cast_unit::()),
@@ -771,6 +772,7 @@ pub mod on {
}
}
+ /// Construct from the attributes of the web wheel event
pub fn from_web_attributes(
delta_mode: u32,
delta_x: f64,
@@ -786,6 +788,7 @@ pub mod on {
}
}
+ /// The amount of wheel movement
#[allow(deprecated)]
pub fn delta(&self) -> WheelDelta {
let x = self.delta_x;
diff --git a/packages/html/src/geometry.rs b/packages/html/src/geometry.rs
index 97ab068d3..027922a85 100644
--- a/packages/html/src/geometry.rs
+++ b/packages/html/src/geometry.rs
@@ -48,6 +48,7 @@ pub type PagesVector = Vector3D;
///
/// This may be expressed in Pixels, Lines or Pages
#[derive(Copy, Clone, Debug)]
+#[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))]
pub enum WheelDelta {
/// Movement in Pixels
Pixels(PixelsVector),
@@ -73,10 +74,18 @@ impl WheelDelta {
WheelDelta::Pages(PagesVector::new(x, y, z))
}
+ /// Returns true iff there is no wheel movement
+ ///
+ /// i.e. the x, y and z delta is zero (disregards units)
pub fn is_zero(&self) -> bool {
self.strip_units() == Vector3D::new(0., 0., 0.)
}
+ /// A Vector3D proportional to the amount scrolled
+ ///
+ /// Note that this disregards the 3 possible units: this could be expressed in terms of pixels, lines, or pages.
+ ///
+ /// In most cases, to properly handle scrolling, you should handle all 3 possible enum variants instead of stripping units. Otherwise, if you assume that the units will always be pixels, the user may experience some unexpectedly slow scrolling if their mouse/OS sends values expressed in lines or pages.
pub fn strip_units(&self) -> Vector3D {
match self {
WheelDelta::Pixels(v) => v.cast_unit(),