refactor: map only used keybinds in subscription
this should improve efficiency this is also largely motivated by all the `path.clone()` calls in view, which concern me a lot. reducing the number of used subscriptions should trigger view less, but it's very far from a perfect solution
This commit is contained in:
parent
f2e7bd49a7
commit
8d1f93011e
1 changed files with 70 additions and 57 deletions
|
|
@ -33,9 +33,20 @@ enum Message {
|
|||
|
||||
OpenImage(PathBuf),
|
||||
|
||||
PickPath,
|
||||
OpenPath(Option<PathBuf>),
|
||||
|
||||
KeyPressed(keyboard::Key, keyboard::Modifiers),
|
||||
FocusNext,
|
||||
FocusPrevious,
|
||||
|
||||
ScrollBy(f32),
|
||||
|
||||
CycleFilter,
|
||||
|
||||
IncreaseColumns,
|
||||
DecreaseColumns,
|
||||
|
||||
Quit,
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
|
|
@ -129,67 +140,36 @@ impl State {
|
|||
}
|
||||
}
|
||||
|
||||
Message::KeyPressed(key, modifiers) => match key.as_ref() {
|
||||
// input field cycling
|
||||
keyboard::Key::Named(keyboard::key::Named::Tab) => {
|
||||
return if modifiers.shift() {
|
||||
widget::operation::focus_previous()
|
||||
} else {
|
||||
widget::operation::focus_next()
|
||||
};
|
||||
}
|
||||
Message::FocusNext => return widget::operation::focus_next(),
|
||||
Message::FocusPrevious => return widget::operation::focus_next(),
|
||||
|
||||
keyboard::Key::Character("o") => {
|
||||
Message::PickPath => {
|
||||
return Task::perform(
|
||||
async { AsyncFileDialog::new().pick_folder().await.map(Into::into) },
|
||||
Message::OpenPath,
|
||||
);
|
||||
}
|
||||
|
||||
keyboard::Key::Character("j")
|
||||
| keyboard::Key::Named(
|
||||
keyboard::key::Named::ArrowDown | keyboard::key::Named::PageDown,
|
||||
) => {
|
||||
Message::ScrollBy(offset) => {
|
||||
return widget::operation::scroll_by(
|
||||
"main",
|
||||
widget::operation::AbsoluteOffset {
|
||||
x: 0.,
|
||||
y: if modifiers.shift() { 500. } else { 100. },
|
||||
},
|
||||
);
|
||||
}
|
||||
keyboard::Key::Character("k")
|
||||
| keyboard::Key::Named(
|
||||
keyboard::key::Named::ArrowUp | keyboard::key::Named::PageUp,
|
||||
) => {
|
||||
return widget::operation::scroll_by(
|
||||
"main",
|
||||
widget::operation::AbsoluteOffset {
|
||||
x: 0.,
|
||||
y: if modifiers.shift() { -500. } else { -100. },
|
||||
},
|
||||
widget::operation::AbsoluteOffset { x: 0., y: offset },
|
||||
);
|
||||
}
|
||||
|
||||
keyboard::Key::Character("=" | "+") => {
|
||||
self.columns = (self.columns + 1).clamp(1, 10)
|
||||
}
|
||||
keyboard::Key::Character("-" | "_") => {
|
||||
self.columns = (self.columns - 1).clamp(1, 10)
|
||||
}
|
||||
Message::IncreaseColumns => self.columns = (self.columns + 1).clamp(1, 10),
|
||||
Message::DecreaseColumns => self.columns = (self.columns - 1).clamp(1, 10),
|
||||
|
||||
keyboard::Key::Character("f") => {
|
||||
Message::CycleFilter => {
|
||||
self.filter = match self.filter {
|
||||
widget::image::FilterMethod::Linear => widget::image::FilterMethod::Nearest,
|
||||
widget::image::FilterMethod::Nearest => widget::image::FilterMethod::Linear,
|
||||
}
|
||||
}
|
||||
|
||||
keyboard::Key::Character("q") => {
|
||||
Message::Quit => {
|
||||
return window::latest().and_then(window::close);
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
}
|
||||
|
||||
Task::none()
|
||||
|
|
@ -240,7 +220,40 @@ impl State {
|
|||
fn subscription(&self) -> Subscription<Message> {
|
||||
event::listen().filter_map(|event| match event {
|
||||
Event::Keyboard(keyboard::Event::KeyPressed { key, modifiers, .. }) => {
|
||||
Some(Message::KeyPressed(key, modifiers))
|
||||
match key.as_ref() {
|
||||
// input field cycling
|
||||
keyboard::Key::Named(keyboard::key::Named::Tab) => Some(if modifiers.shift() {
|
||||
Message::FocusPrevious
|
||||
} else {
|
||||
Message::FocusNext
|
||||
}),
|
||||
|
||||
keyboard::Key::Character("o") => Some(Message::PickPath),
|
||||
|
||||
keyboard::Key::Character("j")
|
||||
| keyboard::Key::Named(
|
||||
keyboard::key::Named::ArrowDown | keyboard::key::Named::PageDown,
|
||||
) => Some(Message::ScrollBy(match modifiers.shift() {
|
||||
false => 100.,
|
||||
true => 500.,
|
||||
})),
|
||||
keyboard::Key::Character("k")
|
||||
| keyboard::Key::Named(
|
||||
keyboard::key::Named::ArrowUp | keyboard::key::Named::PageUp,
|
||||
) => Some(Message::ScrollBy(match modifiers.shift() {
|
||||
false => -100.,
|
||||
true => -500.,
|
||||
})),
|
||||
|
||||
keyboard::Key::Character("=" | "+") => Some(Message::IncreaseColumns),
|
||||
keyboard::Key::Character("-" | "_") => Some(Message::DecreaseColumns),
|
||||
|
||||
keyboard::Key::Character("f") => Some(Message::CycleFilter),
|
||||
|
||||
keyboard::Key::Character("q") => Some(Message::Quit),
|
||||
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
_ => None,
|
||||
})
|
||||
|
|
|
|||
Loading…
Reference in a new issue