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
This commit is contained in:
mow 2026-01-15 18:28:56 +01:00
parent 00425fcf4b
commit ffcca4dbfe

View file

@ -0,0 +1,207 @@
# Noctua Features
This document describes the implemented and planned features of Noctua, a modern image viewer for the COSMIC desktop environment.
## Current Features
### Document Support
#### Raster Images ✅
- **Formats**: PNG, JPEG, GIF, BMP, TIFF, WebP, and all formats supported by `image-rs`
- **Capabilities**:
- Full pixel-perfect rendering at 100% zoom
- Lossless transformations (rotate, flip)
- Real-time transformation preview
- EXIF metadata extraction
#### Vector Graphics ✅
- **Formats**: SVG
- **Capabilities**:
- High-quality rendering via `resvg`
- Scalable display without quality loss
- Metadata extraction
- ⚠️ Note: Transformations not yet implemented for vector documents
#### Portable Documents ✅
- **Formats**: PDF
- **Capabilities**:
- First page rendering
- Basic transformations on rendered page
- ⚠️ Note: Multi-page navigation not yet implemented
### Navigation
#### Folder Navigation ✅
- **Automatic folder scanning**: When opening an image, all supported images in the same folder are indexed
- **Quick navigation**:
- Arrow keys (Left/Right) to navigate between images
- Footer displays current position (e.g., "3 / 42")
- Seamless transitions between images
#### File Opening ✅
- **Command-line arguments**: Open images directly from terminal
- **Default directory**: Configurable starting location (defaults to XDG Pictures)
- ⚠️ File dialog not yet implemented
### View Controls
#### Zoom ✅
- **Mouse wheel**: Zoom in/out centered on cursor position
- **Keyboard shortcuts**:
- `+` or `=` - Zoom in
- `-` - Zoom out
- `1` - Reset to 100% (Actual Size)
- `f` - Fit to window
- **View modes**:
- **Fit**: Automatically scales image to fit window while preserving aspect ratio
- **Actual Size**: Displays image at 100% (1:1 pixel mapping)
- **Custom**: Any zoom level from 10% to 2000%
- **Footer display**: Real-time zoom percentage or "Fit" indicator
#### Pan ✅
- **Mouse drag**: Click and drag to pan around zoomed images
- **Keyboard shortcuts**: `Ctrl + Arrow Keys` for precise panning
- **Smart boundaries**: Pan is automatically limited to image boundaries
- **Auto-center**: Images smaller than viewport are automatically centered
#### Bidirectional State Sync ✅
- Mouse interactions update keyboard/button controls
- Keyboard/button controls update mouse interaction state
- No conflicts between input methods
### Transformations
#### Image Manipulation ✅
- **Rotate**:
- `r` - Rotate 90° clockwise
- `Shift + r` - Rotate 90° counter-clockwise
- Toolbar buttons available
- **Flip**:
- `h` - Flip horizontally (mirror)
- `v` - Flip vertically
- Toolbar buttons available
- **Lossless operations**: All transformations preserve original image quality
- **Real-time preview**: Changes are immediately visible
### User Interface
#### COSMIC Integration ✅
- **Native COSMIC design**: Follows COSMIC desktop design language
- **Theme support**: Automatically adapts to system light/dark theme
- **Header toolbar**:
- Navigation controls (Previous/Next)
- Transformation buttons (Rotate, Flip)
- Information panel toggle
- **Footer bar**:
- Zoom controls with buttons
- Current zoom level display
- Image dimensions
- Navigation position counter
#### Panels
- **Properties panel** ✅:
- Image metadata display
- File information
- Toggle with `i` key or toolbar button
- **Navigation panel** (Left sidebar):
- Toggle with `n` key or toolbar button
- ⚠️ Content not yet implemented
#### Keyboard Shortcuts ✅
Full keyboard-driven workflow:
- Navigation: `←` `→`
- Zoom: `+` `-` `1` `f`
- Pan: `Ctrl + ←` `Ctrl + →` `Ctrl + ↑` `Ctrl + ↓`
- Transform: `r` `Shift+r` `h` `v`
- Panels: `i` `n`
### Configuration
#### Persistent Settings ✅
- **Panel states**: Remembers which panels were open
- **Default directory**: Customizable starting location
- **Settings location**: `~/.config/noctua/config.toml`
### Technical Features
#### Architecture ✅
- **Clean separation**: View layer agnostic to document format
- **Polymorphic documents**: Single `DocumentContent` interface for all formats
- **Efficient rendering**: Leverages COSMIC's iced renderer
- **Type-safe transformations**: Compile-time guarantees for image operations
#### Performance ✅
- **Lazy loading**: Images loaded on-demand
- **Efficient folder scanning**: Fast directory traversal
- **Minimal memory footprint**: Only active document kept in memory
- **Smooth zooming**: Hardware-accelerated rendering
## Planned Features
### High Priority
#### File Operations ⏳
- File dialog integration (OpenPath message prepared)
- Save transformed images
- Copy/Move/Delete operations
- Drag-and-drop support
#### Multi-page Documents ⏳
- PDF page navigation
- Multi-page TIFF support
- Page thumbnails
#### Error Handling ⏳
- User-friendly error messages (ShowError/ClearError prepared)
- Graceful handling of corrupted files
- Recovery suggestions
### Medium Priority
#### Vector Document Transformations ⏳
- Rotate SVG files
- Flip SVG files
- Transform preservation on save
#### Enhanced Navigation
- Thumbnail strip
- Grid view for folder contents
- Quick jump to file
#### Slideshow Mode
- Auto-advance timer
- Configurable intervals
- Fullscreen support
### Low Priority
#### Advanced Editing
- Crop tool (message prepared)
- Scale/Resize tool (message prepared)
- Basic color adjustments
#### Batch Operations
- Bulk transformations
- Format conversion
- Batch export
#### Metadata Editing
- EXIF data modification
- Comment annotations
- Tag management
## Feature Status Legend
- ✅ **Implemented**: Fully functional and tested
- ⏳ **Planned**: Design complete, implementation pending
- ⚠️ **Partial**: Basic functionality exists, enhancements needed
- 🔄 **In Progress**: Currently being developed
## Contributing
Features marked as "Planned" have their message handlers already prepared in the codebase. Look for:
- `OpenPath`, `RefreshMetadata` in `src/app/message.rs`
- `ToggleCropMode`, `ToggleScaleMode` in transformation handlers
- Comments marked with `TODO:` in document implementations
Pull requests welcome! See [CONTRIBUTING.md](../CONTRIBUTING.md) for guidelines.