A modern VGA text mode font editor for Windows, written in C using Windows API. Written with Cursor AI.
- Edit 8x16 pixel VGA fonts (256 characters)
- Visual character grid displaying all 256 characters
- Pixel-level character editor
- Mouse and keyboard support for pixel editing
- Character selection and navigation
- Modern UI design (Material Design-like colors)
- Visual Styles and DPI awareness support
- Hover effects and smooth selection highlights
- Responsive design with clean appearance
- Enhanced user experience with toolbar and status bar
- Reading: VGAF format (.vgaf) - Editor's native format
- Saving: VGAF format (.vgaf) - Editor's native format, C header file (.h)
- Automatic file format detection
- Undo/Redo system (20 levels)
- Character copy/paste (Ctrl+C/V)
- Zoom support (1x-2x magnification)
- Keyboard shortcuts (Ctrl+O, Ctrl+S, Delete, etc.)
- Auto-save warnings
- File change tracking
- Drag & drop for multi-pixel editing
- Real-time character preview
- Detailed information display in status bar
- Quick access buttons in toolbar
- MinGW-w64 UCRT (with gcc and windres)
- Make (optional, for using Makefile)
- Windows 10 or newer (UCRT requirement)
- Visual C++ Redistributable (for theming support)
- Windows 10/11 (due to UCRT requirements)
- 32-bit and 64-bit architectures
- DPI scaling support (High-DPI displays)
This project is designed to be compiled with MinGW-w64 UCRT. Make sure MinGW-w64 UCRT is installed on your system and added to PATH.
Note: Due to UCRT (Universal C Runtime) usage, the compiled program only runs on Windows 10 and newer versions.
# Standard build
make
# Debug version
make debug
# Release version (optimized)
make release
# Clean
make clean
# Help
make help
# Compile resource file
windres -i resource.rc -o resource.o
# Compile C files
gcc -Wall -Wextra -std=c99 -O2 -c main.c -o main.o
gcc -Wall -Wextra -std=c99 -O2 -c font_manager.c -o font_manager.o
gcc -Wall -Wextra -std=c99 -O2 -c controls.c -o controls.o
# Create executable
gcc -mwindows -o vga-font-editor.exe main.o font_manager.o controls.o resource.o -lgdi32 -luser32 -lkernel32 -lcomdlg32 -lcomctl32 -luxtheme -ldwmapi
- Click on any character in the grid (left panel) to select it for editing
- Selected character is highlighted with blue background
- Characters under mouse cursor are shown with light gray background
- Left click: Set pixels (black)
- Right click: Clear pixels (white)
- Dragging: Multi-pixel editing by holding mouse button
- Zoom: Use + and - buttons in toolbar for zoom in/out
Ctrl+O
: Open font fileCtrl+S
: Save font fileCtrl+C
: Copy characterCtrl+V
: Paste characterCtrl+Z
: UndoCtrl+Y
: RedoDelete/Backspace
: Clear characterF1
: About dialog
- File β Open: Load various VGA font formats (VGAF, PSF1/PSF2, Raw binary)
- File β Save: Save font in VGAF format
- Export: C header file export (planned feature)
- File format is automatically detected and shown in status bar
- Unsaved changes are indicated with "*" in window title
Editor's native format:
- 16-byte header: Format identification and metadata
- 4096 bytes font data: 256 characters Γ 16 bytes
- Total file size: 4112 bytes
- Character size: 8 pixels width Γ 16 pixels height
- Data structure: Each byte represents one pixel row (MSB = leftmost pixel)
- Raw Binary: Raw VGA font data (4096 bytes)
- VGAF (.vgaf): Editor's native format (saving)
- C Header (.h): Export font data as C array (planned feature)
The editor supports the full PC/VGA character set (0-255):
- 0-31: Control characters and symbols
- 32-126: Standard ASCII printable characters
- 127-255: Extended ASCII and graphics characters
- Language: C99 standard
- GUI Framework: Win32 API
- Graphics: GDI (Graphics Device Interface)
- Theming: Modern appearance with UxTheme API
- Controls: Common Controls 6.0
- Efficient pixel rendering
- Redrawing only changed areas
- Memory management optimizations
- Responsive UI updates
- Material Design color palette
- Smooth hover animations
- High-DPI support
- Visual styles integration
- Consistent spacing and typography
vga-font-editor/
βββ main.c # Main program and window management
βββ font_manager.c # Font loading/saving and data processing
βββ controls.c # Custom UI controls
βββ vga_font_editor.h # Header file and definitions
βββ resource.rc # Windows resources
βββ vga_font_editor.manifest # Modern UI manifest
βββ Makefile # Build automation
Bug reports and enhancement requests are welcome!
- Fork the project
- Create a feature branch (
git checkout -b feature/new-feature
) - Commit your changes (
git commit -am 'Add new feature'
) - Push to the branch (
git push origin feature/new-feature
) - Create a Pull Request
Copyright (c) 2025 Erdem Ersoy (eersoy93)
This project is licensed under the GPLv3 License - see the LICENSE file for details.
- β Basic VGA font editing
- β Modern UI design
- β Undo/Redo system
- β Multiple file format support
- β Enhanced keyboard shortcuts
- β Zoom and toolbar features
- β DPI awareness support