EXIF support and display in the right panel.
New features:
- Extract basic metadata (filename, format, resolution, file size, color type)
- Parse EXIF data (camera, date, exposure, aperture, ISO, focal length, GPS)
- Display metadata in collapsible right panel (toggle with 'i' key)
- Auto-refresh metadata on document navigation
Changes by file:
Cargo.toml, Cargo.lock:
- Add kamadak-exif dependency for EXIF parsing
i18n/en/noctua.ftl:
- Add translation strings for all metadata labels
src/app/document/meta.rs:
- New module for metadata types (BasicMeta, ExifMeta, DocumentMeta)
- Extraction logic with EXIF parsing via kamadak-exif
- Helper methods for formatted display (resolution, file size, camera, GPS)
src/app/document/mod.rs:
- Re-export meta module
src/app/document/{raster,vector,portable}.rs:
- Add extract_metadata() method stubs (full impl for raster)
src/app/document/file.rs:
- Reset metadata on document change
src/app/message.rs:
- Add ToggleRightPanel and RefreshMetadata messages
src/app/model.rs:
- Add metadata: Option<DocumentMeta> field
- Add show_right_panel: bool field
src/app/update.rs:
- Handle panel toggle and metadata refresh
- Auto-refresh metadata on navigation when panel visible
src/app/view/panels.rs:
- Implement right_panel() with metadata display
- Conditional sections for basic info and EXIF data
src/app/view/canvas.rs:
- Integrate right panel into layout"
|
||
|---|---|---|
| i18n/en | ||
| resources | ||
| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| i18n.toml | ||
| justfile | ||
| LICENSE | ||
| README.md | ||
| rustfmt.toml | ||
Noctua
An image viewer application for the COSMIC™ desktop
Keyboard Shortcuts
Navigation
| Key | Action | Status |
|---|---|---|
← |
Previous document | working |
→ |
Next document | working |
Transformations
| Key | Action | Status |
|---|---|---|
H |
Flip horizontal | working |
V |
Flip vertical | working |
R |
Rotate clockwise (90°) | working |
Shift + R |
Rotate counter-clockwise (90°) | working |
Zoom
| Key | Action | Status |
|---|---|---|
+ / = |
Zoom in | partial |
- |
Zoom out | partial |
1 |
Reset zoom (100% / actual) | working |
F |
Fit image to window | working |
Note: Zoom is recognized but visual feedback is limited without scrollable viewport.
Pan
| Key | Action | Status |
|---|---|---|
Ctrl + ← |
Pan left | not yet implemented |
Ctrl + → |
Pan right | not yet implemented |
Ctrl + ↑ |
Pan up | not yet implemented |
Ctrl + ↓ |
Pan down | not yet implemented |
0 |
Reset pan (center) | not yet implemented |
Note: Panning requires a scrollable viewport or custom canvas widget.
Modes
| Key | Action | Status |
|---|---|---|
C |
Toggle crop mode | not yet implemented |
S |
Toggle scale mode | not yet implemented |
Installation
A justfile is included by default for the casey/just command runner.
justbuilds the application with the defaultjust build-releaserecipejust runbuilds and runs the applicationjust installinstalls the project into the systemjust vendorcreates a vendored tarballjust build-vendoredcompiles with vendored dependencies from that tarballjust checkruns clippy on the project to check for linter warningsjust check-jsoncan be used by IDEs that support LSP
Translators
Fluent is used for localization of the software. Fluent's translation files are found in the i18n directory. New translations may copy the English (en) localization of the project, rename en to the desired ISO 639-1 language code, and then translations can be provided for each message identifier. If no translation is necessary, the message may be omitted.
Packaging
If packaging for a Linux distribution, vendor dependencies locally with the vendor rule, and build with the vendored sources using the build-vendored rule. When installing files, use the rootdir and prefix variables to change installation paths.
just vendor
just build-vendored
just rootdir=debian/noctua prefix=/usr install
It is recommended to build a source tarball with the vendored dependencies, which can typically be done by running just vendor on the host system before it enters the build environment.
Developers
Developers should install rustup and configure their editor to use rust-analyzer. To improve compilation times, disable LTO in the release profile, install the mold linker, and configure sccache for use with Rust. The mold linker will only improve link times if LTO is disabled.