refactor: filter out events in State::subscription
this may improve performance, saving update and view calls
This commit is contained in:
parent
65ddef28df
commit
869e38f3a5
1 changed files with 18 additions and 18 deletions
36
src/main.rs
36
src/main.rs
|
|
@ -23,7 +23,8 @@ enum Message {
|
|||
ImageDisplayReady(Result<widget::image::Allocation, widget::image::Error>),
|
||||
SavePathPicked(Result<PathBuf, String>),
|
||||
|
||||
Event(iced::Event),
|
||||
KeyPressed(keyboard::Key, keyboard::Modifiers),
|
||||
FileDropped(PathBuf),
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
|
|
@ -115,11 +116,7 @@ impl State {
|
|||
.err();
|
||||
}
|
||||
|
||||
Message::Event(iced::Event::Keyboard(keyboard::Event::KeyPressed {
|
||||
key,
|
||||
modifiers,
|
||||
..
|
||||
})) => match key.as_ref() {
|
||||
Message::KeyPressed(key, modifiers) => match key.as_ref() {
|
||||
// input field cycling
|
||||
Key::Named(key::Named::Tab) => {
|
||||
if modifiers.shift() {
|
||||
|
|
@ -215,18 +212,13 @@ impl State {
|
|||
_ => {}
|
||||
},
|
||||
|
||||
Message::Event(iced::Event::Window(window::Event::FileDropped(file))) => {
|
||||
match self.load_image(file) {
|
||||
Ok(task) => {
|
||||
self.error = None;
|
||||
return task;
|
||||
}
|
||||
Err(e) => self.error = Some(e),
|
||||
Message::FileDropped(path) => match self.load_image(path) {
|
||||
Ok(task) => {
|
||||
self.error = None;
|
||||
return task;
|
||||
}
|
||||
}
|
||||
|
||||
// ignore unused events
|
||||
Message::Event(_) => {}
|
||||
Err(e) => self.error = Some(e),
|
||||
},
|
||||
}
|
||||
|
||||
Task::none()
|
||||
|
|
@ -284,7 +276,15 @@ impl State {
|
|||
}
|
||||
|
||||
fn subscription(&self) -> Subscription<Message> {
|
||||
event::listen().map(Message::Event)
|
||||
event::listen().filter_map(|event| match event {
|
||||
iced::Event::Keyboard(keyboard::Event::KeyPressed { key, modifiers, .. }) => {
|
||||
Some(Message::KeyPressed(key, modifiers))
|
||||
}
|
||||
iced::Event::Window(window::Event::FileDropped(path)) => {
|
||||
Some(Message::FileDropped(path))
|
||||
}
|
||||
_ => None,
|
||||
})
|
||||
}
|
||||
fn title(&self) -> String {
|
||||
self.info.as_ref().map_or_else(
|
||||
|
|
|
|||
Loading…
Reference in a new issue