Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .claude/settings.local.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@
"Bash(cp C:/Users/vasil/Desktop/frame_tags.gif C:/Users/vasil/Desktop/RetroSprite/assets/frame_tags.gif)",
"Bash(cp C:/Users/vasil/Desktop/transform.gif C:/Users/vasil/Desktop/RetroSprite/assets/transform.gif)",
"Bash(cp C:/Users/vasil/Desktop/tilemap.gif C:/Users/vasil/Desktop/RetroSprite/assets/tilemap.gif)",
"Bash(cp C:/Users/vasil/Desktop/text.gif C:/Users/vasil/Desktop/RetroSprite/assets/text.gif)"
"Bash(cp C:/Users/vasil/Desktop/text.gif C:/Users/vasil/Desktop/RetroSprite/assets/text.gif)",
"Bash(git stash:*)",
"Bash(git status:*)"
]
}
}
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,23 @@ All notable changes to RetroSprite will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).

## [1.1.0] - 2026-04-17

### Added
- Multi-document tabbed interface: open multiple projects simultaneously
- Per-document undo/redo, palette, timeline, grid, and canvas state
- Global clipboard for cross-document copy/paste
- Tab bar with dirty indicators, close buttons, and overflow scrolling
- Tab context menu: Close, Close Others, Close All, Save, Reveal in Explorer
- Auto-save across all open documents (not just the active tab)
- Keyboard shortcuts: Ctrl+N (new tab), Ctrl+W (close tab), Ctrl+Shift+W (close all), Ctrl+Tab / Ctrl+Shift+Tab (cycle tabs), Ctrl+1-9 (jump to tab)
- Dynamic scripting API: `api.timeline` and `api.palette` now always reflect the active document
- `project_switch` event for plugins to react to tab changes

### Changed
- File > New and File > Open now create new tabs instead of replacing the current document
- Closing the last tab returns to the startup dialog

## [1.0.0] - 2026-03-26

### Added
Expand Down
18 changes: 18 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,16 @@ python main.py # Launch the app
python -m src.cli --help # CLI batch mode
```

### Tab Navigation Shortcuts

| Shortcut | Action |
|----------|--------|
| `Ctrl+W` | Close active tab |
| `Ctrl+Shift+W` | Close all tabs |
| `Ctrl+Tab` | Next tab |
| `Ctrl+Shift+Tab` | Previous tab |
| `Ctrl+1-9` | Jump to tab by position |

## Architecture

Entry: `main.py` → `src/app.py:RetroSpriteApp`
Expand All @@ -31,6 +41,14 @@ See `docs/ARCHITECTURE.md` for full module map and data flow.
See `docs/CODING_STANDARDS.md` for detailed practices.
See `docs/CONTRIBUTING.md` for contributor guide.

### Multi-Project Tabs

- `src/project_context.py` — `ProjectContext` dataclass holding per-document state
- `src/ui/tab_bar.py` — `TabBar` custom widget for document switching
- State swap: `_save_to_context()` / `_load_from_context()` / `_switch_project()` in `app.py`
- Global state (tool, clipboard) stays on app; per-document state (timeline, palette, undo) lives in ProjectContext
- Tab bar always visible, positioned above options bar

## Key Conventions

- Tool dict keys are **Capitalized**: `"Pen"`, `"Eraser"`, `"Wand"`, `"Lasso"`, `"Polygon"`
Expand Down
15 changes: 14 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,13 @@ RetroSprite provides the tools to create pixel art, sprite sheets, tilemaps, and
- Grid settings persist per project in `.retro` files
- Snap transforms, movement, paste, and text placement to the custom grid

**Multi-Document Tabs**
- Multiple projects open simultaneously in a tabbed interface
- Per-document undo/redo, palette, timeline, and canvas state
- Global clipboard for cross-document copy/paste
- Tab context menu: Close, Close Others, Save, Reveal in Explorer
- Auto-save across all open documents

**Layers & Animation**
- Unlimited layers with blend modes
- Layer groups for organization
Expand Down Expand Up @@ -182,8 +189,14 @@ python -m src.cli info project.retro
| Ctrl+C / Ctrl+V | Copy / Paste selection |
| Ctrl+X | Cut selection |
| Ctrl+Shift+E | Export dialog |
| Ctrl+N | New project (new tab) |
| Ctrl+S | Save project |
| Ctrl+O | Open project |
| Ctrl+O | Open project (new tab) |
| Ctrl+W | Close active tab |
| Ctrl+Shift+W | Close all tabs |
| Ctrl+Tab | Next tab |
| Ctrl+Shift+Tab | Previous tab |
| Ctrl+1-9 | Jump to tab by position |
| Ctrl+R | Load / toggle reference image |
| Delete | Delete selection contents |

Expand Down
2 changes: 2 additions & 0 deletions docs/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ RetroSprite is a lightweight desktop pixel art editor and animation tool built w
| `rotation_handler.py` | **RotationMixin** — rotation mode state machine, context bar UI |
| `tilemap_editor.py` | **TilemapEditorMixin** — tilemap layer creation, tile editing, auto-sync |
| `layer_animation.py` | **LayerAnimationMixin** — frame/layer management, playback, onion skin, filters, effects, color mode |
| `project_context.py` | `ProjectContext` dataclass — per-document state (timeline, palette, undo, grid) |
| `pixel_data.py` | `PixelGrid` (RGBA) and `IndexedPixelGrid` (palette-indexed) — NumPy array backends |
| `layer.py` | `Layer` model, `apply_blend_mode()`, `flatten_layers()` compositing |
| `animation.py` | `Frame` (layer stack) and `AnimationTimeline` (frame sequence) |
Expand Down Expand Up @@ -54,6 +55,7 @@ RetroSprite is a lightweight desktop pixel art editor and animation tool built w
| Module | Purpose |
|--------|---------|
| `theme.py` | Neon Retro theme colors + styling functions |
| `tab_bar.py` | `TabBar` custom widget for multi-document tabs, with close buttons and right-click menu |
| `toolbar.py` | Left toolbar with tool/symmetry/dither/pixel-perfect controls |
| `right_panel.py` | Palette, color picker, layers, frames, animation preview |
| `timeline.py` | Timeline panel (frames × layers grid, playback, onion skin) |
Expand Down
Loading
Loading