yew_scroll_area/hooks/
use_horizontal_thumb_size.rs1use 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}