<link rel="stylesheet" href="../style.css" />

[TOC]
# fuchsia.ui.pointer

<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 7</span></div>

## **PROTOCOLS**

## MouseSource {#MouseSource}
*Defined in [fuchsia.ui.pointer/mouse.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/mouse.fidl;l=25)*
<p>A method for a client to receive mouse pointer events.</p>
<p>The position of a pointer event is defined in the context of a viewport,
situated in the view. The dimensions of the view and viewport, and their
spatial relationship (defined with a transform matrix), are supplied
synchronously in a |ViewParameter| table. A view may retrieve a pointer's
position in its local coordinate system by applying the viewport-to-view
transform matrix.</p>
<p>The viewport is embedded in an independent and stable coordinate system,
suitable for interpreting pointer events in a scale-independent manner;
mouse movement will be observed at a constant scale, even under effects such
as magnification or panning. However, other effects, such as enlargening the
view's clip bounds, may trigger a change in the viewport extents.</p>

### Watch {#MouseSource.Watch}

<p>A method for a client to receive mouse pointer events.</p>
<p>This call is formulated as a &quot;hanging get&quot; pattern: the client asks for
a set of recent events, and receives them via the callback. This
pull-based approach ensures that clients consume events at their own
pace; events don't clog up the channel in an unbounded manner.</p>
<p>Flow control. The caller is allowed at most one in-flight |Watch| call
at a time; it is a logical error to have concurrent calls to |Watch|.
Non-compliance results in channel closure.</p>
<p>Client pacing. The server will dispatch events to the caller on a FIFO,
lossless, best-effort basis, but the caller must allocate enough time to
keep up with new events.</p>
<p>Event times. The timestamps on each event in the event vector are <em>not</em>
guaranteed monotonic; events from different devices may be injected into
Scenic at different times. Generally, events from a single device are
expected to have monotonically increasing timestamps.</p>
<p>View parameters. Occasionally, changes in view or viewport require
notifying the client. If a |MouseEvent| carries |ViewParameters|, these
parameters apply to successive |MousePointerSample|s until the next
|ViewParameters|.</p>

#### Request {#MouseSource.Watch_Request}

&lt;EMPTY&gt;


#### Response {#MouseSource.Watch_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>events</code></td>
            <td>
                <code>vector&lt;<a class='link' href='#MouseEvent'>MouseEvent</a>&gt;[128]</code>
            </td>
        </tr>
</table>

## TouchSource {#TouchSource}
*Defined in [fuchsia.ui.pointer/touch.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/touch.fidl;l=25)*
<p>A method for a client to receive touch events and respond in a global
gesture disambiguation protocol.</p>
<p>The position of a touch event is defined in the context of a viewport,
situated in the view. The dimensions of the view and viewport, and their
spatial relationship (defined with a transform matrix), are supplied
synchronously in a |ViewParameter| table. A view may retrieve a pointer's
position in its local coordinate system by applying the viewport-to-view
transform matrix.</p>
<p>The viewport is embedded in an independent and stable coordinate system,
suitable for interpreting touch events in a scale-independent manner; a
swipe will be observed at a constant scale, even under effects such as
magnification or panning. However, other effects, such as enlargening the
view's clip bounds, may trigger a change in the viewport extents.</p>

### UpdateResponse {#TouchSource.UpdateResponse}

<p>The gesture protocol allows a client to enact a &quot;hold&quot; on an open
interaction of touch events; it prevents resolution of interaction
ownership, even after the interaction closes. This method updates the
client's previous &quot;hold&quot; by replacing it with a response that allows
ownership resolution to proceed.</p>
<p>See |TouchInteractionId| for how a stream is structured into
interactions.</p>
<p>Flow control. The caller is allowed at most one |UpdateResponse| call
per interaction, and it must be on a closed interaction. It is a logical
error to call |UpdateResponse| when a normal response is possible with
the |Watch| call.</p>
<p>Validity. This TouchResponse must not be another &quot;hold&quot; response, and
the overwritten response is expected to be a &quot;hold&quot; response.</p>

#### Request {#TouchSource.UpdateResponse_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>interaction</code></td>
            <td>
                <code><a class='link' href='#TouchInteractionId'>TouchInteractionId</a></code>
            </td>
        </tr>
        <tr>
            <td><code>response</code></td>
            <td>
                <code><a class='link' href='#TouchResponse'>TouchResponse</a></code>
            </td>
        </tr>
</table>


#### Response {#TouchSource.UpdateResponse_Response}

&lt;EMPTY&gt;

### Watch {#TouchSource.Watch}

<p>A method for a client to receive touch pointer events.</p>
<p>This call is formulated as a &quot;hanging get&quot; pattern: the client asks for
a set of recent events, and receives them via the callback. This
pull-based approach ensures that clients consume events at their own
pace; events don't clog up the channel in an unbounded manner.</p>
<p>Flow control. The caller is allowed at most one in-flight |Watch| call
at a time; it is a logical error to have concurrent calls to |Watch|.
Non-compliance results in channel closure.</p>
<p>Client pacing. The server will dispatch events to the caller on a FIFO,
lossless, best-effort basis, but the caller must allocate enough time to
keep up with new events. An unresponsive client may be categorized as
&quot;App Not Responding&quot; and targeted for channel closure.</p>
<p>Responses. The gesture disambiguation scheme relies on the server
receiving a |TouchResponse| for each |TouchEvent|.|TouchPointerSample|;
non-sample events should return an empty |TouchResponse| table to the
server. Responses for <em>previous</em> events are fed to the server on the
<em>next</em> call of |Watch| [1]. Each element in the |responses| vector is
interpreted as the pairwise response to the event in the previous
|events| vector; the vector lengths must match. Note that the client's
contract to respond to events starts as soon as it registers its
endpoint with scenic, NOT when it first calls <code>Watch()</code>.</p>
<p>Initial response. The first call to |Watch| must be an empty vector.</p>
<p>Event times. The timestamps on each event in the event vector are <em>not</em>
guaranteed monotonic; touch events from different devices may be
injected into Scenic at different times. Generally, events from a single
device are expected to have monotonically increasing timestamps.</p>
<p>View parameters. Occasionally, changes in view or viewport require
notifying the client. If a |TouchEvent| carries |ViewParameters|, these
parameters apply to successive |TouchPointerSample|s until the next
|ViewParameters|.</p>
<p>[1] The hanging get pattern enables straightforward API evolution, but
unfortunately does not admit an idiomatic matching of response to event.</p>

#### Request {#TouchSource.Watch_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>responses</code></td>
            <td>
                <code>vector&lt;<a class='link' href='#TouchResponse'>TouchResponse</a>&gt;[128]</code>
            </td>
        </tr>
</table>


#### Response {#TouchSource.Watch_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>events</code></td>
            <td>
                <code>vector&lt;<a class='link' href='#TouchEvent'>TouchEvent</a>&gt;[128]</code>
            </td>
        </tr>
</table>


## **STRUCTS**

### MouseEventStreamInfo  {#MouseEventStreamInfo data-text="MouseEventStreamInfo"}
*Defined in [fuchsia.ui.pointer/mouse.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/mouse.fidl;l=168)*
<p>The status of a mouse event stream, sent from server to client.</p>
<p>Invariant: a client's mouse events are bracketed by
<a class='link' href='#MouseViewStatus.ENTERED'>MouseViewStatus.ENTERED</a> and <a class='link' href='#MouseViewStatus.EXITED'>MouseViewStatus.EXITED</a>.</p>

<table>
    <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
        <tr id="MouseEventStreamInfo.device_id">
            <td><code>device_id</code></td>
            <td>
                <code>uint32</code>
            </td>
            <td><p>An identifier for the mouse device that issues a mouse event stream.</p>
</td>
            <td>No default</td>
        </tr>
        <tr id="MouseEventStreamInfo.status">
            <td><code>status</code></td>
            <td>
                <code><a class='link' href='#MouseViewStatus'>MouseViewStatus</a></code>
            </td>
            <td><p>The mouse event stream's enter/exit status, sent from server to client.</p>
</td>
            <td>No default</td>
        </tr>
</table>

### Rectangle  {#Rectangle data-text="Rectangle"}
*Defined in [fuchsia.ui.pointer/view.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/view.fidl;l=16)*
<p>An axis-aligned rectangle. It is defined by its minimal and maximal extents
in a coordinate system.</p>

<table>
    <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
        <tr id="Rectangle.min">
            <td><code>min</code></td>
            <td>
                <code><a class='link' href='#Point2'>Point2</a></code>
            </td>
            <td><p>The minimal extent of this rectangle, inclusive.</p>
<ul>
<li>Its coordinates are pairwise less than the maximal extent's
coordinates.</li>
</ul>
</td>
            <td>No default</td>
        </tr>
        <tr id="Rectangle.max">
            <td><code>max</code></td>
            <td>
                <code><a class='link' href='#Point2'>Point2</a></code>
            </td>
            <td><p>The maximal extent of this rectangle, inclusive.</p>
<ul>
<li>Its coordinates are pairwise greater than the minimal extent's
coordinates.</li>
</ul>
</td>
            <td>No default</td>
        </tr>
</table>

### TouchInteractionId  {#TouchInteractionId data-text="TouchInteractionId"}
*Defined in [fuchsia.ui.pointer/touch.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/touch.fidl;l=155)*
<p>A unique identifier for a &quot;interaction&quot; of touch events in an event stream.
Touch events are observed as a succession of interactions, as fingers engage
and disengage with the display.</p>
<p>A finite sequence of pointer events that follows the <code>EventPhase</code> state
machine, starting from the initial state ADD, is called an <strong>interaction</strong>.
A closed (or past) interaction is one where it has reached the terminal
state (REMOVE or CANCEL); an open (or current) interaction is one where it
has not.</p>
<p>For a given device pointer, a stream of events is observed as a succession
of zero or more closed interactions (the past history of user engagement),
followed by at most one open interaction (the current user engagement).</p>
<p>Because we need to group pointer events by their interaction, touch event
carries an <strong>interaction id</strong> that is unique in that pointer stream. This
common reference makes it possible to operate on a closed interaction, as
well as an open interaction.</p>
<p>Also see <code>EventPhase</code> for a discussion on event streams by mice.</p>

<table>
    <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
        <tr id="TouchInteractionId.device_id">
            <td><code>device_id</code></td>
            <td>
                <code>uint32</code>
            </td>
            <td><p>An identifier for the pointer device that issues touch event streams.
A device may own multiple pointers, each with its own |pointer_id|.</p>
</td>
            <td>No default</td>
        </tr>
        <tr id="TouchInteractionId.pointer_id">
            <td><code>pointer_id</code></td>
            <td>
                <code>uint32</code>
            </td>
            <td><p>An identifier of the pointer that issued this event. It is unique only
to a specific |device_id|. Each (device_id, pointer_id) pair issues at
most one open interaction at a time.</p>
</td>
            <td>No default</td>
        </tr>
        <tr id="TouchInteractionId.interaction_id">
            <td><code>interaction_id</code></td>
            <td>
                <code>uint32</code>
            </td>
            <td><p>An identifier of the interaction. It is unique only to a specific
(device_id, pointer_id) pair.</p>
</td>
            <td>No default</td>
        </tr>
</table>

### TouchInteractionResult  {#TouchInteractionResult data-text="TouchInteractionResult"}
*Defined in [fuchsia.ui.pointer/touch.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/touch.fidl;l=185)*
<p>The result of gesture disambiguation for a interaction of touch events, sent
from server to client.</p>

<table>
    <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
        <tr id="TouchInteractionResult.interaction">
            <td><code>interaction</code></td>
            <td>
                <code><a class='link' href='#TouchInteractionId'>TouchInteractionId</a></code>
            </td>
            <td><p>The interaction that this pointer sample belongs to.</p>
</td>
            <td>No default</td>
        </tr>
        <tr id="TouchInteractionResult.status">
            <td><code>status</code></td>
            <td>
                <code><a class='link' href='#TouchInteractionStatus'>TouchInteractionStatus</a></code>
            </td>
            <td><p>The interaction's disposition, sent from server to client.</p>
</td>
            <td>No default</td>
        </tr>
</table>

### ViewParameters  {#ViewParameters data-text="ViewParameters"}
*Defined in [fuchsia.ui.pointer/view.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/view.fidl;l=40)*
<p>The parameters of the associated view and viewport, sufficient to correctly
interpret the position and scale of pointer events dispatched to this view.</p>
<p>Ordering. These parameters arrive over the same channel as pointer events,
to provide synchronous context for interpreting the position of pointer
events in the view's local coordinate system.</p>
<p>Inter-protocol redundancy. Some of these parameters may also be sent over an
independent channel dedicated to view control; the client is responsible for
correct use of asynchronously received parameters.</p>
<p>TODO(fxbug.dev/81798): Rename viewport, it is used in Flatland.</p>

<table>
    <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
        <tr id="ViewParameters.view">
            <td><code>view</code></td>
            <td>
                <code><a class='link' href='#Rectangle'>Rectangle</a></code>
            </td>
            <td><p>The view's area of content, placed in the coordinate system of the view.</p>
<p>The rectangle is defined by the parent view's setup of clipping on this
view.</p>
</td>
            <td>No default</td>
        </tr>
        <tr id="ViewParameters.viewport">
            <td><code>viewport</code></td>
            <td>
                <code><a class='link' href='#Rectangle'>Rectangle</a></code>
            </td>
            <td><p>The viewport's area of interaction, placed in an independent coordinate
system.</p>
<p>A pointer event's position is defined in the coordinate system of this
viewport.</p>
<p>A change in viewport extents means the region for pointer interaction
has itself moved, or changed in size, or both.</p>
</td>
            <td>No default</td>
        </tr>
        <tr id="ViewParameters.viewport_to_view_transform">
            <td><code>viewport_to_view_transform</code></td>
            <td>
                <code><a class='link' href='#Mat3'>Mat3</a></code>
            </td>
            <td><p>The transform matrix that relates a point's position in the viewport's
coordinate system to its position in the view's coordinate system.</p>
</td>
            <td>No default</td>
        </tr>
</table>


## **ENUMS**

### EventPhase [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#EventPhase data-text="EventPhase"}
Type: <code>uint32</code>

*Defined in [fuchsia.ui.pointer/state.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/state.fidl;l=32)*
<p>The possible states of a pointer event. These phases of events in a stream
follow a state machine that starts with the <code>ADD</code> phase, followed by zero or
more <code>CHANGE</code> phases, and finally terminates with <code>REMOVE</code> or <code>CANCEL</code>
phase.</p>
<pre><code>ADD ---&gt; CHANGE* -+-&gt; REMOVE
                  |
                  +-&gt; CANCEL
</code></pre>
<p>A finite sequence of pointer events that follows this state machine,
starting from the initial state, is called an <strong>interaction</strong>. A closed (or
past) interaction is one where it has reached the terminal state; an open
(or current) interaction is one where it has not.</p>
<p>For a given device pointer, a stream of events is observed as a succession
of zero or more closed interactions (the past history of user engagement),
followed by at most one open interaction (the current user engagement).</p>
<p>When we need to group pointer events by their interaction, an event carries
an <strong>interaction id</strong> that is unique in that pointer stream. This common
reference makes it possible to operate on a closed interaction, as well as
an open interaction.</p>
<p>For example, touch events are typically observed as a succession of
interactions, as fingers engage and disengage with the display.</p>

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="EventPhase.ADD">
<td><h3 id="EventPhase.ADD" class="add-link hide-from-toc">ADD</h3></td>
            <td><code>1</code></td>
            <td><p>The device has started tracking the pointer.</p>
</td>
        </tr>
        <tr id="EventPhase.CHANGE">
<td><h3 id="EventPhase.CHANGE" class="add-link hide-from-toc">CHANGE</h3></td>
            <td><code>2</code></td>
            <td><p>The device has reported an update to the pointer state.</p>
</td>
        </tr>
        <tr id="EventPhase.REMOVE">
<td><h3 id="EventPhase.REMOVE" class="add-link hide-from-toc">REMOVE</h3></td>
            <td><code>3</code></td>
            <td><p>The device has stopped tracking the pointer.</p>
</td>
        </tr>
        <tr id="EventPhase.CANCEL">
<td><h3 id="EventPhase.CANCEL" class="add-link hide-from-toc">CANCEL</h3></td>
            <td><code>4</code></td>
            <td><p>The pointer is no longer available.</p>
</td>
        </tr>
</table>

### MouseViewStatus [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#MouseViewStatus data-text="MouseViewStatus"}
Type: <code>uint32</code>

*Defined in [fuchsia.ui.pointer/mouse.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/mouse.fidl;l=177)*
<p>A description of mouse event stream's relationship to this view.</p>

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="MouseViewStatus.ENTERED">
<td><h3 id="MouseViewStatus.ENTERED" class="add-link hide-from-toc">ENTERED</h3></td>
            <td><code>1</code></td>
            <td><p>The stream is directed towards this view.</p>
</td>
        </tr>
        <tr id="MouseViewStatus.EXITED">
<td><h3 id="MouseViewStatus.EXITED" class="add-link hide-from-toc">EXITED</h3></td>
            <td><code>2</code></td>
            <td><p>The stream is directed away from this view.</p>
</td>
        </tr>
</table>

### TouchInteractionStatus [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#TouchInteractionStatus data-text="TouchInteractionStatus"}
Type: <code>uint32</code>

*Defined in [fuchsia.ui.pointer/touch.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/touch.fidl;l=194)*
<p>A description of the interaction's relationship to this client.</p>

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="TouchInteractionStatus.DENIED">
<td><h3 id="TouchInteractionStatus.DENIED" class="add-link hide-from-toc">DENIED</h3></td>
            <td><code>1</code></td>
            <td><p>The client has been denied ownership of the interaction.</p>
</td>
        </tr>
        <tr id="TouchInteractionStatus.GRANTED">
<td><h3 id="TouchInteractionStatus.GRANTED" class="add-link hide-from-toc">GRANTED</h3></td>
            <td><code>2</code></td>
            <td><p>The client has been granted ownership of the interaction.</p>
</td>
        </tr>
</table>

### TouchResponseType [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#TouchResponseType data-text="TouchResponseType"}
Type: <code>uint32</code>

*Defined in [fuchsia.ui.pointer/touch.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/touch.fidl;l=222)*
<p>The possible interaction dispositions that a client can respond with to a
given |TouchPointerSample|. Used as part of a gesture disambiguation scheme.</p>
<p>The responses are based on the idea of an ownership claim on a interaction.
Clients may assert a claim of ownership on an open interaction, but only one
client's claim is granted by the server; other clients' claims are denied.</p>

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="TouchResponseType.NO">
<td><h3 id="TouchResponseType.NO" class="add-link hide-from-toc">NO</h3></td>
            <td><code>1</code></td>
            <td><p>The client has no further interest in this interaction; it declines
ownership of the interaction. The client will stop receiving events for
this interaction.</p>
</td>
        </tr>
        <tr id="TouchResponseType.MAYBE">
<td><h3 id="TouchResponseType.MAYBE" class="add-link hide-from-toc">MAYBE</h3></td>
            <td><code>2</code></td>
            <td><p>The client is interested in this interaction, but needs to see more
events to decide; the client has not yet claimed ownership of this
interaction.</p>
</td>
        </tr>
        <tr id="TouchResponseType.MAYBE_PRIORITIZE">
<td><h3 id="TouchResponseType.MAYBE_PRIORITIZE" class="add-link hide-from-toc">MAYBE_PRIORITIZE</h3></td>
            <td><code>3</code></td>
            <td><p>The client is interested in this interaction, but needs to see more
events to decide; the client has not yet claimed ownership of the
interaction. During ownership resolution, it exerts its priority over
lower-priority &quot;maybe&quot; claims, but always loses to a &quot;yes&quot; claim.</p>
</td>
        </tr>
        <tr id="TouchResponseType.MAYBE_SUPPRESS">
<td><h3 id="TouchResponseType.MAYBE_SUPPRESS" class="add-link hide-from-toc">MAYBE_SUPPRESS</h3></td>
            <td><code>4</code></td>
            <td><p>The client is interested in this interaction, but needs to see more
events to decide; the client has not yet claimed ownership of the
interaction. Moreover, it suppresses lower-priority claims that try to
resolve interaction ownership.</p>
</td>
        </tr>
        <tr id="TouchResponseType.MAYBE_PRIORITIZE_SUPPRESS">
<td><h3 id="TouchResponseType.MAYBE_PRIORITIZE_SUPPRESS" class="add-link hide-from-toc">MAYBE_PRIORITIZE_SUPPRESS</h3></td>
            <td><code>5</code></td>
            <td><p>The client is interested in this interaction, but needs to see more
events to decide; the client has not yet claimed ownership of the
interaction. Moreover, it suppresses lower-priority claims that try to
resolve interaction ownership. During ownership resolution, it exerts
its priority over lower-priority &quot;maybe&quot; claims, but always loses to a
&quot;yes&quot; claim.</p>
</td>
        </tr>
        <tr id="TouchResponseType.HOLD">
<td><h3 id="TouchResponseType.HOLD" class="add-link hide-from-toc">HOLD</h3></td>
            <td><code>6</code></td>
            <td><p>The client is interested in this interaction, but needs to see a
subsequent interaction to decide; the client has not yet claimed
ownership of this interaction. It prevents ownership resolution when the
interaction closes.</p>
</td>
        </tr>
        <tr id="TouchResponseType.HOLD_SUPPRESS">
<td><h3 id="TouchResponseType.HOLD_SUPPRESS" class="add-link hide-from-toc">HOLD_SUPPRESS</h3></td>
            <td><code>7</code></td>
            <td><p>The client is interested in this interaction, but needs to see a
subsequent interaction to decide; the client has not yet claimed
ownership of this interaction. It prevents ownership resolution when the
interaction closes. Moreover, it suppresses lower-priority claims that
try to resolve interaction ownership.</p>
</td>
        </tr>
        <tr id="TouchResponseType.YES">
<td><h3 id="TouchResponseType.YES" class="add-link hide-from-toc">YES</h3></td>
            <td><code>8</code></td>
            <td><p>The client wishes exclusive access to the remaining events in this
interaction; it claims ownership of this interaction (but that claim may
be granted or denied). During ownership resolution, it yields its
priority to lower-priority &quot;yes&quot; claims.</p>
</td>
        </tr>
        <tr id="TouchResponseType.YES_PRIORITIZE">
<td><h3 id="TouchResponseType.YES_PRIORITIZE" class="add-link hide-from-toc">YES_PRIORITIZE</h3></td>
            <td><code>9</code></td>
            <td><p>The client wishes exclusive access to the remaining events in this
interaction; it claims ownership of this interaction (but that claim may
be granted or denied). During ownership resolution, it exerts its
priority over lower-priority &quot;yes&quot; claims.</p>
</td>
        </tr>
</table>


## **TABLES**

### MouseDeviceInfo  {#MouseDeviceInfo data-text="MouseDeviceInfo"}


*Defined in [fuchsia.ui.pointer/mouse.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/mouse.fidl;l=97)*
<p>Information about a device that issues a mouse event stream.</p>

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="MouseDeviceInfo.id">
<td><h3 id="MouseDeviceInfo.id" class="add-link hide-from-toc">1</h3></td>
            <td><code>id</code></td>
            <td>
                <code>uint32</code>
            </td>
            <td><p>An identifier for the mouse device that issues a mouse event stream.
Required.</p>
</td>
        </tr>
        <tr id="MouseDeviceInfo.relative_motion_range">
<td><h3 id="MouseDeviceInfo.relative_motion_range" class="add-link hide-from-toc">5</h3></td>
            <td><code>relative_motion_range</code></td>
            <td>
                <code><a class='link' href='#RelativeMotionRange'>RelativeMotionRange</a></code>
            </td>
            <td><p>Range of relative movement values issued by the device.</p>
</td>
        </tr>
        <tr id="MouseDeviceInfo.scroll_v_range">
<td><h3 id="MouseDeviceInfo.scroll_v_range" class="add-link hide-from-toc">2</h3></td>
            <td><code>scroll_v_range</code></td>
            <td>
                <code><a class='link' href='../fuchsia.input.report/'>fuchsia.input.report</a>/<a class='link' href='../fuchsia.input.report/#Axis'>Axis</a></code>
            </td>
            <td><p>Range of vertical scroll values issued by the device.</p>
</td>
        </tr>
        <tr id="MouseDeviceInfo.scroll_h_range">
<td><h3 id="MouseDeviceInfo.scroll_h_range" class="add-link hide-from-toc">3</h3></td>
            <td><code>scroll_h_range</code></td>
            <td>
                <code><a class='link' href='../fuchsia.input.report/'>fuchsia.input.report</a>/<a class='link' href='../fuchsia.input.report/#Axis'>Axis</a></code>
            </td>
            <td><p>Range of horizontal scroll values issued by the device.</p>
</td>
        </tr>
        <tr id="MouseDeviceInfo.buttons">
<td><h3 id="MouseDeviceInfo.buttons" class="add-link hide-from-toc">4</h3></td>
            <td><code>buttons</code></td>
            <td>
                <code>vector&lt;uint8&gt;[32]</code>
            </td>
            <td><p>Button identifiers issued by the device, in priority order.</p>
</td>
        </tr>
</table>

### MouseEvent  {#MouseEvent data-text="MouseEvent"}


*Defined in [fuchsia.ui.pointer/mouse.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/mouse.fidl;l=57)*
<p>The self-sufficient, self-consistent collection of pointer-related data,
sent from server to client.</p>

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="MouseEvent.timestamp">
<td><h3 id="MouseEvent.timestamp" class="add-link hide-from-toc">1</h3></td>
            <td><code>timestamp</code></td>
            <td>
                <code><a class='link' href='../zx/'>zx</a>/<a class='link' href='../zx/#time'>time</a></code>
            </td>
            <td><p>The time this event was observed.
Required.</p>
</td>
        </tr>
        <tr id="MouseEvent.view_parameters">
<td><h3 id="MouseEvent.view_parameters" class="add-link hide-from-toc">2</h3></td>
            <td><code>view_parameters</code></td>
            <td>
                <code><a class='link' href='#ViewParameters'>ViewParameters</a></code>
            </td>
            <td><p>The parameters of the associated view and viewport, sufficient to
correctly interpret the position, orientation, magnitude, and
inter-event distance of pointer events dispatched to a view.</p>
<ul>
<li>It is issued on connection and on change.</li>
</ul>
</td>
        </tr>
        <tr id="MouseEvent.device_info">
<td><h3 id="MouseEvent.device_info" class="add-link hide-from-toc">3</h3></td>
            <td><code>device_info</code></td>
            <td>
                <code><a class='link' href='#MouseDeviceInfo'>MouseDeviceInfo</a></code>
            </td>
            <td><p>A description of the mouse device, sufficient to correctly interpret
the capabilities and usage intent of the device.</p>
<ul>
<li>It is issued once per device.</li>
</ul>
</td>
        </tr>
        <tr id="MouseEvent.pointer_sample">
<td><h3 id="MouseEvent.pointer_sample" class="add-link hide-from-toc">4</h3></td>
            <td><code>pointer_sample</code></td>
            <td>
                <code><a class='link' href='#MousePointerSample'>MousePointerSample</a></code>
            </td>
            <td><p>A description of each sampled data point in a mouse event stream.</p>
<p>Issuance policy. There are two dispatch modes, &quot;hover&quot; and &quot;latched&quot;.
Hover mode is default, and the stream is dispatched in fragments to the
visible client that each mouse event hovers above. Latched mode directs
the stream to a single client (regardless of view boundary) until
unlatched. Latched mode is typically toggled when the user presses the
primary mouse button, but is ultimately a product-specific policy.</p>
</td>
        </tr>
        <tr id="MouseEvent.stream_info">
<td><h3 id="MouseEvent.stream_info" class="add-link hide-from-toc">5</h3></td>
            <td><code>stream_info</code></td>
            <td>
                <code><a class='link' href='#MouseEventStreamInfo'>MouseEventStreamInfo</a></code>
            </td>
            <td><p>The signal for view entry/exit in hover mode.</p>
<ul>
<li>It is issued on hover entry into a view, and hover exit from a view.</li>
</ul>
</td>
        </tr>
        <tr id="MouseEvent.trace_flow_id">
<td><h3 id="MouseEvent.trace_flow_id" class="add-link hide-from-toc">6</h3></td>
            <td><code>trace_flow_id</code></td>
            <td>
                <code>uint64</code>
            </td>
            <td><p>An identifier to correlate this event's send/receive occurrence across
component boundaries or abstraction layers.</p>
</td>
        </tr>
</table>

### MousePointerSample  {#MousePointerSample data-text="MousePointerSample"}


*Defined in [fuchsia.ui.pointer/mouse.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/mouse.fidl;l=127)*
<p>A description of each sampled data point in a mouse event stream.</p>
<p><code>MousePointerSample</code> may bundle multiple state changes into one event.
For example, if user scrolls mouse wheel and presses the left buttton
down at the same time, client may receive scroll and button state changes
together in 1 event, or receive button change and scroll change in
separate events.</p>

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="MousePointerSample.device_id">
<td><h3 id="MousePointerSample.device_id" class="add-link hide-from-toc">1</h3></td>
            <td><code>device_id</code></td>
            <td>
                <code>uint32</code>
            </td>
            <td><p>An identifier for the mouse device that issues a mouse event stream.
Required.</p>
</td>
        </tr>
        <tr id="MousePointerSample.position_in_viewport">
<td><h3 id="MousePointerSample.position_in_viewport" class="add-link hide-from-toc">2</h3></td>
            <td><code>position_in_viewport</code></td>
            <td>
                <code><a class='link' href='#Point2'>Point2</a></code>
            </td>
            <td><p>The position of this event, in the viewport's coordinate system.
Required.</p>
</td>
        </tr>
        <tr id="MousePointerSample.relative_motion">
<td><h3 id="MousePointerSample.relative_motion" class="add-link hide-from-toc">6</h3></td>
            <td><code>relative_motion</code></td>
            <td>
                <code><a class='link' href='#RelativeMotion'>RelativeMotion</a></code>
            </td>
            <td><p>The relative movement performed, independent of the viewport's
coordinate system.</p>
</td>
        </tr>
        <tr id="MousePointerSample.scroll_v">
<td><h3 id="MousePointerSample.scroll_v" class="add-link hide-from-toc">3</h3></td>
            <td><code>scroll_v</code></td>
            <td>
                <code>int64</code>
            </td>
            <td><p>Relative vertical scrolling displacement by detent.</p>
</td>
        </tr>
        <tr id="MousePointerSample.scroll_h">
<td><h3 id="MousePointerSample.scroll_h" class="add-link hide-from-toc">4</h3></td>
            <td><code>scroll_h</code></td>
            <td>
                <code>int64</code>
            </td>
            <td><p>Relative horizontal scrolling displacement by detent.</p>
</td>
        </tr>
        <tr id="MousePointerSample.scroll_v_physical_pixel">
<td><h3 id="MousePointerSample.scroll_v_physical_pixel" class="add-link hide-from-toc">7</h3></td>
            <td><code>scroll_v_physical_pixel</code></td>
            <td>
                <code>float64</code>
            </td>
            <td><p>Recommended vertical scrolling displacement by physical pixel, it is
computed with accelerator, detent / mm to pixel ratio, etc.</p>
</td>
        </tr>
        <tr id="MousePointerSample.scroll_h_physical_pixel">
<td><h3 id="MousePointerSample.scroll_h_physical_pixel" class="add-link hide-from-toc">8</h3></td>
            <td><code>scroll_h_physical_pixel</code></td>
            <td>
                <code>float64</code>
            </td>
            <td><p>Recommended horizontal scrolling displacement by physical pixel, it
is computed with accelerator, detent / mm to pixel ratio, etc.</p>
</td>
        </tr>
        <tr id="MousePointerSample.is_precision_scroll">
<td><h3 id="MousePointerSample.is_precision_scroll" class="add-link hide-from-toc">9</h3></td>
            <td><code>is_precision_scroll</code></td>
            <td>
                <code>bool</code>
            </td>
            <td><p>Indicated if the scroll event is from a precision scroll device (HI_RES
mouse or touchpad). Clients may want to play interpolation animations
on non precision scroll device for smooth scrolling.</p>
</td>
        </tr>
        <tr id="MousePointerSample.pressed_buttons">
<td><h3 id="MousePointerSample.pressed_buttons" class="add-link hide-from-toc">5</h3></td>
            <td><code>pressed_buttons</code></td>
            <td>
                <code>vector&lt;uint8&gt;[32]</code>
            </td>
            <td><p>Identifiers of currently pressed buttons.</p>
</td>
        </tr>
</table>

### TouchDeviceInfo  {#TouchDeviceInfo data-text="TouchDeviceInfo"}


*Defined in [fuchsia.ui.pointer/touch.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/touch.fidl;l=127)*
<p>Information about a device that issues touch event streams.</p>

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="TouchDeviceInfo.id">
<td><h3 id="TouchDeviceInfo.id" class="add-link hide-from-toc">1</h3></td>
            <td><code>id</code></td>
            <td>
                <code>uint32</code>
            </td>
            <td><p>An identifier for the touch device that issues touch event streams.
A device may own multiple pointers, each with its own pointer id and its
own touch event stream.
Required.</p>
</td>
        </tr>
</table>

### TouchEvent  {#TouchEvent data-text="TouchEvent"}


*Defined in [fuchsia.ui.pointer/touch.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/touch.fidl;l=96)*
<p>The self-sufficient, self-consistent collection of pointer-related data,
sent from server to client.</p>

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="TouchEvent.timestamp">
<td><h3 id="TouchEvent.timestamp" class="add-link hide-from-toc">1</h3></td>
            <td><code>timestamp</code></td>
            <td>
                <code><a class='link' href='../zx/'>zx</a>/<a class='link' href='../zx/#time'>time</a></code>
            </td>
            <td><p>The time this event was observed.
Required.</p>
</td>
        </tr>
        <tr id="TouchEvent.view_parameters">
<td><h3 id="TouchEvent.view_parameters" class="add-link hide-from-toc">2</h3></td>
            <td><code>view_parameters</code></td>
            <td>
                <code><a class='link' href='#ViewParameters'>ViewParameters</a></code>
            </td>
            <td><p>The parameters of the associated view and viewport, sufficient to
correctly interpret the position, orientation, magnitude, and
inter-event distance of touch events dispatched to a view.</p>
<ul>
<li>It is issued on connection and on change.</li>
</ul>
</td>
        </tr>
        <tr id="TouchEvent.device_info">
<td><h3 id="TouchEvent.device_info" class="add-link hide-from-toc">3</h3></td>
            <td><code>device_info</code></td>
            <td>
                <code><a class='link' href='#TouchDeviceInfo'>TouchDeviceInfo</a></code>
            </td>
            <td><p>A description of the pointer device, sufficient to correctly interpret
the capabilities and usage intent of the device.</p>
<ul>
<li>It is issued once per device.</li>
</ul>
</td>
        </tr>
        <tr id="TouchEvent.pointer_sample">
<td><h3 id="TouchEvent.pointer_sample" class="add-link hide-from-toc">4</h3></td>
            <td><code>pointer_sample</code></td>
            <td>
                <code><a class='link' href='#TouchPointerSample'>TouchPointerSample</a></code>
            </td>
            <td><p>A description of each sampled data point in an interaction of touch
events.</p>
<ul>
<li>It is issued on every sample in the interaction.</li>
</ul>
</td>
        </tr>
        <tr id="TouchEvent.interaction_result">
<td><h3 id="TouchEvent.interaction_result" class="add-link hide-from-toc">5</h3></td>
            <td><code>interaction_result</code></td>
            <td>
                <code><a class='link' href='#TouchInteractionResult'>TouchInteractionResult</a></code>
            </td>
            <td><p>The result of gesture disambiguation for a interaction of touch events.</p>
<ul>
<li>It is issued once per interaction.</li>
</ul>
</td>
        </tr>
        <tr id="TouchEvent.trace_flow_id">
<td><h3 id="TouchEvent.trace_flow_id" class="add-link hide-from-toc">6</h3></td>
            <td><code>trace_flow_id</code></td>
            <td>
                <code>uint64</code>
            </td>
            <td><p>An identifier to correlate this event's send/receive occurrence across
component boundaries or abstraction layers.</p>
</td>
        </tr>
</table>

### TouchPointerSample  {#TouchPointerSample data-text="TouchPointerSample"}


*Defined in [fuchsia.ui.pointer/touch.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/touch.fidl;l=172)*
<p>A description of each sampled data point in a touch event stream.
All fields are required.</p>

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="TouchPointerSample.interaction">
<td><h3 id="TouchPointerSample.interaction" class="add-link hide-from-toc">1</h3></td>
            <td><code>interaction</code></td>
            <td>
                <code><a class='link' href='#TouchInteractionId'>TouchInteractionId</a></code>
            </td>
            <td><p>The interaction that this pointer sample belongs to.</p>
</td>
        </tr>
        <tr id="TouchPointerSample.phase">
<td><h3 id="TouchPointerSample.phase" class="add-link hide-from-toc">2</h3></td>
            <td><code>phase</code></td>
            <td>
                <code><a class='link' href='#EventPhase'>EventPhase</a></code>
            </td>
            <td><p>The state of this event in the interaction's state machine.</p>
</td>
        </tr>
        <tr id="TouchPointerSample.position_in_viewport">
<td><h3 id="TouchPointerSample.position_in_viewport" class="add-link hide-from-toc">3</h3></td>
            <td><code>position_in_viewport</code></td>
            <td>
                <code><a class='link' href='#Point2'>Point2</a></code>
            </td>
            <td><p>The position of this event, in the viewport's coordinate system.</p>
</td>
        </tr>
</table>

### TouchResponse  {#TouchResponse data-text="TouchResponse"}


*Defined in [fuchsia.ui.pointer/touch.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/touch.fidl;l=206)*
<p>A feedback event per |Event|, sent from client to server.</p>
<p>Only |TouchPointerSample| requires a |TouchResponseType|; for other events,
the server expects an empty |TouchResponse| table.</p>

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="TouchResponse.response_type">
<td><h3 id="TouchResponse.response_type" class="add-link hide-from-toc">1</h3></td>
            <td><code>response_type</code></td>
            <td>
                <code><a class='link' href='#TouchResponseType'>TouchResponseType</a></code>
            </td>
            <td><p>The interaction disposition that a client responds with for a given
|TouchPointerSample|.</p>
</td>
        </tr>
        <tr id="TouchResponse.trace_flow_id">
<td><h3 id="TouchResponse.trace_flow_id" class="add-link hide-from-toc">2</h3></td>
            <td><code>trace_flow_id</code></td>
            <td>
                <code>uint64</code>
            </td>
            <td><p>An identifier to correlate this response's send/receive occurrence across
component boundaries or abstraction layers.</p>
</td>
        </tr>
</table>




## **CONSTANTS**

<table>
    <tr><th>Name</th><th>Value</th><th>Type</th><th>Description</th></tr>
        <tr id="MOUSE_MAX_EVENT">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/mouse.fidl;l=9">MOUSE_MAX_EVENT</a></td>
                <td>
                    <code>128</code>
                </td>
                <td><code>uint32</code></td>
            <td></td>
        </tr>
        <tr id="TOUCH_MAX_EVENT">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/touch.fidl;l=8">TOUCH_MAX_EVENT</a></td>
                <td>
                    <code>128</code>
                </td>
                <td><code>uint32</code></td>
            <td></td>
        </tr>
</table>

## **TYPE ALIASES**

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="Mat3">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/view.fidl;l=8">Mat3</a></td>
            <td>
                <code>array</code>[<code>9</code>]</td>
            <td><p>A floating-point 3x3 matrix.</p>
<ul>
<li>The values are placed in column-major order.</li>
</ul>
</td>
        </tr>
        <tr id="Point2">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/view.fidl;l=12">Point2</a></td>
            <td>
                <code>array</code>[<code>2</code>]</td>
            <td><p>A floating-point two-dimensional point.</p>
<ul>
<li>The values are placed in (x, y) order.</li>
</ul>
</td>
        </tr>
        <tr id="RelativeMotion">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/mouse.fidl;l=118">RelativeMotion</a></td>
            <td>
                <code>array</code>[<code>2</code>]</td>
            <td><p>The relative motion performed by a mouse device.</p>
<ul>
<li>The valid range is defined in <a class='link' href='#MouseDeviceInfo.RelativeMotionRange'>MouseDeviceInfo.RelativeMotionRange</a>.</li>
<li>The values are placed in (x, y) order.</li>
</ul>
</td>
        </tr>
        <tr id="RelativeMotionRange">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.pointer/mouse.fidl;l=94">RelativeMotionRange</a></td>
            <td>
                <code>array</code>[<code>2</code>]</td>
            <td><p>The valid values of relative motion for a mouse device.</p>
<ul>
<li>The ranges are placed in (x, y) order.</li>
</ul>
</td>
        </tr>
</table>