blob: 564ca14ce2d231ed680be62706cebb1fa1d66b25 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.ui.pointerinjector;
using fuchsia.input.report;
using zx;
/// The possible states of a pointer event stream's state machine.
///
/// A typical pointer will move through this state machine:
/// ADD - CHANGE* - REMOVE
type EventPhase = strict enum {
/// The device has started tracking the pointer.
ADD = 1;
/// The device has reported an update to the pointer state.
CHANGE = 2;
/// The device has stopped tracking the pointer.
REMOVE = 3;
/// The event stream is no longer available.
CANCEL = 4;
};
/// The relative motion performed by a mouse device.
/// - The valid range is defined in [`Config.RelativeMotionRange`].
/// - The values are placed in (x, y) order.
alias RelativeMotion = array<float32, 2>;
/// A description of each sampled data point for a pointer device.
type PointerSample = table {
/// An identifier of the pointer that issued this event.
/// It is unique only to a specific pointer device.
1: pointer_id uint32;
/// The state of this event in the pointer event stream's state machine.
2: phase EventPhase;
/// The position of this event, in the viewport's coordinate system.
3: position_in_viewport Point2;
/// The movement of a mouse, independent of the viewport's coordinate
/// system.
7: relative_motion RelativeMotion;
/// Relative vertical scrolling displacement by detent.
4: scroll_v int64;
/// Relative horizontal scrolling displacement by detent.
5: scroll_h int64;
/// Recommended vertical scrolling displacement by physical pixel, it is
/// computed with accelerator, detent / mm to pixel ratio, etc.
8: scroll_v_physical_pixel float64;
/// Recommended horizontal scrolling displacement by physical pixel, it
/// is computed with accelerator, detent / mm to pixel ratio, etc.
9: scroll_h_physical_pixel float64;
/// 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.
10: is_precision_scroll bool;
/// Identifiers of currently pressed buttons.
6: pressed_buttons vector<uint8>:fuchsia.input.report.MOUSE_MAX_NUM_BUTTONS;
};
/// A selection of FIFO data sent over the channel.
/// Each data may have a different issuance policy.
type Data = flexible union {
/// The parameters of the viewport, sufficient for a client to correctly
/// interpret the position and scale of pointer events dispatched to it.
/// - It is issued on every change to the viewport.
1: viewport Viewport;
/// A description of each sampled data point in a pointer event stream.
/// - It is issued on every sample in the pointer event stream.
2: pointer_sample PointerSample;
};
// A per-device collection of pointer-related data, sent from server to client.
type Event = table {
/// The time when this event was observed.
///
/// Required.
1: timestamp zx.Time;
/// The event's data.
///
/// Required.
2: data Data;
/// An identifier to correlate this event's send/receive occurrence across
/// component boundaries or abstraction layers.
3: trace_flow_id uint64;
};