blob: 72a17d331a4a55e3d4dfce8ad4f9b4de3637347c [file] [log] [blame] [view]
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