leptos_leaflet/components/events/
mouse_events.rs1use 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);