Annotation Editor
Annotation Editor
The Annotation Editor is a full-featured image editor that opens after each capture (configurable) or can be launched independently. It provides 17 drawing tools, text formatting, color management, undo/redo, and multiple export formats.
Overview
The editor is a borderless window with custom chrome, hosting a canvas control with a left-side toolbar and bottom status bar.
Opening the editor:
- Automatically after capture (configurable)
- Via hotkey (configurable)
- From the Gallery (double-click any capture)
- From the Capture Preview (click Edit)
- Command line:
CyberSnap.exe --editor
Single Instance
Only one editor window can be open at a time. Opening a new capture in the editor prompts to save changes before replacing the content.
Multi-Tab Editor
Overview
The editor supports multiple documents in tabs within the same window. Open several captures or projects simultaneously and switch between them instantly.
Opening Tabs
- New capture — When the active document is blank, it replaces it. Otherwise, it opens in a new tab.
- Open file — Opens in a new tab if a document is already active.
- Blank canvas — Creates a new blank document in a tab.
- Project files — Opens .csnp projects in separate tabs.
Tab Strip
- Appears automatically when more than one document is open.
- Located in the horizontal ruler row to save vertical space.
- Shows document name (or "Untitled" for unsaved documents).
- Dirty indicator — A colored dot appears on tabs with unsaved changes.
- Close button — Each tab has a close button (×).
- Scroll — Mouse wheel scrolls through tabs when many are open.
Tab Limit
- Soft limit: 8 tabs. A warning appears when exceeding this limit.
- Closing tabs beyond the limit returns to normal operation.
Tab Navigation
| Action | Description |
|---|---|
| Click tab | Switch to that document |
| Close button | Close the tab (prompts to save if dirty) |
| Mouse wheel | Scroll tab strip when many tabs are open |
| Ctrl + W | Close active document |
Behavior
- Single document — Tab strip is hidden, only the canvas is visible.
- Multiple documents — Tab strip appears above the canvas.
- Session restore — Open tabs are remembered between sessions.
- Save prompt — Closing a dirty tab prompts to save changes.
Drawing Tools
Navigation Tools
| Tool | Description |
|---|---|
| Pan | Drag to pan the canvas |
| Move (Pick) | Select, move, and resize annotations |
| Eraser | Click annotations to delete them |
Drawing Tools
| Tool | Description | Constraints |
|---|---|---|
| Draw | Freehand stroke | — |
| Rectangle | Draw rectangles and squares | Shift = square |
| Circle | Draw ellipses and circles | Shift = circle |
| Line | Draw straight lines | Shift = 45° snap |
| Arrow | Draw arrows with head | Shift = 45° snap |
| Curved Arrow | Draw Bezier-curve arrows | — |
| Text | Add text annotations with formatting | — |
| Highlight | Semi-transparent highlight overlay | — |
| Blur | Pixelate/blur regions for privacy | — |
| Step Number | Auto-incrementing numbered badges | — |
| Magnifier | Loupe lens showing 3× zoom | — |
| Emoji | Place emoji glyphs from picker | Scroll to resize |
Transform Tools
| Tool | Description |
|---|---|
| Cut Out | Remove horizontal or vertical strips |
| Crop | Crop to a rectangular region |
| Rotate 90° CW | Rotate canvas clockwise |
| Rotate 90° CCW | Rotate canvas counter-clockwise |
| Flip Vertical | Flip canvas vertically |
| Flip Horizontal | Flip canvas horizontally |
Tool Constraints and Modifiers
| Modifier | Effect |
|---|---|
| Shift (hold) | Constrain proportions (square/circle), snap angles (45°) |
| Space (hold) | Temporary Pan from any tool |
| Enter | Confirm Crop/Cut Out operation |
| Escape | Cancel current operation, deselect tool |
| Mouse wheel | Adjust size (Emoji) or zoom |
Color System
Preset Palette
11 preset colors:
- Cyan, Blue, Purple, Red, Orange, Yellow, Green, White, Pink, Gray, Black
Custom Color
- 12th button opens the Color Picker Flyout
- Persists custom color to settings
- Click without custom color → opens picker
- Click with custom color → applies it directly
Cursor Color Chip
A floating chip near the cursor shows the current tool color and stroke width. Visible for: Draw, Arrow, Curved Arrow, Line, Rectangle, Circle, Highlight.
Stroke Width
Preset Widths
5 stroke widths: 2, 3, 4, 6, 10 points
Proportional Scaling
Annotations scale proportionally with canvas size relative to a 1280px standard width. Larger images automatically use thicker strokes for visual consistency.
Text Tool
Floating Formatting Toolbar
A toolbar appears above the text being edited with:
| Button | Function |
|---|---|
| B | Bold toggle |
| I | Italic toggle |
| Stroke | Text outline toggle |
| Shadow | Drop shadow toggle |
| Background | Background chip toggle |
| Font | Font family dropdown |
| − | Decrease font size |
| + | Increase font size |
| Grip | Drag to move text box |
| Align L | Left alignment |
| Align C | Center alignment |
| Align R | Right alignment |
Font Dropdown
- System fonts + favorites + recents
- 12 visible items, scrollable
- Star column to toggle favorites
- Persists recent and favorite fonts to settings
Inline Text Editing
- Multiline text box with
AcceptsReturn - Enter commits text; Shift+Enter inserts newline
- Escape cancels editing
- Double-click word selection
- Corner handles resize font size while dragging
- Mouse wheel adjusts font size when editing
Text Style Persistence
Text style settings persist between annotations:
- Bold (default: true), Italic (default: false)
- Stroke (default: true), Shadow (default: true)
- Background (default: false)
- Font size (default: 24), Font family (default: Segoe UI)
- Font size range: 10–120
Selection System
Move Tool
- Click an annotation to select it (surface-scoped, not hollow interior)
- Drag to move selected annotation
- 8 resize handles: 4 corners + 4 edges
- Center knob for move-only items
Shape Rotation
Selected shapes display a rotation handle (circular arrow) above the bounding box:
- Drag to rotate the shape freely
- Shift snaps rotation to 15° increments
- Rotation cursor appears when hovering the handle
Auto-Selection
- New shapes are automatically selected after drawing
- Undo/Redo restores the previous selection state
Marquee Selection
Click-drag on empty space for rubber-band rectangle selection.
Multi-Selection
- Ctrl+Click to toggle items in multi-selection
- Group drag moves all selected items
- Sticky banner shows count: "{N} objects selected"
Select All
- Ctrl+A selects all annotations
- Double-click in Pick mode selects all
Blur Tool
Pixelation-based blur for obscuring sensitive information:
- Downscales region to blocks (10px), then upscales with bilinear interpolation
- Renders against clean base bitmap (ignores other annotations)
- Uses scratch buffer for performance
Step Number Tool
Auto-incrementing numbered badges:
- Next number = max existing number + 1
- Circular badge with shadow, inner edge, and contrast text
- Ghost preview (60% opacity) follows cursor before placement
Magnifier Tool
Loupe lens showing magnified detail:
- 3× zoom factor
- 50px source region sampled
- Circular lens with nearest-neighbor interpolation (crisp pixels)
- Crosshair at center
- Auto-positioning: flips to opposite side if near image edge
- 65% opacity ghost preview during hover
Emoji Tool
Emoji Picker Popup
- Search box filters emoji catalog by name
- Owner-drawn grid (8 columns × N rows, 40px cells)
- Scrollable with mouse wheel
- Keyboard: Escape closes, Space initiates pan
- 360×384px popup, positioned near tool button
Emoji Placement
- Mouse wheel adjusts size (16–128px range)
- Ghost preview at 60% opacity follows cursor
- Placed at click position with scaled bitmap size
Crop Tool
Interaction
- 8 crop handles: 4 corners (L-shaped) + 4 edge midpoints (pill-shaped)
- Dark overlay outside crop region
- Dashed cyan border around crop area
- Drag from empty space to create new crop rect
Confirmation
- Enter key confirms crop
- Double-click inside crop confirms
- Leaving Crop tool confirms
- Escape or right-click cancels
Cut Out Tool
Removes horizontal or vertical strips from the image:
- Auto-axis detection based on drag direction
- Shift locks axis
- Dark overlay on strip to remove
- Cyan border and size badge
- Confirmed/abandoned like Crop
- Accessible from the editor palette (transform tools)
Canvas Resize
Resize Handles
8 cyan handles floating outside image edge:
- Edge handles (4): Extend/trim canvas in one direction
- Corner handles (4): Resize canvas in two directions simultaneously
- Default: extend/trim canvas (anchor opposite edge)
ResizeHandlesScaleContent: scale content instead- Shift at corner: toggle aspect ratio keep/break
Interaction
- Confirmation dialog before applying
- Live size badge shows dimensions during drag
Limits
| Limit | Value |
|---|---|
| Minimum | 16 × 16 px |
| Maximum | 32768 × 32768 px |
Transform Operations
Rotation
| Operation | Description |
|---|---|
| Rotate 90° CW | Rotate canvas clockwise |
| Rotate 90° CCW | Rotate canvas counter-clockwise |
| Rotate 180° | Flip both axes |
Flip
| Operation | Description |
|---|---|
| Flip Horizontal | Mirror left-right |
| Flip Vertical | Mirror top-bottom |
⚠️ Transforms flatten annotations into the bitmap (with confirmation dialog).
Zoom and Pan
Zoom Controls
| Control | Action |
|---|---|
| Zoom in | Increase zoom by 1.15× per click |
| Zoom out | Decrease zoom by 1.15× per click |
| Fit to window | Auto-scale to fit viewport |
| Actual size | 1:1 pixel mapping (100%) |
| Zoom percentage | Click to cycle presets |
Zoom Range
- Minimum: 20%
- Maximum: 800%
- Step: 1.15× per click or mouse wheel notch
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
| Ctrl + Plus | Zoom in |
| Ctrl + Minus | Zoom out |
| Ctrl + 0 | Fit to window |
| Ctrl + 1 | Actual size |
| Mouse wheel | Zoom in/out |
| Space + drag | Temporary pan |
Pan
- Click and drag with Pan tool to move the canvas
- Scroll bars appear when content exceeds viewport
Undo/Redo
Architecture
- Command pattern with
IEditCommand(Apply()/Revert()) - Two stacks: undo and redo
- Configurable history limit (1–200 steps, default 100)
- Maximum 200 annotations per canvas
Command Types
| Command | Description |
|---|---|
AddAnnotationCommand |
Add new annotation |
DeleteAnnotationCommand |
Remove annotation |
ReplaceAnnotationCommand |
Replace annotation |
TransformAnnotationCommand |
Move/resize annotation |
TransformMultipleAnnotationsCommand |
Move/resize multiple |
DeleteMultipleAnnotationsCommand |
Delete multiple |
AddMultipleAnnotationsCommand |
Add multiple |
CropCommand |
Crop canvas |
CutOutCommand |
Cut out strips |
ResizeCanvasCommand |
Resize canvas |
TransformCanvasCommand |
Rotate/flip canvas |
PasteImageCommand |
Paste image |
EraseCommand |
Eraser tool |
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
| Ctrl + Z | Undo |
| Ctrl + Y | Redo |
| Ctrl + Shift + Z | Redo (alternative) |
Export and Save
Project Format (.csnp)
Saves the complete editable project:
- Base bitmap + all annotations + guides
- Preserves editability of all vector elements
- Open and continue editing later
Image Export
| Format | Extension | Description |
|---|---|---|
| PNG | .png |
Lossless compression, best quality |
| JPEG | .jpg |
Adjustable quality, smaller files |
.pdf |
Document export with page options |
PDF Export Options
| Option | Choices |
|---|---|
| Page size | Fit, A4, Legal, A3, Letter |
| Orientation | Portrait, Landscape |
| Margins | Configurable (cm) |
| Image layout | Fit to page, 1:1 draw |
| Span mode | Tall images sliced across pages |
| Metadata | Title, Author, Tags |
Copy to Clipboard
Renders the final bitmap and copies to clipboard, including saved file path reference.
Context Menu
Canvas Right-Click
| Menu Item | Action |
|---|---|
| Open image... | Open an image file |
| Paste | Paste from clipboard |
| Save project... | Save .csnp project |
| Resize canvas... | Open resize dialog |
| Transform → Rotate 90° CW/CCW, 180°, Flip H/V | Canvas transforms |
| Fit to window | Zoom to fit |
| Reset zoom | Return to 100% |
| Undo / Redo | History operations |
| Exit | Close editor |
Tool Deselect
Right-click on canvas deselects the current tool back to Move and shows "Tool deselected" banner.
Status Bar
Left Side
- Hint area with lightbulb icon
- Dynamic text based on current tool/state
- Hidden when window width < 950px
Right Side
- Coordinates display — X, Y in image space
- Zoom controls — Slider (20–800%), percentage label, reset, fit
- Toggle switches — Auto-fit on load, pan mode lock
Top Bar
Title Bar
- Brand area: Editor icon + "CyberSnap" title
- Filename display with LED status indicator:
- Amber — Unsaved changes
- Blue — New canvas (untitled)
- Green — Saved
- Window controls: Close, Maximize/Restore, Minimize
- Menu (burger), Donate (heart)
Command Bar
- Undo / Redo
- Gallery — Open history window
- Capture — Take new screenshot
- New / Open / Save
- Copy / Paste
- Export split-button — Main + chevron menu (PNG/JPEG/PDF)
- Share split-button — Main + chevron (providers)
Welcome Overlay
When the editor opens with a blank canvas:
- Centered card with multi-layered drop shadow
- Icon: Picture frame with mountain artwork, spark badge
- Title: "Drop an image or project"
- Hint: "Double-click · drag and drop"
- 4 action chips: New canvas, Open, Paste, Capture
- Drag-over state with highlighted border
Guide Lines
- Horizontal and vertical dashed cyan lines with shadow
- Hover highlight (brighter, thicker)
- Drag from rulers to create
- Remove by dragging off-canvas
- Controlled by
EditorShowRulerssetting
Keyboard Shortcuts
File Operations
| Shortcut | Action |
|---|---|
| Ctrl + N | New canvas |
| Ctrl + O | Open file |
| Ctrl + S | Save project |
| Ctrl + Shift + S | Save as... |
| Ctrl + Shift + U | Share/upload |
| Ctrl + W | Close document / tab |
Edit Operations
| Shortcut | Action |
|---|---|
| Ctrl + C | Copy to clipboard |
| Ctrl + V | Paste image |
| Ctrl + A | Select all |
| Ctrl + D | Duplicate selection |
| Delete | Delete selected |
| Escape | Deselect tool / cancel |
View Operations
| Shortcut | Action |
|---|---|
| Ctrl + Plus | Zoom in |
| Ctrl + Minus | Zoom out |
| Ctrl + 0 | Fit to window |
| Ctrl + 1 | Actual size |
| Mouse wheel | Zoom in/out |
Transform
| Shortcut | Action |
|---|---|
| Ctrl + Z | Undo |
| Ctrl + Y | Redo |
| Ctrl + Shift + Z | Redo (alternative) |
All tools have configurable hotkeys.
Drag and Drop
Drag image files onto any part of the editor to open them. Supports the same formats as the Open dialog.
Settings Reference
| Setting | Location | Description |
|---|---|---|
| Auto-open after capture | Settings → Capture | Launch editor automatically |
| Fit to window on open | Settings → Editor | Auto-zoom to fit canvas |
| Show rulers | Settings → Editor | Display canvas rulers |
| Show coordinates | Settings → Editor | Display cursor position |
| Show hints | Settings → Editor | Show contextual tooltips |
| Show banners | Settings → Editor | Show notification banners |
| Auto-crop controls | Settings → Editor | Auto-crop UI controls |
| Show resize handles | Settings → Editor | Display canvas resize handles |
| Resize handles scale content | Settings → Editor | Scale vs. extend on resize |
| Pan mode lock objects | Settings → Editor | Lock objects in pan mode |
| Undo limit | Settings → Editor | History depth (1–200) |
| Show scrollbars | Settings → Editor | Custom scrollbar overlays |
| Tool color | Settings → Editor | Default annotation color |
| Stroke width | Settings → Editor | Default stroke width |
| Text font size | Settings → Editor | Default text size |