TermUI.Mouse.Tracker (TermUI v0.2.0)

View Source

Tracks mouse state for drag and hover detection.

The tracker maintains state for:

  • Drag operations (press → move → release)
  • Hover detection (enter/leave events)
  • Last known mouse position

Usage

# Create new tracker
tracker = Tracker.new()

# Process mouse events
{tracker, events} = Tracker.process(tracker, mouse_event)

# Events may include:
# - {:drag_start, button, x, y}
# - {:drag_move, button, x, y, dx, dy}
# - {:drag_end, button, x, y}
# - {:hover_enter, component_id}
# - {:hover_leave, component_id}

Summary

Functions

Returns the button currently pressed.

Returns whether a drag operation is in progress.

Returns the currently hovered component.

Creates a new mouse tracker.

Processes a mouse event and returns updated tracker and generated events.

Resets drag state (useful on focus loss).

Updates hover state and returns enter/leave events.

Types

t()

@type t() :: %TermUI.Mouse.Tracker{
  button_down: atom() | nil,
  drag_threshold: integer(),
  dragging: boolean(),
  hovered_component: atom() | nil,
  last_position: {integer(), integer()} | nil,
  press_position: {integer(), integer()} | nil
}

Functions

button_down(tracker)

@spec button_down(t()) :: atom() | nil

Returns the button currently pressed.

dragging?(tracker)

@spec dragging?(t()) :: boolean()

Returns whether a drag operation is in progress.

hovered_component(tracker)

@spec hovered_component(t()) :: atom() | nil

Returns the currently hovered component.

new(opts \\ [])

@spec new(keyword()) :: t()

Creates a new mouse tracker.

Options

  • :drag_threshold - Pixels of movement before drag starts (default: 3)

process(tracker, mouse)

@spec process(t(), TermUI.Event.Mouse.t()) :: {t(), list()}

Processes a mouse event and returns updated tracker and generated events.

Generated events:

  • {:drag_start, button, x, y} - Drag operation started
  • {:drag_move, button, x, y, dx, dy} - Mouse moved during drag
  • {:drag_end, button, x, y} - Drag operation ended

reset_drag(tracker)

@spec reset_drag(t()) :: t()

Resets drag state (useful on focus loss).

update_hover(tracker, component_id)

@spec update_hover(t(), atom() | nil) :: {t(), list()}

Updates hover state and returns enter/leave events.