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
28
src/main.rs
28
src/main.rs
|
|
@ -23,7 +23,8 @@ enum Message {
|
||||||
ImageDisplayReady(Result<widget::image::Allocation, widget::image::Error>),
|
ImageDisplayReady(Result<widget::image::Allocation, widget::image::Error>),
|
||||||
SavePathPicked(Result<PathBuf, String>),
|
SavePathPicked(Result<PathBuf, String>),
|
||||||
|
|
||||||
Event(iced::Event),
|
KeyPressed(keyboard::Key, keyboard::Modifiers),
|
||||||
|
FileDropped(PathBuf),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
|
|
@ -115,11 +116,7 @@ impl State {
|
||||||
.err();
|
.err();
|
||||||
}
|
}
|
||||||
|
|
||||||
Message::Event(iced::Event::Keyboard(keyboard::Event::KeyPressed {
|
Message::KeyPressed(key, modifiers) => match key.as_ref() {
|
||||||
key,
|
|
||||||
modifiers,
|
|
||||||
..
|
|
||||||
})) => match key.as_ref() {
|
|
||||||
// input field cycling
|
// input field cycling
|
||||||
Key::Named(key::Named::Tab) => {
|
Key::Named(key::Named::Tab) => {
|
||||||
if modifiers.shift() {
|
if modifiers.shift() {
|
||||||
|
|
@ -215,18 +212,13 @@ impl State {
|
||||||
_ => {}
|
_ => {}
|
||||||
},
|
},
|
||||||
|
|
||||||
Message::Event(iced::Event::Window(window::Event::FileDropped(file))) => {
|
Message::FileDropped(path) => match self.load_image(path) {
|
||||||
match self.load_image(file) {
|
|
||||||
Ok(task) => {
|
Ok(task) => {
|
||||||
self.error = None;
|
self.error = None;
|
||||||
return task;
|
return task;
|
||||||
}
|
}
|
||||||
Err(e) => self.error = Some(e),
|
Err(e) => self.error = Some(e),
|
||||||
}
|
},
|
||||||
}
|
|
||||||
|
|
||||||
// ignore unused events
|
|
||||||
Message::Event(_) => {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Task::none()
|
Task::none()
|
||||||
|
|
@ -284,7 +276,15 @@ impl State {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn subscription(&self) -> Subscription<Message> {
|
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 {
|
fn title(&self) -> String {
|
||||||
self.info.as_ref().map_or_else(
|
self.info.as_ref().map_or_else(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue