Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
1193ed79e4 |
|||
|
e89133b496 |
|||
|
7fed06ae36 |
|||
|
8d1f93011e |
5 changed files with 482 additions and 472 deletions
790
Cargo.lock
generated
790
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -9,9 +9,7 @@ ignore = "0.4.33"
|
||||||
misc-image-integration = "0.1.0"
|
misc-image-integration = "0.1.0"
|
||||||
rayon = "1.12.0"
|
rayon = "1.12.0"
|
||||||
rfd = "0.17.2"
|
rfd = "0.17.2"
|
||||||
size = "0.5.0"
|
|
||||||
tokio = "1.53.1"
|
tokio = "1.53.1"
|
||||||
zip = "8.6.0"
|
|
||||||
|
|
||||||
[dependencies.iced]
|
[dependencies.iced]
|
||||||
version = "0.14.0"
|
version = "0.14.0"
|
||||||
|
|
|
||||||
29
flake.lock
generated
29
flake.lock
generated
|
|
@ -2,11 +2,11 @@
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"crane": {
|
"crane": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785782307,
|
"lastModified": 1793669695,
|
||||||
"narHash": "sha256-MPaRdVkf6zZP5fCPxYCi8Dr4pZzgmXzg8T9nVEbp3Mw=",
|
"narHash": "sha256-9EtV4I6Ohw0tjidL31TMOKHhW/QGVG8NuGiemzIaNCs=",
|
||||||
"owner": "ipetkov",
|
"owner": "ipetkov",
|
||||||
"repo": "crane",
|
"repo": "crane",
|
||||||
"rev": "2c71e194474d13de031d729b729c968ddbe3507f",
|
"rev": "788369ed71ed9d84ef72cb056e4d920050d5b32c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -20,11 +20,11 @@
|
||||||
"systems": "systems"
|
"systems": "systems"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1731533236,
|
"lastModified": 1791914995,
|
||||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
"narHash": "sha256-Zf/xfQEAasnwnmEfHqW/4hjDE/s44yn2hD4RuVIZRjA=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "flake-utils",
|
"repo": "flake-utils",
|
||||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
"rev": "b7a79d3fea1e214f6d668d521cecec0c01e26544",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
@ -35,18 +35,15 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1785747939,
|
"lastModified": 1793706278,
|
||||||
"narHash": "sha256-D740uKsMbgsfK2oaDenJLLPIZfq7W0/g4KN/Fls8eKs=",
|
"narHash": "sha256-iCbwhLa+h23/rxGQD9YJJ+BrMYHCPKB6au/BsobNWB4=",
|
||||||
"owner": "nixos",
|
"rev": "ea9e3ef341e11c193537f674f821a99f9f436729",
|
||||||
"repo": "nixpkgs",
|
"type": "tarball",
|
||||||
"rev": "104240a772428cc2e20d8fd86c9ddbb886bbaff2",
|
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.11pre1107593.ea9e3ef341e1/nixexprs.tar.zst?lastModified=1793706278&rev=ea9e3ef341e11c193537f674f821a99f9f436729"
|
||||||
"type": "github"
|
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"type": "tarball",
|
||||||
"ref": "nixpkgs-unstable",
|
"url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.zst"
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.zst";
|
||||||
|
|
||||||
crane.url = "github:ipetkov/crane";
|
crane.url = "github:ipetkov/crane";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,9 +33,20 @@ enum Message {
|
||||||
|
|
||||||
OpenImage(PathBuf),
|
OpenImage(PathBuf),
|
||||||
|
|
||||||
|
PickPath,
|
||||||
OpenPath(Option<PathBuf>),
|
OpenPath(Option<PathBuf>),
|
||||||
|
|
||||||
KeyPressed(keyboard::Key, keyboard::Modifiers),
|
FocusNext,
|
||||||
|
FocusPrevious,
|
||||||
|
|
||||||
|
ScrollBy(f32),
|
||||||
|
|
||||||
|
CycleFilter,
|
||||||
|
|
||||||
|
IncreaseColumns,
|
||||||
|
DecreaseColumns,
|
||||||
|
|
||||||
|
Quit,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
|
|
@ -129,67 +140,36 @@ impl State {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Message::KeyPressed(key, modifiers) => match key.as_ref() {
|
Message::FocusNext => return widget::operation::focus_next(),
|
||||||
// input field cycling
|
Message::FocusPrevious => return widget::operation::focus_next(),
|
||||||
keyboard::Key::Named(keyboard::key::Named::Tab) => {
|
|
||||||
return if modifiers.shift() {
|
|
||||||
widget::operation::focus_previous()
|
|
||||||
} else {
|
|
||||||
widget::operation::focus_next()
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
keyboard::Key::Character("o") => {
|
Message::PickPath => {
|
||||||
return Task::perform(
|
return Task::perform(
|
||||||
async { AsyncFileDialog::new().pick_folder().await.map(Into::into) },
|
async { AsyncFileDialog::new().pick_folder().await.map(Into::into) },
|
||||||
Message::OpenPath,
|
Message::OpenPath,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
keyboard::Key::Character("j")
|
Message::ScrollBy(offset) => {
|
||||||
| keyboard::Key::Named(
|
|
||||||
keyboard::key::Named::ArrowDown | keyboard::key::Named::PageDown,
|
|
||||||
) => {
|
|
||||||
return widget::operation::scroll_by(
|
return widget::operation::scroll_by(
|
||||||
"main",
|
"main",
|
||||||
widget::operation::AbsoluteOffset {
|
widget::operation::AbsoluteOffset { x: 0., y: offset },
|
||||||
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. },
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
keyboard::Key::Character("=" | "+") => {
|
Message::IncreaseColumns => self.columns = (self.columns + 1).clamp(1, 10),
|
||||||
self.columns = (self.columns + 1).clamp(1, 10)
|
Message::DecreaseColumns => self.columns = (self.columns - 1).clamp(1, 10),
|
||||||
}
|
|
||||||
keyboard::Key::Character("-" | "_") => {
|
|
||||||
self.columns = (self.columns - 1).clamp(1, 10)
|
|
||||||
}
|
|
||||||
|
|
||||||
keyboard::Key::Character("f") => {
|
Message::CycleFilter => {
|
||||||
self.filter = match self.filter {
|
self.filter = match self.filter {
|
||||||
widget::image::FilterMethod::Linear => widget::image::FilterMethod::Nearest,
|
widget::image::FilterMethod::Linear => widget::image::FilterMethod::Nearest,
|
||||||
widget::image::FilterMethod::Nearest => widget::image::FilterMethod::Linear,
|
widget::image::FilterMethod::Nearest => widget::image::FilterMethod::Linear,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
keyboard::Key::Character("q") => {
|
Message::Quit => {
|
||||||
return window::latest().and_then(window::close);
|
return window::latest().and_then(window::close);
|
||||||
}
|
}
|
||||||
_ => {}
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Task::none()
|
Task::none()
|
||||||
|
|
@ -240,7 +220,40 @@ impl State {
|
||||||
fn subscription(&self) -> Subscription<Message> {
|
fn subscription(&self) -> Subscription<Message> {
|
||||||
event::listen().filter_map(|event| match event {
|
event::listen().filter_map(|event| match event {
|
||||||
Event::Keyboard(keyboard::Event::KeyPressed { key, modifiers, .. }) => {
|
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,
|
_ => None,
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue