| Index: sky/specs/ui.md
|
| diff --git a/sky/specs/ui.md b/sky/specs/ui.md
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..72a17d331a4a55e3d4dfce8ad4f9b4de3637347c
|
| --- /dev/null
|
| +++ b/sky/specs/ui.md
|
| @@ -0,0 +1,98 @@
|
| +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
|
|
|