As part of the Great Event Refactor, I have changed the way that keyboard events work. Previously, keyboard events worked like this:

User clicks a key;

WoopsiKeyboard object raises an action event;

Handler receives event;

Handler checks event type and source;

Handler gets the last key pointer from the source (ie. the WoopsiKeyboard instance);

Handler does whatever it needs to do with the key data.

If a key was held down, the keyboard would eventually refire the action event to indicate that the key was repeating. However, there was no way to distinguish between initial presses and repeats, and no way to detect key releases.

Keyboard events now work like this:

User clicks a key;

WoopsiKeyboard object raises a keyboard pressed event;

Handler receives “KeyboardEventArgs” object containing a pointer to the source (the keyboard) and the key that was clicked;

Handler does whatever it needs to do with the key data.

Much tidier. There are separate events for keys being pressed, released and keys repeating. It’s now simple to tell exactly what happened and respond accordingly.