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.
215 lines
6.3 KiB
Markdown
215 lines
6.3 KiB
Markdown
# 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 (Implemented)
|
|
- **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 (Planned)
|
|
- **Formats**: SVG
|
|
- **Status**: Code structure prepared, but rendering not yet implemented
|
|
- **Planned capabilities**:
|
|
- High-quality rendering via `resvg`
|
|
- Scalable display without quality loss
|
|
- Metadata extraction
|
|
- Transformations (rotate, flip)
|
|
|
|
#### Portable Documents (Planned)
|
|
- **Formats**: PDF
|
|
- **Status**: Code structure prepared, but rendering not yet implemented
|
|
- **Planned capabilities**:
|
|
- First page rendering
|
|
- Multi-page navigation
|
|
- Basic transformations on rendered pages
|
|
|
|
### 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
|
|
|
|
#### SVG Support
|
|
- Implement proper SVG parsing and rendering
|
|
- Integration with `resvg` library
|
|
- Scalable vector display
|
|
- Transformation support
|
|
|
|
#### PDF Support
|
|
- Implement PDF rendering backend
|
|
- First page display
|
|
- Multi-page navigation
|
|
- Page thumbnails
|
|
|
|
#### File Operations
|
|
- File dialog integration (OpenPath message prepared)
|
|
- Save transformed images
|
|
- Copy/Move/Delete operations
|
|
- Drag-and-drop support
|
|
|
|
#### Error Handling
|
|
- User-friendly error messages (ShowError/ClearError prepared)
|
|
- Graceful handling of corrupted files
|
|
- Recovery suggestions
|
|
|
|
### Medium Priority
|
|
|
|
#### Multi-format TIFF Support
|
|
- Multi-page TIFF navigation
|
|
- Page thumbnails
|
|
|
|
#### 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.
|