yew_scroll_area/hooks/
use_horizontal_thumb_size.rs

1use std::ops::Deref;
2use web_sys::HtmlDivElement;
3use yew::prelude::*;
4
5#[derive(Clone)]
6pub struct UseHorizontalThumbSizeHandle {
7    size: UseStateHandle<f64>,
8    outer_ref: NodeRef,
9    inner_ref: NodeRef,
10}
11impl UseHorizontalThumbSizeHandle {
12    fn new(size: UseStateHandle<f64>, outer_ref: NodeRef, inner_ref: NodeRef) -> Self {
13        Self {
14            size,
15            outer_ref,
16            inner_ref,
17        }
18    }
19
20    pub fn update(&self) {
21        if let (Some(outer), Some(inner)) = (
22            self.outer_ref.cast::<HtmlDivElement>(),
23            self.inner_ref.cast::<HtmlDivElement>(),
24        ) {
25            let outer_width = outer.offset_width() as f64;
26            let inner_width = inner.offset_width() as f64;
27            self.size.set(outer_width / inner_width * outer_width);
28        }
29    }
30}
31impl Deref for UseHorizontalThumbSizeHandle {
32    type Target = f64;
33    fn deref(&self) -> &Self::Target {
34        &*self.size
35    }
36}
37
38pub fn use_horizontal_thumb_size(
39    outer_ref: NodeRef,
40    inner_ref: NodeRef,
41) -> UseHorizontalThumbSizeHandle {
42    let size = use_state_eq(|| 0.0);
43    UseHorizontalThumbSizeHandle::new(size, outer_ref, inner_ref)
44}