All notable changes to GhostDraw will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Windows Store Package
- Added windows store package project and publish first version to windows store.
- Added new custom splash screen.
- Add activation and tool change hint popup center bottom screen that fades away.
- Versioning semantics to 4-part
- App settings and logging paths work in both win store package and msi or standalone.
- Tray double-click about modal now shows accurate messaging based on current settings.
- Text Tool
- Added a lock-mode-only Text tool (hotkey
T) with multi-line entry and outside-click commit; text respects brush color/size and stays non-editable after commit. - Hardened input safety during text sessions: only activation hotkey,
F1, andESCremain active; other GhostDraw shortcuts aren’t triggered or suppressed while typing. - Integrated text into history/undo/clear and eraser; multi-monitor overlays record committed text with proper overlay IDs.
- Added a lock-mode-only Text tool (hotkey
- Help modal now show's tool usage instruction and is re-styled.
- 2 hotkey presses required to activate draw mode after startup.
- Ghost drawings briefly appearing on re-activations.
- Multi-Monitor Overlays
- Drawing overlay now appears on every monitor
- Clear canvas confirmation modal is shown on all overlays
- Undo (
Ctrl+Z) is global across monitors; Clear canvas clears all overlays
- Arrow tool now uses an arrow-specific cursor
- Tool settings (color/thickness) now stay in sync across monitors
- Cursor behavior is now consistent when crossing monitor boundaries
- Arrow Tool
- Press
Awhile drawing mode is active to select the Arrow tool - Click two points to draw a line with an arrowhead
- Works with undo (
Ctrl+Z) and can be erased with the Eraser tool
- Press
- Clear Canvas Confirmation Modal
- Press
Deletewhile drawing mode is active to open a Yes/No confirmation before clearing the canvas - While the modal is open, drawing and tool switching are disabled; closing the modal restores the previous tool
- Press
- Clear Canvas Hotkey
- Clear canvas hotkey changed from
RtoDelete Deleteis suppressed while drawing mode is active to prevent deleting content in underlying apps
- Clear canvas hotkey changed from
- UI + Docs
- Updated overlay hint text and Help shortcuts to reference
Delete - Updated
docs/KEY_LEGEND.md
- Updated overlay hint text and Help shortcuts to reference
- Updated
ClearCanvasFeatureTeststo reflect the newDeletehotkey + confirmation flow
- Undo (Ctrl+Z) with Permanent Eraser Semantics
- Press
Ctrl+Zwhile drawing mode is active to undo the most recent completed action (pen stroke, line, rectangle, circle) - Erased items are permanently deleted and are never restored by undo
- New
DrawingHistoryservice tracks completed actions using stable element IDs - Added unit tests covering undo behavior and eraser permanence
- Press
- Tool Completion Events
- Tools report completed actions (pen on mouse-up; shapes on second click) so undo is per-action instead of per-mouse-move
- Eraser reports erased elements so history entries are marked removed
- Keyboard Hook Handling for Ctrl+Z
- Detects
Ctrl+Zonly when drawing mode is active - Suppresses
Ctrl+Zduring drawing mode to prevent pass-through to underlying apps
- Detects
- History Reset Behavior
- Undo history is cleared when clearing the canvas and when exiting drawing mode
- F1 Help Toggle Behavior
F1now toggles the keyboard shortcuts help overlay on and off instead of auto-hiding after a timeout- Help overlay stays visible until explicitly closed with
F1orESC - New tests cover help toggle and ESC behavior to prevent regressions
- ESC Key Behavior with Help Open
- Pressing
ESCwhile help is visible now only closes the help overlay and does not exit drawing mode - Pressing
ESCwhen help is hidden still performs the normal emergency exit from drawing mode - Centralized ESC handling in
OverlayWindowso drawing manager respects whether it should actually exit
- Pressing
- Docs
- Updated the project README
- Added CONTRIBUTING document
- Rectangle Tool: Shift Modifier for Perfect Squares
- Hold Shift while drawing rectangles to constrain to perfect squares
- Uses
Math.Min(width, height)to fit square within dragged bounds - Works during both preview and finalization
- Consistent with Circle tool's Shift modifier behavior
- Eraser Tool Now Erases All Shape Types
- Eraser now properly removes Rectangle shapes
- Eraser now properly removes Circle/Ellipse shapes
- Added bounds intersection detection using
IntersectsWith()for shape types - Added NaN guards for
Canvas.GetLeft/GetTopto handle uninitialized attached properties - Previously only removed Polylines (pen strokes) and Lines
- Version Display in Settings Window - Shows current application version in footer
- Version number appears in bottom-left corner of Settings window
- Formatted as "Version X.Y.Z"
- Retrieved from assembly information for accuracy
- Helps users verify which version they're running
- Settings window footer now includes version information for better user awareness
- Circle/Ellipse Tool - Draw circles and ellipses by defining a bounding box
- Press
Cto activate Circle tool - Uses bounding box approach: first click sets one corner, second click defines the opposite corner
- Hold Shift while drawing to create perfect circles (equal width and height)
- Live preview updates as you move the mouse
- Respects current color and thickness settings
- Custom circle cursor with corner markers
- Supports right-click color cycling and mouse wheel thickness adjustment
- Works seamlessly with Eraser tool
- Consistent with Rectangle tool behavior for intuitive shape creation
- Press
- Rectangle Tool - Draw rectangles by clicking two points
- Press
Uto activate Rectangle tool - First click sets one corner, second click finalizes the rectangle
- Live preview updates as you move the mouse
- Respects current color and thickness settings
- Custom rectangle cursor with corner markers
- Supports right-click color cycling and mouse wheel thickness adjustment
- Works seamlessly with Eraser tool
- Press
- Screenshot Capture - Capture your drawings as images
- Press
Ctrl+Sto capture full screen with drawings (saved to Pictures\GhostDraw) - Key suppression prevents Windows from intercepting Ctrl+S during drawing mode
- Optional: Copy to clipboard, open folder, play shutter sound (configurable in settings)
- Press
- Screenshot Settings Panel - New UI section in Settings window
- Toggle clipboard copy, folder opening, and sound effects
- Configurable save location
- Key Legend Documentation - Comprehensive keyboard shortcut reference (
docs/KEY-LEGEND.md)
- Screenshot hotkey (
Ctrl+S) now correctly detects Control key by tracking both left (VK_LCONTROL) and right (VK_RCONTROL) control keys instead of generic VK_CONTROL - Thread safety improvements with volatile field for update nesting level
- Snipping tool (
Skey) now properly exits drawing mode to allow user interaction - User must manually reactivate drawing mode after using snipping tool (press hotkey)
- Eraser Tool - Remove drawing objects underneath the cursor
- Press
Eto activate Eraser tool - Click and drag to erase drawings interactively
- Eraser size adjusts with mouse wheel (same as brush thickness)
- Intelligent intersection detection for precise erasing
- Works with both polylines (pen strokes) and lines (straight line tool)
- Custom eraser cursor with visual feedback
- Press
- Improved Code Quality
- Added explicit type aliases to resolve WPF/WinForms namespace conflicts
- Fixed
Point,Brush,Color,ColorConverter, andBrushestype ambiguities - Enhanced tool interface consistency
- Ambiguous reference errors caused by both WPF (
System.Windows) and WinForms (System.Drawing) being enabled - LineTool's
OnDeactivatedmethod now properly resets state without calling non-existent method - Build errors related to namespace conflicts in drawing tool implementations
- Line Tool - Draw straight lines by clicking two points
- Press
Lto activate Line tool - First click sets start point, second click finalizes the line
- Real-time preview follows cursor
- Line thickness and color adjust dynamically with mouse wheel and right-click
- Press
- Explicit Tool Selection - Direct keyboard shortcuts for tool switching
- Press
Pto select Pen tool (freehand drawing) - Press
Lto select Line tool (straight lines)
- Press
- Keyboard Shortcuts Help - F1 help popup showing all available shortcuts
- Press
F1while in drawing mode to display help overlay - Shows current activation hotkey combination dynamically
- Displays all drawing tools, actions, and system shortcuts
- Auto-fades after 4 seconds with smooth animations
- Press
- Settings Architecture Improvements
- Abstracted settings persistence with
ISettingsStoreinterface FileSettingsStorefor production file-based persistenceInMemorySettingsStorefor isolated unit testing- Eliminated file system dependencies from unit tests
- Abstracted settings persistence with
- Tool selection now uses explicit methods instead of toggle-only behavior
- Test suite refactored to use in-memory storage, eliminating test pollution
- Settings service now uses dependency injection for storage layer
- Line tool cursor hotspot now correctly positioned at line start point (left circle)
- Test isolation issues resolved - no more shared file system state
- Drawing Mode Activation
- Configurable hotkey combination (default: Ctrl+Alt+X)
- Toggle or hold mode options
- Pen Tool - Freehand drawing with mouse
- Click and drag to draw smooth polylines
- Adjustable brush thickness (1-20 pixels)
- 10-color palette with cycling
- Brush Customization
- Right-click to cycle through color palette
- Mouse wheel to adjust brush thickness
- Real-time thickness indicator overlay
- Canvas Management
- Press
Rto clear canvas with visual feedback - Press
ESCfor emergency exit from drawing mode - Canvas spans all monitors in multi-monitor setups
- Press
- System Tray Integration
- Always-running background application
- Context menu for quick access to settings
- Log level adjustment from tray
- Settings Window
- Cyberpunk-themed UI
- Drawing settings (brush thickness, color palette)
- Hotkey configuration with visual recorder
- Mode settings (toggle vs hold)
- Logging level configuration
- Robust Error Handling
- Global exception handler prevents system lockout
- Comprehensive logging with Serilog
- Safe hook cleanup on exit
- Custom Cursors
- Colored pencil cursor shows active brush color
- Line tool cursor with dual circles and connecting line
- WPF transparent overlay across all screens
- Global Windows keyboard/mouse hooks
- Dependency injection with Microsoft.Extensions.DependencyInjection
- Structured logging with Serilog
- Settings persistence in LocalApplicationData
- .NET 8 target framework
When adding new features or fixes:
-
Add entries under the
[Unreleased]section -
Use these categories:
Added- New featuresChanged- Changes to existing functionalityDeprecated- Soon-to-be removed featuresRemoved- Removed featuresFixed- Bug fixesSecurity- Security fixes
-
When releasing a new version:
- Change
[Unreleased]to[X.Y.Z] - YYYY-MM-DD - Create a new
[Unreleased]section at the top - Update version numbers according to Semantic Versioning:
- MAJOR version for incompatible API changes
- MINOR version for backwards-compatible functionality additions
- PATCH version for backwards-compatible bug fixes
- Change
## [Unreleased]
### Added
- **Feature Name** - Brief description
- Detail about feature
- Another detail
### Fixed
- Issue description and what was fixed