1use crate::core::event::{self, Event};
3use crate::core::window;
4use crate::subscription::{self, Subscription};
5use crate::MaybeSend;
6
7pub fn listen() -> Subscription<Event> {
12 listen_with(|event, status, _window| match status {
13 event::Status::Ignored => Some(event),
14 event::Status::Captured => None,
15 })
16}
17
18pub fn listen_with<Message>(
27 f: fn(Event, event::Status, window::Id) -> Option<Message>,
28) -> Subscription<Message>
29where
30 Message: 'static + MaybeSend,
31{
32 #[derive(Hash)]
33 struct EventsWith;
34
35 subscription::filter_map((EventsWith, f), move |event| match event {
36 subscription::Event::Interaction {
37 event: Event::Window(window::Event::RedrawRequested(_)),
38 ..
39 } => None,
40 subscription::Event::Interaction {
41 window,
42 event,
43 status,
44 } => f(event, status, window),
45 })
46}
47
48pub fn listen_raw<Message>(
54 f: fn(Event, event::Status, window::Id) -> Option<Message>,
55) -> Subscription<Message>
56where
57 Message: 'static + MaybeSend,
58{
59 #[derive(Hash)]
60 struct RawEvents;
61
62 subscription::filter_map((RawEvents, f), move |event| match event {
63 subscription::Event::Interaction {
64 window,
65 event,
66 status,
67 } => f(event, status, window),
68 })
69}