celina/core/mouse_logic

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