| UI Events |
| ========= |
| |
| Pointer events |
| -------------- |
| |
| Each touch or pointer is tracked individually. |
| |
| New touches and pointers can appear and disappear over time. |
| |
| When a new one enters the system, a 'pointer-added' event is fired at |
| the application's document. |
| |
| When it is removed, a 'pointer-removed' event is fired at the |
| application's document. |
| |
| When one switches from "up" to "down", the position of the tap is hit |
| tested and a 'pointer-down' event is fired at the target element under |
| the cursor, if any, or the document otherwise. |
| |
| When one moves, if it is "up" then a 'pointer-moved' event is fired at |
| the application's document, otherwise if it is "down" then the event |
| is fired at the element or document that was selected for the |
| 'pointer-down' event. |
| |
| When one switches from "down" to "up", a 'pointer-up' event is fired |
| at the element or document that was selected for the 'pointer-down' |
| event. |
| |
| |
| These events all bubble and their data is an object with the following |
| fields: |
| |
| pointer: an integer assigned to this touch or pointer when it |
| enters the system, never reused, increasing monotonically |
| every time a new value is assigned, starting from 1 (if |
| the system gets a new tap every microsecond, this will |
| cause a problem after 285 years) |
| |
| x: x-position relative to the top-left corner of the display, |
| in global layout coordinates |
| |
| y: x-position relative to the top-left corner of the display, |
| in global layout coordinates |
| |
| buttons: a bitfield of the buttons pressed, where 1 is the primary |
| button, 2 is the secondary, and subsequent numbers refer |
| to any other buttons |
| |
| TODO(ianh): add other fields for touches (radius/pressure, angle) |
| |
| TODO(ianh): should we use a different way to express buttons? e.g. |
| create a new touch for the secondary button when it goes down, |
| removing the touch when it goes back up? |
| |
| TODO(ianh): find a way to avoid the trap everyone always falls into of |
| treating all the buttons as equivalent to a touch (e.g. right-clicking |
| a button shouldn't trigger the button). For example, maybe we should |
| remove 'buttons' and use different event names for the up/down state |
| changes of non-primary buttons of pointers, like 'pointer-down-2' for |
| the secondary button, 'pointer-down-3' for the middle mouse button, |
| and so on. |
| |
| |
| Wheel events |
| ------------ |
| |
| When a wheel input device is turned, a 'wheel' event that bubbles is |
| fired at the application's document, with the following fields: |
| |
| wheel: an integer assigned to this wheel by the system. The same |
| wheel on the same system must always be given the same ID. |
| The primary wheel (e.g. the vertical wheel on a mouse) |
| must be given ID 1. |
| |
| delta: an floating point number representing the fraction of the |
| wheel that was turned, with positive numbers representing |
| a downward movement on vertical wheels, rightward movement |
| on horizontal wheels, and a clockwise movement on wheels |
| with a user-facing side. |
| |
| Additionally, if the wheel is associated with a pointer (e.g. a mouse |
| wheel), the following fields must be present also: |
| |
| pointer: the integer assigned to the pointer in its 'pointer-add' |
| event (see above). |
| |
| x: x-position relative to the top-left corner of the display, |
| in global layout coordinates |
| |
| y: x-position relative to the top-left corner of the display, |
| in global layout coordinates |
| |
| |
| Text input events |
| ----------------- |
| |
| TODO(ianh): keyboard events |