Commit graph

33 commits

Author SHA1 Message Date
mow
6115e25fed docs: add (Implemented) markers consistently
Mark all current features with (Implemented) for consistency
with the Raster Images section.
2026-01-15 18:37:44 +01:00
mow
3ca9315e7f docs: remove reference to non-existent CONTRIBUTING.md 2026-01-15 18:34:31 +01:00
mow
b7d024bde2 docs: correct feature status for SVG and PDF
Both SVG and PDF support are prepared in code structure but
not yet functionally implemented. They currently show 1x1
placeholder images. Moved to 'Planned Features' section with
proper status documentation.
2026-01-15 18:32:18 +01:00
mow
7df18617bd docs: remove icons from feature documentation
Replace visual icons with text labels (Implemented, Planned, etc.)
for better readability and maintainability.
2026-01-15 18:30:20 +01:00
mow
ffcca4dbfe docs: add comprehensive feature documentation
Document all implemented and planned features:
- Current features with implementation status
- Planned features organized by priority
- Technical architecture details
- Keyboard shortcuts reference
- Contributing guidelines for new features
2026-01-15 18:28:56 +01:00
mow
00425fcf4b chore: suppress dead_code warnings for future features
Mark unused message variants with #[allow(dead_code)] to indicate
they are intentionally kept for future implementation:
- OpenPath: for file dialog integration
- RefreshMetadata: for metadata panel updates
- ShowError/ClearError: for error handling UI
- NoOp: fallback/placeholder message
2026-01-15 18:21:50 +01:00
mow
c132265d31 refactor: use zoom_factor() method in footer
Simplifies the zoom text calculation and eliminates the
'method zoom_factor is never used' warning.
2026-01-15 18:20:14 +01:00
mow
4593986fc6 refactor: remove unused config field from AppModel
The config is only needed in Noctua struct, not in AppModel.
This eliminates the 'field config is never read' warning.
2026-01-15 18:19:09 +01:00
mow
68b21215f4 chore: fix compiler warnings
- Add explicit lifetimes to Element return types
- Remove unused imports (Length, button, horizontal_space, icon, Handle, self)
- Mark unused parameter with underscore prefix

This eliminates all 'hiding a lifetime' and 'unused import' warnings.
2026-01-15 18:17:09 +01:00
mow
69f22bafcd feat(viewer): implement keyboard and button zoom/pan controls
- Fork cosmic::iced viewer widget to enable external state control
- Add bidirectional state synchronization between viewer and AppModel
- Implement ViewerStateChanged message for mouse interaction feedback
- Fix pixel-perfect rendering at 100% zoom (ActualSize mode)
- Ensure smooth interaction between mouse, keyboard, and button controls

This allows zoom/pan to work via:
- Keyboard shortcuts (+/-, Ctrl+arrows)
- Future toolbar buttons
- Mouse wheel and drag (existing functionality preserved)

The viewer state now properly syncs in both directions:
- External controls (keyboard/buttons) → update viewer state via diff()
- Mouse interactions → update AppModel via ViewerStateChanged message

Closes: Zoom/pan via keyboard and buttons now functional
2026-01-15 18:10:57 +01:00
wfx
2905a3f6f1 docs: moved from docs/images to docs/ 2026-01-15 06:24:28 +01:00
wfx
4afc049f60 docs: reorganize documentation
- Simplify README
- Add docs/features.md (formats, roadmap)
- Add docs/usage.md (shortcuts)
- Keep docs/development.md (build instructions)
2026-01-15 06:20:00 +01:00
wfx
e71a97a2cb fix(config): use XDG picture directory as default
Replace hardcoded \"~/Pictures\" with dirs::picture_dir() which resolves
to the actual absolute path (e.g. /home/user/Pictures).

The tilde (~) in paths is not automatically expanded by Rust's PathBuf,
causing path.exists() to return false for \"~/Pictures\".

Using dirs::picture_dir() provides:
- Proper absolute path resolution
- XDG Base Directory compliance
- Fallback to home directory if Pictures doesn't exist

Note: Users with existing config files need to delete
~/.config/cosmic/org.codeberg.wfx.Noctua/v1/default_image_dir
to apply the new default."
2026-01-14 21:03:06 +01:00
mow
afdee6b430 docs: update screenshot 2026-01-14 19:01:58 +01:00
mow
7b36ff143c feat(ui): add header toolbar with navigation and transform buttons
- Add header bar with nav toggle, prev/next, rotate and flip buttons
- Extract header rendering to view/header.rs (MVU architecture)
- Add RotateCW, RotateCCW, FlipHorizontal, FlipVertical messages
- Add PrevDocument, NextDocument navigation messages
- Persist nav_bar_visible and context_drawer_visible in config
- Update properties panel with document info display"
2026-01-14 18:53:36 +01:00
wfx
b1b0999ebe chore: refactoring 2026-01-14 17:16:25 +01:00
wfx
aa83e9ab1d fix: misspelling screenshot(s) 2026-01-10 17:53:37 +01:00
wfx
97988a7be6 fix: Adding a Screenshot 2026-01-10 17:46:08 +01:00
wfx
7414caf185 chore: Adding a Screenshot 2026-01-10 17:40:21 +01:00
wfx
823dfe9fa2 Implement comprehensive metadata extraction for raster images with
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"
2026-01-10 11:46:07 +01:00
wfx
6623a12632 chore: remove some comments 2026-01-08 21:50:44 +01:00
mow
b67b91e25f Rename icon to org.codeberg.wfx.Noctua.svg (matches app ID) 2026-01-08 20:51:56 +01:00
mow
96b4e40b08 Fix: .metainfo.xml: use modern tags, correct icon/screenshot paths 2026-01-08 20:51:25 +01:00
mow
ed414c9923 Fix: .desktop: remove duplicate Type=, add MimeType entries, set StartupWMClas 2026-01-08 20:50:36 +01:00
mow
d8e5ff559d Fix: correct metainfo path, icon destination, add post-install 2026-01-08 20:49:54 +01:00
mow
21974724c3 fix: namming mistake 2026-01-08 20:24:34 +01:00
mow
d8e7b2e72f chore: better crabby icons 2026-01-08 20:07:02 +01:00
wfx
49a17fb342 chore: a crabby icons 2026-01-08 19:57:31 +01:00
wfx
9aa6fe2d37 docs: A ctual screenshot 2026-01-08 19:53:29 +01:00
wfx
7c21e5cf9b fix: filename 2026-01-08 19:51:51 +01:00
wfx
4c10a80b67 refactor: centralize file handling, fix zoom display and cleanup
File handling (document/file.rs):
- move file operations from app/mod.rs to document/file.rs
- add open_file_dialog() for native file picker
- add collect_directory_siblings() for navigation context
- add open_document_from_path() as main entry point

Zoom/View (panels.rs, canvas.rs, model.rs):
- fix zoom display using ViewMode enum
- ViewMode::Fit shows Fit, ActualSize shows 100%, Custom shows percentage

Model/Update cleanup:
- adjust model.rs for new file handling
- update.rs: use centralized file functions
- document/mod.rs: re-exports for file module

i18n:
BB
ctua.ftl with new/changed strings"
A
- update noctua.ftl with new/changed strings"
2026-01-08 12:20:55 +01:00
wfx
4de63d8549 chore: fix license header 2026-01-07 20:42:28 +01:00
wfx
ab93f649bd chore: initial commit 2026-01-07 20:22:49 +01:00