Keyboard OSD v1.3
Version 1.3 (2026-07-02)
Architecture:
- Refactored into
OSDSettingsandOSDStateclasses for cleaner state management - Extracted all helper functions (
MeasureTextWidth,MeasureTextHeight,GetActiveMonitorBounds,CalcStackBase,InitWin,ApplyDWMCorners,FadeOutWin,ReadIni, etc.) into a dedicatedlib.ahkfile INIfile reorganized into four named sections:[Appearance],[Layout],[History],[Timing]
New:
- Each OSD line is now an
OSDLineobject with its ownCreatedAttimestamp, repeat counter, andIsExpired()check — active line and history lines expire independently - Non-blocking per-row fade system using
FadingStates/FadeTimersarrays (replaces the blockingSleep-based fade) CheckExpiredLinestimer replaces theStartDismiss/DismissNextchainFlushTypingTimeout— typed text is automatically committed afterDisplayTimems of inactivityMeasureTextHeight— line height is now calculated from real GDI font metrics instead of being stored insettings.ini- Pause/resume keyboard shortcut
Ctrl+Shift+F8 - On resume from pause, currently held keys are read and pre-loaded to avoid phantom key events
- Pause icon resource ID changed to
207 - Settings GUI switched from GroupBox layout to a tabbed (
Tab) layout - Added
PaddingX,PaddingYTop,PaddingYBottomlayout settings
Fixes:
- Fade no longer blocks the key watcher thread