1 unstable release

0.1.0 Dec 22, 2024

#239 in GUI

Download history 90/week @ 2024-12-20 13/week @ 2024-12-27

103 downloads per month

MPL-2.0 license

130KB
2K SLoC

Rust 2K SLoC // 0.1% comments Swift 223 SLoC // 0.2% comments

app_input is a cross-platform library for receiving keyboard and mouse events.

logo

Design principles

  • Use the best modern backend on each platform
  • Zero magic, this library can be easily used without interference alongside any other native code.
    • When native code may interfere, instead this library will be a no-op by default. You must call into it from your eventloop before our events are delivered.
  • Mouse events:
    • Mouse position is determined by the compositor. Platform-specific acceleration will be applied.
      • This is appropriate for GUI apps and topdown strategy games, or anytime you have a system-drawn cursor. It is appropriate for some fullscreen games. It is not appropriate for Counter Strike.
    • Coordinates are translated into a platform-independent upper-left coordinate system that works everywhere
    • Mouse events may require the window to be 'active' to be delivered, per platform conventions
  • Keyboard events:
    • Report raw up/down events whenever possible
      • We map hardware keys rather than unicode characters
      • If you are trying to implement text input, you have much work to do, including but not limited to the shift key
    • Keycodes are translated into a platform-independent enum that works everywhere

Supported platforms

Platform Backend
Windows win32*
macOS AppKit
Linux Wayland*
wasm32 KeyboardEvent | MouseEvent
Yours Send a PR!
  • *: Needs platform-native event integration before events are delivered

Dependencies

~0.3–40MB
~602K SLoC