I'm working on abstracting the input for Ruddle now that I've got a basic prototype for the layout system. I'm looking at a few different libraries that provide access to input methods, and I'm trying to cover as many types of input as I can in the most compact and extensible way. I've settled on directly supporting mouse, keyboard, touchscreen, controller, and joystick input (the latter two mostly being useful for gamedev rather than general purpose GUIs), and I'll have a way to add on custom input devices. Custom input would mostly be useful for little embedded system projects or custom hardware, if you decide to use the accelerometer and gyro data on mobile phones for input, or if you make use of audio for voice-to-text input.