Overview
NVDA’s vision enhancement system uses the “vision framework” to augment visual information presented on screen. These features can help:- Low vision users: Highlight focus and navigation for easier tracking
- Trainers and educators: Visualize where NVDA’s focus is during demonstrations
- Developers: Debug and verify focus management and accessibility
- Sighted assistants: Help troubleshoot NVDA behavior for blind users
Vision enhancements are completely optional. They do not affect NVDA’s core screen reading functionality and can be enabled or disabled independently.
NVDA Highlighter
The built-in NVDA Highlighter draws visual rectangles around elements that NVDA is tracking.What It Highlights
Focus Tracking
Highlights the currently focused object with a solid border
Navigator Object
Shows the current object navigator position with a dashed border
Browse Mode Cursor
Highlights the current position in browse mode documents
Braille Region
Shows what’s currently displayed on braille display (optional)
Highlight Styles
The highlighter uses different visual styles for different contexts:Focus Highlighting
Focus Highlighting
- Color: Blue (RGB: 03, 36, FF)
- Style: Solid line
- Width: 5 pixels
- Margin: 5 pixels around object
- Purpose: Shows keyboard/application focus
Navigator Object
Navigator Object
Browse Mode Cursor
Browse Mode Cursor
- Color: Pink (RGB: FF, 02, 66)
- Style: Solid line
- Width: 5 pixels
- Margin: 5 pixels around object
- Purpose: Shows virtual cursor position in documents
Braille Display Area
Braille Display Area
- Color: Yellow (RGB: FF, DE, 03)
- Style: Solid line
- Width: 2 pixels
- Margin: 2 pixels around text
- Purpose: Shows what’s on braille display
Enabling NVDA Highlighter
To enable visual highlighting:- Open NVDA menu → Preferences → Settings
- Select “Vision” category
- Click “NVDA Highlighter” in the provider list
- Check “Enable”
- Configure highlight settings (optional)
- Click OK
Highlighter Settings
Available Settings
Available Settings
- Enable/Disable: Toggle highlighter on/off
- Highlight Focus: Show focused element (default: on)
- Highlight Navigator Object: Show object navigation (default: on)
- Highlight Browse Mode: Show virtual cursor (default: on)
- Highlight Braille: Show braille display region (default: off)
You can quickly enable/disable vision enhancement providers from the NVDA menu → Tools → Vision without opening full settings.
Technical Implementation
Vision Framework Architecture
NVDA’s vision enhancement system consists of:- Vision Handler: Central coordinator managing providers
- Vision Enhancement Providers: Individual modules providing visual feedback
- Extension Points: Event-based hooks for providers to react to
- Settings System: Auto-generated or custom settings panels
How NVDA Highlighter Works
The highlighter is implemented insource/visionEnhancementProviders/NVDAHighlighter.py:
Rendering System
Rendering System
- Window Creation: Creates a transparent, topmost window spanning all displays
- GDI+ Graphics: Uses Windows GDI+ for hardware-accelerated drawing
- Layered Windows: Leverages WS_EX_LAYERED for transparency
- Color Keying: Makes black pixels transparent
- Double Buffering: Maintains previous frame to calculate dirty regions
- Efficient Updates: Only redraws changed areas for performance
Window Characteristics
- Highlighter stays visible over all applications
- Doesn’t interfere with mouse or keyboard input
- Invisible to accessibility APIs (won’t confuse screen readers)
- Doesn’t show in Alt+Tab or taskbar
Context Tracking
The highlighter subscribes to vision framework events:- Focus Events: When application focus changes
- Navigator Events: When object navigator moves
- Caret Events: When browse mode cursor moves
- Braille Events: When braille display updates
- Display Changes: When screen resolution or display count changes
Performance Optimizations
Rendering Optimizations
Rendering Optimizations
- Dirty Region Tracking: Only redraws changed areas
- Hardware Acceleration: Uses GDI+ accelerated rendering
- Event Coalescing: Batches rapid updates
- Lazy Redraw: Delays redraws until after event processing
- Smart Invalidation: Calculates minimal redraw regions
Multi-Monitor Support
The highlighter automatically:- Spans all connected displays
- Updates window size when displays are added/removed
- Calculates total desktop bounds including negative coordinates
- Handles DPI scaling per monitor
- Adjusts for taskbar position and size
The highlighter removes one pixel from the bottom of the screen to prevent Windows from disabling desktop shortcut hotkeys (a Windows “feature” when windows are fullscreen).
Creating Custom Vision Providers
Developers can create custom vision enhancement providers.Provider Requirements
A vision enhancement provider must:- Inherit from
vision.providerBase.VisionEnhancementProvider - Implement required methods and properties
- Be placed in
visionEnhancementProviders/directory - Export a
VisionEnhancementProviderclass
Basic Provider Structure
Provider Settings
Automatic Settings GUI
Automatic Settings GUI
Providers can define settings using driver setting objects:NVDA automatically generates a settings panel from these definitions.
Custom Settings Panel
Custom Settings Panel
For complex UIs, implement a custom panel:
Available Extension Points
Providers can react to:post_focusChange: Application focus changedpost_foregroundChange: Foreground window changedpost_objectUpdate: Object property changedpost_caretMove: Text caret movedpost_reviewMove: Review cursor movedpost_browseMode: Browse mode cursor movedpost_brailleRegionUpdate: Braille display changed
Example: Auto GUI Provider
The example provider in_exampleProvider_autoGui.py demonstrates:
- Using auto-generated settings
- Subscribing to events
- Boolean, numeric, and string settings
- Settings validation
- Proper initialization and termination
See
source/visionEnhancementProviders/readme.md for complete provider development documentation.Vision Enhancement Use Cases
Training and Demonstrations
Training Blind Users
Training Blind Users
Trainers can:
- Show where focus is during instruction
- Demonstrate navigation techniques visually
- Verify focus is where expected
- Troubleshoot focus issues collaboratively
Presenting NVDA
Presenting NVDA
Presenters can:
- Help sighted audiences follow NVDA navigation
- Show accessibility concepts visually
- Demonstrate focus management techniques
- Create engaging demonstrations
Development and Testing
Accessibility Development
Accessibility Development
Developers can:
- Verify focus order and management
- Debug focus trapping issues
- Test keyboard navigation flows
- Validate ARIA implementations
- Ensure focus visibility
NVDA Add-on Development
NVDA Add-on Development
Add-on developers can:
- Test object navigation in their code
- Verify browse mode integration
- Debug focus handling
- Validate custom navigation commands
Low Vision Support
Focus Tracking
Focus Tracking
Low vision users can:
- More easily track focus movement
- Identify small focused elements
- Follow navigation in complex interfaces
- Combine with screen magnification
Disabling Vision Enhancements
To disable vision enhancements:- Quick Disable: NVDA menu → Tools → Vision → Uncheck provider
- Settings: NVDA menu → Preferences → Settings → Vision → Uncheck “Enable”
- Remove Entirely: Delete provider from providers list
Disabling vision enhancements has no effect on NVDA’s core screen reading functionality.
Performance Considerations
Vision enhancements use system resources:- CPU: Minimal (graphics hardware accelerated)
- GPU: Light rendering of overlay graphics
- Memory: Small window and graphics buffers
- Display: Additional window layer
Future Vision Enhancements
Potential future providers could include:- Screen Magnification: Built-in magnification support
- Color Overlays: Reduce glare or improve contrast
- Focus Animation: Animated transitions between focus changes
- Heat Maps: Show frequently visited screen areas
- Gesture Visualization: Show touch gestures for training
- Braille Preview: On-screen braille simulation
Related Topics
- Speech Synthesis - Audio output configuration
- Braille Displays - Tactile output devices
- Browse Mode - Document navigation
- Add-ons - Extend NVDA functionality
