Skip to main content

leptos_leaflet/components/events/
mouse_events.rs

1use crate::leaflet_event;
2use leaflet::MouseEvent;
3use std::cell::RefCell;
4use std::rc::Rc;
5
6#[derive(Clone, Default)]
7pub struct MouseEvents {
8    inner: Rc<RefCell<InnerMouseEvents>>,
9}
10
11#[derive(Default)]
12struct InnerMouseEvents {
13    on_click: Option<Box<dyn Fn(MouseEvent)>>,
14    on_double_click: Option<Box<dyn Fn(MouseEvent)>>,
15    on_mouse_down: Option<Box<dyn Fn(MouseEvent)>>,
16    on_mouse_up: Option<Box<dyn Fn(MouseEvent)>>,
17    on_mouse_over: Option<Box<dyn Fn(MouseEvent)>>,
18    on_mouse_out: Option<Box<dyn Fn(MouseEvent)>>,
19    on_context_menu: Option<Box<dyn Fn(MouseEvent)>>,
20}
21
22impl MouseEvents {
23    pub fn new() -> Self {
24        Self::default()
25    }
26
27    pub fn setup(&self, evented: &impl leaflet::MouseEvents) {
28        if let Some(on_click) = self.inner.borrow_mut().on_click.take() {
29            evented.on_click(on_click);
30        }
31        if let Some(on_double_click) = self.inner.borrow_mut().on_double_click.take() {
32            evented.on_double_click(on_double_click);
33        }
34        if let Some(on_mouse_down) = self.inner.borrow_mut().on_mouse_down.take() {
35            evented.on_mouse_down(on_mouse_down);
36        }
37        if let Some(on_mouse_up) = self.inner.borrow_mut().on_mouse_up.take() {
38            evented.on_mouse_up(on_mouse_up);
39        }
40        if let Some(on_mouse_over) = self.inner.borrow_mut().on_mouse_over.take() {
41            evented.on_mouse_over(on_mouse_over);
42        }
43        if let Some(on_mouse_out) = self.inner.borrow_mut().on_mouse_out.take() {
44            evented.on_mouse_out(on_mouse_out);
45        }
46        if let Some(on_context_menu) = self.inner.borrow_mut().on_context_menu.take() {
47            evented.on_context_menu(on_context_menu);
48        }
49    }
50}
51
52leaflet_event!(MouseEvents, on_click, MouseEvent);
53leaflet_event!(MouseEvents, on_double_click, MouseEvent);
54leaflet_event!(MouseEvents, on_mouse_down, MouseEvent);
55leaflet_event!(MouseEvents, on_mouse_up, MouseEvent);
56leaflet_event!(MouseEvents, on_mouse_over, MouseEvent);
57leaflet_event!(MouseEvents, on_mouse_out, MouseEvent);
58leaflet_event!(MouseEvents, on_context_menu, MouseEvent);