dioxus_use_cursor/hooks/use_hover/
mod.rs1mod display;
2
3use super::*;
4
5pub struct UseHover {
7 data: Rc<RefCell<UseHoverData>>,
8 listen_mouse_over: Option<EventListener>,
9 listen_mouse_out: Option<EventListener>,
10}
11
12#[derive(Debug, Clone)]
13struct UseHoverData {
14 hover: bool,
15}
16
17impl UseCursorBuilder {
18 pub fn use_hover<'a>(&self, cx: &'a ScopeState) -> &'a mut UseHover {
41 let hook = UseHover::new(cx, todo!());
42 cx.use_hook(|| hook)
43 }
44}
45
46impl UseHover {
47 fn new(cx: &ScopeState, target: &EventTarget) -> Self {
48 let data = Rc::new(RefCell::new(UseHoverData::default()));
49 let listen_mouse_over = Some(Self::on_pointer_over(cx, target, &data));
50 let listen_mouse_out = Some(Self::on_pointer_out(cx, target, &data));
51 Self { data, listen_mouse_over, listen_mouse_out }
52 }
53 fn on_pointer_over(cx: &ScopeState, target: &EventTarget, data: &Rc<RefCell<UseHoverData>>) -> EventListener {
54 #[cfg(debug_assertions)]
55 {
56 info!("Mouse Over Listener Initialized at {}!", cx.scope_id().0);
57 }
58 let setter = data.clone();
59 let regenerate = cx.schedule_update();
60 EventListener::new(target, "pointerover", move |_| {
61 let mut setter = setter.borrow_mut();
62 setter.hover = true;
63 regenerate()
64 })
65 }
66 fn on_pointer_out(cx: &ScopeState, target: &EventTarget, data: &Rc<RefCell<UseHoverData>>) -> EventListener {
67 #[cfg(debug_assertions)]
68 {
69 info!("Mouse Out Listener Initialized at {}!", cx.scope_id().0);
70 }
71 let setter = data.clone();
72 let regenerate = cx.schedule_update();
73 EventListener::new(target, "pointerout", move |_| {
74 let mut setter = setter.borrow_mut();
75 setter.hover = false;
76 regenerate()
77 })
78 }
79}
80
81impl UseHover {
82 #[inline]
84 pub fn get(&self) -> bool {
85 self.data.borrow().hover
86 }
87}