Skip to content

fantommripper/VoidCanvas

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎨 Void Canvas

A terminal-aesthetic ASCII art editor built with Rust, egui and eframe.

Void Canvas screenshot


Features

Category Details
Tools Brush, Eraser, Flood Fill, Rectangle, Ellipse, Line, Border Box, Selection
Layers Add / Remove / Duplicate / Merge Down / Reorder / Rename / Lock / Hide
History 100-step Undo / Redo (Ctrl+Z / Ctrl+Y)
Characters 18 built-in palettes (Lines, Blocks, Math, Greek, Arrows, Nerd icons, …) + search
Colors Full RGBA picker, primary & secondary color slots, 16 quick-presets
Export Native .vc format (JSON), plain text .txt, and rendered PNG
Canvas Infinite pan, smooth zoom (0.15× – 8×), optional grid

Installation

Pre-built binaries

Download the latest release for your platform from the Releases page.

Build from source

Requirements: Rust 1.75+ and Cargo.

git clone https://github.com/your-username/void-canvas
cd void-canvas
cargo build --release
./target/release/void-canvas          # Linux / macOS
./target/release/void-canvas.exe      # Windows

Keyboard Shortcuts

File

Shortcut Action
Ctrl+N New document
Ctrl+O Open .vc file
Ctrl+S Save / Save as…

Edit

Shortcut Action
Ctrl+Z Undo
Ctrl+Y Redo
Ctrl+C Copy selection Not working, and I don't know why
Ctrl+X Cut selection Not working, and I don't know why
Ctrl+V Paste at cursor Not working, and I don't know why
Delete Delete selection
Escape Deselect
X Swap primary ↔ secondary

Tools

Key Tool
B Brush
E Eraser
F Flood Fill
R Rectangle
O Ellipse
L Line
D Border Box
S Select
+ / - Brush size up / down

Canvas

Input Action
Scroll Pan
Ctrl + Scroll Zoom
Middle-click drag Pan

File Format

.vc files are plain JSON — human-readable and version-control friendly.
Every layer, its cells, and their RGBA colours are stored verbatim.

{
  "width": 80,
  "height": 40,
  "layers": [ { "name": "Background", "visible": true, "locked": false, } ],
  "active_layer": 0
}

PNG Export

File → Export PNG… renders the composited canvas at 10 × 18 px per cell using the bundled FiraCode font.
Background and foreground RGBA colours are preserved exactly.


Project Structure

src/
├── main.rs              Entry point, window setup, font loading
├── app.rs               Main editor state & event loop
├── document/
│   ├── cell.rs          Cell & Color types
│   ├── layer.rs         Layer (grid of cells)
│   └── document.rs      Document (layers stack, composite, I/O)
├── history/
│   ├── commands.rs      Command enum
│   └── mod.rs           Undo / Redo stack
├── tools/
│   ├── brush.rs         Brush tool
│   ├── eraser.rs        Eraser tool
│   ├── fill.rs          Flood-fill tool
│   ├── shapes.rs        Rectangle, Ellipse, Line tools
│   ├── border.rs        Border-box tool
│   └── selection.rs     Rectangular selection + move / copy / paste
└── ui/
    ├── canvas.rs         Canvas rendering & input
    ├── char_palette.rs   Character palette panel
    ├── layer_panel.rs    Layers panel
    └── panels.rs         Color & Tool Options panels

Dependencies

Crate Purpose
egui Immediate-mode GUI
eframe Native window / app shell
serde + serde_json Serialisation
rfd Native file dialogs
image PNG encoding
ab_glyph Font rasterisation for PNG export

License

Modified MIT — see LICENSE.

About

A terminal-aesthetic ASCII art editor built with Rust

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors