diff --git a/docs/features.md b/docs/features.md index e69de29..0d682f9 100644 --- a/docs/features.md +++ b/docs/features.md @@ -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.