Mouse Event Parsing Logic
This module contains pure business logic for parsing mouse events, shared between synchronous and asynchronous implementations.
No I/O operations are performed here - only data transformation. This module defines its own types to avoid circular dependency with events.nim
Types
KeyModifier = enum Ctrl, Alt, Shift
MouseButton = enum Left, Right, Middle, WheelUp, WheelDown
MouseEventData = object button*: MouseButton kind*: MouseEventKind x*, y*: int modifiers*: set[KeyModifier]
- Parsed mouse event data (pure data structure)
MouseEventKind = enum Press, Release, Move, Drag
Procs
proc parseMouseDataSGR(buttonCode: int; x: int; y: int; isRelease: bool): MouseEventData {. ...raises: [], tags: [], forbids: [].}
-
Parse SGR mouse format data (pure function, no I/O)
Input: button code, coordinates, and release flag Output: Structured mouse event data
SGR format provides more precise information than X10
proc parseMouseDataX10(data: array[3, char]): MouseEventData {....raises: [], tags: [], forbids: [].}
-
Parse X10 mouse format data (pure function, no I/O)
Input: 3-byte array button_byte, x_byte, y_byte Output: Structured mouse event data
Example:
let data: array[3, char] = [char(0x00), char(40), char(50)] let parsed = parseMouseDataX10(data) assert parsed.button == Left assert parsed.x == 7 # 40 - 33
proc parseMouseModifiers(buttonByte: int): set[KeyModifier] {....raises: [], tags: [], forbids: [].}
- Parse mouse modifiers from button byte Works for both X10 and SGR formats