-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2073 from iced-rs/event-helpers
Add `keyboard` subscriptions and rename `subscription::events` to `event::listen`
- Loading branch information
Showing
15 changed files
with
208 additions
and
139 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
//! Listen to runtime events. | ||
use crate::core::event::{self, Event}; | ||
use crate::core::window; | ||
use crate::subscription::{self, Subscription}; | ||
use crate::MaybeSend; | ||
|
||
/// Returns a [`Subscription`] to all the ignored runtime events. | ||
/// | ||
/// This subscription will notify your application of any [`Event`] that was | ||
/// not captured by any widget. | ||
pub fn listen() -> Subscription<Event> { | ||
listen_with(|event, status| match status { | ||
event::Status::Ignored => Some(event), | ||
event::Status::Captured => None, | ||
}) | ||
} | ||
|
||
/// Creates a [`Subscription`] that listens and filters all the runtime events | ||
/// with the provided function, producing messages accordingly. | ||
/// | ||
/// This subscription will call the provided function for every [`Event`] | ||
/// handled by the runtime. If the function: | ||
/// | ||
/// - Returns `None`, the [`Event`] will be discarded. | ||
/// - Returns `Some` message, the `Message` will be produced. | ||
pub fn listen_with<Message>( | ||
f: fn(Event, event::Status) -> Option<Message>, | ||
) -> Subscription<Message> | ||
where | ||
Message: 'static + MaybeSend, | ||
{ | ||
#[derive(Hash)] | ||
struct EventsWith; | ||
|
||
subscription::filter_map( | ||
(EventsWith, f), | ||
move |event, status| match event { | ||
Event::Window(window::Event::RedrawRequested(_)) => None, | ||
_ => f(event, status), | ||
}, | ||
) | ||
} | ||
|
||
/// Creates a [`Subscription`] that produces a message for every runtime event, | ||
/// including the redraw request events. | ||
/// | ||
/// **Warning:** This [`Subscription`], if unfiltered, may produce messages in | ||
/// an infinite loop. | ||
pub fn listen_raw<Message>( | ||
f: fn(Event, event::Status) -> Option<Message>, | ||
) -> Subscription<Message> | ||
where | ||
Message: 'static + MaybeSend, | ||
{ | ||
#[derive(Hash)] | ||
struct RawEvents; | ||
|
||
subscription::filter_map((RawEvents, f), f) | ||
} |
Oops, something went wrong.